mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-09-28 15:17:43 +02:00
Implement new API and fix an error from Paper
This commit is contained in:
parent
d7aab0acbd
commit
3682faebec
@ -10,16 +10,20 @@ import org.bstats.bukkit.Metrics;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import com.mojang.authlib.properties.Property;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
import net.citizensnpcs.Settings.Setting;
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.CitizensPlugin;
|
import net.citizensnpcs.api.CitizensPlugin;
|
||||||
|
import net.citizensnpcs.api.SkullMetaProvider;
|
||||||
import net.citizensnpcs.api.ai.speech.SpeechFactory;
|
import net.citizensnpcs.api.ai.speech.SpeechFactory;
|
||||||
import net.citizensnpcs.api.command.CommandContext;
|
import net.citizensnpcs.api.command.CommandContext;
|
||||||
import net.citizensnpcs.api.command.CommandManager;
|
import net.citizensnpcs.api.command.CommandManager;
|
||||||
@ -72,6 +76,18 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||||||
private CitizensNPCRegistry npcRegistry;
|
private CitizensNPCRegistry npcRegistry;
|
||||||
private NPCDataStore saves;
|
private NPCDataStore saves;
|
||||||
private NPCSelector selector;
|
private NPCSelector selector;
|
||||||
|
private final SkullMetaProvider skullMetaProvider = new SkullMetaProvider() {
|
||||||
|
@Override
|
||||||
|
public String getTexture(SkullMeta meta) {
|
||||||
|
return Iterables.getFirst(NMS.getProfile(meta).getProperties().get("textures"), new Property("", ""))
|
||||||
|
.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTexture(String string, SkullMeta meta) {
|
||||||
|
NMS.setProfile(meta, new GameProfile(meta.getOwningPlayer().getUniqueId(), string));
|
||||||
|
}
|
||||||
|
};
|
||||||
private CitizensSpeechFactory speechFactory;
|
private CitizensSpeechFactory speechFactory;
|
||||||
private final Map<String, NPCRegistry> storedRegistries = Maps.newHashMap();
|
private final Map<String, NPCRegistry> storedRegistries = Maps.newHashMap();
|
||||||
private CitizensTraitFactory traitFactory;
|
private CitizensTraitFactory traitFactory;
|
||||||
@ -212,6 +228,11 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||||||
return new File(getDataFolder(), "scripts");
|
return new File(getDataFolder(), "scripts");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SkullMetaProvider getSkullMetaProvider() {
|
||||||
|
return skullMetaProvider;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SpeechFactory getSpeechFactory() {
|
public SpeechFactory getSpeechFactory() {
|
||||||
return speechFactory;
|
return speechFactory;
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package net.citizensnpcs.npc;
|
package net.citizensnpcs.npc;
|
||||||
|
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
|
||||||
import net.citizensnpcs.util.NMS;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
|
import net.citizensnpcs.util.NMS;
|
||||||
|
|
||||||
public abstract class AbstractEntityController implements EntityController {
|
public abstract class AbstractEntityController implements EntityController {
|
||||||
private Entity bukkitEntity;
|
private Entity bukkitEntity;
|
||||||
|
|
||||||
@ -23,11 +23,6 @@ public abstract class AbstractEntityController implements EntityController {
|
|||||||
return bukkitEntity;
|
return bukkitEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setEntity(Entity entity) {
|
|
||||||
this.bukkitEntity = entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove() {
|
public void remove() {
|
||||||
if (bukkitEntity == null)
|
if (bukkitEntity == null)
|
||||||
@ -36,6 +31,11 @@ public abstract class AbstractEntityController implements EntityController {
|
|||||||
bukkitEntity = null;
|
bukkitEntity = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEntity(Entity entity) {
|
||||||
|
this.bukkitEntity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void spawn(Location at, NPC npc) {
|
public void spawn(Location at, NPC npc) {
|
||||||
bukkitEntity = createEntity(at, npc);
|
bukkitEntity = createEntity(at, npc);
|
||||||
|
@ -137,8 +137,9 @@ public class SkinUpdateTracker {
|
|||||||
if (tracker.fovVisibleSkins.contains(skinnable))
|
if (tracker.fovVisibleSkins.contains(skinnable))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (canSee(player, skinnable, true))
|
if (canSee(player, skinnable, true)) {
|
||||||
output.add(skinnable);
|
output.add(skinnable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,6 +222,10 @@ public class NMS {
|
|||||||
BRIDGE.registerEntityClass(clazz);
|
BRIDGE.registerEntityClass(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void remove(Entity entity) {
|
||||||
|
BRIDGE.remove(entity);
|
||||||
|
}
|
||||||
|
|
||||||
public static void removeFromServerPlayerList(Player player) {
|
public static void removeFromServerPlayerList(Player player) {
|
||||||
BRIDGE.removeFromServerPlayerList(player);
|
BRIDGE.removeFromServerPlayerList(player);
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,8 @@ public interface NMSBridge {
|
|||||||
|
|
||||||
public void registerEntityClass(Class<?> clazz);
|
public void registerEntityClass(Class<?> clazz);
|
||||||
|
|
||||||
|
public void remove(Entity entity);
|
||||||
|
|
||||||
public void removeFromServerPlayerList(Player player);
|
public void removeFromServerPlayerList(Player player);
|
||||||
|
|
||||||
public void removeFromWorld(org.bukkit.entity.Entity entity);
|
public void removeFromWorld(org.bukkit.entity.Entity entity);
|
||||||
|
@ -709,6 +709,11 @@ public class NMSImpl implements NMSBridge {
|
|||||||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(org.bukkit.entity.Entity entity) {
|
||||||
|
NMSImpl.getHandle(entity).die();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFromServerPlayerList(Player player) {
|
public void removeFromServerPlayerList(Player player) {
|
||||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||||
|
@ -767,6 +767,11 @@ public class NMSImpl implements NMSBridge {
|
|||||||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(org.bukkit.entity.Entity entity) {
|
||||||
|
NMSImpl.getHandle(entity).die();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFromServerPlayerList(Player player) {
|
public void removeFromServerPlayerList(Player player) {
|
||||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||||
|
@ -774,6 +774,11 @@ public class NMSImpl implements NMSBridge {
|
|||||||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(org.bukkit.entity.Entity entity) {
|
||||||
|
NMSImpl.getHandle(entity).die();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFromServerPlayerList(Player player) {
|
public void removeFromServerPlayerList(Player player) {
|
||||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||||
|
@ -2,7 +2,6 @@ package net.citizensnpcs.nms.v1_13_R2.entity;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import net.citizensnpcs.util.Util;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
|
||||||
@ -21,6 +20,7 @@ import net.citizensnpcs.npc.AbstractEntityController;
|
|||||||
import net.citizensnpcs.npc.skin.Skin;
|
import net.citizensnpcs.npc.skin.Skin;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||||
import net.citizensnpcs.util.NMS;
|
import net.citizensnpcs.util.NMS;
|
||||||
|
import net.citizensnpcs.util.Util;
|
||||||
import net.minecraft.server.v1_13_R2.PlayerInteractManager;
|
import net.minecraft.server.v1_13_R2.PlayerInteractManager;
|
||||||
import net.minecraft.server.v1_13_R2.WorldServer;
|
import net.minecraft.server.v1_13_R2.WorldServer;
|
||||||
|
|
||||||
@ -117,6 +117,8 @@ public class HumanController extends AbstractEntityController {
|
|||||||
SkinnableEntity npc = entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null;
|
SkinnableEntity npc = entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null;
|
||||||
npc.getSkinTracker().onRemoveNPC();
|
npc.getSkinTracker().onRemoveNPC();
|
||||||
}
|
}
|
||||||
super.remove();
|
NMS.remove(entity);
|
||||||
|
// Paper decided to break Spigot compatibility.
|
||||||
|
// super.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import java.util.List;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.minecraft.server.v1_13_R2.*;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -183,6 +182,59 @@ import net.citizensnpcs.util.NMSBridge;
|
|||||||
import net.citizensnpcs.util.PlayerAnimation;
|
import net.citizensnpcs.util.PlayerAnimation;
|
||||||
import net.citizensnpcs.util.PlayerUpdateTask;
|
import net.citizensnpcs.util.PlayerUpdateTask;
|
||||||
import net.citizensnpcs.util.Util;
|
import net.citizensnpcs.util.Util;
|
||||||
|
import net.minecraft.server.v1_13_R2.AttributeInstance;
|
||||||
|
import net.minecraft.server.v1_13_R2.AxisAlignedBB;
|
||||||
|
import net.minecraft.server.v1_13_R2.Block;
|
||||||
|
import net.minecraft.server.v1_13_R2.BlockPosition;
|
||||||
|
import net.minecraft.server.v1_13_R2.BossBattleServer;
|
||||||
|
import net.minecraft.server.v1_13_R2.ControllerJump;
|
||||||
|
import net.minecraft.server.v1_13_R2.CrashReport;
|
||||||
|
import net.minecraft.server.v1_13_R2.CrashReportSystemDetails;
|
||||||
|
import net.minecraft.server.v1_13_R2.DamageSource;
|
||||||
|
import net.minecraft.server.v1_13_R2.DataWatcherObject;
|
||||||
|
import net.minecraft.server.v1_13_R2.EnchantmentManager;
|
||||||
|
import net.minecraft.server.v1_13_R2.Enchantments;
|
||||||
|
import net.minecraft.server.v1_13_R2.EnderDragonBattle;
|
||||||
|
import net.minecraft.server.v1_13_R2.Entity;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityBird;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityEnderDragon;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityFish;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityFishingHook;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityHorse;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityHorseAbstract;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityHuman;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityInsentient;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityLiving;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityMinecartAbstract;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityPolarBear;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityRabbit;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityShulker;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityTameableAnimal;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityTracker;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityTrackerEntry;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityTypes;
|
||||||
|
import net.minecraft.server.v1_13_R2.EntityWither;
|
||||||
|
import net.minecraft.server.v1_13_R2.EnumMoveType;
|
||||||
|
import net.minecraft.server.v1_13_R2.GenericAttributes;
|
||||||
|
import net.minecraft.server.v1_13_R2.IRegistry;
|
||||||
|
import net.minecraft.server.v1_13_R2.MathHelper;
|
||||||
|
import net.minecraft.server.v1_13_R2.MinecraftKey;
|
||||||
|
import net.minecraft.server.v1_13_R2.MobEffects;
|
||||||
|
import net.minecraft.server.v1_13_R2.NavigationAbstract;
|
||||||
|
import net.minecraft.server.v1_13_R2.NetworkManager;
|
||||||
|
import net.minecraft.server.v1_13_R2.Packet;
|
||||||
|
import net.minecraft.server.v1_13_R2.PacketPlayOutEntityTeleport;
|
||||||
|
import net.minecraft.server.v1_13_R2.PacketPlayOutPlayerInfo;
|
||||||
|
import net.minecraft.server.v1_13_R2.PathEntity;
|
||||||
|
import net.minecraft.server.v1_13_R2.PathPoint;
|
||||||
|
import net.minecraft.server.v1_13_R2.PathfinderGoalSelector;
|
||||||
|
import net.minecraft.server.v1_13_R2.RegistryMaterials;
|
||||||
|
import net.minecraft.server.v1_13_R2.ReportedException;
|
||||||
|
import net.minecraft.server.v1_13_R2.SoundEffect;
|
||||||
|
import net.minecraft.server.v1_13_R2.SoundEffects;
|
||||||
|
import net.minecraft.server.v1_13_R2.Vec3D;
|
||||||
|
import net.minecraft.server.v1_13_R2.WorldServer;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class NMSImpl implements NMSBridge {
|
public class NMSImpl implements NMSBridge {
|
||||||
@ -748,6 +800,11 @@ public class NMSImpl implements NMSBridge {
|
|||||||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(org.bukkit.entity.Entity entity) {
|
||||||
|
NMSImpl.getHandle(entity).die();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFromServerPlayerList(Player player) {
|
public void removeFromServerPlayerList(Player player) {
|
||||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||||
@ -1280,7 +1337,8 @@ public class NMSImpl implements NMSBridge {
|
|||||||
entity.a(f, f1, f2, f3);
|
entity.a(f, f1, f2, f3);
|
||||||
f9 = 0.91F;
|
f9 = 0.91F;
|
||||||
if (entity.onGround) {
|
if (entity.onGround) {
|
||||||
f9 = entity.world.getType(getBlockPositionBE(blockposition_b, entity.locX, bb.minY - 1.0D, entity.locZ))
|
f9 = entity.world
|
||||||
|
.getType(getBlockPositionBE(blockposition_b, entity.locX, bb.minY - 1.0D, entity.locZ))
|
||||||
.getBlock().n() * 0.91F;
|
.getBlock().n() * 0.91F;
|
||||||
}
|
}
|
||||||
if (entity.z_()) {
|
if (entity.z_()) {
|
||||||
@ -1352,35 +1410,29 @@ public class NMSImpl implements NMSBridge {
|
|||||||
private static BlockPosition.b getBlockPositionBE(BlockPosition.b blockPos, double x, double y, double z) {
|
private static BlockPosition.b getBlockPositionBE(BlockPosition.b blockPos, double x, double y, double z) {
|
||||||
try {
|
try {
|
||||||
return blockPos.c(x, y, z);
|
return blockPos.c(x, y, z);
|
||||||
}
|
} catch (NoSuchMethodError ex) {
|
||||||
catch (NoSuchMethodError ex) {
|
|
||||||
try {
|
try {
|
||||||
return (BlockPosition.b) BLOCK_POSITION_B_D.invoke(blockPos, x, y, z);
|
return (BlockPosition.b) BLOCK_POSITION_B_D.invoke(blockPos, x, y, z);
|
||||||
}
|
} catch (Throwable ex2) {
|
||||||
catch (Throwable ex2) {
|
|
||||||
ex2.printStackTrace();
|
ex2.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Method BLOCK_POSITION_B_D = NMS.getMethod(BlockPosition.b.class, "e", false, double.class, double.class, double.class);
|
|
||||||
|
|
||||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||||
BossBattleServer bserver = null;
|
BossBattleServer bserver = null;
|
||||||
try {
|
try {
|
||||||
if (entity.getType() == EntityType.WITHER) {
|
if (entity.getType() == EntityType.WITHER) {
|
||||||
try {
|
try {
|
||||||
bserver = ((EntityWither) NMSImpl.getHandle(entity)).bossBattle;
|
bserver = ((EntityWither) NMSImpl.getHandle(entity)).bossBattle;
|
||||||
}
|
} catch (NoSuchFieldError ex) {
|
||||||
catch (NoSuchFieldError ex) {
|
|
||||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||||
}
|
}
|
||||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||||
try {
|
try {
|
||||||
bserver = ((EnderDragonBattle) ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity))).bossBattle;
|
bserver = ((EnderDragonBattle) ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity))).bossBattle;
|
||||||
}
|
} catch (NoSuchFieldError ex) {
|
||||||
catch (NoSuchFieldError ex) {
|
|
||||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||||
}
|
}
|
||||||
@ -1443,18 +1495,15 @@ public class NMSImpl implements NMSBridge {
|
|||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
network.socketAddress = socketAddress;
|
network.socketAddress = socketAddress;
|
||||||
}
|
} catch (NoSuchFieldError ex) {
|
||||||
catch (NoSuchFieldError ex) {
|
|
||||||
if (NETWORK_ADDRESS == null) {
|
if (NETWORK_ADDRESS == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
NETWORK_ADDRESS.set(network, socketAddress);
|
NETWORK_ADDRESS.set(network, socketAddress);
|
||||||
}
|
} catch (IllegalArgumentException e) {
|
||||||
catch (IllegalArgumentException e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
} catch (IllegalAccessException e) {
|
||||||
catch (IllegalAccessException e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1570,6 +1619,8 @@ public class NMSImpl implements NMSBridge {
|
|||||||
private static final Set<EntityType> BAD_CONTROLLER_LOOK = EnumSet.of(EntityType.POLAR_BEAR, EntityType.SILVERFISH,
|
private static final Set<EntityType> BAD_CONTROLLER_LOOK = EnumSet.of(EntityType.POLAR_BEAR, EntityType.SILVERFISH,
|
||||||
EntityType.SHULKER, EntityType.ENDERMITE, EntityType.ENDER_DRAGON, EntityType.BAT, EntityType.SLIME,
|
EntityType.SHULKER, EntityType.ENDERMITE, EntityType.ENDER_DRAGON, EntityType.BAT, EntityType.SLIME,
|
||||||
EntityType.MAGMA_CUBE, EntityType.HORSE, EntityType.GHAST);
|
EntityType.MAGMA_CUBE, EntityType.HORSE, EntityType.GHAST);
|
||||||
|
private static final Method BLOCK_POSITION_B_D = NMS.getMethod(BlockPosition.b.class, "e", false, double.class,
|
||||||
|
double.class, double.class);
|
||||||
private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getField(CraftBossBar.class, "handle");
|
private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getField(CraftBossBar.class, "handle");
|
||||||
private static final float DEFAULT_SPEED = 1F;
|
private static final float DEFAULT_SPEED = 1F;
|
||||||
private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = NMS.getField(EnderDragonBattle.class, "c", false);
|
private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = NMS.getField(EnderDragonBattle.class, "c", false);
|
||||||
|
@ -664,6 +664,11 @@ public class NMSImpl implements NMSBridge {
|
|||||||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(org.bukkit.entity.Entity entity) {
|
||||||
|
NMSImpl.getHandle(entity).die();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFromServerPlayerList(Player player) {
|
public void removeFromServerPlayerList(Player player) {
|
||||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||||
|
Loading…
Reference in New Issue
Block a user