diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index 385e428a6..4ecd274e5 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -72,6 +72,7 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkUnloadEvent; @@ -217,8 +218,8 @@ public class EventListen implements Listener { if (npc == null) { return; } - Bukkit.getPluginManager().callEvent(new NPCDeathEvent(npc, event)); final Location location = npc.getEntity().getLocation(); + Bukkit.getPluginManager().callEvent(new NPCDeathEvent(npc, event)); npc.despawn(DespawnReason.DEATH); if (npc.data().has(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA)) { @@ -236,7 +237,7 @@ public class EventListen implements Listener { Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { @Override public void run() { - if (!npc.isSpawned()) { + if (!npc.isSpawned() && npc.getOwningRegistry().getByUniqueId(npc.getUniqueId()) == npc) { npc.spawn(location); } } @@ -387,6 +388,15 @@ public class EventListen implements Listener { recalculatePlayer(event.getPlayer(), 15, true); } + @EventHandler + public void onVehicleDestroy(VehicleDestroyEvent event) { + NPC npc = npcRegistry.getNPC(event.getVehicle()); + if (npc == null) { + return; + } + event.setCancelled(npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)); + } + @EventHandler(ignoreCancelled = true) public void onVehicleEnter(VehicleEnterEvent event) { if (!npcRegistry.isNPC(event.getEntered())) diff --git a/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 8b5e7095b..15c3fb76c 100644 --- a/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -852,11 +852,6 @@ public class NPCCommands { public void name(CommandContext args, CommandSender sender, NPC npc) { LivingEntity entity = (LivingEntity) npc.getEntity(); entity.setCustomNameVisible(!entity.isCustomNameVisible()); - if (!entity.isCustomNameVisible()) { - entity.setCustomName(""); - } else { - entity.setCustomName(npc.getFullName()); - } npc.data().setPersistent(NPC.NAMEPLATE_VISIBLE_METADATA, entity.isCustomNameVisible()); Messaging.sendTr(sender, Messages.NAMEPLATE_VISIBILITY_TOGGLED); } diff --git a/src/main/java/net/citizensnpcs/commands/TraitCommands.java b/src/main/java/net/citizensnpcs/commands/TraitCommands.java index 7de240746..a328c5511 100644 --- a/src/main/java/net/citizensnpcs/commands/TraitCommands.java +++ b/src/main/java/net/citizensnpcs/commands/TraitCommands.java @@ -2,6 +2,13 @@ package net.citizensnpcs.commands; import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; + +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.command.Command; import net.citizensnpcs.api.command.CommandConfigurable; @@ -16,13 +23,6 @@ import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.StringHelper; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; - -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; -import com.google.common.collect.Lists; - @Requirements(selected = true, ownership = true) public class TraitCommands { @Command( @@ -30,12 +30,12 @@ public class TraitCommands { usage = "add [trait name]...", desc = "Adds traits to the NPC", modifiers = { "add", "a" }, - min = 1, + min = 2, permission = "citizens.npc.trait") public void add(CommandContext args, CommandSender sender, NPC npc) throws CommandException { List added = Lists.newArrayList(); List failed = Lists.newArrayList(); - for (String traitName : Splitter.on(',').split(args.getJoinedStrings(0))) { + for (String traitName : Splitter.on(',').split(args.getJoinedStrings(1))) { if (!sender.hasPermission("citizens.npc.trait." + traitName) && !sender.hasPermission("citizens.npc.trait.*")) { failed.add(String.format("%s: No permission", traitName)); diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index b59c887c0..7ab1036b7 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -43,8 +43,9 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scoreboard.NameTagVisibility; public class CitizensNPC extends AbstractNPC { private EntityController entityController; @@ -65,7 +66,6 @@ public class CitizensNPC extends AbstractNPC { } return false; } - NPCDespawnEvent event = new NPCDespawnEvent(this, reason); if (reason == DespawnReason.CHUNK_UNLOAD) { event.setCancelled(Setting.KEEP_CHUNKS_LOADED.asBoolean()); @@ -186,7 +186,7 @@ public class CitizensNPC extends AbstractNPC { entityController.spawn(at, this); net.minecraft.server.v1_8_R3.Entity mcEntity = ((CraftEntity) getEntity()).getHandle(); - boolean couldSpawn = !Util.isLoaded(at) ? false : mcEntity.world.addEntity(mcEntity, CreatureSpawnEvent.SpawnReason.CUSTOM); + boolean couldSpawn = !Util.isLoaded(at) ? false : mcEntity.world.addEntity(mcEntity, SpawnReason.CUSTOM); // send skin packets, if applicable, before other NMS packets are sent SkinnableEntity skinnable = NMS.getSkinnableNPC(getEntity()); @@ -255,7 +255,6 @@ public class CitizensNPC extends AbstractNPC { if (getEntity() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) getEntity(); entity.setRemoveWhenFarAway(false); - entity.setCustomName(getFullName()); if (NMS.getStepHeight(entity) < 1) { NMS.setStepHeight(NMS.getHandle(entity), 1); @@ -284,7 +283,21 @@ public class CitizensNPC extends AbstractNPC { if (!getNavigator().isNavigating() && getEntity().getWorld().getFullTime() % Setting.PACKET_UPDATE_DELAY.asInt() == 0) { if (getEntity() instanceof LivingEntity) { - ((LivingEntity) getEntity()).setCustomName(getFullName()); + if (!getEntity().isCustomNameVisible()) { + if (getEntity() instanceof Player && data().has(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA)) { + String teamName = data().get(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA); + Bukkit.getScoreboardManager().getMainScoreboard().getTeam(teamName) + .setNameTagVisibility(NameTagVisibility.NEVER); + } + getEntity().setCustomName(""); + } else { + if (getEntity() instanceof Player && data().has(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA)) { + String teamName = data().get(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA); + Bukkit.getScoreboardManager().getMainScoreboard().getTeam(teamName) + .setNameTagVisibility(NameTagVisibility.ALWAYS); + } + getEntity().setCustomName(getFullName()); + } } Player player = getEntity() instanceof Player ? (Player) getEntity() : null; NMS.sendPacketNearby(player, getStoredLocation(), diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java index c79813373..13044f799 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java @@ -1,5 +1,9 @@ package net.citizensnpcs.npc.ai; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.entity.LivingEntity; + import net.citizensnpcs.api.ai.AttackStrategy; import net.citizensnpcs.api.ai.EntityTarget; import net.citizensnpcs.api.ai.NavigatorParameters; @@ -13,10 +17,6 @@ import net.minecraft.server.v1_8_R3.EntityLiving; import net.minecraft.server.v1_8_R3.EntityPlayer; import net.minecraft.server.v1_8_R3.NavigationAbstract; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; -import org.bukkit.entity.LivingEntity; - public class MCTargetStrategy implements PathStrategy, EntityTarget { private final boolean aggro; private int attackTicks; @@ -117,9 +117,10 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { } if (!aggro && distanceSquared() < parameters.distanceMargin()) { stop(); - } else if (target.world.getWorld().getFullTime() % 10 == 0) { + } else if (target.world.getWorld().getFullTime() % 60 == 0) { setPath(); } + NMS.look(handle, target); if (aggro && canAttack()) { AttackStrategy strategy = parameters.attackStrategy(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java index 6b36e521e..41f68ebb8 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java @@ -25,7 +25,6 @@ import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Team; public class HumanController extends AbstractEntityController { - public HumanController() { super(); } @@ -77,8 +76,8 @@ public class HumanController extends AbstractEntityController { uuid = new UUID(msb, uuid.getLeastSignificantBits()); } - final GameProfile profile = new GameProfile(uuid, coloredName); - + GameProfile profile = new GameProfile(uuid, coloredName); + final EntityHumanNPC handle = new EntityHumanNPC(nmsWorld.getServer().getServer(), nmsWorld, profile, new PlayerInteractManager(nmsWorld), npc); diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java index f2a8b9cfa..ab11b1691 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartChestController.java @@ -1,5 +1,12 @@ package net.citizensnpcs.npc.entity.nonliving; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.CraftServer; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartChest; +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.npc.CitizensNPC; @@ -7,17 +14,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartChest; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_8_R3.CraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartChest; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartChestController extends MobEntityController { public MinecartChestController() { super(EntityMinecartChestNPC.class); @@ -55,6 +56,13 @@ public class MinecartChestController extends MobEntityController { return npc == null ? super.d(save) : false; } + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java index c1dffe50a..df13bd017 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartCommandController.java @@ -1,5 +1,12 @@ package net.citizensnpcs.npc.entity.nonliving; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.CraftServer; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartCommand; +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.npc.CitizensNPC; @@ -7,17 +14,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartCommandBlock; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_8_R3.CraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartCommand; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartCommandController extends MobEntityController { public MinecartCommandController() { super(EntityMinecartCommandNPC.class); @@ -40,11 +41,6 @@ public class MinecartCommandController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -55,6 +51,18 @@ public class MinecartCommandController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java index f90aa7305..d3407c5d4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartFurnaceController.java @@ -1,5 +1,12 @@ package net.citizensnpcs.npc.entity.nonliving; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.CraftServer; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartFurnace; +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.npc.CitizensNPC; @@ -7,17 +14,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartFurnace; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_8_R3.CraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartFurnace; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartFurnaceController extends MobEntityController { public MinecartFurnaceController() { super(EntityMinecartFurnaceNPC.class); @@ -40,11 +41,6 @@ public class MinecartFurnaceController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -55,6 +51,18 @@ public class MinecartFurnaceController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java index 975656355..343825425 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartHopperController.java @@ -1,5 +1,8 @@ package net.citizensnpcs.npc.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.npc.CitizensNPC; @@ -7,13 +10,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartHopper; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartHopperController extends MobEntityController { public MinecartHopperController() { super(EntityMinecartHopperNPC.class); @@ -36,11 +37,6 @@ public class MinecartHopperController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -51,6 +47,18 @@ public class MinecartHopperController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java index 63ad4be31..b4eab2a8a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartRideableController.java @@ -1,5 +1,12 @@ package net.citizensnpcs.npc.entity.nonliving; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.CraftServer; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartRideable; +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.npc.CitizensNPC; @@ -7,17 +14,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartRideable; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_8_R3.CraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartRideable; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartRideableController extends MobEntityController { public MinecartRideableController() { super(EntityMinecartRideableNPC.class); @@ -40,11 +41,6 @@ public class MinecartRideableController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -55,6 +51,18 @@ public class MinecartRideableController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java index 22988f2f6..7cc0d697e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartSpawnerController.java @@ -1,5 +1,8 @@ package net.citizensnpcs.npc.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.npc.CitizensNPC; @@ -7,13 +10,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartMobSpawner; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartSpawnerController extends MobEntityController { public MinecartSpawnerController() { super(EntityMinecartSpawnerNPC.class); @@ -36,11 +37,6 @@ public class MinecartSpawnerController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -51,6 +47,18 @@ public class MinecartSpawnerController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java index 92324ce8e..f79b6e37a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/nonliving/MinecartTNTController.java @@ -1,5 +1,8 @@ package net.citizensnpcs.npc.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.npc.CitizensNPC; @@ -7,13 +10,11 @@ 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_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.EntityMinecartTNT; import net.minecraft.server.v1_8_R3.NBTTagCompound; import net.minecraft.server.v1_8_R3.World; -import org.bukkit.entity.Minecart; -import org.bukkit.util.Vector; - public class MinecartTNTController extends MobEntityController { public MinecartTNTController() { super(EntityMinecartTNTNPC.class); @@ -36,11 +37,6 @@ public class MinecartTNTController extends MobEntityController { this.npc = (CitizensNPC) npc; } - @Override - public boolean d(NBTTagCompound save) { - return npc == null ? super.d(save) : false; - } - @Override public void collide(net.minecraft.server.v1_8_R3.Entity entity) { // this method is called by both the entities involved - cancelling @@ -51,6 +47,18 @@ public class MinecartTNTController extends MobEntityController { } } + @Override + public boolean d(NBTTagCompound save) { + return npc == null ? super.d(save) : false; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) { + if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + return super.damageEntity(damagesource, f); + return false; + } + @Override public void g(double x, double y, double z) { if (npc == null) {