diff --git a/pom.xml b/pom.xml index 26737df05..3906ff2f4 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ ${craftbukkit.version} jar provided - + net.citizensnpcs citizensapi diff --git a/src/main/java/net/citizensnpcs/Citizens.java b/src/main/java/net/citizensnpcs/Citizens.java index eeaece316..7154b46ad 100644 --- a/src/main/java/net/citizensnpcs/Citizens.java +++ b/src/main/java/net/citizensnpcs/Citizens.java @@ -259,8 +259,14 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { config = new Settings(getDataFolder()); // Disable if the server is not using the compatible Minecraft version String mcVersion = Util.getMinecraftRevision(); - compatible = COMPATIBLE_MC_REVISION.equals(mcVersion); - if (Setting.CHECK_MINECRAFT_VERSION.asBoolean() && !compatible) { + compatible = true; + try { + NMS.loadBridge(mcVersion); + } catch (Exception e) { + compatible = false; + if (Messaging.isDebugging()) { + e.printStackTrace(); + } Messaging.severeTr(Messages.CITIZENS_INCOMPATIBLE, getDescription().getVersion(), mcVersion); getServer().getPluginManager().disablePlugin(this); return; @@ -461,6 +467,4 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { } return false; } - - private static final String COMPATIBLE_MC_REVISION = "1_10_R1"; } diff --git a/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/src/main/java/net/citizensnpcs/commands/NPCCommands.java index de60e862b..fa7c0eb6b 100644 --- a/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -71,9 +71,6 @@ import net.citizensnpcs.api.util.Paginator; import net.citizensnpcs.npc.EntityControllers; import net.citizensnpcs.npc.NPCSelector; import net.citizensnpcs.npc.Template; -import net.citizensnpcs.npc.entity.nonliving.FallingBlockController.FallingBlockNPC; -import net.citizensnpcs.npc.entity.nonliving.ItemController.ItemNPC; -import net.citizensnpcs.npc.entity.nonliving.ItemFrameController.ItemFrameNPC; import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.trait.Age; import net.citizensnpcs.trait.Anchors; @@ -745,21 +742,22 @@ public class NPCCommands { if (mat == null) throw new CommandException(Messages.UNKNOWN_MATERIAL); int data = args.getInteger(2, 0); + npc.data().setPersistent(NPC.ITEM_ID_METADATA, mat.name()); + npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data); switch (npc.getEntity().getType()) { case DROPPED_ITEM: ((org.bukkit.entity.Item) npc.getEntity()).getItemStack().setType(mat); - ((ItemNPC) npc.getEntity()).setType(mat, data); break; case ITEM_FRAME: ((ItemFrame) npc.getEntity()).getItem().setType(mat); - ((ItemFrameNPC) npc.getEntity()).setType(mat, data); - break; - case FALLING_BLOCK: - ((FallingBlockNPC) npc.getEntity()).setType(mat, data); break; default: break; } + if (npc.isSpawned()) { + npc.despawn(); + npc.spawn(npc.getStoredLocation()); + } Messaging.sendTr(sender, Messages.ITEM_SET, Util.prettyEnum(mat)); } @@ -1518,7 +1516,8 @@ public class NPCCommands { Messaging.sendTr(sender, Messages.SKIN_SET, npc.getName(), skinName); if (npc.isSpawned()) { - SkinnableEntity skinnable = NMS.getSkinnable(npc.getEntity()); + SkinnableEntity skinnable = npc.getEntity() instanceof SkinnableEntity ? (SkinnableEntity) npc.getEntity() + : null; if (skinnable != null) { skinnable.setSkinName(skinName, args.hasFlag('p')); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/BatController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BatController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/BatController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BatController.java index 174d81766..2eb87ee0f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/BatController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BatController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityBat; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -55,19 +54,19 @@ public class BatController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); setFlying(false); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -120,7 +119,7 @@ public class BatController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -161,7 +160,7 @@ public class BatController extends MobEntityController { if (npc == null) { super.M(); } else { - NMS.updateAI(this); + NMSImpl.updateAI(this); npc.update(); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BlazeController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/BlazeController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BlazeController.java index 2260f6279..f9a46920d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/BlazeController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityBlaze; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -55,18 +54,18 @@ public class BlazeController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -119,7 +118,7 @@ public class BlazeController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CaveSpiderController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CaveSpiderController.java index 6e75a91cc..8c8683ec3 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CaveSpiderController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityCaveSpider; @@ -57,7 +56,7 @@ public class CaveSpiderController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -70,12 +69,12 @@ public class CaveSpiderController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -138,13 +137,13 @@ public class CaveSpiderController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -203,7 +202,7 @@ public class CaveSpiderController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ChickenController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/ChickenController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ChickenController.java index 035f57b3e..bb7b3b0d6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ChickenController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityChicken; @@ -57,7 +56,7 @@ public class ChickenController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -81,12 +80,12 @@ public class ChickenController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -149,13 +148,13 @@ public class ChickenController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/CowController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CowController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/CowController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CowController.java index 78052b214..38c52de59 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CowController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CowController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityCow; @@ -57,7 +56,7 @@ public class CowController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -82,12 +81,12 @@ public class CowController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -150,13 +149,13 @@ public class CowController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CreeperController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/CreeperController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CreeperController.java index d6196f454..6352c4068 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/CreeperController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityCreeper; @@ -62,7 +61,7 @@ public class CreeperController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -81,12 +80,12 @@ public class CreeperController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -149,13 +148,13 @@ public class CreeperController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -223,7 +222,7 @@ public class CreeperController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EnderDragonController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EnderDragonController.java index cd1e65aec..420170208 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EnderDragonController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityEnderDragon; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -55,18 +54,18 @@ public class EnderDragonController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -118,7 +117,7 @@ public class EnderDragonController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermanController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/EndermanController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermanController.java index 91cd7669a..a61335895 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermanController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityEnderman; @@ -57,7 +56,7 @@ public class EndermanController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -70,12 +69,12 @@ public class EndermanController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -137,13 +136,13 @@ public class EndermanController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -208,7 +207,7 @@ public class EndermanController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/EndermiteController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermiteController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/EndermiteController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermiteController.java index 98ae5294a..00983e1d4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EndermiteController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EndermiteController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityEndermite; @@ -57,7 +56,7 @@ public class EndermiteController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -70,12 +69,12 @@ public class EndermiteController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -137,13 +136,13 @@ public class EndermiteController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -199,7 +198,7 @@ public class EndermiteController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java index f373c3b3e..ca7641083 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import java.io.IOException; import java.net.Socket; @@ -26,19 +26,21 @@ import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.MetadataStore; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.trait.Inventory; +import net.citizensnpcs.nms.v1_10_R1.network.EmptyNetHandler; +import net.citizensnpcs.nms.v1_10_R1.network.EmptyNetworkManager; +import net.citizensnpcs.nms.v1_10_R1.network.EmptySocket; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerControllerJump; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerControllerLook; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerControllerMove; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerNavigation; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.npc.network.EmptyNetHandler; -import net.citizensnpcs.npc.network.EmptyNetworkManager; -import net.citizensnpcs.npc.network.EmptySocket; import net.citizensnpcs.npc.skin.SkinPacketTracker; import net.citizensnpcs.npc.skin.SkinnableEntity; +import net.citizensnpcs.trait.Gravity; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.citizensnpcs.util.nms.PlayerControllerJump; -import net.citizensnpcs.util.nms.PlayerControllerLook; -import net.citizensnpcs.util.nms.PlayerControllerMove; -import net.citizensnpcs.util.nms.PlayerNavigation; import net.minecraft.server.v1_10_R1.AttributeInstance; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.DamageSource; @@ -66,7 +68,6 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable private PlayerControllerJump controllerJump; private PlayerControllerLook controllerLook; private PlayerControllerMove controllerMove; - private boolean gravity = true; private int jumpTicks = 0; private PlayerNavigation navigation; private final CitizensNPC npc; @@ -193,7 +194,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @@ -260,7 +261,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable controllerLook = new PlayerControllerLook(this); controllerMove = new PlayerControllerMove(this); navigation = new PlayerNavigation(this, world); - NMS.setStepHeight(this, 1); // the default (0) breaks step climbing + NMS.setStepHeight(getBukkitEntity(), 1); // the default (0) breaks step climbing setSkinFlags((byte) 0xFF); } @@ -286,7 +287,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable boolean navigating = npc.getNavigator().isNavigating(); updatePackets(navigating); - if (gravity && !navigating && getBukkitEntity() != null + if (npc.getTrait(Gravity.class).hasGravity() && !navigating && getBukkitEntity() != null && Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) { g(0, 0); } @@ -295,8 +296,8 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable motX = motY = motZ = 0; } if (navigating) { - if (!NMS.isNavigationFinished(navigation)) { - NMS.updateNavigation(navigation); + if (!NMSImpl.isNavigationFinished(navigation)) { + NMSImpl.updateNavigation(navigation); } moveOnCurrentHeading(); } @@ -318,7 +319,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable } private void moveOnCurrentHeading() { - NMS.updateAI(this); + NMSImpl.updateAI(this); if (be) { if (onGround && jumpTicks == 0) { cl(); @@ -331,7 +332,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable bg *= 0.98F; bh *= 0.9F; g(bf, bg); // movement method - NMS.setHeadYaw(this, yaw); + NMS.setHeadYaw(getBukkitEntity(), yaw); if (jumpTicks > 0) { jumpTicks--; } @@ -382,13 +383,13 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable : EnumItemSlot.values().length + 1]; if (!navigating) { packets[5] = new PacketPlayOutEntityHeadRotation(this, - (byte) MathHelper.d(NMS.getHeadYaw(this) * 256.0F / 360.0F)); + (byte) MathHelper.d(NMSImpl.getHeadYaw(this) * 256.0F / 360.0F)); } int i = 0; for (EnumItemSlot slot : EnumItemSlot.values()) { packets[i++] = new PacketPlayOutEntityEquipment(getId(), slot, getEquipment(slot)); } - NMS.sendPacketsNearby(getBukkitEntity(), current, packets); + NMSImpl.sendPacketsNearby(getBukkitEntity(), current, packets); } } @@ -447,10 +448,6 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable cserver.getEntityMetadata().removeMetadata(this, metadataKey, owningPlugin); } - public void setGravityEnabled(boolean enabled) { - getHandle().gravity = enabled; - } - @Override public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { cserver.getEntityMetadata().setMetadata(this, metadataKey, newMetadataValue); diff --git a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GhastController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/GhastController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GhastController.java index 29e0c0384..7806fca8b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GhastController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityGhast; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -41,18 +40,18 @@ public class GhastController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -110,7 +109,7 @@ public class GhastController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/GiantController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GiantController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/GiantController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GiantController.java index 753b0106e..5ba76aee4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GiantController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GiantController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityGiantZombie; @@ -43,7 +42,7 @@ public class GiantController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class GiantController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class GiantController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -186,7 +185,7 @@ public class GiantController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } @@ -204,5 +203,4 @@ public class GiantController extends MobEntityController { return npc; } } - } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/GuardianController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GuardianController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/GuardianController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GuardianController.java index ac5a4cbc4..bc9f3ef46 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GuardianController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/GuardianController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityGuardian; @@ -43,7 +42,7 @@ public class GuardianController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class GuardianController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -124,13 +123,13 @@ public class GuardianController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -199,7 +198,7 @@ public class GuardianController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/HorseController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/HorseController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java index 1a5d15e74..f4f04644b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/HorseController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HorseController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -11,8 +11,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.trait.HorseModifiers; import net.citizensnpcs.util.NMS; @@ -51,7 +51,7 @@ public class HorseController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); ((Horse) getBukkitEntity()).setDomestication(((Horse) getBukkitEntity()).getMaxDomestication()); } } @@ -76,12 +76,12 @@ public class HorseController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -152,13 +152,13 @@ public class HorseController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -198,7 +198,7 @@ public class HorseController extends MobEntityController { if (npc == null) { super.M(); } else { - NMS.setStepHeight(this, 1); + NMS.setStepHeight(getBukkitEntity(), 1); npc.update(); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java similarity index 97% rename from src/main/java/net/citizensnpcs/npc/entity/HumanController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java index 2f12adbe3..4d7ec3716 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/HumanController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import java.util.UUID; import java.util.regex.Pattern; @@ -132,7 +132,7 @@ public class HumanController extends AbstractEntityController { Player entity = getBukkitEntity(); if (entity != null) { NMS.removeFromWorld(entity); - SkinnableEntity npc = NMS.getSkinnable(entity); + SkinnableEntity npc = entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null; npc.getSkinTracker().onRemoveNPC(); } super.remove(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/IronGolemController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/IronGolemController.java index d9fa09a56..b9d507396 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/IronGolemController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityIronGolem; @@ -43,7 +42,7 @@ public class IronGolemController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class IronGolemController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class IronGolemController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -186,7 +185,7 @@ public class IronGolemController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MagmaCubeController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MagmaCubeController.java index d55ece9ad..92ebb45de 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MagmaCubeController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,12 +10,11 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerControllerMove; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.citizensnpcs.util.nms.PlayerControllerMove; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityMagmaCube; import net.minecraft.server.v1_10_R1.IBlockData; @@ -45,7 +44,7 @@ public class MagmaCubeController extends MobEntityController { this.npc = (CitizensNPC) npc; if (npc != null) { setSize(3); - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); this.moveController = new PlayerControllerMove(this); } } @@ -59,12 +58,12 @@ public class MagmaCubeController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -126,13 +125,13 @@ public class MagmaCubeController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -189,7 +188,7 @@ public class MagmaCubeController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/MobEntityController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MobEntityController.java similarity index 95% rename from src/main/java/net/citizensnpcs/npc/MobEntityController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MobEntityController.java index 990ffdc3c..b7e3a8484 100644 --- a/src/main/java/net/citizensnpcs/npc/MobEntityController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MobEntityController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc; +package net.citizensnpcs.nms.v1_10_R1.entity; import java.lang.reflect.Constructor; import java.util.Map; @@ -11,6 +11,7 @@ import org.bukkit.entity.Entity; import com.google.common.collect.Maps; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.npc.AbstractEntityController; import net.minecraft.server.v1_10_R1.World; public abstract class MobEntityController extends AbstractEntityController { diff --git a/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MushroomCowController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MushroomCowController.java index e789a1276..982429ac7 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/MushroomCowController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityMushroomCow; @@ -44,7 +43,7 @@ public class MushroomCowController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -68,12 +67,12 @@ public class MushroomCowController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -135,13 +134,13 @@ public class MushroomCowController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/OcelotController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/OcelotController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/OcelotController.java index 333637f81..2b68d0616 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/OcelotController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityOcelot; @@ -43,7 +42,7 @@ public class OcelotController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -67,12 +66,12 @@ public class OcelotController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -134,13 +133,13 @@ public class OcelotController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/PigController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigController.java similarity index 93% rename from src/main/java/net/citizensnpcs/npc/entity/PigController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigController.java index 25dbd6520..c4be0bf84 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/PigController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityLightning; @@ -44,7 +43,7 @@ public class PigController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -68,12 +67,12 @@ public class PigController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -136,13 +135,13 @@ public class PigController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigZombieController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigZombieController.java index 0ccb10e30..b785ba228 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PigZombieController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityPigZombie; @@ -44,7 +43,7 @@ public class PigZombieController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -57,12 +56,12 @@ public class PigZombieController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -125,13 +124,13 @@ public class PigZombieController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/PolarBearController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PolarBearController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/PolarBearController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PolarBearController.java index d57e2d14c..59683a11f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/PolarBearController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/PolarBearController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityPolarBear; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -41,18 +40,18 @@ public class PolarBearController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -105,7 +104,7 @@ public class PolarBearController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -145,7 +144,7 @@ public class PolarBearController extends MobEntityController { public void m() { super.m(); if (npc != null) { - NMS.updateAI(this); + NMSImpl.updateAI(this); npc.update(); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/RabbitController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/RabbitController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/RabbitController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/RabbitController.java index 29619dc9c..968bc5561 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/RabbitController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/RabbitController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityLiving; @@ -44,7 +43,7 @@ public class RabbitController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -68,12 +67,12 @@ public class RabbitController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -136,13 +135,13 @@ public class RabbitController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -204,9 +203,9 @@ public class RabbitController extends MobEntityController { @Override public void setRabbitType(int i) { if (npc != null) { - if (NMS.getRabbitTypeField() == null) + if (NMSImpl.getRabbitTypeField() == null) return; - this.datawatcher.set(NMS.getRabbitTypeField(), i); + this.datawatcher.set(NMSImpl.getRabbitTypeField(), i); return; } super.setRabbitType(i); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SheepController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SheepController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/SheepController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SheepController.java index e84a26423..d5a8f5bba 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SheepController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SheepController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySheep; @@ -43,7 +42,7 @@ public class SheepController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -67,12 +66,12 @@ public class SheepController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -134,13 +133,13 @@ public class SheepController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/ShulkerController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ShulkerController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/ShulkerController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ShulkerController.java index aa9ca934f..a927c5ca2 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/ShulkerController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ShulkerController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityAIBodyControl; @@ -44,7 +43,7 @@ public class ShulkerController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -57,12 +56,12 @@ public class ShulkerController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -124,13 +123,13 @@ public class ShulkerController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -200,7 +199,7 @@ public class ShulkerController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SilverfishController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SilverfishController.java index 989ba7e05..5813fba9b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SilverfishController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySilverfish; @@ -43,7 +42,7 @@ public class SilverfishController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class SilverfishController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class SilverfishController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -185,7 +184,7 @@ public class SilverfishController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SkeletonController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SkeletonController.java index d6d36e0e7..1de70872d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SkeletonController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySkeleton; @@ -43,7 +42,7 @@ public class SkeletonController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class SkeletonController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class SkeletonController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -186,7 +185,7 @@ public class SkeletonController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SlimeController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SlimeController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SlimeController.java index 418a65548..b317c7532 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SlimeController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,12 +10,11 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; +import net.citizensnpcs.nms.v1_10_R1.util.PlayerControllerMove; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.citizensnpcs.util.nms.PlayerControllerMove; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityHuman; import net.minecraft.server.v1_10_R1.EntitySlime; @@ -46,7 +45,7 @@ public class SlimeController extends MobEntityController { this.npc = (CitizensNPC) npc; if (npc != null) { setSize(3); - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); this.moveController = new PlayerControllerMove(this); } } @@ -60,12 +59,12 @@ public class SlimeController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -135,13 +134,13 @@ public class SlimeController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -198,7 +197,7 @@ public class SlimeController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SnowmanController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SnowmanController.java index 2048caeb6..7f17d3818 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SnowmanController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySnowman; @@ -43,7 +42,7 @@ public class SnowmanController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class SnowmanController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class SnowmanController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -186,7 +185,7 @@ public class SnowmanController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SpiderController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SpiderController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SpiderController.java index f74dbf810..141b6cc67 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SpiderController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySpider; @@ -43,7 +42,7 @@ public class SpiderController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class SpiderController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class SpiderController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -185,7 +184,7 @@ public class SpiderController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/SquidController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SquidController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/SquidController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SquidController.java index 58b6db6d6..7b5a11a94 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SquidController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/SquidController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntitySquid; @@ -43,7 +42,7 @@ public class SquidController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class SquidController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class SquidController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -178,7 +177,7 @@ public class SquidController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/VillagerController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/VillagerController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/VillagerController.java index 06bd58bc3..e8b6c6351 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/VillagerController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,8 +10,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; @@ -47,7 +47,7 @@ public class VillagerController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -76,12 +76,12 @@ public class VillagerController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -144,13 +144,13 @@ public class VillagerController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -193,7 +193,7 @@ public class VillagerController extends MobEntityController { public void M() { super.M(); if (npc != null) { - NMS.setHeadYaw(this, yaw); + NMS.setHeadYaw(getBukkitEntity(), yaw); npc.update(); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/WitchController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitchController.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/entity/WitchController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitchController.java index 7a42a4a72..87890f57c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WitchController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitchController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityWitch; @@ -43,7 +42,7 @@ public class WitchController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class WitchController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class WitchController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override @@ -185,7 +184,7 @@ public class WitchController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/WitherController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitherController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/WitherController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitherController.java index 706481324..29647b1dd 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WitherController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WitherController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityWither; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -41,18 +40,18 @@ public class WitherController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -104,7 +103,7 @@ public class WitherController extends MobEntityController { @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/WolfController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WolfController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/WolfController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WolfController.java index d8510230e..00e4e6a7a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WolfController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/WolfController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityWolf; @@ -43,7 +42,7 @@ public class WolfController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -67,12 +66,12 @@ public class WolfController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -135,13 +134,13 @@ public class WolfController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ZombieController.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/entity/ZombieController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ZombieController.java index 2cac438ce..8c28a4a34 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/ZombieController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity; +package net.citizensnpcs.nms.v1_10_R1.entity; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -10,10 +10,9 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.EntityZombie; @@ -43,7 +42,7 @@ public class ZombieController extends MobEntityController { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { - NMS.clearGoals(goalSelector, targetSelector); + NMSImpl.clearGoals(goalSelector, targetSelector); } } @@ -56,12 +55,12 @@ public class ZombieController extends MobEntityController { @Override protected SoundEffect bV() { - return NMS.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA); } @Override protected SoundEffect bW() { - return NMS.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.bW(), NPC.HURT_SOUND_METADATA); } @Override @@ -123,13 +122,13 @@ public class ZombieController extends MobEntityController { if (npc == null || !npc.isFlyable()) { super.g(f, f1); } else { - NMS.flyingMoveLogic(this, f, f1); + NMSImpl.flyingMoveLogic(this, f, f1); } } @Override protected SoundEffect G() { - return NMS.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); + return NMSImpl.getSoundEffect(npc, super.G(), NPC.AMBIENT_SOUND_METADATA); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/AreaEffectCloudController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/AreaEffectCloudController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/AreaEffectCloudController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/AreaEffectCloudController.java index 1914d9ec0..fb8962388 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/AreaEffectCloudController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/AreaEffectCloudController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityAreaEffectCloud; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ArmorStandController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ArmorStandController.java similarity index 95% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ArmorStandController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ArmorStandController.java index 2a0a66690..68858b50d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ArmorStandController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ArmorStandController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -11,10 +11,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityArmorStand; import net.minecraft.server.v1_10_R1.EntityHuman; @@ -135,7 +135,7 @@ public class ArmorStandController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/BoatController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/BoatController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/BoatController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/BoatController.java index ea1861019..ded276917 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/BoatController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/BoatController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityBoat; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -109,7 +109,7 @@ public class BoatController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/DragonFireballController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/DragonFireballController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/DragonFireballController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/DragonFireballController.java index eb9119eec..f7b5c1087 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/DragonFireballController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/DragonFireballController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityDragonFireball; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -121,7 +121,7 @@ public class DragonFireballController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EggController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EggController.java similarity index 98% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/EggController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EggController.java index ab653f142..7a4b0b439 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EggController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EggController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderCrystalController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderCrystalController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderCrystalController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderCrystalController.java index 46d467ac4..816cd9925 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderCrystalController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderCrystalController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityEnderCrystal; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderPearlController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderPearlController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderPearlController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderPearlController.java index 86b84f0ea..2d44f1430 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderPearlController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderPearlController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityEnderPearl; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderSignalController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderSignalController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderSignalController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderSignalController.java index a61186d08..b496a33b6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/EnderSignalController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/EnderSignalController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityEnderSignal; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ExperienceOrbController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ExperienceOrbController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ExperienceOrbController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ExperienceOrbController.java index ebb78293b..977c968b8 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ExperienceOrbController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ExperienceOrbController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityExperienceOrb; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FallingBlockController.java similarity index 97% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FallingBlockController.java index eb1e61d12..9dbe3db9c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FallingBlockController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FallingBlockController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -14,10 +14,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.AbstractEntityController; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.Block; import net.minecraft.server.v1_10_R1.Blocks; @@ -123,7 +123,7 @@ public class FallingBlockController extends AbstractEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FireworkController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FireworkController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/FireworkController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FireworkController.java index d35baf7a4..a2156391a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FireworkController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FireworkController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityFireworks; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FishingHookController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FishingHookController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/FishingHookController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FishingHookController.java index 6f3e286a3..f46775a3f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/FishingHookController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/FishingHookController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityFishingHook; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemController.java similarity index 98% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemController.java index 89b31c58b..ae37c9a6e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemFrameController.java similarity index 97% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemFrameController.java index 0a74dad2a..3f3b9fd52 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ItemFrameController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ItemFrameController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -12,8 +12,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.BlockPosition; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/LargeFireballController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LargeFireballController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/LargeFireballController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LargeFireballController.java index cad7aa032..4d68b32b8 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/LargeFireballController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LargeFireballController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityLargeFireball; import net.minecraft.server.v1_10_R1.NBTTagCompound; @@ -95,7 +95,7 @@ public class LargeFireballController extends MobEntityController { if (npc == null) { super.setSize(f, f1); } else { - NMS.setSize(this, f, f1, justCreated); + NMSImpl.setSize(this, f, f1, justCreated); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/LeashController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LeashController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/LeashController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LeashController.java index 9e8fa149d..cfedbe134 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/LeashController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/LeashController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityLeash; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartChestController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartChestController.java index 7baf68670..0d3a37df7 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartChestController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartChest; @@ -102,7 +102,7 @@ public class MinecartChestController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartCommandController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartCommandController.java index c6f0172c7..445e6340e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartCommandController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartCommandBlock; @@ -102,7 +102,7 @@ public class MinecartCommandController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartFurnaceController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartFurnaceController.java index c39eaa06f..56284d3a8 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartFurnaceController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartFurnace; @@ -102,7 +102,7 @@ public class MinecartFurnaceController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartHopperController.java similarity index 93% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartHopperController.java index 66c1ceb76..4578b8268 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartHopperController.java @@ -1,14 +1,14 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.entity.Minecart; import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartHopper; @@ -90,7 +90,7 @@ public class MinecartHopperController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartRideableController.java similarity index 94% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartRideableController.java index e18aac881..c2e3c6c16 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartRideableController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,10 +9,10 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartRideable; @@ -102,7 +102,7 @@ public class MinecartRideableController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartSpawnerController.java similarity index 93% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartSpawnerController.java index 0d836337c..82d60d921 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartSpawnerController.java @@ -1,14 +1,14 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.entity.Minecart; import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartMobSpawner; @@ -90,7 +90,7 @@ public class MinecartSpawnerController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartTNTController.java similarity index 93% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartTNTController.java index cf8cccb77..9a1a80720 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/MinecartTNTController.java @@ -1,14 +1,14 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.entity.Minecart; import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.DamageSource; import net.minecraft.server.v1_10_R1.EntityMinecartTNT; @@ -90,7 +90,7 @@ public class MinecartTNTController extends MobEntityController { public void m() { if (npc != null) { npc.update(); - NMS.minecartItemLogic(this); + NMSImpl.minecartItemLogic(this); } else { super.m(); } diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/PaintingController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/PaintingController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/PaintingController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/PaintingController.java index e3a2475f6..2ecf66082 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/PaintingController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/PaintingController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityPainting; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ShulkerBulletController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ShulkerBulletController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ShulkerBulletController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ShulkerBulletController.java index fa84f939e..6176bbd2a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ShulkerBulletController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ShulkerBulletController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityShulkerBullet; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SmallFireballController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SmallFireballController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/SmallFireballController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SmallFireballController.java index 59c687e93..639aa91b6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SmallFireballController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SmallFireballController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntitySmallFireball; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SnowballController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SnowballController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/SnowballController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SnowballController.java index 7fb06caca..308dc6fa9 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SnowballController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SnowballController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntitySnowball; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SpectralArrowController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SpectralArrowController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/SpectralArrowController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SpectralArrowController.java index 997602c9b..01d8bcba4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/SpectralArrowController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/SpectralArrowController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntitySpectralArrow; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/TNTPrimedController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TNTPrimedController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/TNTPrimedController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TNTPrimedController.java index b678d9ec1..5a9184c1a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/TNTPrimedController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TNTPrimedController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityTNTPrimed; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownExpBottleController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownExpBottleController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownExpBottleController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownExpBottleController.java index f9012c9de..ad31c4359 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownExpBottleController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownExpBottleController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityThrownExpBottle; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownPotionController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownPotionController.java similarity index 97% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownPotionController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownPotionController.java index a59ca9a86..0e329971f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/ThrownPotionController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/ThrownPotionController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityPotion; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/TippedArrowController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TippedArrowController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/TippedArrowController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TippedArrowController.java index 9fda3a3b9..2c81ed49e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/TippedArrowController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/TippedArrowController.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; @@ -9,8 +9,8 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityTippedArrow; diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/WitherSkullController.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/WitherSkullController.java similarity index 96% rename from src/main/java/net/citizensnpcs/npc/entity/nonliving/WitherSkullController.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/WitherSkullController.java index 506b2abe9..8702abf84 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/WitherSkullController.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/nonliving/WitherSkullController.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.npc.entity.nonliving; +package net.citizensnpcs.nms.v1_10_R1.entity.nonliving; import net.citizensnpcs.api.event.NPCPushEvent; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.nms.v1_10_R1.entity.MobEntityController; import net.citizensnpcs.npc.CitizensNPC; -import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; import net.minecraft.server.v1_10_R1.EntityWitherSkull; diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptyChannel.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyChannel.java similarity index 97% rename from src/main/java/net/citizensnpcs/npc/network/EmptyChannel.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyChannel.java index 9abf72d51..f034fb273 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptyChannel.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyChannel.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.network; +package net.citizensnpcs.nms.v1_10_R1.network; import io.netty.channel.AbstractChannel; import io.netty.channel.Channel; diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetHandler.java similarity index 92% rename from src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetHandler.java index baa4235b2..2bb552136 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetHandler.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.network; +package net.citizensnpcs.nms.v1_10_R1.network; import net.minecraft.server.v1_10_R1.EntityPlayer; import net.minecraft.server.v1_10_R1.MinecraftServer; diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetworkManager.java similarity index 73% rename from src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetworkManager.java index 831dba71e..161331bb8 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptyNetworkManager.java @@ -1,15 +1,15 @@ -package net.citizensnpcs.npc.network; +package net.citizensnpcs.nms.v1_10_R1.network; import java.io.IOException; -import net.citizensnpcs.util.NMS; +import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl; import net.minecraft.server.v1_10_R1.EnumProtocolDirection; import net.minecraft.server.v1_10_R1.NetworkManager; public class EmptyNetworkManager extends NetworkManager { public EmptyNetworkManager(EnumProtocolDirection flag) throws IOException { super(flag); - NMS.initNetworkManager(this); + NMSImpl.initNetworkManager(this); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptySocket.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptySocket.java similarity index 91% rename from src/main/java/net/citizensnpcs/npc/network/EmptySocket.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptySocket.java index 0a81fe224..eb6f7f02c 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptySocket.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/network/EmptySocket.java @@ -1,4 +1,4 @@ -package net.citizensnpcs.npc.network; +package net.citizensnpcs.nms.v1_10_R1.network; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java new file mode 100644 index 000000000..c0f5eec94 --- /dev/null +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -0,0 +1,1271 @@ +package net.citizensnpcs.nms.v1_10_R1.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.net.SocketAddress; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.craftbukkit.v1_10_R1.CraftServer; +import org.bukkit.craftbukkit.v1_10_R1.CraftSound; +import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_10_R1.boss.CraftBossBar; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftWither; +import org.bukkit.craftbukkit.v1_10_R1.event.CraftEventFactory; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.FishHook; +import org.bukkit.entity.Horse; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Wither; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.plugin.PluginLoadOrder; + +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.HttpAuthenticationService; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; +import com.mojang.authlib.yggdrasil.response.MinecraftProfilePropertiesResponse; +import com.mojang.util.UUIDTypeAdapter; + +import net.citizensnpcs.Settings.Setting; +import net.citizensnpcs.api.ai.NavigatorParameters; +import net.citizensnpcs.api.ai.event.CancelReason; +import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.api.npc.NPCRegistry; +import net.citizensnpcs.api.util.Messaging; +import net.citizensnpcs.nms.v1_10_R1.entity.BatController; +import net.citizensnpcs.nms.v1_10_R1.entity.BlazeController; +import net.citizensnpcs.nms.v1_10_R1.entity.CaveSpiderController; +import net.citizensnpcs.nms.v1_10_R1.entity.ChickenController; +import net.citizensnpcs.nms.v1_10_R1.entity.CowController; +import net.citizensnpcs.nms.v1_10_R1.entity.CreeperController; +import net.citizensnpcs.nms.v1_10_R1.entity.EnderDragonController; +import net.citizensnpcs.nms.v1_10_R1.entity.EndermanController; +import net.citizensnpcs.nms.v1_10_R1.entity.EndermiteController; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.GhastController; +import net.citizensnpcs.nms.v1_10_R1.entity.GiantController; +import net.citizensnpcs.nms.v1_10_R1.entity.GuardianController; +import net.citizensnpcs.nms.v1_10_R1.entity.HorseController; +import net.citizensnpcs.nms.v1_10_R1.entity.HumanController; +import net.citizensnpcs.nms.v1_10_R1.entity.IronGolemController; +import net.citizensnpcs.nms.v1_10_R1.entity.MagmaCubeController; +import net.citizensnpcs.nms.v1_10_R1.entity.MushroomCowController; +import net.citizensnpcs.nms.v1_10_R1.entity.OcelotController; +import net.citizensnpcs.nms.v1_10_R1.entity.PigController; +import net.citizensnpcs.nms.v1_10_R1.entity.PigZombieController; +import net.citizensnpcs.nms.v1_10_R1.entity.PolarBearController; +import net.citizensnpcs.nms.v1_10_R1.entity.RabbitController; +import net.citizensnpcs.nms.v1_10_R1.entity.SheepController; +import net.citizensnpcs.nms.v1_10_R1.entity.ShulkerController; +import net.citizensnpcs.nms.v1_10_R1.entity.SilverfishController; +import net.citizensnpcs.nms.v1_10_R1.entity.SkeletonController; +import net.citizensnpcs.nms.v1_10_R1.entity.SlimeController; +import net.citizensnpcs.nms.v1_10_R1.entity.SnowmanController; +import net.citizensnpcs.nms.v1_10_R1.entity.SpiderController; +import net.citizensnpcs.nms.v1_10_R1.entity.SquidController; +import net.citizensnpcs.nms.v1_10_R1.entity.VillagerController; +import net.citizensnpcs.nms.v1_10_R1.entity.WitchController; +import net.citizensnpcs.nms.v1_10_R1.entity.WitherController; +import net.citizensnpcs.nms.v1_10_R1.entity.WolfController; +import net.citizensnpcs.nms.v1_10_R1.entity.ZombieController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.AreaEffectCloudController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ArmorStandController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.BoatController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.DragonFireballController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.EggController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.EnderCrystalController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.EnderPearlController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.EnderSignalController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.FallingBlockController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.FireworkController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.FishingHookController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ItemController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ItemFrameController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.LargeFireballController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.LeashController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartChestController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartCommandController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartFurnaceController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartHopperController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartRideableController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.MinecartTNTController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.PaintingController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ShulkerBulletController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.SmallFireballController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.SnowballController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.SpectralArrowController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.TNTPrimedController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ThrownExpBottleController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ThrownPotionController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.TippedArrowController; +import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.WitherSkullController; +import net.citizensnpcs.nms.v1_10_R1.network.EmptyChannel; +import net.citizensnpcs.npc.EntityControllers; +import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator; +import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator; +import net.citizensnpcs.npc.ai.NPCHolder; +import net.citizensnpcs.npc.skin.SkinnableEntity; +import net.citizensnpcs.util.BoundingBox; +import net.citizensnpcs.util.Messages; +import net.citizensnpcs.util.NMS; +import net.citizensnpcs.util.NMSBridge; +import net.citizensnpcs.util.PlayerAnimation; +import net.citizensnpcs.util.PlayerUpdateTask; +import net.citizensnpcs.util.Util; +import net.minecraft.server.v1_10_R1.AttributeInstance; +import net.minecraft.server.v1_10_R1.AxisAlignedBB; +import net.minecraft.server.v1_10_R1.Block; +import net.minecraft.server.v1_10_R1.BlockPosition; +import net.minecraft.server.v1_10_R1.BossBattleServer; +import net.minecraft.server.v1_10_R1.ControllerJump; +import net.minecraft.server.v1_10_R1.CrashReport; +import net.minecraft.server.v1_10_R1.CrashReportSystemDetails; +import net.minecraft.server.v1_10_R1.DamageSource; +import net.minecraft.server.v1_10_R1.DataWatcherObject; +import net.minecraft.server.v1_10_R1.EnchantmentManager; +import net.minecraft.server.v1_10_R1.EnderDragonBattle; +import net.minecraft.server.v1_10_R1.Entity; +import net.minecraft.server.v1_10_R1.EntityEnderDragon; +import net.minecraft.server.v1_10_R1.EntityFishingHook; +import net.minecraft.server.v1_10_R1.EntityHorse; +import net.minecraft.server.v1_10_R1.EntityHuman; +import net.minecraft.server.v1_10_R1.EntityInsentient; +import net.minecraft.server.v1_10_R1.EntityLiving; +import net.minecraft.server.v1_10_R1.EntityMinecartAbstract; +import net.minecraft.server.v1_10_R1.EntityPlayer; +import net.minecraft.server.v1_10_R1.EntityPolarBear; +import net.minecraft.server.v1_10_R1.EntityRabbit; +import net.minecraft.server.v1_10_R1.EntityTameableAnimal; +import net.minecraft.server.v1_10_R1.EntityTracker; +import net.minecraft.server.v1_10_R1.EntityTrackerEntry; +import net.minecraft.server.v1_10_R1.EntityTypes; +import net.minecraft.server.v1_10_R1.EntityWither; +import net.minecraft.server.v1_10_R1.GenericAttributes; +import net.minecraft.server.v1_10_R1.MathHelper; +import net.minecraft.server.v1_10_R1.MinecraftKey; +import net.minecraft.server.v1_10_R1.MobEffects; +import net.minecraft.server.v1_10_R1.NavigationAbstract; +import net.minecraft.server.v1_10_R1.NetworkManager; +import net.minecraft.server.v1_10_R1.Packet; +import net.minecraft.server.v1_10_R1.PacketPlayOutEntityTeleport; +import net.minecraft.server.v1_10_R1.PacketPlayOutPlayerInfo; +import net.minecraft.server.v1_10_R1.PathfinderGoalSelector; +import net.minecraft.server.v1_10_R1.ReportedException; +import net.minecraft.server.v1_10_R1.SoundEffect; +import net.minecraft.server.v1_10_R1.Vec3D; +import net.minecraft.server.v1_10_R1.WorldServer; + +@SuppressWarnings("unchecked") +public class NMSImpl implements NMSBridge { + public NMSImpl() { + loadEntityTypes(); + } + + @Override + public boolean addEntityToWorld(org.bukkit.entity.Entity entity, SpawnReason custom) { + return getHandle(entity).world.addEntity(getHandle(entity), custom); + } + + @Override + public void addOrRemoveFromPlayerList(org.bukkit.entity.Entity entity, boolean remove) { + if (entity == null) + return; + EntityHuman handle = (EntityHuman) getHandle(entity); + if (handle.world == null) + return; + if (remove) { + handle.world.players.remove(handle); + } else if (!handle.world.players.contains(handle)) { + handle.world.players.add(handle); + } + PlayerUpdateTask.addOrRemove(entity, remove); + } + + @Override + public void attack(LivingEntity attacker, LivingEntity btarget) { + EntityLiving handle = getHandle(attacker); + EntityLiving target = getHandle(btarget); + if (handle instanceof EntityPlayer) { + EntityPlayer humanHandle = (EntityPlayer) handle; + humanHandle.attack(target); + PlayerAnimation.ARM_SWING.play(humanHandle.getBukkitEntity()); + return; + } + AttributeInstance attackDamage = handle.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE); + float f = (float) (attackDamage == null ? 1 : attackDamage.getValue()); + int i = 0; + + if (target instanceof EntityLiving) { + f += EnchantmentManager.a(handle.getItemInMainHand(), target.getMonsterType()); + i += EnchantmentManager.a(handle); + } + + boolean flag = target.damageEntity(DamageSource.mobAttack(handle), f); + + if (!flag) + return; + if (i > 0) { + target.g(-Math.sin(handle.yaw * Math.PI / 180.0F) * i * 0.5F, 0.1D, + Math.cos(handle.yaw * Math.PI / 180.0F) * i * 0.5F); + handle.motX *= 0.6D; + handle.motZ *= 0.6D; + } + + int fireAspectLevel = EnchantmentManager.getFireAspectEnchantmentLevel(handle); + + if (fireAspectLevel > 0) { + target.setOnFire(fireAspectLevel * 4); + } + } + + @Override + public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) throws Exception { + if (Bukkit.isPrimaryThread()) + throw new IllegalStateException("NMS.fillProfileProperties cannot be invoked from the main thread."); + + MinecraftSessionService sessionService = ((CraftServer) Bukkit.getServer()).getServer().ay(); + + YggdrasilAuthenticationService auth = ((YggdrasilMinecraftSessionService) sessionService) + .getAuthenticationService(); + + URL url = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/profile/" + + UUIDTypeAdapter.fromUUID(profile.getId())); + + url = HttpAuthenticationService.concatenateURL(url, "unsigned=" + !requireSecure); + + MinecraftProfilePropertiesResponse response = (MinecraftProfilePropertiesResponse) MAKE_REQUEST.invoke(auth, + url, null, MinecraftProfilePropertiesResponse.class); + if (response == null) + return profile; + + GameProfile result = new GameProfile(response.getId(), response.getName()); + result.getProperties().putAll(response.getProperties()); + profile.getProperties().putAll(response.getProperties()); + + return result; + } + + @Override + public BossBar getBossBar(org.bukkit.entity.Entity entity) { + BossBattleServer bserver = null; + try { + if (entity.getType() == EntityType.WITHER) { + bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity)); + } else if (entity.getType() == EntityType.ENDER_DRAGON) { + bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD + .get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity))); + } + } catch (Exception e) { + } + if (bserver == null) { + return null; + } + BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10); + try { + CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver); + } catch (Exception e) { + } + return ret; + } + + @Override + public BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) { + AxisAlignedBB bb = NMSImpl.getHandle(handle).getBoundingBox(); + return new BoundingBox(bb.a, bb.b, bb.c, bb.d, bb.e, bb.f); + } + + @Override + public GameProfileRepository getGameProfileRepository() { + return ((CraftServer) Bukkit.getServer()).getServer().getGameProfileRepository(); + } + + @Override + public float getHorizontalMovement(org.bukkit.entity.Entity entity) { + if (!entity.getType().isAlive()) + return Float.NaN; + EntityLiving handle = NMSImpl.getHandle((LivingEntity) entity); + return handle.bg; + } + + @Override + public NPC getNPC(org.bukkit.entity.Entity entity) { + return getHandle(entity) instanceof NPCHolder ? ((NPCHolder) getHandle(entity)).getNPC() : null; + } + + @Override + public List getPassengers(org.bukkit.entity.Entity entity) { + return Lists.transform(NMSImpl.getHandle(entity).passengers, new Function() { + @Override + public org.bukkit.entity.Entity apply(Entity input) { + return input.getBukkitEntity(); + } + }); + } + + @Override + public GameProfile getProfile(SkullMeta meta) { + if (SKULL_PROFILE_FIELD == null) { + try { + SKULL_PROFILE_FIELD = meta.getClass().getDeclaredField("profile"); + SKULL_PROFILE_FIELD.setAccessible(true); + } catch (Exception e) { + return null; + } + } + try { + return (GameProfile) SKULL_PROFILE_FIELD.get(meta); + } catch (Exception e) { + return null; + } + } + + @Override + public String getSound(String flag) throws CommandException { + try { + String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + if (ret == null) + throw new CommandException(Messages.INVALID_SOUND); + return ret; + } catch (Exception e) { + throw new CommandException(Messages.INVALID_SOUND); + } + } + + @Override + public float getSpeedFor(NPC npc) { + if (!npc.isSpawned() || !(npc.getEntity() instanceof LivingEntity)) + return DEFAULT_SPEED; + EntityLiving handle = NMSImpl.getHandle((LivingEntity) npc.getEntity()); + if (handle == null) + return DEFAULT_SPEED; + return DEFAULT_SPEED; + // return (float) + // handle.getAttributeInstance(GenericAttributes.d).getValue(); + } + + @Override + public float getStepHeight(org.bukkit.entity.Entity entity) { + return NMSImpl.getHandle(entity).P; + } + + @Override + public MCNavigator getTargetNavigator(final org.bukkit.entity.Entity entity, final Location dest, + final NavigatorParameters params) { + net.minecraft.server.v1_10_R1.Entity raw = getHandle(entity); + raw.onGround = true; + // not sure of a better way around this - if onGround is false, then + // navigation won't execute, and calling entity.move doesn't + // entirely fix the problem. + final NavigationAbstract navigation = NMSImpl.getNavigation(entity); + float oldWidth = raw.width; + if (raw instanceof EntityHorse) { + raw.width = Math.min(0.99f, oldWidth); + } + navigation.a(dest.getX(), dest.getY(), dest.getZ(), params.speed()); + raw.width = oldWidth; // minecraft requires that an entity fit onto both blocks if width >= 1f, but we'd + // prefer to make it just fit on 1 so hack around it a bit. + final CancelReason initial; + if (NMSImpl.isNavigationFinished(navigation)) { + initial = CancelReason.STUCK; + } else { + initial = null; + } + return new MCNavigator() { + float lastSpeed = params.speed(); + CancelReason reason = initial; + + @Override + public CancelReason getCancelReason() { + return reason; + } + + @Override + public void stop() { + stopNavigation(navigation); + } + + @Override + public boolean update() { + if (params.speed() != lastSpeed) { + Messaging.debug("Repathfinding " + ((NPCHolder) entity).getNPC().getId() + " due to speed change"); + navigation.a(dest.getX(), dest.getY(), dest.getZ(), params.speed()); + lastSpeed = params.speed(); + } + navigation.a(params.speed()); + return NMSImpl.isNavigationFinished(navigation); + } + }; + } + + @Override + public TargetNavigator getTargetNavigator(org.bukkit.entity.Entity entity, org.bukkit.entity.Entity target, + NavigatorParameters parameters) { + return getNavigation(entity) == null ? null + : new NavigationFieldWrapper(getNavigation(entity), entity, target, parameters); + } + + @Override + public org.bukkit.entity.Entity getVehicle(org.bukkit.entity.Entity entity) { + Entity e = NMSImpl.getHandle(entity).getVehicle(); + return e == NMSImpl.getHandle(entity) ? null : e.getBukkitEntity(); + } + + @Override + public float getVerticalMovement(org.bukkit.entity.Entity entity) { + if (!entity.getType().isAlive()) + return Float.NaN; + EntityLiving handle = NMSImpl.getHandle((LivingEntity) entity); + return handle.bf; + } + + @Override + public boolean isOnGround(org.bukkit.entity.Entity entity) { + return NMSImpl.getHandle(entity).onGround; + } + + private void loadEntityTypes() { + EntityControllers.setEntityControllerForType(EntityType.AREA_EFFECT_CLOUD, AreaEffectCloudController.class); + EntityControllers.setEntityControllerForType(EntityType.ARROW, TippedArrowController.class); + EntityControllers.setEntityControllerForType(EntityType.ARMOR_STAND, ArmorStandController.class); + EntityControllers.setEntityControllerForType(EntityType.BAT, BatController.class); + EntityControllers.setEntityControllerForType(EntityType.BLAZE, BlazeController.class); + EntityControllers.setEntityControllerForType(EntityType.BOAT, BoatController.class); + EntityControllers.setEntityControllerForType(EntityType.CAVE_SPIDER, CaveSpiderController.class); + EntityControllers.setEntityControllerForType(EntityType.CHICKEN, ChickenController.class); + EntityControllers.setEntityControllerForType(EntityType.COW, CowController.class); + EntityControllers.setEntityControllerForType(EntityType.CREEPER, CreeperController.class); + EntityControllers.setEntityControllerForType(EntityType.DRAGON_FIREBALL, DragonFireballController.class); + EntityControllers.setEntityControllerForType(EntityType.DROPPED_ITEM, ItemController.class); + EntityControllers.setEntityControllerForType(EntityType.EGG, EggController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDER_CRYSTAL, EnderCrystalController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDER_DRAGON, EnderDragonController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDER_PEARL, EnderPearlController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDER_SIGNAL, EnderSignalController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDERMAN, EndermanController.class); + EntityControllers.setEntityControllerForType(EntityType.ENDERMITE, EndermiteController.class); + EntityControllers.setEntityControllerForType(EntityType.FALLING_BLOCK, FallingBlockController.class); + EntityControllers.setEntityControllerForType(EntityType.FIREWORK, FireworkController.class); + EntityControllers.setEntityControllerForType(EntityType.FIREBALL, LargeFireballController.class); + EntityControllers.setEntityControllerForType(EntityType.FISHING_HOOK, FishingHookController.class); + EntityControllers.setEntityControllerForType(EntityType.GHAST, GhastController.class); + EntityControllers.setEntityControllerForType(EntityType.GIANT, GiantController.class); + EntityControllers.setEntityControllerForType(EntityType.GUARDIAN, GuardianController.class); + EntityControllers.setEntityControllerForType(EntityType.HORSE, HorseController.class); + EntityControllers.setEntityControllerForType(EntityType.IRON_GOLEM, IronGolemController.class); + EntityControllers.setEntityControllerForType(EntityType.ITEM_FRAME, ItemFrameController.class); + EntityControllers.setEntityControllerForType(EntityType.LEASH_HITCH, LeashController.class); + EntityControllers.setEntityControllerForType(EntityType.LINGERING_POTION, ThrownPotionController.class); + EntityControllers.setEntityControllerForType(EntityType.MAGMA_CUBE, MagmaCubeController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART, MinecartRideableController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART_CHEST, MinecartChestController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART_COMMAND, MinecartCommandController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART_FURNACE, MinecartFurnaceController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART_HOPPER, MinecartHopperController.class); + EntityControllers.setEntityControllerForType(EntityType.MINECART_TNT, MinecartTNTController.class); + EntityControllers.setEntityControllerForType(EntityType.MUSHROOM_COW, MushroomCowController.class); + EntityControllers.setEntityControllerForType(EntityType.OCELOT, OcelotController.class); + EntityControllers.setEntityControllerForType(EntityType.PAINTING, PaintingController.class); + EntityControllers.setEntityControllerForType(EntityType.PIG, PigController.class); + EntityControllers.setEntityControllerForType(EntityType.PIG_ZOMBIE, PigZombieController.class); + EntityControllers.setEntityControllerForType(EntityType.POLAR_BEAR, PolarBearController.class); + EntityControllers.setEntityControllerForType(EntityType.PLAYER, HumanController.class); + EntityControllers.setEntityControllerForType(EntityType.RABBIT, RabbitController.class); + EntityControllers.setEntityControllerForType(EntityType.SHEEP, SheepController.class); + EntityControllers.setEntityControllerForType(EntityType.SHULKER, ShulkerController.class); + EntityControllers.setEntityControllerForType(EntityType.SHULKER_BULLET, ShulkerBulletController.class); + EntityControllers.setEntityControllerForType(EntityType.SILVERFISH, SilverfishController.class); + EntityControllers.setEntityControllerForType(EntityType.SKELETON, SkeletonController.class); + EntityControllers.setEntityControllerForType(EntityType.SLIME, SlimeController.class); + EntityControllers.setEntityControllerForType(EntityType.SMALL_FIREBALL, SmallFireballController.class); + EntityControllers.setEntityControllerForType(EntityType.SNOWBALL, SnowballController.class); + EntityControllers.setEntityControllerForType(EntityType.SNOWMAN, SnowmanController.class); + EntityControllers.setEntityControllerForType(EntityType.SPECTRAL_ARROW, SpectralArrowController.class); + EntityControllers.setEntityControllerForType(EntityType.SPIDER, SpiderController.class); + EntityControllers.setEntityControllerForType(EntityType.SPLASH_POTION, ThrownPotionController.class); + EntityControllers.setEntityControllerForType(EntityType.SQUID, SquidController.class); + EntityControllers.setEntityControllerForType(EntityType.TIPPED_ARROW, TippedArrowController.class); + EntityControllers.setEntityControllerForType(EntityType.THROWN_EXP_BOTTLE, ThrownExpBottleController.class); + EntityControllers.setEntityControllerForType(EntityType.PRIMED_TNT, TNTPrimedController.class); + EntityControllers.setEntityControllerForType(EntityType.VILLAGER, VillagerController.class); + EntityControllers.setEntityControllerForType(EntityType.WOLF, WolfController.class); + EntityControllers.setEntityControllerForType(EntityType.WITCH, WitchController.class); + EntityControllers.setEntityControllerForType(EntityType.WITHER, WitherController.class); + EntityControllers.setEntityControllerForType(EntityType.WITHER_SKULL, WitherSkullController.class); + EntityControllers.setEntityControllerForType(EntityType.ZOMBIE, ZombieController.class); + } + + @Override + public void loadPlugins() { + ((CraftServer) Bukkit.getServer()).enablePlugins(PluginLoadOrder.POSTWORLD); + } + + @Override + public void look(org.bukkit.entity.Entity entity, float yaw, float pitch) { + Entity handle = NMSImpl.getHandle(entity); + if (handle == null) + return; + yaw = Util.clampYaw(yaw); + handle.yaw = yaw; + setHeadYaw(entity, yaw); + handle.pitch = pitch; + } + + @Override + public void look(org.bukkit.entity.Entity from, org.bukkit.entity.Entity to) { + Entity handle = NMSImpl.getHandle(from), target = NMSImpl.getHandle(to); + if (handle instanceof EntityInsentient) { + ((EntityInsentient) handle).getControllerLook().a(target, 10.0F, ((EntityInsentient) handle).N()); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setTargetLook(target, 10F, 40F); + } + } + + @Override + public void mount(org.bukkit.entity.Entity entity, org.bukkit.entity.Entity passenger) { + if (NMSImpl.getHandle(passenger) == null) + return; + NMSImpl.getHandle(passenger).startRiding(NMSImpl.getHandle(entity)); + } + + @Override + public void openHorseScreen(Horse horse, Player equipper) { + EntityLiving handle = NMSImpl.getHandle(horse); + EntityLiving equipperHandle = NMSImpl.getHandle(equipper); + if (handle == null || equipperHandle == null) + return; + boolean wasTamed = horse.isTamed(); + horse.setTamed(true); + ((EntityHorse) handle).a((EntityHuman) equipperHandle); + horse.setTamed(wasTamed); + } + + @Override + public void playAnimation(PlayerAnimation animation, Player player, int radius) { + PlayerAnimationImpl.play(animation, player, radius); + } + + @Override + public void registerEntityClass(Class clazz) { + if (ENTITY_CLASS_TO_INT == null || ENTITY_CLASS_TO_INT.containsKey(clazz)) + return; + Class search = clazz; + while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) { + if (!ENTITY_CLASS_TO_INT.containsKey(search)) + continue; + int code = ENTITY_CLASS_TO_INT.get(search); + ENTITY_CLASS_TO_INT.put(clazz, code); + ENTITY_CLASS_TO_NAME.put(clazz, ENTITY_CLASS_TO_NAME.get(search)); + return; + } + throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString()); + } + + @Override + public void removeFromServerPlayerList(Player player) { + EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player); + ((CraftServer) Bukkit.getServer()).getHandle().players.remove(handle); + } + + @Override + public void removeFromWorld(org.bukkit.entity.Entity entity) { + Preconditions.checkNotNull(entity); + + Entity nmsEntity = ((CraftEntity) entity).getHandle(); + nmsEntity.world.removeEntity(nmsEntity); + } + + @Override + public void removeHookIfNecessary(NPCRegistry npcRegistry, FishHook entity) { + EntityFishingHook hook = (EntityFishingHook) NMSImpl.getHandle(entity); + if (hook.hooked == null) + return; + NPC npc = npcRegistry.getNPC(hook.hooked.getBukkitEntity()); + if (npc == null) + return; + if (npc.isProtected()) { + hook.hooked = null; + hook.die(); + } + } + + @Override + public void replaceTrackerEntry(Player player) { + WorldServer server = (WorldServer) NMSImpl.getHandle(player).getWorld(); + EntityTrackerEntry entry = server.getTracker().trackedEntities.get(player.getEntityId()); + if (entry == null) + return; + PlayerlistTrackerEntry replace = new PlayerlistTrackerEntry(entry); + server.getTracker().trackedEntities.a(player.getEntityId(), replace); + if (TRACKED_ENTITY_SET != null) { + try { + Set set = (Set) TRACKED_ENTITY_SET.get(server.getTracker()); + set.remove(entry); + set.add(replace); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + @Override + public void sendPositionUpdate(Player excluding, org.bukkit.entity.Entity from, Location storedLocation) { + sendPacketNearby(excluding, storedLocation, new PacketPlayOutEntityTeleport(getHandle(from))); + } + + @Override + public void sendTabListAdd(Player recipient, Player listPlayer) { + Preconditions.checkNotNull(recipient); + Preconditions.checkNotNull(listPlayer); + + EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle(); + + NMSImpl.sendPacket(recipient, + new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entity)); + } + + @Override + public void sendTabListRemove(Player recipient, Collection skinnableNPCs) { + Preconditions.checkNotNull(recipient); + Preconditions.checkNotNull(skinnableNPCs); + + EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()]; + int i = 0; + for (SkinnableEntity skinnable : skinnableNPCs) { + entities[i] = (EntityPlayer) skinnable; + i++; + } + + NMSImpl.sendPacket(recipient, + new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities)); + } + + @Override + public void sendTabListRemove(Player recipient, Player listPlayer) { + Preconditions.checkNotNull(recipient); + Preconditions.checkNotNull(listPlayer); + + EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle(); + + NMSImpl.sendPacket(recipient, + new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity)); + } + + @Override + public void setDestination(org.bukkit.entity.Entity entity, double x, double y, double z, float speed) { + Entity handle = NMSImpl.getHandle(entity); + if (handle == null) + return; + if (handle instanceof EntityInsentient) { + ((EntityInsentient) handle).getControllerMove().a(x, y, z, speed); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setMoveDestination(x, y, z, speed); + } + } + + @Override + public void setHeadYaw(org.bukkit.entity.Entity entity, float yaw) { + if (!(entity instanceof LivingEntity)) + return; + EntityLiving handle = (EntityLiving) getHandle(entity); + yaw = Util.clampYaw(yaw); + handle.aP = yaw; + if (!(handle instanceof EntityHuman)) + handle.aO = yaw; + handle.aQ = yaw; + } + + @Override + public void setKnockbackResistance(LivingEntity entity, double d) { + EntityLiving handle = NMSImpl.getHandle(entity); + handle.getAttributeInstance(GenericAttributes.c).setValue(d); + } + + @Override + public void setNavigationTarget(org.bukkit.entity.Entity handle, org.bukkit.entity.Entity target, float speed) { + NMSImpl.getNavigation(handle).a(NMSImpl.getHandle(target), speed); + } + + @Override + public void setProfile(SkullMeta meta, GameProfile profile) { + if (SKULL_PROFILE_FIELD == null) { + try { + SKULL_PROFILE_FIELD = meta.getClass().getDeclaredField("profile"); + SKULL_PROFILE_FIELD.setAccessible(true); + } catch (Exception e) { + return; + } + } + try { + SKULL_PROFILE_FIELD.set(meta, profile); + } catch (Exception e) { + } + } + + @Override + public void setShouldJump(org.bukkit.entity.Entity entity) { + Entity handle = NMSImpl.getHandle(entity); + if (handle == null) + return; + if (handle instanceof EntityInsentient) { + ControllerJump controller = ((EntityInsentient) handle).getControllerJump(); + controller.a(); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setShouldJump(); + } + } + + @Override + public void setSitting(Tameable tameable, boolean sitting) { + ((EntityTameableAnimal) NMSImpl.getHandle((LivingEntity) tameable)).setSitting(sitting); + } + + @Override + public void setStepHeight(org.bukkit.entity.Entity entity, float height) { + NMSImpl.getHandle(entity).P = height; + } + + @Override + public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d) { + if (!bukkitEntity.getType().isAlive()) + return; + EntityLiving handle = NMSImpl.getHandle((LivingEntity) bukkitEntity); + handle.bf = (float) d; + } + + @Override + public void setWitherCharged(Wither wither, boolean charged) { + EntityWither handle = ((CraftWither) wither).getHandle(); + handle.l(charged ? 20 : 0); + } + + @Override + public boolean shouldJump(org.bukkit.entity.Entity entity) { + if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) + return false; + try { + return JUMP_FIELD.getBoolean(NMSImpl.getHandle(entity)); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return false; + } + + @Override + public boolean tick(org.bukkit.entity.Entity next) { + Entity entity = NMSImpl.getHandle(next); + Entity entity1 = entity.bB(); + if (entity1 != null) { + if ((entity1.dead) || (!entity1.w(entity))) { + entity.stopRiding(); + } + } else { + if (!entity.dead) { + try { + entity.world.g(entity); + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Ticking player"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Player being ticked"); + + entity.appendEntityCrashDetails(crashreportsystemdetails); + throw new ReportedException(crashreport); + } + } + boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", + Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); + if (entity.dead) { + entity.world.removeEntity(entity); + return true; + } else if (!removeFromPlayerList) { + if (!entity.world.players.contains(entity)) { + entity.world.players.add((EntityHuman) entity); + } + return true; + } else { + entity.world.players.remove(entity); + } + } + return false; + } + + @Override + public void trySwim(org.bukkit.entity.Entity entity) { + trySwim(entity, 0.04F); + } + + @Override + public void trySwim(org.bukkit.entity.Entity entity, float power) { + Entity handle = NMSImpl.getHandle(entity); + if (handle == null) + return; + if (RANDOM.nextFloat() < 0.8F && (handle.ak() || handle.ao())) { + handle.motY += power; + } + } + + @Override + public void updateNavigationWorld(org.bukkit.entity.Entity entity, World world) { + if (NAVIGATION_WORLD_FIELD == null) + return; + Entity en = NMSImpl.getHandle(entity); + if (en == null || !(en instanceof EntityInsentient)) + return; + EntityInsentient handle = (EntityInsentient) en; + WorldServer worldHandle = ((CraftWorld) world).getHandle(); + try { + NAVIGATION_WORLD_FIELD.set(handle.getNavigation(), worldHandle); + } catch (Exception e) { + Messaging.logTr(Messages.ERROR_UPDATING_NAVIGATION_WORLD, e.getMessage()); + } + } + + @Override + public void updatePathfindingRange(NPC npc, float pathfindingRange) { + if (!npc.isSpawned() || !npc.getEntity().getType().isAlive()) + return; + EntityLiving en = NMSImpl.getHandle((LivingEntity) npc.getEntity()); + if (!(en instanceof EntityInsentient)) { + if (en instanceof EntityHumanNPC) { + ((EntityHumanNPC) en).updatePathfindingRange(pathfindingRange); + } + return; + } + if (PATHFINDING_RANGE == null) + return; + EntityInsentient handle = (EntityInsentient) en; + NavigationAbstract navigation = handle.getNavigation(); + try { + AttributeInstance inst = (AttributeInstance) PATHFINDING_RANGE.get(navigation); + inst.setValue(pathfindingRange); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + private static class NavigationFieldWrapper implements TargetNavigator { + private final org.bukkit.entity.Entity handle; + private final NavigationAbstract navigation; + private final NavigatorParameters parameters; + private final org.bukkit.entity.Entity target; + + private NavigationFieldWrapper(NavigationAbstract navigation, org.bukkit.entity.Entity handle, + org.bukkit.entity.Entity target, NavigatorParameters parameters) { + this.navigation = navigation; + this.handle = handle; + this.target = target; + this.parameters = parameters; + } + + @Override + public void setPath() { + Location location = parameters.entityTargetLocationMapper().apply(target); + if (location == null) { + throw new IllegalStateException("mapper should not return null"); + } + Location oldLoc = target.getLocation(HANDLE_LOCATION); + target.teleport(location); + NMS.setNavigationTarget(handle, target, parameters.speed()); + target.teleport(oldLoc); + } + + @Override + public void stop() { + stopNavigation(navigation); + } + + @Override + public void update() { + updateNavigation(navigation); + } + + private static final Location HANDLE_LOCATION = new Location(null, 0, 0, 0); + } + + public static void clearGoals(PathfinderGoalSelector... goalSelectors) { + if (GOAL_FIELD == null || goalSelectors == null) + return; + for (PathfinderGoalSelector selector : goalSelectors) { + try { + Collection list = (Collection) GOAL_FIELD.get(selector); + list.clear(); + } catch (Exception e) { + Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); + } + } + } + + public static void flyingMoveLogic(EntityLiving entity, float f, float f1) { + if ((entity.ct()) || (entity.bA())) { + if ((entity.isInWater()) + && ((!(entity instanceof EntityHuman)) || (!((EntityHuman) entity).abilities.isFlying))) { + double d1 = entity.locY; + float f4 = entity instanceof EntityPolarBear ? 0.98F : 0.8F; + float f3 = 0.02F; + float f2 = EnchantmentManager.d(entity); + if (f2 > 3.0F) { + f2 = 3.0F; + } + if (!entity.onGround) { + f2 *= 0.5F; + } + if (f2 > 0.0F) { + f4 += (0.54600006F - f4) * f2 / 3.0F; + f3 += (entity.cp() - f3) * f2 / 3.0F; + } + entity.a(f, f1, f3); + entity.move(entity.motX, entity.motY, entity.motZ); + entity.motX *= f4; + entity.motY *= 0.800000011920929D; + entity.motZ *= f4; + if (!entity.isNoGravity()) { + entity.motY -= 0.02D; + } + if ((entity.positionChanged) + && (entity.c(entity.motX, entity.motY + 0.6000000238418579D - entity.locY + d1, entity.motZ))) { + entity.motY = 0.30000001192092896D; + } + } else if ((entity.ao()) + && ((!(entity instanceof EntityHuman)) || (!((EntityHuman) entity).abilities.isFlying))) { + double d1 = entity.locY; + entity.a(f, f1, 0.02F); + entity.move(entity.motX, entity.motY, entity.motZ); + entity.motX *= 0.5D; + entity.motY *= 0.5D; + entity.motZ *= 0.5D; + if (!entity.isNoGravity()) { + entity.motY -= 0.02D; + } + if ((entity.positionChanged) + && (entity.c(entity.motX, entity.motY + 0.6000000238418579D - entity.locY + d1, entity.motZ))) { + entity.motY = 0.30000001192092896D; + } + } else if (entity.cG()) { + if (entity.motY > -0.5D) { + entity.fallDistance = 1.0F; + } + Vec3D vec3d = entity.aB(); + float f5 = entity.pitch * 0.017453292F; + + double d0 = Math.sqrt(vec3d.x * vec3d.x + vec3d.z * vec3d.z); + double d2 = Math.sqrt(entity.motX * entity.motX + entity.motZ * entity.motZ); + double d3 = vec3d.b(); + float f6 = MathHelper.cos(f5); + + f6 = (float) (f6 * f6 * Math.min(1.0D, d3 / 0.4D)); + entity.motY += -0.08D + f6 * 0.06D; + if ((entity.motY < 0.0D) && (d0 > 0.0D)) { + double d4 = entity.motY * -0.1D * f6; + entity.motY += d4; + entity.motX += vec3d.x * d4 / d0; + entity.motZ += vec3d.z * d4 / d0; + } + if (f5 < 0.0F) { + double d4 = d2 * -MathHelper.sin(f5) * 0.04D; + entity.motY += d4 * 3.2D; + entity.motX -= vec3d.x * d4 / d0; + entity.motZ -= vec3d.z * d4 / d0; + } + if (d0 > 0.0D) { + entity.motX += (vec3d.x / d0 * d2 - entity.motX) * 0.1D; + entity.motZ += (vec3d.z / d0 * d2 - entity.motZ) * 0.1D; + } + entity.motX *= 0.9900000095367432D; + entity.motY *= 0.9800000190734863D; + entity.motZ *= 0.9900000095367432D; + entity.move(entity.motX, entity.motY, entity.motZ); + if ((entity.positionChanged) && (!entity.world.isClientSide)) { + double d4 = Math.sqrt(entity.motX * entity.motX + entity.motZ * entity.motZ); + double d5 = d2 - d4; + float f7 = (float) (d5 * 10.0D - 3.0D); + if (f7 > 0.0F) { + entity.a(entity.e((int) f7), 1.0F, 1.0F); + entity.damageEntity(DamageSource.FLY_INTO_WALL, f7); + } + } + if ((entity.onGround) && (!entity.world.isClientSide) && (entity.getFlag(7)) + && (!CraftEventFactory.callToggleGlideEvent(entity, false).isCancelled())) { + entity.setFlag(7, false); + } + } else { + float f8 = 0.91F; + BlockPosition.PooledBlockPosition blockposition_pooledblockposition = BlockPosition.PooledBlockPosition + .d(entity.locX, entity.getBoundingBox().b - 1.0D, entity.locZ); + if (entity.onGround) { + f8 = entity.world.getType(blockposition_pooledblockposition).getBlock().frictionFactor * 0.91F; + } + float f4 = 0.16277136F / (f8 * f8 * f8); + float f3; + if (entity.onGround) { + f3 = entity.cp() * f4; + } else { + f3 = entity.aS; + } + entity.a(f, f1, f3); + f8 = 0.91F; + if (entity.onGround) { + f8 = entity.world.getType(blockposition_pooledblockposition.e(entity.locX, + entity.getBoundingBox().b - 1.0D, entity.locZ)).getBlock().frictionFactor * 0.91F; + } + if (entity.m_()) { + entity.motX = MathHelper.a(entity.motX, -0.15000000596046448D, 0.15000000596046448D); + entity.motZ = MathHelper.a(entity.motZ, -0.15000000596046448D, 0.15000000596046448D); + entity.fallDistance = 0.0F; + if (entity.motY < -0.15D) { + entity.motY = -0.15D; + } + boolean flag = (entity.isSneaking()) && ((entity instanceof EntityHuman)); + if ((flag) && (entity.motY < 0.0D)) { + entity.motY = 0.0D; + } + } + entity.move(entity.motX, entity.motY, entity.motZ); + if ((entity.positionChanged) && (entity.m_())) { + entity.motY = 0.2D; + } + if (entity.hasEffect(MobEffects.LEVITATION)) { + entity.motY += (0.05D * (entity.getEffect(MobEffects.LEVITATION).getAmplifier() + 1) - entity.motY) + * 0.2D; + } else { + blockposition_pooledblockposition.e(entity.locX, 0.0D, entity.locZ); + if ((entity.world.isClientSide) && ((!entity.world.isLoaded(blockposition_pooledblockposition)) + || (!entity.world.getChunkAtWorldCoords(blockposition_pooledblockposition).p()))) { + if (entity.locY > 0.0D) { + entity.motY = -0.1D; + } else { + entity.motY = 0.0D; + } + } else if (!entity.isNoGravity()) { + entity.motY -= 0.08D; + } + } + entity.motY *= 0.9800000190734863D; + entity.motX *= f8; + entity.motZ *= f8; + blockposition_pooledblockposition.t(); + } + } + entity.aG = entity.aH; + double d1 = entity.locX - entity.lastX; + double d0 = entity.locZ - entity.lastZ; + float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + if (f2 > 1.0F) { + f2 = 1.0F; + } + entity.aH += (f2 - entity.aH) * 0.4F; + entity.aI += entity.aH; + } + + private static EntityLiving getHandle(LivingEntity entity) { + return (EntityLiving) NMSImpl.getHandle((org.bukkit.entity.Entity) entity); + } + + public static Entity getHandle(org.bukkit.entity.Entity entity) { + if (!(entity instanceof CraftEntity)) + return null; + return ((CraftEntity) entity).getHandle(); + } + + public static float getHeadYaw(EntityLiving handle) { + return handle.aP; + } + + public static NavigationAbstract getNavigation(org.bukkit.entity.Entity entity) { + Entity handle = getHandle(entity); + return handle instanceof EntityInsentient ? ((EntityInsentient) handle).getNavigation() + : handle instanceof EntityHumanNPC ? ((EntityHumanNPC) handle).getNavigation() : null; + } + + public static DataWatcherObject getRabbitTypeField() { + if (RABBIT_FIELD == null) + return null; + try { + return (DataWatcherObject) RABBIT_FIELD.get(null); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + public static SoundEffect getSoundEffect(NPC npc, SoundEffect snd, String meta) { + return npc == null || !npc.data().has(meta) ? snd + : SoundEffect.a.get(new MinecraftKey(npc.data().get(meta, snd == null ? "" : snd.toString()))); + } + + public static void initNetworkManager(NetworkManager network) { + if (NETWORK_ADDRESS == null) + return; + try { + network.channel = new EmptyChannel(null); + NETWORK_ADDRESS.set(network, new SocketAddress() { + private static final long serialVersionUID = 8207338859896320185L; + }); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + public static boolean isNavigationFinished(NavigationAbstract navigation) { + return navigation.n(); + } + + @SuppressWarnings("deprecation") + public static void minecartItemLogic(EntityMinecartAbstract minecart) { + NPC npc = ((NPCHolder) minecart).getNPC(); + if (npc == null) + return; + Material mat = Material.getMaterial(npc.data().get(NPC.MINECART_ITEM_METADATA, "")); + int data = npc.data().get(NPC.MINECART_ITEM_DATA_METADATA, 0); + int offset = npc.data().get(NPC.MINECART_OFFSET_METADATA, 0); + minecart.a(mat != null); + if (mat != null) { + minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); + } + minecart.setDisplayBlockOffset(offset); + } + + public static void sendPacket(Player player, Packet packet) { + if (packet == null) + return; + ((EntityPlayer) NMSImpl.getHandle(player)).playerConnection.sendPacket(packet); + } + + public static void sendPacketNearby(Player from, Location location, Packet packet) { + sendPacketNearby(from, location, packet, 64); + } + + public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { + List> list = new ArrayList>(); + list.add(packet); + sendPacketsNearby(from, location, list, radius); + } + + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { + radius *= radius; + final org.bukkit.World world = location.getWorld(); + for (Player ply : Bukkit.getServer().getOnlinePlayers()) { + if (ply == null || world != ply.getWorld() || (from != null && !ply.canSee(from))) { + continue; + } + if (location.distanceSquared(ply.getLocation(PACKET_CACHE_LOCATION)) > radius) { + continue; + } + for (Packet packet : packets) { + NMSImpl.sendPacket(ply, packet); + } + } + } + + public static void sendPacketsNearby(Player from, Location location, Packet... packets) { + NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64); + } + + public static void setSize(Entity entity, float f, float f1, boolean justCreated) { + if ((f != entity.width) || (f1 != entity.length)) { + float f2 = entity.width; + + entity.width = f; + entity.length = f1; + entity.a(new AxisAlignedBB(entity.getBoundingBox().a, entity.getBoundingBox().b, entity.getBoundingBox().c, + entity.getBoundingBox().a + entity.width, entity.getBoundingBox().b + entity.length, + entity.getBoundingBox().c + entity.width)); + if ((entity.width > f2) && (!justCreated) && (!entity.world.isClientSide)) + entity.move((f2 - entity.width) / 2, 0.0D, (f2 - entity.width) / 2); + } + } + + public static void stopNavigation(NavigationAbstract navigation) { + navigation.n(); + } + + public static void updateAI(EntityLiving entity) { + if (entity instanceof EntityInsentient) { + EntityInsentient handle = (EntityInsentient) entity; + handle.getEntitySenses().a(); + NMSImpl.updateNavigation(handle.getNavigation()); + handle.getControllerMove().c(); + handle.getControllerLook().a(); + handle.getControllerJump().b(); + } else if (entity instanceof EntityHumanNPC) { + ((EntityHumanNPC) entity).updateAI(); + } + } + + public static void updateNavigation(NavigationAbstract navigation) { + navigation.l(); + } + + private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getField(CraftBossBar.class, "handle"); + private static final float DEFAULT_SPEED = 1F; + private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = NMS.getField(EnderDragonBattle.class, "c"); + private static final Field ENDERDRAGON_BATTLE_FIELD = NMS.getField(EntityEnderDragon.class, "bK"); + private static Map, Integer> ENTITY_CLASS_TO_INT; + private static Map, String> ENTITY_CLASS_TO_NAME; + public static Field GOAL_FIELD = NMS.getField(PathfinderGoalSelector.class, "b"); + private static final Field JUMP_FIELD = NMS.getField(EntityLiving.class, "be"); + private static Method MAKE_REQUEST; + private static Field NAVIGATION_WORLD_FIELD = NMS.getField(NavigationAbstract.class, "b"); + public static Field NETWORK_ADDRESS = NMS.getField(NetworkManager.class, "l"); + public static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0); + private static Field PATHFINDING_RANGE = NMS.getField(NavigationAbstract.class, "f"); + private static final Field RABBIT_FIELD = NMS.getField(EntityRabbit.class, "bx"); + private static final Random RANDOM = Util.getFastRandom(); + private static Field SKULL_PROFILE_FIELD; + + private static Field TRACKED_ENTITY_SET = NMS.getField(EntityTracker.class, "c"); + + private static final Field WITHER_BOSS_BAR_FIELD = NMS.getField(EntityWither.class, "bG"); + + static { + try { + Field field = NMS.getField(EntityTypes.class, "f"); + ENTITY_CLASS_TO_INT = (Map, Integer>) field.get(null); + field = NMS.getField(EntityTypes.class, "d"); + ENTITY_CLASS_TO_NAME = (Map, String>) field.get(null); + } catch (Exception e) { + Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage()); + } + + try { + MAKE_REQUEST = YggdrasilAuthenticationService.class.getDeclaredMethod("makeRequest", URL.class, + Object.class, Class.class); + MAKE_REQUEST.setAccessible(true); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java new file mode 100644 index 000000000..6be29060a --- /dev/null +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java @@ -0,0 +1,135 @@ +package net.citizensnpcs.nms.v1_10_R1.util; + +import java.util.EnumMap; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.collect.Maps; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.npc.ai.NPCHolder; +import net.citizensnpcs.trait.ArmorStandTrait; +import net.citizensnpcs.util.NMS; +import net.citizensnpcs.util.PlayerAnimation; +import net.minecraft.server.v1_10_R1.BlockPosition; +import net.minecraft.server.v1_10_R1.EntityPlayer; +import net.minecraft.server.v1_10_R1.EnumHand; +import net.minecraft.server.v1_10_R1.Packet; +import net.minecraft.server.v1_10_R1.PacketPlayOutAnimation; +import net.minecraft.server.v1_10_R1.PacketPlayOutBed; +import net.minecraft.server.v1_10_R1.PacketPlayOutEntityMetadata; + +public class PlayerAnimationImpl { + public static void play(PlayerAnimation animation, Player bplayer, int radius) { + // TODO: this is pretty gross + final EntityPlayer player = (EntityPlayer) NMSImpl.getHandle(bplayer); + if (DEFAULTS.containsKey(animation)) { + playDefaultAnimation(player, radius, DEFAULTS.get(animation)); + return; + } + switch (animation) { + case SIT: + player.getBukkitEntity().setMetadata("citizens.sitting", + new FixedMetadataValue(CitizensAPI.getPlugin(), true)); + final NPC holder = CitizensAPI.getNPCRegistry().createNPC(EntityType.ARMOR_STAND, ""); + holder.spawn(player.getBukkitEntity().getLocation()); + ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); + trait.setGravity(false); + trait.setHasArms(false); + trait.setHasBaseplate(false); + trait.setSmall(true); + trait.setMarker(true); + trait.setVisible(false); + holder.getTrait(ArmorStandTrait.class).setVisible(false); + holder.data().set(NPC.NAMEPLATE_VISIBLE_METADATA, false); + holder.data().set(NPC.DEFAULT_PROTECTED_METADATA, true); + new BukkitRunnable() { + @Override + public void cancel() { + super.cancel(); + holder.destroy(); + } + + @Override + public void run() { + if (player.dead || !player.valid + || !player.getBukkitEntity().getMetadata("citizens.sitting").get(0).asBoolean()) { + cancel(); + return; + } + if (player instanceof NPCHolder && !((NPCHolder) player).getNPC().isSpawned()) { + cancel(); + return; + } + if (!NMS.getPassengers(holder.getEntity()).contains(player.getBukkitEntity())) { + NMS.mount(holder.getEntity(), player.getBukkitEntity()); + } + } + }.runTaskTimer(CitizensAPI.getPlugin(), 0, 1); + break; + case SLEEP: + PacketPlayOutBed packet = new PacketPlayOutBed(player, + new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ)); + sendPacketNearby(packet, player, radius); + break; + case SNEAK: + player.getBukkitEntity().setSneaking(true); + sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, + radius); + break; + case START_USE_MAINHAND_ITEM: + player.c(EnumHand.MAIN_HAND); + sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, + radius); + break; + case START_USE_OFFHAND_ITEM: + player.c(EnumHand.OFF_HAND); + sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, + radius); + break; + case STOP_SITTING: + player.getBukkitEntity().setMetadata("citizens.sitting", + new FixedMetadataValue(CitizensAPI.getPlugin(), false)); + NMS.mount(player.getBukkitEntity(), null); + break; + case STOP_SLEEPING: + playDefaultAnimation(player, radius, 2); + break; + case STOP_SNEAKING: + player.getBukkitEntity().setSneaking(false); + sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, + radius); + break; + case STOP_USE_ITEM: + player.cA(); + sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, + radius); + break; + default: + break; + } + } + + protected static void playDefaultAnimation(EntityPlayer player, int radius, int code) { + PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, code); + sendPacketNearby(packet, player, radius); + } + + protected static void sendPacketNearby(Packet packet, EntityPlayer player, int radius) { + NMSImpl.sendPacketNearby(player.getBukkitEntity(), player.getBukkitEntity().getLocation(), packet, radius); + } + + private static EnumMap DEFAULTS = Maps.newEnumMap(PlayerAnimation.class); + static { + DEFAULTS.put(PlayerAnimation.ARM_SWING, 0); + DEFAULTS.put(PlayerAnimation.HURT, 1); + DEFAULTS.put(PlayerAnimation.EAT_FOOD, 2); + DEFAULTS.put(PlayerAnimation.ARM_SWING_OFFHAND, 3); + DEFAULTS.put(PlayerAnimation.CRIT, 4); + DEFAULTS.put(PlayerAnimation.MAGIC_CRIT, 5); + } +} diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerJump.java similarity index 76% rename from src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerJump.java index 880a06e36..fef903218 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerJump.java @@ -1,6 +1,6 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; public class PlayerControllerJump { private final EntityHumanNPC a; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerLook.java similarity index 96% rename from src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerLook.java index 16342287d..735ee5b4c 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerLook.java @@ -1,6 +1,6 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.minecraft.server.v1_10_R1.Entity; import net.minecraft.server.v1_10_R1.EntityLiving; import net.minecraft.server.v1_10_R1.MathHelper; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerMove.java similarity index 95% rename from src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerMove.java index 9bd6e6821..44ea05a0b 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerControllerMove.java @@ -1,8 +1,8 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; import java.util.Random; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.citizensnpcs.util.NMS; import net.minecraft.server.v1_10_R1.AttributeInstance; import net.minecraft.server.v1_10_R1.ControllerMove; @@ -86,7 +86,7 @@ public class PlayerControllerMove extends ControllerMove { return; float f = (float) Math.toDegrees(Math.atan2(d1, d0)) - 90.0F; this.a.yaw = a(this.a.yaw, f, 30.0F); - NMS.setHeadYaw(a, this.a.yaw); + NMS.setHeadYaw(a.getBukkitEntity(), this.a.yaw); AttributeInstance speed = this.a.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED); speed.setValue(0.1D * this.e); float movement = (float) (this.e * speed.getValue()) * 10; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerNavigation.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerNavigation.java similarity index 99% rename from src/main/java/net/citizensnpcs/util/nms/PlayerNavigation.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerNavigation.java index 8aa79cdf0..d12ab53a5 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerNavigation.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerNavigation.java @@ -1,6 +1,6 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.minecraft.server.v1_10_R1.AttributeInstance; import net.minecraft.server.v1_10_R1.AxisAlignedBB; import net.minecraft.server.v1_10_R1.Block; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinder.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinder.java similarity index 97% rename from src/main/java/net/citizensnpcs/util/nms/PlayerPathfinder.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinder.java index 03fb2fb4a..f61be8f43 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinder.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinder.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; import java.util.HashSet; import java.util.Set; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.minecraft.server.v1_10_R1.BlockPosition; import net.minecraft.server.v1_10_R1.Entity; import net.minecraft.server.v1_10_R1.IBlockAccess; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderAbstract.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderAbstract.java similarity index 96% rename from src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderAbstract.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderAbstract.java index f9bc9757c..f5d4c7601 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderAbstract.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderAbstract.java @@ -1,6 +1,6 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.minecraft.server.v1_10_R1.EntityInsentient; import net.minecraft.server.v1_10_R1.IBlockAccess; import net.minecraft.server.v1_10_R1.MathHelper; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderNormal.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderNormal.java similarity index 99% rename from src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderNormal.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderNormal.java index edf025816..a41812e65 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerPathfinderNormal.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerPathfinderNormal.java @@ -1,9 +1,9 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; import java.util.EnumSet; import java.util.HashSet; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.minecraft.server.v1_10_R1.AxisAlignedBB; import net.minecraft.server.v1_10_R1.Block; import net.minecraft.server.v1_10_R1.BlockCobbleWall; diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerlistTrackerEntry.java similarity index 97% rename from src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java rename to src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerlistTrackerEntry.java index 778287510..7b94d479f 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java +++ b/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerlistTrackerEntry.java @@ -1,10 +1,10 @@ -package net.citizensnpcs.util.nms; +package net.citizensnpcs.nms.v1_10_R1.util; import java.lang.reflect.Field; import org.bukkit.entity.Player; -import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.nms.v1_10_R1.entity.EntityHumanNPC; import net.citizensnpcs.npc.skin.SkinnableEntity; import net.citizensnpcs.util.NMS; import net.minecraft.server.v1_10_R1.Entity; diff --git a/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java b/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java index 70294206a..62113e5aa 100644 --- a/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java +++ b/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java @@ -2,6 +2,7 @@ package net.citizensnpcs.npc; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.util.NMS; + import org.bukkit.Location; import org.bukkit.entity.Entity; diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 6f79e7be9..19e83f539 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -200,7 +200,7 @@ public class CitizensNPC extends AbstractNPC { // send skin packets, if applicable, before other NMS packets are sent if (couldSpawn) { - SkinnableEntity skinnable = NMS.getSkinnable(getEntity()); + SkinnableEntity skinnable = getEntity() instanceof SkinnableEntity ? ((SkinnableEntity) getEntity()) : null; if (skinnable != null) { skinnable.getSkinTracker().onSpawnNPC(); } @@ -254,7 +254,7 @@ public class CitizensNPC extends AbstractNPC { entity.setRemoveWhenFarAway(false); if (NMS.getStepHeight(entity) < 1) { - NMS.setStepHeight(NMS.getHandle(entity), 1); + NMS.setStepHeight(entity, 1); } if (getEntity() instanceof Player) { diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java b/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java index f56b6f9a8..49cea2d80 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java @@ -123,8 +123,7 @@ public class CitizensNPCRegistry implements NPCRegistry { return null; if (entity instanceof NPCHolder) return ((NPCHolder) entity).getNPC(); - Object handle = NMS.getHandle(entity); - return handle instanceof NPCHolder ? ((NPCHolder) handle).getNPC() : null; + return NMS.getNPC(entity); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/EntityControllers.java b/src/main/java/net/citizensnpcs/npc/EntityControllers.java index be21e551a..289a469c3 100644 --- a/src/main/java/net/citizensnpcs/npc/EntityControllers.java +++ b/src/main/java/net/citizensnpcs/npc/EntityControllers.java @@ -7,73 +7,6 @@ import org.bukkit.entity.EntityType; import com.google.common.base.Throwables; import com.google.common.collect.Maps; -import net.citizensnpcs.npc.entity.BatController; -import net.citizensnpcs.npc.entity.BlazeController; -import net.citizensnpcs.npc.entity.CaveSpiderController; -import net.citizensnpcs.npc.entity.ChickenController; -import net.citizensnpcs.npc.entity.CowController; -import net.citizensnpcs.npc.entity.CreeperController; -import net.citizensnpcs.npc.entity.EnderDragonController; -import net.citizensnpcs.npc.entity.EndermanController; -import net.citizensnpcs.npc.entity.EndermiteController; -import net.citizensnpcs.npc.entity.GhastController; -import net.citizensnpcs.npc.entity.GiantController; -import net.citizensnpcs.npc.entity.GuardianController; -import net.citizensnpcs.npc.entity.HorseController; -import net.citizensnpcs.npc.entity.HumanController; -import net.citizensnpcs.npc.entity.IronGolemController; -import net.citizensnpcs.npc.entity.MagmaCubeController; -import net.citizensnpcs.npc.entity.MushroomCowController; -import net.citizensnpcs.npc.entity.OcelotController; -import net.citizensnpcs.npc.entity.PigController; -import net.citizensnpcs.npc.entity.PigZombieController; -import net.citizensnpcs.npc.entity.PolarBearController; -import net.citizensnpcs.npc.entity.RabbitController; -import net.citizensnpcs.npc.entity.SheepController; -import net.citizensnpcs.npc.entity.ShulkerController; -import net.citizensnpcs.npc.entity.SilverfishController; -import net.citizensnpcs.npc.entity.SkeletonController; -import net.citizensnpcs.npc.entity.SlimeController; -import net.citizensnpcs.npc.entity.SnowmanController; -import net.citizensnpcs.npc.entity.SpiderController; -import net.citizensnpcs.npc.entity.SquidController; -import net.citizensnpcs.npc.entity.VillagerController; -import net.citizensnpcs.npc.entity.WitchController; -import net.citizensnpcs.npc.entity.WitherController; -import net.citizensnpcs.npc.entity.WolfController; -import net.citizensnpcs.npc.entity.ZombieController; -import net.citizensnpcs.npc.entity.nonliving.AreaEffectCloudController; -import net.citizensnpcs.npc.entity.nonliving.ArmorStandController; -import net.citizensnpcs.npc.entity.nonliving.BoatController; -import net.citizensnpcs.npc.entity.nonliving.DragonFireballController; -import net.citizensnpcs.npc.entity.nonliving.EggController; -import net.citizensnpcs.npc.entity.nonliving.EnderCrystalController; -import net.citizensnpcs.npc.entity.nonliving.EnderPearlController; -import net.citizensnpcs.npc.entity.nonliving.EnderSignalController; -import net.citizensnpcs.npc.entity.nonliving.FallingBlockController; -import net.citizensnpcs.npc.entity.nonliving.FireworkController; -import net.citizensnpcs.npc.entity.nonliving.FishingHookController; -import net.citizensnpcs.npc.entity.nonliving.ItemController; -import net.citizensnpcs.npc.entity.nonliving.ItemFrameController; -import net.citizensnpcs.npc.entity.nonliving.LargeFireballController; -import net.citizensnpcs.npc.entity.nonliving.LeashController; -import net.citizensnpcs.npc.entity.nonliving.MinecartChestController; -import net.citizensnpcs.npc.entity.nonliving.MinecartCommandController; -import net.citizensnpcs.npc.entity.nonliving.MinecartFurnaceController; -import net.citizensnpcs.npc.entity.nonliving.MinecartHopperController; -import net.citizensnpcs.npc.entity.nonliving.MinecartRideableController; -import net.citizensnpcs.npc.entity.nonliving.MinecartTNTController; -import net.citizensnpcs.npc.entity.nonliving.PaintingController; -import net.citizensnpcs.npc.entity.nonliving.ShulkerBulletController; -import net.citizensnpcs.npc.entity.nonliving.SmallFireballController; -import net.citizensnpcs.npc.entity.nonliving.SnowballController; -import net.citizensnpcs.npc.entity.nonliving.SpectralArrowController; -import net.citizensnpcs.npc.entity.nonliving.TNTPrimedController; -import net.citizensnpcs.npc.entity.nonliving.ThrownExpBottleController; -import net.citizensnpcs.npc.entity.nonliving.ThrownPotionController; -import net.citizensnpcs.npc.entity.nonliving.TippedArrowController; -import net.citizensnpcs.npc.entity.nonliving.WitherSkullController; - public class EntityControllers { public static boolean controllerExistsForType(EntityType type) { return TYPES.containsKey(type); @@ -96,75 +29,4 @@ public class EntityControllers { } private static final Map> TYPES = Maps.newEnumMap(EntityType.class); - - static { - TYPES.put(EntityType.AREA_EFFECT_CLOUD, AreaEffectCloudController.class); - TYPES.put(EntityType.ARROW, TippedArrowController.class); - TYPES.put(EntityType.ARMOR_STAND, ArmorStandController.class); - TYPES.put(EntityType.BAT, BatController.class); - TYPES.put(EntityType.BLAZE, BlazeController.class); - TYPES.put(EntityType.BOAT, BoatController.class); - TYPES.put(EntityType.CAVE_SPIDER, CaveSpiderController.class); - TYPES.put(EntityType.CHICKEN, ChickenController.class); - TYPES.put(EntityType.COW, CowController.class); - TYPES.put(EntityType.CREEPER, CreeperController.class); - TYPES.put(EntityType.DRAGON_FIREBALL, DragonFireballController.class); - TYPES.put(EntityType.DROPPED_ITEM, ItemController.class); - TYPES.put(EntityType.EGG, EggController.class); - TYPES.put(EntityType.ENDER_CRYSTAL, EnderCrystalController.class); - TYPES.put(EntityType.ENDER_DRAGON, EnderDragonController.class); - TYPES.put(EntityType.ENDER_PEARL, EnderPearlController.class); - TYPES.put(EntityType.ENDER_SIGNAL, EnderSignalController.class); - TYPES.put(EntityType.ENDERMAN, EndermanController.class); - TYPES.put(EntityType.ENDERMITE, EndermiteController.class); - TYPES.put(EntityType.FALLING_BLOCK, FallingBlockController.class); - TYPES.put(EntityType.FIREWORK, FireworkController.class); - TYPES.put(EntityType.FIREBALL, LargeFireballController.class); - TYPES.put(EntityType.FISHING_HOOK, FishingHookController.class); - TYPES.put(EntityType.GHAST, GhastController.class); - TYPES.put(EntityType.GIANT, GiantController.class); - TYPES.put(EntityType.GUARDIAN, GuardianController.class); - TYPES.put(EntityType.HORSE, HorseController.class); - TYPES.put(EntityType.IRON_GOLEM, IronGolemController.class); - TYPES.put(EntityType.ITEM_FRAME, ItemFrameController.class); - TYPES.put(EntityType.LEASH_HITCH, LeashController.class); - TYPES.put(EntityType.LINGERING_POTION, ThrownPotionController.class); - TYPES.put(EntityType.MAGMA_CUBE, MagmaCubeController.class); - TYPES.put(EntityType.MINECART, MinecartRideableController.class); - TYPES.put(EntityType.MINECART_CHEST, MinecartChestController.class); - TYPES.put(EntityType.MINECART_COMMAND, MinecartCommandController.class); - TYPES.put(EntityType.MINECART_FURNACE, MinecartFurnaceController.class); - TYPES.put(EntityType.MINECART_HOPPER, MinecartHopperController.class); - TYPES.put(EntityType.MINECART_TNT, MinecartTNTController.class); - TYPES.put(EntityType.MUSHROOM_COW, MushroomCowController.class); - TYPES.put(EntityType.OCELOT, OcelotController.class); - TYPES.put(EntityType.PAINTING, PaintingController.class); - TYPES.put(EntityType.PIG, PigController.class); - TYPES.put(EntityType.PIG_ZOMBIE, PigZombieController.class); - TYPES.put(EntityType.POLAR_BEAR, PolarBearController.class); - TYPES.put(EntityType.PLAYER, HumanController.class); - TYPES.put(EntityType.RABBIT, RabbitController.class); - TYPES.put(EntityType.SHEEP, SheepController.class); - TYPES.put(EntityType.SHULKER, ShulkerController.class); - TYPES.put(EntityType.SHULKER_BULLET, ShulkerBulletController.class); - TYPES.put(EntityType.SILVERFISH, SilverfishController.class); - TYPES.put(EntityType.SKELETON, SkeletonController.class); - TYPES.put(EntityType.SLIME, SlimeController.class); - TYPES.put(EntityType.SMALL_FIREBALL, SmallFireballController.class); - TYPES.put(EntityType.SNOWBALL, SnowballController.class); - TYPES.put(EntityType.SNOWMAN, SnowmanController.class); - TYPES.put(EntityType.SPECTRAL_ARROW, SpectralArrowController.class); - TYPES.put(EntityType.SPIDER, SpiderController.class); - TYPES.put(EntityType.SPLASH_POTION, ThrownPotionController.class); - TYPES.put(EntityType.SQUID, SquidController.class); - TYPES.put(EntityType.TIPPED_ARROW, TippedArrowController.class); - TYPES.put(EntityType.THROWN_EXP_BOTTLE, ThrownExpBottleController.class); - TYPES.put(EntityType.PRIMED_TNT, TNTPrimedController.class); - TYPES.put(EntityType.VILLAGER, VillagerController.class); - TYPES.put(EntityType.WOLF, WolfController.class); - TYPES.put(EntityType.WITCH, WitchController.class); - TYPES.put(EntityType.WITHER, WitherController.class); - TYPES.put(EntityType.WITHER_SKULL, WitherSkullController.class); - TYPES.put(EntityType.ZOMBIE, ZombieController.class); - } } diff --git a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java index 5c2d37a0b..2d0610119 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java +++ b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java @@ -279,7 +279,7 @@ public class CitizensNavigator implements Navigator, Runnable { private void updateMountedStatus() { if (!isNavigating()) return; - Entity vehicle = NMS.getBukkitVehicle(npc.getEntity()); + Entity vehicle = NMS.getVehicle(npc.getEntity()); if (!(vehicle instanceof NPCHolder)) return; NPC mount = ((NPCHolder) vehicle).getNPC(); diff --git a/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java index cc7cbd0e6..a6166f0b0 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/FlyingAStarNavigationStrategy.java @@ -2,6 +2,7 @@ package net.citizensnpcs.npc.ai; import org.bukkit.Location; import org.bukkit.entity.EntityType; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.util.Vector; import net.citizensnpcs.Settings.Setting; @@ -16,7 +17,7 @@ import net.citizensnpcs.api.astar.pathfinder.Path; import net.citizensnpcs.api.astar.pathfinder.VectorGoal; import net.citizensnpcs.api.astar.pathfinder.VectorNode; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.util.NMS; +import net.citizensnpcs.util.NMS; public class FlyingAStarNavigationStrategy extends AbstractPathStrategy { private final NPC npc; @@ -93,13 +94,13 @@ public class FlyingAStarNavigationStrategy extends AbstractPathStrategy { motY += (Math.signum(d1) * 0.7D - motY) * 0.1; motZ += (Math.signum(d2) * 0.5D - motZ) * 0.1; float targetYaw = (float) (Math.atan2(motZ, motX) * 180.0D / Math.PI) - 90.0F; - float normalisedTargetYaw = (targetYaw - current.getYaw()) % 360; + float normalisedTargetYaw = (targetYaw - current.getYaw()) % 360; if (normalisedTargetYaw >= 180.0F) { normalisedTargetYaw -= 360.0F; } if (normalisedTargetYaw < -180.0F) { normalisedTargetYaw += 360.0F; - } + } velocity.setX(motX).setY(motY).setZ(motZ).multiply(parameters.speed()); npc.getEntity().setVelocity(velocity); @@ -107,8 +108,9 @@ public class FlyingAStarNavigationStrategy extends AbstractPathStrategy { NMS.setVerticalMovement(npc.getEntity(), 0.5); if (npc.getEntity().getType() != EntityType.ENDER_DRAGON) { float newYaw = current.getYaw() + normalisedTargetYaw; - NMS.setHeadYaw(NMS.getHandle(npc.getEntity()), newYaw); - NMS.getHandle(npc.getEntity()).yaw = newYaw; + current.setYaw(newYaw); + NMS.setHeadYaw(npc.getEntity(), newYaw); + npc.teleport(current, TeleportCause.PLUGIN); } parameters.run(); plan.run(npc); diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java index 14d9d2d82..fed0aca75 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java @@ -7,15 +7,11 @@ import net.citizensnpcs.api.ai.NavigatorParameters; import net.citizensnpcs.api.ai.TargetType; import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_10_R1.EntityHorse; -import net.minecraft.server.v1_10_R1.NavigationAbstract; public class MCNavigationStrategy extends AbstractPathStrategy { private final Entity handle; - private float lastSpeed; - private final NavigationAbstract navigation; + private final MCNavigator navigator; private final NavigatorParameters parameters; private final Location target; @@ -23,24 +19,8 @@ public class MCNavigationStrategy extends AbstractPathStrategy { super(TargetType.LOCATION); this.target = dest; this.parameters = params; - this.lastSpeed = parameters.speed(); handle = npc.getEntity(); - net.minecraft.server.v1_10_R1.Entity raw = NMS.getHandle(handle); - raw.onGround = true; - // not sure of a better way around this - if onGround is false, then - // navigation won't execute, and calling entity.move doesn't - // entirely fix the problem. - navigation = NMS.getNavigation(npc.getEntity()); - float oldWidth = raw.width; - if (raw instanceof EntityHorse) { - raw.width = Math.min(0.99f, oldWidth); - } - navigation.a(dest.getX(), dest.getY(), dest.getZ(), parameters.speed()); - raw.width = oldWidth; // minecraft requires that an entity fit onto both blocks if width >= 1f, but we'd - // prefer to make it just fit on 1 so hack around it a bit. - if (NMS.isNavigationFinished(navigation)) { - setCancelReason(CancelReason.STUCK); - } + this.navigator = NMS.getTargetNavigator(npc.getEntity(), dest, params); } private double distanceSquared() { @@ -59,7 +39,7 @@ public class MCNavigationStrategy extends AbstractPathStrategy { @Override public void stop() { - NMS.stopNavigation(navigation); + navigator.stop(); } @Override @@ -69,20 +49,26 @@ public class MCNavigationStrategy extends AbstractPathStrategy { @Override public boolean update() { + if (navigator.getCancelReason() != null) { + setCancelReason(navigator.getCancelReason()); + } if (getCancelReason() != null) return true; - if (parameters.speed() != lastSpeed) { - Messaging.debug("Repathfinding " + ((NPCHolder) handle).getNPC().getId() + " due to speed change"); - navigation.a(target.getX(), target.getY(), target.getZ(), parameters.speed()); - lastSpeed = parameters.speed(); - } - navigation.a(parameters.speed()); + boolean wasFinished = navigator.update(); parameters.run(); if (distanceSquared() < parameters.distanceMargin()) { stop(); return true; } - return NMS.isNavigationFinished(navigation); + return wasFinished; + } + + public static interface MCNavigator { + CancelReason getCancelReason(); + + void stop(); + + boolean update(); } private static final Location HANDLE_LOCATION = new Location(null, 0, 0, 0); diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java index 01239a841..5bbc5d961 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java @@ -12,7 +12,6 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.util.BoundingBox; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_10_R1.NavigationAbstract; public class MCTargetStrategy implements PathStrategy, EntityTarget { private final boolean aggro; @@ -30,9 +29,8 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { this.parameters = params; this.handle = npc.getEntity(); this.target = target; - NavigationAbstract nav = NMS.getNavigation(npc.getEntity()); - this.targetNavigator = nav != null && !params.useNewPathfinder() ? new NavigationFieldWrapper(nav) - : new AStarTargeter(); + TargetNavigator nav = NMS.getTargetNavigator(npc.getEntity(), target, params); + this.targetNavigator = nav != null && !params.useNewPathfinder() ? nav : new AStarTargeter(); this.aggro = aggro; } @@ -174,37 +172,7 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { } } - private class NavigationFieldWrapper implements TargetNavigator { - private final NavigationAbstract navigation; - - private NavigationFieldWrapper(NavigationAbstract navigation) { - this.navigation = navigation; - } - - @Override - public void setPath() { - Location location = parameters.entityTargetLocationMapper().apply(target); - if (location == null) { - throw new IllegalStateException("mapper should not return null"); - } - Location oldLoc = target.getLocation(HANDLE_LOCATION); - target.teleport(location); - NMS.setNavigationTarget(handle, target, parameters.speed()); - target.teleport(oldLoc); - } - - @Override - public void stop() { - NMS.stopNavigation(navigation); - } - - @Override - public void update() { - NMS.updateNavigation(navigation); - } - } - - private static interface TargetNavigator { + public static interface TargetNavigator { void setPath(); void stop(); diff --git a/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java b/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java index 75e631d2c..a06814ef8 100644 --- a/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java +++ b/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java @@ -28,7 +28,7 @@ import net.citizensnpcs.Settings; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCRegistry; -import net.citizensnpcs.util.NMS; +import net.citizensnpcs.util.Util; /** * Tracks skin updates for players. @@ -90,10 +90,10 @@ public class SkinUpdateTracker { double deltaX = skinLoc.getX() - playerLoc.getX(); double deltaZ = skinLoc.getZ() - playerLoc.getZ(); double angle = Math.atan2(deltaX, deltaZ); - float skinYaw = NMS.clampYaw(-(float) Math.toDegrees(angle)); - float playerYaw = NMS.clampYaw(playerLoc.getYaw()); - float upperBound = NMS.clampYaw(playerYaw + FIELD_OF_VIEW); - float lowerBound = NMS.clampYaw(playerYaw - FIELD_OF_VIEW); + float skinYaw = Util.clampYaw(-(float) Math.toDegrees(angle)); + float playerYaw = Util.clampYaw(playerLoc.getYaw()); + float upperBound = Util.clampYaw(playerYaw + FIELD_OF_VIEW); + float lowerBound = Util.clampYaw(playerYaw - FIELD_OF_VIEW); if (upperBound == -180.0 && playerYaw > 0) { upperBound = 0; } @@ -156,7 +156,7 @@ public class SkinUpdateTracker { if (entity == null) return null; - return NMS.getSkinnable(entity); + return entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null; } // get a players tracker, create new one if not exists. @@ -411,10 +411,10 @@ public class SkinUpdateTracker { player.getLocation(this.location); if (rotationCount < 3) { float rotationDegrees = Settings.Setting.NPC_SKIN_ROTATION_UPDATE_DEGREES.asFloat(); - float yaw = NMS.clampYaw(this.location.getYaw()); + float yaw = Util.clampYaw(this.location.getYaw()); this.startYaw = yaw; - this.upperBound = NMS.clampYaw(yaw + rotationDegrees); - this.lowerBound = NMS.clampYaw(yaw - rotationDegrees); + this.upperBound = Util.clampYaw(yaw + rotationDegrees); + this.lowerBound = Util.clampYaw(yaw - rotationDegrees); if (upperBound == -180.0 && startYaw > 0) { upperBound = 0; } @@ -430,7 +430,7 @@ public class SkinUpdateTracker { } if (rotationCount < 3) { - float yaw = NMS.clampYaw(currentLoc.getYaw()); + float yaw = Util.clampYaw(currentLoc.getYaw()); boolean hasRotated; if (startYaw - 90 < -180 || startYaw + 90 > 180) { hasRotated = yaw > lowerBound && yaw < upperBound; diff --git a/src/main/java/net/citizensnpcs/trait/Gravity.java b/src/main/java/net/citizensnpcs/trait/Gravity.java index 14ccfd74e..4a151b545 100644 --- a/src/main/java/net/citizensnpcs/trait/Gravity.java +++ b/src/main/java/net/citizensnpcs/trait/Gravity.java @@ -6,7 +6,6 @@ import org.bukkit.util.Vector; import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; -import net.citizensnpcs.npc.entity.EntityHumanNPC.PlayerNPC; @TraitName("gravity") public class Gravity extends Trait implements Toggleable { @@ -21,12 +20,15 @@ public class Gravity extends Trait implements Toggleable { enabled = gravitate; } + public boolean hasGravity() { + return enabled; + } + @Override public void run() { if (!npc.isSpawned()) return; if (npc.getEntity() instanceof Player) { - ((PlayerNPC) npc.getEntity()).setGravityEnabled(!enabled); return; } if (!enabled || npc.getNavigator().isNavigating()) diff --git a/src/main/java/net/citizensnpcs/trait/SkinLayers.java b/src/main/java/net/citizensnpcs/trait/SkinLayers.java index 9c04de8ce..841ed500c 100644 --- a/src/main/java/net/citizensnpcs/trait/SkinLayers.java +++ b/src/main/java/net/citizensnpcs/trait/SkinLayers.java @@ -4,7 +4,6 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.npc.skin.SkinnableEntity; -import net.citizensnpcs.util.NMS; @TraitName("skinlayers") public class SkinLayers extends Trait { @@ -130,7 +129,8 @@ public class SkinLayers extends Trait { if (!npc.isSpawned()) return; - SkinnableEntity skinnable = NMS.getSkinnable(npc.getEntity()); + SkinnableEntity skinnable = npc.getEntity() instanceof SkinnableEntity ? (SkinnableEntity) npc.getEntity() + : null; if (skinnable == null) return; diff --git a/src/main/java/net/citizensnpcs/util/ByIdArray.java b/src/main/java/net/citizensnpcs/util/ByIdArray.java deleted file mode 100644 index 233d633dd..000000000 --- a/src/main/java/net/citizensnpcs/util/ByIdArray.java +++ /dev/null @@ -1,213 +0,0 @@ -package net.citizensnpcs.util; - -import java.util.Arrays; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.NoSuchElementException; - -@Deprecated -public class ByIdArray implements Iterable { - private final int capacity; - private Object[] elementData; - private int highest = Integer.MIN_VALUE; - private int lowest = Integer.MAX_VALUE; - private int modCount; - private int size; - - public ByIdArray() { - this(100); - } - - public ByIdArray(int capacity) { - if (capacity < 0) - throw new IllegalArgumentException("Capacity cannot be less than 0."); - this.capacity = capacity; - elementData = new Object[capacity]; - } - - public int add(T t) { - int index = 0; - if (elementData[0] == null) { - put(index, t); - return index; - } - while (elementData[index++] != null) { - if (index >= elementData.length) { - ensureCapacity(elementData.length + 1); - index = elementData.length - 1; - } - } - put(index, t); - return index; - } - - public void clear() { - modCount = highest = size = lowest = 0; - elementData = new Object[capacity]; - } - - public boolean contains(int index) { - return elementData.length > index && elementData[index] != null; - } - - public void ensureCapacity(int minCapacity) { // from ArrayList - int oldCapacity = elementData.length; - if (minCapacity > oldCapacity) { - int newCapacity = (oldCapacity * 3) / 2 + 1; - if (newCapacity < minCapacity) - newCapacity = minCapacity; - elementData = Arrays.copyOf(elementData, newCapacity); - } - } - - private void fastRemove(int index) { - ++modCount; - if (index == highest) - recalcHighest(); - if (index == lowest) - recalcLowest(); - elementData[index] = null; - --size; - } - - @SuppressWarnings("unchecked") - public T get(int index) { - if (index >= elementData.length) - return null; - return (T) elementData[index]; - } - - @Override - public Iterator iterator() { - return new Itr2(); - } - - public void put(int index, T t) { - if (t == null) - throw new IllegalArgumentException("can't insert a null object"); - ++modCount; - if (index > highest) { - highest = index; - } - if (index < lowest) { - lowest = index; - } - - ensureCapacity(index + 2); - - elementData[index] = t; - ++size; - } - - private void recalcHighest() { - highest = elementData.length - 1; - while (highest != 0 && elementData[--highest] == null) { - ; - } - } - - private void recalcLowest() { - lowest = 0; - while (elementData.length > lowest && elementData[lowest++] == null) { - ; - } - } - - public T remove(int index) { - if (index > elementData.length || elementData[index] == null) { - return null; - } - @SuppressWarnings("unchecked") - T prev = (T) elementData[index]; - elementData[index] = null; - --size; - ++modCount; - - if (index >= highest) { - recalcHighest(); - } - if (index <= lowest) { - recalcLowest(); - } - return prev; - } - - public int size() { - return size; - } - - public void trimToSize() { - if (elementData.length > highest) { - elementData = Arrays.copyOf(elementData, highest + 1); - } - } - - private class Itr2 implements Iterator { - int cursor; - int expectedModCount = modCount; - int lastRet = -1; - - public Itr2() { - if (size > 0) { - if (lowest > highest || highest == Integer.MIN_VALUE || highest >= elementData.length - || elementData[highest] == null) { - recalcHighest(); - } - if (lowest > highest || lowest >= elementData.length || elementData[lowest] == null) { - recalcLowest(); - } - cursor = lowest; - } - } - - private void advance() { - do { - cursor++; - } while (cursor != highest + 1 && elementData[cursor] == null); - } - - final void checkForComodification() { - if (modCount != expectedModCount) - throw new ConcurrentModificationException(); - } - - @Override - public boolean hasNext() { - return size > 0 && highest >= cursor; - } - - @Override - @SuppressWarnings("unchecked") - public T next() { - checkForComodification(); - int i = cursor; - if (cursor > highest) - throw new NoSuchElementException(); - Object[] elementData = ByIdArray.this.elementData; - if (i >= elementData.length) - throw new ConcurrentModificationException(); - advance(); - return (T) elementData[lastRet = i]; - } - - @Override - public void remove() { - if (lastRet < 0) - throw new IllegalStateException(); - checkForComodification(); - - try { - ByIdArray.this.fastRemove(lastRet); - cursor = lastRet; - lastRet = -1; - expectedModCount = modCount; - } catch (IndexOutOfBoundsException ex) { - throw new ConcurrentModificationException(); - } - } - } - - public static ByIdArray create() { - return new ByIdArray(); - } -} \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index a5fbaadff..4e8a948ee 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -1,210 +1,48 @@ package net.citizensnpcs.util; -import java.lang.reflect.Constructor; import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.SocketAddress; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.WeakHashMap; -import javax.annotation.Nullable; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; -import org.bukkit.craftbukkit.v1_10_R1.CraftServer; -import org.bukkit.craftbukkit.v1_10_R1.CraftSound; -import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_10_R1.boss.CraftBossBar; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftWither; -import org.bukkit.craftbukkit.v1_10_R1.event.CraftEventFactory; -import org.bukkit.entity.EntityType; +import org.bukkit.entity.Entity; import org.bukkit.entity.FishHook; import org.bukkit.entity.Horse; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.entity.Wither; -import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.plugin.PluginLoadOrder; -import com.google.common.base.Function; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfileRepository; -import com.mojang.authlib.HttpAuthenticationService; -import com.mojang.authlib.minecraft.MinecraftSessionService; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; -import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService; -import com.mojang.authlib.yggdrasil.response.MinecraftProfilePropertiesResponse; -import com.mojang.util.UUIDTypeAdapter; +import net.citizensnpcs.api.ai.NavigatorParameters; import net.citizensnpcs.api.command.exception.CommandException; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCRegistry; import net.citizensnpcs.api.util.Messaging; -import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.npc.entity.EntityHumanNPC; -import net.citizensnpcs.npc.network.EmptyChannel; +import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator; +import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator; import net.citizensnpcs.npc.skin.SkinnableEntity; -import net.citizensnpcs.util.nms.PlayerlistTrackerEntry; -import net.minecraft.server.v1_10_R1.AttributeInstance; -import net.minecraft.server.v1_10_R1.AxisAlignedBB; -import net.minecraft.server.v1_10_R1.Block; -import net.minecraft.server.v1_10_R1.BlockPosition; -import net.minecraft.server.v1_10_R1.BossBattleServer; -import net.minecraft.server.v1_10_R1.ControllerJump; -import net.minecraft.server.v1_10_R1.DamageSource; -import net.minecraft.server.v1_10_R1.DataWatcherObject; -import net.minecraft.server.v1_10_R1.EnchantmentManager; -import net.minecraft.server.v1_10_R1.EnderDragonBattle; -import net.minecraft.server.v1_10_R1.Entity; -import net.minecraft.server.v1_10_R1.EntityEnderDragon; -import net.minecraft.server.v1_10_R1.EntityFishingHook; -import net.minecraft.server.v1_10_R1.EntityHorse; -import net.minecraft.server.v1_10_R1.EntityHuman; -import net.minecraft.server.v1_10_R1.EntityInsentient; -import net.minecraft.server.v1_10_R1.EntityLiving; -import net.minecraft.server.v1_10_R1.EntityMinecartAbstract; -import net.minecraft.server.v1_10_R1.EntityPlayer; -import net.minecraft.server.v1_10_R1.EntityPolarBear; -import net.minecraft.server.v1_10_R1.EntityRabbit; -import net.minecraft.server.v1_10_R1.EntityTameableAnimal; -import net.minecraft.server.v1_10_R1.EntityTracker; -import net.minecraft.server.v1_10_R1.EntityTrackerEntry; -import net.minecraft.server.v1_10_R1.EntityTypes; -import net.minecraft.server.v1_10_R1.EntityWither; -import net.minecraft.server.v1_10_R1.GenericAttributes; -import net.minecraft.server.v1_10_R1.MathHelper; -import net.minecraft.server.v1_10_R1.MinecraftKey; -import net.minecraft.server.v1_10_R1.MobEffects; -import net.minecraft.server.v1_10_R1.NavigationAbstract; -import net.minecraft.server.v1_10_R1.NetworkManager; -import net.minecraft.server.v1_10_R1.Packet; -import net.minecraft.server.v1_10_R1.PacketPlayOutEntityTeleport; -import net.minecraft.server.v1_10_R1.PacketPlayOutPlayerInfo; -import net.minecraft.server.v1_10_R1.PathfinderGoalSelector; -import net.minecraft.server.v1_10_R1.SoundEffect; -import net.minecraft.server.v1_10_R1.Vec3D; -import net.minecraft.server.v1_10_R1.World; -import net.minecraft.server.v1_10_R1.WorldServer; -@SuppressWarnings("unchecked") public class NMS { - private NMS() { // util class } public static boolean addEntityToWorld(org.bukkit.entity.Entity entity, SpawnReason custom) { - return getHandle(entity).world.addEntity(getHandle(entity), custom); + return BRIDGE.addEntityToWorld(entity, custom); } public static void addOrRemoveFromPlayerList(org.bukkit.entity.Entity entity, boolean remove) { - if (entity == null) - return; - EntityHuman handle = (EntityHuman) getHandle(entity); - if (handle.world == null) - return; - if (remove) { - handle.world.players.remove(handle); - } else if (!handle.world.players.contains(handle)) { - handle.world.players.add(handle); - } - PlayerUpdateTask.addOrRemove(entity, remove); - } - - public static boolean addToWorld(org.bukkit.World world, org.bukkit.entity.Entity entity, - CreatureSpawnEvent.SpawnReason reason) { - Preconditions.checkNotNull(world); - Preconditions.checkNotNull(entity); - Preconditions.checkNotNull(reason); - - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return ((CraftWorld) world).getHandle().addEntity(nmsEntity, reason); - } - - public static void attack(EntityLiving handle, Entity target) { - if (handle instanceof EntityPlayer) { - EntityPlayer humanHandle = (EntityPlayer) handle; - humanHandle.attack(target); - PlayerAnimation.ARM_SWING.play(humanHandle.getBukkitEntity()); - return; - } - AttributeInstance attackDamage = handle.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE); - float f = (float) (attackDamage == null ? 1 : attackDamage.getValue()); - int i = 0; - - if (target instanceof EntityLiving) { - f += EnchantmentManager.a(handle.getItemInMainHand(), ((EntityLiving) target).getMonsterType()); - i += EnchantmentManager.a(handle); - } - - boolean flag = target.damageEntity(DamageSource.mobAttack(handle), f); - - if (!flag) - return; - if (i > 0) { - target.g(-Math.sin(handle.yaw * Math.PI / 180.0F) * i * 0.5F, 0.1D, - Math.cos(handle.yaw * Math.PI / 180.0F) * i * 0.5F); - handle.motX *= 0.6D; - handle.motZ *= 0.6D; - } - - int fireAspectLevel = EnchantmentManager.getFireAspectEnchantmentLevel(handle); - - if (fireAspectLevel > 0) { - target.setOnFire(fireAspectLevel * 4); - } + BRIDGE.addOrRemoveFromPlayerList(entity, remove); } public static void attack(LivingEntity attacker, LivingEntity bukkitTarget) { - attack(NMS.getHandle(attacker), NMS.getHandle(bukkitTarget)); - } - - public static void changeWorlds(org.bukkit.entity.Entity entity, org.bukkit.World world) { - getHandle(entity).world = ((CraftWorld) world).getHandle(); - } - - public static float clampYaw(float yaw) { - while (yaw < -180.0F) { - yaw += 360.0F; - } - - while (yaw >= 180.0F) { - yaw -= 360.0F; - } - return yaw; - } - - public static void clearGoals(PathfinderGoalSelector... goalSelectors) { - if (GOAL_FIELD == null || goalSelectors == null) - return; - for (PathfinderGoalSelector selector : goalSelectors) { - try { - Collection list = (Collection) NMS.GOAL_FIELD.get(selector); - list.clear(); - } catch (Exception e) { - Messaging.logTr(Messages.ERROR_CLEARING_GOALS, e.getLocalizedMessage()); - } - } + BRIDGE.attack(attacker, bukkitTarget); } /* @@ -212,235 +50,15 @@ public class NMS { * an Exception like it should. */ public static GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) throws Exception { - if (Bukkit.isPrimaryThread()) - throw new IllegalStateException("NMS.fillProfileProperties cannot be invoked from the main thread."); - - MinecraftSessionService sessionService = ((CraftServer) Bukkit.getServer()).getServer().ay(); - - YggdrasilAuthenticationService auth = ((YggdrasilMinecraftSessionService) sessionService) - .getAuthenticationService(); - - URL url = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/profile/" - + UUIDTypeAdapter.fromUUID(profile.getId())); - - url = HttpAuthenticationService.concatenateURL(url, "unsigned=" + !requireSecure); - - MinecraftProfilePropertiesResponse response = (MinecraftProfilePropertiesResponse) MAKE_REQUEST.invoke(auth, - url, null, MinecraftProfilePropertiesResponse.class); - if (response == null) - return profile; - - GameProfile result = new GameProfile(response.getId(), response.getName()); - result.getProperties().putAll(response.getProperties()); - profile.getProperties().putAll(response.getProperties()); - - return result; - } - - public static void flyingMoveLogic(EntityLiving entity, float f, float f1) { - if ((entity.ct()) || (entity.bA())) { - if ((entity.isInWater()) - && ((!(entity instanceof EntityHuman)) || (!((EntityHuman) entity).abilities.isFlying))) { - double d1 = entity.locY; - float f4 = entity instanceof EntityPolarBear ? 0.98F : 0.8F; - float f3 = 0.02F; - float f2 = EnchantmentManager.d(entity); - if (f2 > 3.0F) { - f2 = 3.0F; - } - if (!entity.onGround) { - f2 *= 0.5F; - } - if (f2 > 0.0F) { - f4 += (0.54600006F - f4) * f2 / 3.0F; - f3 += (entity.cp() - f3) * f2 / 3.0F; - } - entity.a(f, f1, f3); - entity.move(entity.motX, entity.motY, entity.motZ); - entity.motX *= f4; - entity.motY *= 0.800000011920929D; - entity.motZ *= f4; - if (!entity.isNoGravity()) { - entity.motY -= 0.02D; - } - if ((entity.positionChanged) - && (entity.c(entity.motX, entity.motY + 0.6000000238418579D - entity.locY + d1, entity.motZ))) { - entity.motY = 0.30000001192092896D; - } - } else if ((entity.ao()) - && ((!(entity instanceof EntityHuman)) || (!((EntityHuman) entity).abilities.isFlying))) { - double d1 = entity.locY; - entity.a(f, f1, 0.02F); - entity.move(entity.motX, entity.motY, entity.motZ); - entity.motX *= 0.5D; - entity.motY *= 0.5D; - entity.motZ *= 0.5D; - if (!entity.isNoGravity()) { - entity.motY -= 0.02D; - } - if ((entity.positionChanged) - && (entity.c(entity.motX, entity.motY + 0.6000000238418579D - entity.locY + d1, entity.motZ))) { - entity.motY = 0.30000001192092896D; - } - } else if (entity.cG()) { - if (entity.motY > -0.5D) { - entity.fallDistance = 1.0F; - } - Vec3D vec3d = entity.aB(); - float f5 = entity.pitch * 0.017453292F; - - double d0 = Math.sqrt(vec3d.x * vec3d.x + vec3d.z * vec3d.z); - double d2 = Math.sqrt(entity.motX * entity.motX + entity.motZ * entity.motZ); - double d3 = vec3d.b(); - float f6 = MathHelper.cos(f5); - - f6 = (float) (f6 * f6 * Math.min(1.0D, d3 / 0.4D)); - entity.motY += -0.08D + f6 * 0.06D; - if ((entity.motY < 0.0D) && (d0 > 0.0D)) { - double d4 = entity.motY * -0.1D * f6; - entity.motY += d4; - entity.motX += vec3d.x * d4 / d0; - entity.motZ += vec3d.z * d4 / d0; - } - if (f5 < 0.0F) { - double d4 = d2 * -MathHelper.sin(f5) * 0.04D; - entity.motY += d4 * 3.2D; - entity.motX -= vec3d.x * d4 / d0; - entity.motZ -= vec3d.z * d4 / d0; - } - if (d0 > 0.0D) { - entity.motX += (vec3d.x / d0 * d2 - entity.motX) * 0.1D; - entity.motZ += (vec3d.z / d0 * d2 - entity.motZ) * 0.1D; - } - entity.motX *= 0.9900000095367432D; - entity.motY *= 0.9800000190734863D; - entity.motZ *= 0.9900000095367432D; - entity.move(entity.motX, entity.motY, entity.motZ); - if ((entity.positionChanged) && (!entity.world.isClientSide)) { - double d4 = Math.sqrt(entity.motX * entity.motX + entity.motZ * entity.motZ); - double d5 = d2 - d4; - float f7 = (float) (d5 * 10.0D - 3.0D); - if (f7 > 0.0F) { - entity.a(entity.e((int) f7), 1.0F, 1.0F); - entity.damageEntity(DamageSource.FLY_INTO_WALL, f7); - } - } - if ((entity.onGround) && (!entity.world.isClientSide) && (entity.getFlag(7)) - && (!CraftEventFactory.callToggleGlideEvent(entity, false).isCancelled())) { - entity.setFlag(7, false); - } - } else { - float f8 = 0.91F; - BlockPosition.PooledBlockPosition blockposition_pooledblockposition = BlockPosition.PooledBlockPosition - .d(entity.locX, entity.getBoundingBox().b - 1.0D, entity.locZ); - if (entity.onGround) { - f8 = entity.world.getType(blockposition_pooledblockposition).getBlock().frictionFactor * 0.91F; - } - float f4 = 0.16277136F / (f8 * f8 * f8); - float f3; - if (entity.onGround) { - f3 = entity.cp() * f4; - } else { - f3 = entity.aS; - } - entity.a(f, f1, f3); - f8 = 0.91F; - if (entity.onGround) { - f8 = entity.world.getType(blockposition_pooledblockposition.e(entity.locX, - entity.getBoundingBox().b - 1.0D, entity.locZ)).getBlock().frictionFactor * 0.91F; - } - if (entity.m_()) { - entity.motX = MathHelper.a(entity.motX, -0.15000000596046448D, 0.15000000596046448D); - entity.motZ = MathHelper.a(entity.motZ, -0.15000000596046448D, 0.15000000596046448D); - entity.fallDistance = 0.0F; - if (entity.motY < -0.15D) { - entity.motY = -0.15D; - } - boolean flag = (entity.isSneaking()) && ((entity instanceof EntityHuman)); - if ((flag) && (entity.motY < 0.0D)) { - entity.motY = 0.0D; - } - } - entity.move(entity.motX, entity.motY, entity.motZ); - if ((entity.positionChanged) && (entity.m_())) { - entity.motY = 0.2D; - } - if (entity.hasEffect(MobEffects.LEVITATION)) { - entity.motY += (0.05D * (entity.getEffect(MobEffects.LEVITATION).getAmplifier() + 1) - entity.motY) - * 0.2D; - } else { - blockposition_pooledblockposition.e(entity.locX, 0.0D, entity.locZ); - if ((entity.world.isClientSide) && ((!entity.world.isLoaded(blockposition_pooledblockposition)) - || (!entity.world.getChunkAtWorldCoords(blockposition_pooledblockposition).p()))) { - if (entity.locY > 0.0D) { - entity.motY = -0.1D; - } else { - entity.motY = 0.0D; - } - } else if (!entity.isNoGravity()) { - entity.motY -= 0.08D; - } - } - entity.motY *= 0.9800000190734863D; - entity.motX *= f8; - entity.motZ *= f8; - blockposition_pooledblockposition.t(); - } - } - entity.aG = entity.aH; - double d1 = entity.locX - entity.lastX; - double d0 = entity.locZ - entity.lastZ; - float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; - if (f2 > 1.0F) { - f2 = 1.0F; - } - entity.aH += (f2 - entity.aH) * 0.4F; - entity.aI += entity.aH; + return BRIDGE.fillProfileProperties(profile, requireSecure); } public static BossBar getBossBar(org.bukkit.entity.Entity entity) { - BossBattleServer bserver = null; - try { - if (entity.getType() == EntityType.WITHER) { - bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMS.getHandle(entity)); - } else if (entity.getType() == EntityType.ENDER_DRAGON) { - bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD - .get(ENDERDRAGON_BATTLE_FIELD.get(NMS.getHandle(entity))); - } - } catch (Exception e) { - } - if (bserver == null) { - return null; - } - BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10); - try { - CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver); - } catch (Exception e) { - } - return ret; + return BRIDGE.getBossBar(entity); } public static BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) { - AxisAlignedBB bb = NMS.getHandle(handle).getBoundingBox(); - return new BoundingBox(bb.a, bb.b, bb.c, bb.d, bb.e, bb.f); - } - - public static org.bukkit.entity.Entity getBukkitVehicle(org.bukkit.entity.Entity entity) { - Entity vehicle = getVehicle(entity); - return vehicle == null ? null : vehicle.getBukkitEntity(); - } - - @SuppressWarnings("deprecation") - private static Constructor getCustomEntityConstructor(Class clazz, EntityType type) - throws SecurityException, NoSuchMethodException { - Constructor constructor = ENTITY_CONSTRUCTOR_CACHE.get(clazz); - if (constructor == null) { - constructor = clazz.getConstructor(World.class); - constructor.setAccessible(true); - ENTITY_CLASS_TO_INT.put(clazz, (int) type.getTypeId()); - ENTITY_CONSTRUCTOR_CACHE.put(clazz, constructor); - } - return constructor; + return BRIDGE.getBoundingBox(handle); } public static Field getField(Class clazz, String field) { @@ -457,606 +75,187 @@ public class NMS { } public static GameProfileRepository getGameProfileRepository() { - return ((CraftServer) Bukkit.getServer()).getServer().getGameProfileRepository(); - } - - public static EntityLiving getHandle(LivingEntity entity) { - return (EntityLiving) getHandle((org.bukkit.entity.Entity) entity); - } - - public static Entity getHandle(org.bukkit.entity.Entity entity) { - if (!(entity instanceof CraftEntity)) - return null; - return ((CraftEntity) entity).getHandle(); - } - - public static float getHeadYaw(EntityLiving handle) { - return handle.aP; + return BRIDGE.getGameProfileRepository(); } public static float getHorizontalMovement(org.bukkit.entity.Entity bukkitEntity) { - if (!bukkitEntity.getType().isAlive()) - return Float.NaN; - EntityLiving handle = NMS.getHandle((LivingEntity) bukkitEntity); - return handle.bg; + return BRIDGE.getHorizontalMovement(bukkitEntity); } - public static NavigationAbstract getNavigation(org.bukkit.entity.Entity entity) { - Entity handle = NMS.getHandle(entity); - return handle instanceof EntityInsentient ? ((EntityInsentient) handle).getNavigation() - : handle instanceof EntityHumanNPC ? ((EntityHumanNPC) handle).getNavigation() : null; + public static NPC getNPC(Entity entity) { + return BRIDGE.getNPC(entity); } public static List getPassengers(org.bukkit.entity.Entity entity) { - return Lists.transform(NMS.getHandle(entity).passengers, new Function() { - @Override - public org.bukkit.entity.Entity apply(Entity input) { - return input.getBukkitEntity(); - } - }); + return BRIDGE.getPassengers(entity); } public static GameProfile getProfile(SkullMeta meta) { - if (SKULL_PROFILE_FIELD == null) { - try { - SKULL_PROFILE_FIELD = meta.getClass().getDeclaredField("profile"); - SKULL_PROFILE_FIELD.setAccessible(true); - } catch (Exception e) { - return null; - } - } - try { - return (GameProfile) SKULL_PROFILE_FIELD.get(meta); - } catch (Exception e) { - return null; - } - } - - public static DataWatcherObject getRabbitTypeField() { - if (RABBIT_FIELD == null) - return null; - try { - return (DataWatcherObject) RABBIT_FIELD.get(null); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return null; - } - - @Nullable - public static SkinnableEntity getSkinnable(org.bukkit.entity.Entity entity) { - Preconditions.checkNotNull(entity); - - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - if (nmsEntity instanceof SkinnableEntity) { - return (SkinnableEntity) nmsEntity; - } - return null; + return BRIDGE.getProfile(meta); } public static String getSound(String flag) throws CommandException { - try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); - if (ret == null) - throw new CommandException(Messages.INVALID_SOUND); - return ret; - } catch (Exception e) { - throw new CommandException(Messages.INVALID_SOUND); - } - } - - public static SoundEffect getSoundEffect(NPC npc, SoundEffect snd, String meta) { - return npc == null || !npc.data().has(meta) ? snd - : SoundEffect.a.get(new MinecraftKey(npc.data().get(meta, snd == null ? "" : snd.toString()))); + return BRIDGE.getSound(flag); } public static float getSpeedFor(NPC npc) { - if (!npc.isSpawned() || !(npc.getEntity() instanceof LivingEntity)) - return DEFAULT_SPEED; - EntityLiving handle = NMS.getHandle((LivingEntity) npc.getEntity()); - if (handle == null) - return DEFAULT_SPEED; - return DEFAULT_SPEED; - // return (float) - // handle.getAttributeInstance(GenericAttributes.d).getValue(); + return BRIDGE.getSpeedFor(npc); } public static float getStepHeight(org.bukkit.entity.Entity entity) { - return NMS.getHandle(entity).P; + return BRIDGE.getStepHeight(entity); } - public static Entity getVehicle(org.bukkit.entity.Entity entity) { - Entity e = getHandle(entity).getVehicle(); - return e == getHandle(entity) ? null : e; + public static MCNavigator getTargetNavigator(Entity entity, Location dest, NavigatorParameters params) { + return BRIDGE.getTargetNavigator(entity, dest, params); + } + + public static TargetNavigator getTargetNavigator(org.bukkit.entity.Entity entity, org.bukkit.entity.Entity target, + NavigatorParameters parameters) { + return BRIDGE.getTargetNavigator(entity, target, parameters); + } + + public static org.bukkit.entity.Entity getVehicle(org.bukkit.entity.Entity entity) { + return BRIDGE.getVehicle(entity); } public static float getVerticalMovement(org.bukkit.entity.Entity bukkitEntity) { - if (!bukkitEntity.getType().isAlive()) - return Float.NaN; - EntityLiving handle = NMS.getHandle((LivingEntity) bukkitEntity); - return handle.bf; - } - - public static void initNetworkManager(NetworkManager network) { - if (NETWORK_ADDRESS == null) - return; - try { - network.channel = new EmptyChannel(null); - NETWORK_ADDRESS.set(network, new SocketAddress() { - private static final long serialVersionUID = 8207338859896320185L; - }); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - - public static boolean inWater(org.bukkit.entity.Entity entity) { - Entity mcEntity = getHandle(entity); - if (mcEntity == null) - return false; - return mcEntity.ak() || mcEntity.ao(); - } - - public static boolean isNavigationFinished(NavigationAbstract navigation) { - return navigation.n(); + return BRIDGE.getVerticalMovement(bukkitEntity); } public static boolean isOnGround(org.bukkit.entity.Entity entity) { - return getHandle(entity).onGround; + return BRIDGE.isOnGround(entity); } - public static boolean isPassenger(org.bukkit.entity.Entity entity) { - return NMS.getHandle(entity).isPassenger(); + public static void loadBridge(String rev) throws Exception { + BRIDGE = (NMSBridge) Class.forName("net.citizensnpcs.nms.v" + rev + ".util.NMSImpl").getConstructor() + .newInstance(); } public static void loadPlugins() { - ((CraftServer) Bukkit.getServer()).enablePlugins(PluginLoadOrder.POSTWORLD); + BRIDGE.loadPlugins(); } public static void look(org.bukkit.entity.Entity entity, float yaw, float pitch) { - Entity handle = getHandle(entity); - if (handle == null) - return; - yaw = clampYaw(yaw); - handle.yaw = yaw; - setHeadYaw(handle, yaw); - handle.pitch = pitch; + BRIDGE.look(entity, yaw, pitch); } public static void look(org.bukkit.entity.Entity bhandle, org.bukkit.entity.Entity btarget) { - Entity handle = NMS.getHandle(bhandle), target = NMS.getHandle(btarget); - if (handle instanceof EntityInsentient) { - ((EntityInsentient) handle).getControllerLook().a(target, 10.0F, ((EntityInsentient) handle).N()); - } else if (handle instanceof EntityHumanNPC) { - ((EntityHumanNPC) handle).setTargetLook(target, 10F, 40F); - } - } - - @SuppressWarnings("deprecation") - public static void minecartItemLogic(EntityMinecartAbstract minecart) { - NPC npc = ((NPCHolder) minecart).getNPC(); - if (npc == null) - return; - Material mat = Material.getMaterial(npc.data().get(NPC.MINECART_ITEM_METADATA, "")); - int data = npc.data().get(NPC.MINECART_ITEM_DATA_METADATA, 0); - int offset = npc.data().get(NPC.MINECART_OFFSET_METADATA, 0); - minecart.a(mat != null); - if (mat != null) { - minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); - } - minecart.setDisplayBlockOffset(offset); - } - - public static float modifiedSpeed(float baseSpeed, NPC npc) { - return npc == null ? baseSpeed : baseSpeed * npc.getNavigator().getLocalParameters().speedModifier(); + BRIDGE.look(bhandle, btarget); } public static void mount(org.bukkit.entity.Entity entity, org.bukkit.entity.Entity passenger) { - if (NMS.getHandle(passenger) == null) - return; - NMS.getHandle(passenger).startRiding(NMS.getHandle(entity)); + BRIDGE.mount(entity, passenger); } public static void openHorseScreen(Horse horse, Player equipper) { - EntityLiving handle = NMS.getHandle(horse); - EntityLiving equipperHandle = NMS.getHandle(equipper); - if (handle == null || equipperHandle == null) - return; - boolean wasTamed = horse.isTamed(); - horse.setTamed(true); - ((EntityHorse) handle).a((EntityHuman) equipperHandle); - horse.setTamed(wasTamed); + BRIDGE.openHorseScreen(horse, equipper); + } + + public static void playAnimation(PlayerAnimation animation, Player player, int radius) { + BRIDGE.playAnimation(animation, player, radius); } public static void registerEntityClass(Class clazz) { - if (ENTITY_CLASS_TO_INT == null || ENTITY_CLASS_TO_INT.containsKey(clazz)) - return; - Class search = clazz; - while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) { - if (!ENTITY_CLASS_TO_INT.containsKey(search)) - continue; - int code = ENTITY_CLASS_TO_INT.get(search); - ENTITY_CLASS_TO_INT.put(clazz, code); - ENTITY_CLASS_TO_NAME.put(clazz, ENTITY_CLASS_TO_NAME.get(search)); - return; - } - throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString()); + BRIDGE.registerEntityClass(clazz); } public static void removeFromServerPlayerList(Player player) { - EntityPlayer handle = (EntityPlayer) NMS.getHandle(player); - ((CraftServer) Bukkit.getServer()).getHandle().players.remove(handle); + BRIDGE.removeFromServerPlayerList(player); } public static void removeFromWorld(org.bukkit.entity.Entity entity) { - Preconditions.checkNotNull(entity); - - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.world.removeEntity(nmsEntity); + BRIDGE.removeFromWorld(entity); } public static void removeHookIfNecessary(NPCRegistry npcRegistry, FishHook entity) { - EntityFishingHook hook = (EntityFishingHook) NMS.getHandle(entity); - if (hook.hooked == null) - return; - NPC npc = npcRegistry.getNPC(hook.hooked.getBukkitEntity()); - if (npc == null) - return; - if (npc.isProtected()) { - hook.hooked = null; - hook.die(); - } + BRIDGE.removeHookIfNecessary(npcRegistry, entity); } - @SuppressWarnings("rawtypes") public static void replaceTrackerEntry(Player player) { - WorldServer server = (WorldServer) NMS.getHandle(player).getWorld(); - EntityTrackerEntry entry = server.getTracker().trackedEntities.get(player.getEntityId()); - if (entry == null) - return; - PlayerlistTrackerEntry replace = new PlayerlistTrackerEntry(entry); - server.getTracker().trackedEntities.a(player.getEntityId(), replace); - if (TRACKED_ENTITY_SET != null) { - try { - Set set = (Set) TRACKED_ENTITY_SET.get(server.getTracker()); - set.remove(entry); - set.add(replace); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - - public static void sendPacket(Player player, Packet packet) { - if (packet == null) - return; - ((EntityPlayer) NMS.getHandle(player)).playerConnection.sendPacket(packet); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet) { - NMS.sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList>(); - list.add(packet); - NMS.sendPacketsNearby(from, location, list, radius); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets) { - NMS.sendPacketsNearby(from, location, packets, 64); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { - radius *= radius; - final org.bukkit.World world = location.getWorld(); - for (Player ply : Bukkit.getServer().getOnlinePlayers()) { - if (ply == null || world != ply.getWorld() || (from != null && !ply.canSee(from))) { - continue; - } - if (location.distanceSquared(ply.getLocation(PACKET_CACHE_LOCATION)) > radius) { - continue; - } - for (Packet packet : packets) { - sendPacket(ply, packet); - } - } - } - - public static void sendPacketsNearby(Player from, Location location, Packet... packets) { - NMS.sendPacketsNearby(from, location, Arrays.asList(packets), 64); + BRIDGE.replaceTrackerEntry(player); } public static void sendPositionUpdate(Player excluding, org.bukkit.entity.Entity from, Location storedLocation) { - sendPacketNearby(excluding, storedLocation, new PacketPlayOutEntityTeleport(getHandle(from))); + BRIDGE.sendPositionUpdate(excluding, from, storedLocation); } public static void sendTabListAdd(Player recipient, Player listPlayer) { - Preconditions.checkNotNull(recipient); - Preconditions.checkNotNull(listPlayer); - - EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle(); - - sendPacket(recipient, - new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entity)); + BRIDGE.sendTabListAdd(recipient, listPlayer); } public static void sendTabListRemove(Player recipient, Collection skinnableNPCs) { - Preconditions.checkNotNull(recipient); - Preconditions.checkNotNull(skinnableNPCs); - - EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()]; - int i = 0; - for (SkinnableEntity skinnable : skinnableNPCs) { - entities[i] = (EntityPlayer) skinnable; - i++; - } - - sendPacket(recipient, - new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities)); + BRIDGE.sendTabListRemove(recipient, skinnableNPCs); } public static void sendTabListRemove(Player recipient, Player listPlayer) { - Preconditions.checkNotNull(recipient); - Preconditions.checkNotNull(listPlayer); - - EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle(); - - sendPacket(recipient, - new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity)); - } - - public static void sendToOnline(Packet... packets) { - Validate.notNull(packets, "packets cannot be null"); - for (Player player : Bukkit.getOnlinePlayers()) { - if (player == null || !player.isOnline()) - continue; - for (Packet packet : packets) { - sendPacket(player, packet); - } - } + BRIDGE.sendTabListRemove(recipient, listPlayer); } public static void setDestination(org.bukkit.entity.Entity entity, double x, double y, double z, float speed) { - Entity handle = NMS.getHandle(entity); - if (handle == null) - return; - if (handle instanceof EntityInsentient) { - ((EntityInsentient) handle).getControllerMove().a(x, y, z, speed); - } else if (handle instanceof EntityHumanNPC) { - ((EntityHumanNPC) handle).setMoveDestination(x, y, z, speed); - } - } - - public static void setHeadYaw(Entity en, float yaw) { - if (!(en instanceof EntityLiving)) - return; - EntityLiving handle = (EntityLiving) en; - yaw = clampYaw(yaw); - handle.aP = yaw; - if (!(handle instanceof EntityHuman)) - handle.aO = yaw; - handle.aQ = yaw; + BRIDGE.setDestination(entity, x, y, z, speed); } public static void setHeadYaw(org.bukkit.entity.Entity entity, float yaw) { - setHeadYaw(getHandle(entity), yaw); + BRIDGE.setHeadYaw(entity, yaw); } public static void setKnockbackResistance(org.bukkit.entity.LivingEntity entity, double d) { - EntityLiving handle = NMS.getHandle(entity); - handle.getAttributeInstance(GenericAttributes.c).setValue(d); + BRIDGE.setKnockbackResistance(entity, d); } public static void setNavigationTarget(org.bukkit.entity.Entity handle, org.bukkit.entity.Entity target, float speed) { - NMS.getNavigation(handle).a(NMS.getHandle(target), speed); + BRIDGE.setNavigationTarget(handle, target, speed); } public static void setProfile(SkullMeta meta, GameProfile profile) { - if (SKULL_PROFILE_FIELD == null) { - try { - SKULL_PROFILE_FIELD = meta.getClass().getDeclaredField("profile"); - SKULL_PROFILE_FIELD.setAccessible(true); - } catch (Exception e) { - return; - } - } - try { - SKULL_PROFILE_FIELD.set(meta, profile); - } catch (Exception e) { - } + BRIDGE.setProfile(meta, profile); } public static void setShouldJump(org.bukkit.entity.Entity entity) { - Entity handle = getHandle(entity); - if (handle == null) - return; - if (handle instanceof EntityInsentient) { - ControllerJump controller = ((EntityInsentient) handle).getControllerJump(); - controller.a(); - } else if (handle instanceof EntityHumanNPC) { - ((EntityHumanNPC) handle).setShouldJump(); - } + BRIDGE.setShouldJump(entity); } public static void setSitting(Tameable tameable, boolean sitting) { - ((EntityTameableAnimal) getHandle((LivingEntity) tameable)).setSitting(sitting); + BRIDGE.setSitting(tameable, sitting); } - public static void setSize(Entity entity, float f, float f1, boolean justCreated) { - if ((f != entity.width) || (f1 != entity.length)) { - float f2 = entity.width; - - entity.width = f; - entity.length = f1; - entity.a(new AxisAlignedBB(entity.getBoundingBox().a, entity.getBoundingBox().b, entity.getBoundingBox().c, - entity.getBoundingBox().a + entity.width, entity.getBoundingBox().b + entity.length, - entity.getBoundingBox().c + entity.width)); - if ((entity.width > f2) && (!justCreated) && (!entity.world.isClientSide)) - entity.move((f2 - entity.width) / 2, 0.0D, (f2 - entity.width) / 2); - } - } - - public static void setStepHeight(EntityLiving entity, float height) { - entity.P = height; + public static void setStepHeight(org.bukkit.entity.Entity entity, float height) { + BRIDGE.setStepHeight(entity, height); } public static void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d) { - if (!bukkitEntity.getType().isAlive()) - return; - EntityLiving handle = NMS.getHandle((LivingEntity) bukkitEntity); - handle.bf = (float) d; + BRIDGE.setVerticalMovement(bukkitEntity, d); } public static void setWitherCharged(Wither wither, boolean charged) { - EntityWither handle = ((CraftWither) wither).getHandle(); - handle.l(charged ? 20 : 0); + BRIDGE.setWitherCharged(wither, charged); } public static boolean shouldJump(org.bukkit.entity.Entity entity) { - if (JUMP_FIELD == null || !(entity instanceof LivingEntity)) - return false; - try { - return JUMP_FIELD.getBoolean(getHandle(entity)); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return false; + return BRIDGE.shouldJump(entity); } - public static org.bukkit.entity.Entity spawnCustomEntity(org.bukkit.World world, Location at, - Class clazz, EntityType type) { - World handle = ((CraftWorld) world).getHandle(); - Entity entity = null; - try { - Constructor constructor = getCustomEntityConstructor(clazz, type); - entity = (Entity) constructor.newInstance(handle); - } catch (Exception e) { - Messaging.logTr(Messages.ERROR_SPAWNING_CUSTOM_ENTITY, e.getMessage()); - return null; - } - entity.setLocation(at.getX(), at.getY(), at.getZ(), at.getYaw(), at.getPitch()); - handle.addEntity(entity); - entity.setLocation(at.getX(), at.getY(), at.getZ(), at.getYaw(), at.getPitch()); - return entity.getBukkitEntity(); - } - - public static void stopNavigation(NavigationAbstract navigation) { - navigation.n(); + public static boolean tick(Entity next) { + return BRIDGE.tick(next); } public static void trySwim(org.bukkit.entity.Entity entity) { - trySwim(entity, 0.04F); + BRIDGE.trySwim(entity); } public static void trySwim(org.bukkit.entity.Entity entity, float power) { - Entity handle = getHandle(entity); - if (RANDOM.nextFloat() < 0.8F && inWater(entity)) { - handle.motY += power; - } - } - - public static void updateAI(EntityLiving entity) { - if (entity instanceof EntityInsentient) { - EntityInsentient handle = (EntityInsentient) entity; - handle.getEntitySenses().a(); - NMS.updateNavigation(handle.getNavigation()); - handle.getControllerMove().c(); - handle.getControllerLook().a(); - handle.getControllerJump().b(); - } else if (entity instanceof EntityHumanNPC) { - ((EntityHumanNPC) entity).updateAI(); - } - } - - public static void updateNavigation(NavigationAbstract navigation) { - navigation.l(); + BRIDGE.trySwim(entity, power); } public static void updateNavigationWorld(org.bukkit.entity.Entity entity, org.bukkit.World world) { - if (NAVIGATION_WORLD_FIELD == null) - return; - Entity en = NMS.getHandle(entity); - if (en == null || !(en instanceof EntityInsentient)) - return; - EntityInsentient handle = (EntityInsentient) en; - World worldHandle = ((CraftWorld) world).getHandle(); - try { - NAVIGATION_WORLD_FIELD.set(handle.getNavigation(), worldHandle); - } catch (Exception e) { - Messaging.logTr(Messages.ERROR_UPDATING_NAVIGATION_WORLD, e.getMessage()); - } + BRIDGE.updateNavigationWorld(entity, world); } public static void updatePathfindingRange(NPC npc, float pathfindingRange) { - if (!npc.isSpawned() || !npc.getEntity().getType().isAlive()) - return; - EntityLiving en = NMS.getHandle((LivingEntity) npc.getEntity()); - if (!(en instanceof EntityInsentient)) { - if (en instanceof EntityHumanNPC) { - ((EntityHumanNPC) en).updatePathfindingRange(pathfindingRange); - } - return; - } - if (PATHFINDING_RANGE == null) - return; - EntityInsentient handle = (EntityInsentient) en; - NavigationAbstract navigation = handle.getNavigation(); - try { - AttributeInstance inst = (AttributeInstance) PATHFINDING_RANGE.get(navigation); - inst.setValue(pathfindingRange); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + BRIDGE.updatePathfindingRange(npc, pathfindingRange); } - private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = getField(CraftBossBar.class, "handle"); - private static final float DEFAULT_SPEED = 1F; - private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = getField(EnderDragonBattle.class, "c"); - private static final Field ENDERDRAGON_BATTLE_FIELD = getField(EntityEnderDragon.class, "bK"); - private static Map, Integer> ENTITY_CLASS_TO_INT; - private static Map, String> ENTITY_CLASS_TO_NAME; - private static final Map, Constructor> ENTITY_CONSTRUCTOR_CACHE = new WeakHashMap, Constructor>(); - private static Field GOAL_FIELD = getField(PathfinderGoalSelector.class, "b"); - private static final Field JUMP_FIELD = getField(EntityLiving.class, "be"); - private static Method MAKE_REQUEST; - private static Field NAVIGATION_WORLD_FIELD = getField(NavigationAbstract.class, "b"); - private static Field NETWORK_ADDRESS = getField(NetworkManager.class, "l"); - private static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0); - private static Field PATHFINDING_RANGE = getField(NavigationAbstract.class, "f"); - private static final Field RABBIT_FIELD = getField(EntityRabbit.class, "bx"); - private static final Random RANDOM = Util.getFastRandom(); - private static Field SKULL_PROFILE_FIELD; - private static Field TRACKED_ENTITY_SET = NMS.getField(EntityTracker.class, "c"); - private static final Field WITHER_BOSS_BAR_FIELD = getField(EntityWither.class, "bG"); - - static { - try { - Field field = getField(EntityTypes.class, "f"); - ENTITY_CLASS_TO_INT = (Map, Integer>) field.get(null); - field = getField(EntityTypes.class, "d"); - ENTITY_CLASS_TO_NAME = (Map, String>) field.get(null); - } catch (Exception e) { - Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage()); - } - - try { - MAKE_REQUEST = YggdrasilAuthenticationService.class.getDeclaredMethod("makeRequest", URL.class, - Object.class, Class.class); - MAKE_REQUEST.setAccessible(true); - } catch (Exception ex) { - ex.printStackTrace(); - } - } + private static NMSBridge BRIDGE; } diff --git a/src/main/java/net/citizensnpcs/util/NMSBridge.java b/src/main/java/net/citizensnpcs/util/NMSBridge.java new file mode 100644 index 000000000..de5c97481 --- /dev/null +++ b/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -0,0 +1,130 @@ +package net.citizensnpcs.util; + +import java.util.Collection; +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Entity; +import org.bukkit.entity.FishHook; +import org.bukkit.entity.Horse; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Wither; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.inventory.meta.SkullMeta; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.GameProfileRepository; + +import net.citizensnpcs.api.ai.NavigatorParameters; +import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.api.npc.NPCRegistry; +import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator; +import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator; +import net.citizensnpcs.npc.skin.SkinnableEntity; + +public interface NMSBridge { + public boolean addEntityToWorld(Entity entity, SpawnReason custom); + + public void addOrRemoveFromPlayerList(Entity entity, boolean remove); + + public void attack(LivingEntity attacker, LivingEntity target); + + public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure) throws Exception; + + public BossBar getBossBar(Entity entity); + + public BoundingBox getBoundingBox(Entity handle); + + public GameProfileRepository getGameProfileRepository(); + + public float getHorizontalMovement(Entity entity); + + public NPC getNPC(Entity entity); + + public List getPassengers(Entity entity); + + public GameProfile getProfile(SkullMeta meta); + + public String getSound(String flag) throws CommandException; + + public float getSpeedFor(NPC npc); + + public float getStepHeight(Entity entity); + + public TargetNavigator getTargetNavigator(Entity handle, Entity target, NavigatorParameters parameters); + + public MCNavigator getTargetNavigator(Entity entity, Location dest, NavigatorParameters params); + + public Entity getVehicle(Entity entity); + + public float getVerticalMovement(Entity entity); + + public boolean isOnGround(Entity entity); + + public void loadPlugins(); + + public void look(Entity from, Entity to); + + public void look(Entity entity, float yaw, float pitch); + + public void mount(Entity entity, Entity passenger); + + public void openHorseScreen(Horse horse, Player equipper); + + public void playAnimation(PlayerAnimation animation, Player player, int radius); + + public void registerEntityClass(Class clazz); + + public void removeFromServerPlayerList(Player player); + + public void removeFromWorld(org.bukkit.entity.Entity entity); + + public void removeHookIfNecessary(NPCRegistry npcRegistry, FishHook entity); + + public void replaceTrackerEntry(Player player); + + public void sendPositionUpdate(Player excluding, Entity from, Location storedLocation); + + public void sendTabListAdd(Player recipient, Player listPlayer); + + public void sendTabListRemove(Player recipient, Collection skinnableNPCs); + + public void sendTabListRemove(Player recipient, Player listPlayer); + + public void setDestination(Entity entity, double x, double y, double z, float speed); + + public void setHeadYaw(Entity entity, float yaw); + + public void setKnockbackResistance(LivingEntity entity, double d); + + public void setNavigationTarget(Entity handle, Entity target, float speed); + + public void setProfile(SkullMeta meta, GameProfile profile); + + public void setShouldJump(Entity entity); + + public void setSitting(Tameable tameable, boolean sitting); + + public void setStepHeight(Entity entity, float height); + + public void setVerticalMovement(Entity bukkitEntity, double d); + + public void setWitherCharged(Wither wither, boolean charged); + + public boolean shouldJump(Entity entity); + + public boolean tick(Entity next); + + public void trySwim(Entity entity); + + public void trySwim(Entity entity, float power); + + public void updateNavigationWorld(Entity entity, World world); + + public void updatePathfindingRange(NPC npc, float pathfindingRange); +} diff --git a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java index f202e4070..cf9dedb7e 100644 --- a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java +++ b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java @@ -1,183 +1,29 @@ package net.citizensnpcs.util; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.metadata.FixedMetadataValue; -import org.bukkit.scheduler.BukkitRunnable; - -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.npc.ai.NPCHolder; -import net.citizensnpcs.trait.ArmorStandTrait; -import net.minecraft.server.v1_10_R1.BlockPosition; -import net.minecraft.server.v1_10_R1.EntityPlayer; -import net.minecraft.server.v1_10_R1.EnumHand; -import net.minecraft.server.v1_10_R1.Packet; -import net.minecraft.server.v1_10_R1.PacketPlayOutAnimation; -import net.minecraft.server.v1_10_R1.PacketPlayOutBed; -import net.minecraft.server.v1_10_R1.PacketPlayOutEntityMetadata; public enum PlayerAnimation { - ARM_SWING { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 0); - } - }, - ARM_SWING_OFFHAND { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 3); - } - }, - CRIT { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 4); - } - }, - EAT_FOOD { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 3); - } - }, - HURT { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 1); - } - }, - MAGIC_CRIT { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 5); - } - }, - SIT { - @Override - protected void playAnimation(final EntityPlayer player, int radius) { - player.getBukkitEntity().setMetadata("citizens.sitting", - new FixedMetadataValue(CitizensAPI.getPlugin(), true)); - final NPC holder = CitizensAPI.getNPCRegistry().createNPC(EntityType.ARMOR_STAND, ""); - holder.spawn(player.getBukkitEntity().getLocation()); - ArmorStandTrait trait = holder.getTrait(ArmorStandTrait.class); - trait.setGravity(false); - trait.setHasArms(false); - trait.setHasBaseplate(false); - trait.setSmall(true); - trait.setMarker(true); - trait.setVisible(false); - holder.getTrait(ArmorStandTrait.class).setVisible(false); - holder.data().set(NPC.NAMEPLATE_VISIBLE_METADATA, false); - holder.data().set(NPC.DEFAULT_PROTECTED_METADATA, true); - new BukkitRunnable() { - @Override - public void cancel() { - super.cancel(); - holder.destroy(); - } - - @Override - public void run() { - if (player.dead || !player.valid - || !player.getBukkitEntity().getMetadata("citizens.sitting").get(0).asBoolean()) { - cancel(); - return; - } - if (player instanceof NPCHolder && !((NPCHolder) player).getNPC().isSpawned()) { - cancel(); - return; - } - if (!NMS.getHandle(holder.getEntity()).passengers.contains(player)) { - NMS.mount(holder.getEntity(), player.getBukkitEntity()); - } - } - }.runTaskTimer(CitizensAPI.getPlugin(), 0, 1); - } - }, - SLEEP { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - PacketPlayOutBed packet = new PacketPlayOutBed(player, - new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ)); - sendPacketNearby(packet, player, radius); - } - }, - SNEAK { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.getBukkitEntity().setSneaking(true); - sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, - radius); - } - }, - START_USE_MAINHAND_ITEM { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.c(EnumHand.MAIN_HAND); - sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, - radius); - } - }, - START_USE_OFFHAND_ITEM { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.c(EnumHand.OFF_HAND); - sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, - radius); - } - }, - STOP_SITTING { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.getBukkitEntity().setMetadata("citizens.sitting", - new FixedMetadataValue(CitizensAPI.getPlugin(), false)); - NMS.mount(player.getBukkitEntity(), null); - } - }, - STOP_SLEEPING { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - playDefaultAnimation(player, radius, 2); - } - }, - STOP_SNEAKING { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.getBukkitEntity().setSneaking(false); - sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, - radius); - } - }, - STOP_USE_ITEM { - @Override - protected void playAnimation(EntityPlayer player, int radius) { - player.cA(); - sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player, - radius); - } - }; + ARM_SWING, + ARM_SWING_OFFHAND, + CRIT, + EAT_FOOD, + HURT, + MAGIC_CRIT, + SIT, + SLEEP, + SNEAK, + START_USE_MAINHAND_ITEM, + START_USE_OFFHAND_ITEM, + STOP_SITTING, + STOP_SLEEPING, + STOP_SNEAKING, + STOP_USE_ITEM; public void play(Player player) { play(player, 64); } public void play(Player player, int radius) { - playAnimation(((CraftPlayer) player).getHandle(), radius); - } - - protected void playAnimation(EntityPlayer player, int radius) { - throw new UnsupportedOperationException("unimplemented animation"); - } - - protected void playDefaultAnimation(EntityPlayer player, int radius, int code) { - PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, code); - sendPacketNearby(packet, player, radius); - } - - protected void sendPacketNearby(Packet packet, EntityPlayer player, int radius) { - NMS.sendPacketNearby(player.getBukkitEntity(), player.getBukkitEntity().getLocation(), packet, radius); + NMS.playAnimation(this, player, radius); } } diff --git a/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java b/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java index 68b5d9db1..a145bdfbc 100644 --- a/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java +++ b/src/main/java/net/citizensnpcs/util/PlayerUpdateTask.java @@ -9,14 +9,6 @@ import java.util.UUID; import org.bukkit.scheduler.BukkitRunnable; -import net.citizensnpcs.Settings.Setting; -import net.citizensnpcs.npc.ai.NPCHolder; -import net.minecraft.server.v1_10_R1.CrashReport; -import net.minecraft.server.v1_10_R1.CrashReportSystemDetails; -import net.minecraft.server.v1_10_R1.Entity; -import net.minecraft.server.v1_10_R1.EntityHuman; -import net.minecraft.server.v1_10_R1.ReportedException; - public class PlayerUpdateTask extends BukkitRunnable { @Override public void cancel() { @@ -39,37 +31,8 @@ public class PlayerUpdateTask extends BukkitRunnable { TICKERS_PENDING_REMOVE.clear(); Iterator itr = TICKERS.values().iterator(); while (itr.hasNext()) { - Entity entity = NMS.getHandle(itr.next()); - Entity entity1 = entity.bB(); - if (entity1 != null) { - if ((entity1.dead) || (!entity1.w(entity))) { - entity.stopRiding(); - } - } else { - if (!entity.dead) { - try { - entity.world.g(entity); - } catch (Throwable throwable) { - CrashReport crashreport = CrashReport.a(throwable, "Ticking player"); - CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Player being ticked"); - - entity.appendEntityCrashDetails(crashreportsystemdetails); - throw new ReportedException(crashreport); - } - } - boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", - Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); - if (entity.dead) { - entity.world.removeEntity(entity); - itr.remove(); - } else if (!removeFromPlayerList) { - itr.remove(); - if (!entity.world.players.contains(entity)) { - entity.world.players.add((EntityHuman) entity); - } - } else { - entity.world.players.remove(entity); - } + if (NMS.tick(itr.next())) { + itr.remove(); } } } diff --git a/src/main/java/net/citizensnpcs/util/Util.java b/src/main/java/net/citizensnpcs/util/Util.java index 79c795f1e..e2e6646cb 100644 --- a/src/main/java/net/citizensnpcs/util/Util.java +++ b/src/main/java/net/citizensnpcs/util/Util.java @@ -23,6 +23,17 @@ public class Util { private Util() { } + public static float clampYaw(float yaw) { + while (yaw < -180.0F) { + yaw += 360.0F; + } + + while (yaw >= 180.0F) { + yaw -= 360.0F; + } + return yaw; + } + public static void assumePose(Entity entity, float yaw, float pitch) { NMS.look(entity, yaw, pitch); }