diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index f103a3f68..5bdbf4d25 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -107,7 +107,7 @@ import net.citizensnpcs.util.Util; public class EventListen implements Listener { private final Map registries; private final SkinUpdateTracker skinUpdateTracker; - private final ListMultimap toRespawn = ArrayListMultimap.create(); + private final ListMultimap toRespawn = ArrayListMultimap.create(64, 4); EventListen(Map registries) { this.registries = registries; diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index b574acada..5adee264f 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -10,6 +10,8 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -110,6 +112,16 @@ public class Util { return "CIT-" + id.toString().replace("-", "").substring(0, 12); } + public static boolean inBlock(Entity entity) { + // TODO: bounding box aware? + Location loc = entity.getLocation(AT_LOCATION); + if (!Util.isLoaded(loc)) { + return false; + } + Block in = loc.getBlock(); + return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + } + public static boolean isAlwaysFlyable(EntityType type) { if (type.name().toLowerCase().equals("vex") || type.name().toLowerCase().equals("parrot") || type.name().toLowerCase().equals("bee") || type.name().toLowerCase().equals("phantom")) diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java index bc10a3588..064dbe124 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java @@ -7,8 +7,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -246,15 +244,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java index 324d959f7..b4871aed3 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java @@ -7,8 +7,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_11_R1.CraftServer; import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -277,15 +275,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java index e81d91d0c..e0be636a3 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java @@ -8,8 +8,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_12_R1.CraftServer; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -297,15 +295,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java index 8a0fa8ac6..80351afd3 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java @@ -8,8 +8,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_13_R2.CraftServer; import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -276,15 +274,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java index eaa0e4492..8a5384886 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java @@ -7,8 +7,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_14_R1.CraftServer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -267,15 +265,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java index ad8991285..a43495ae7 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java @@ -7,8 +7,6 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_15_R1.CraftServer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -268,15 +266,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java index 88dc51a17..c4350b110 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java @@ -9,8 +9,6 @@ import java.util.function.Consumer; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_16_R3.CraftServer; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -282,15 +280,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) { diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java index 96a3d04cf..04774911b 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java @@ -6,7 +6,6 @@ import java.util.List; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_8_R3.CraftServer; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; @@ -246,15 +245,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean inBlock() { - if (npc == null || noclip) { + if (npc == null || noclip || isSleeping()) { return super.inBlock(); } - Location loc = getBukkitEntity().getLocation(LOADED_LOCATION); - if (!Util.isLoaded(loc)) { - return false; - } - org.bukkit.block.Block in = loc.getBlock(); - return in.getType().isSolid() && in.getRelative(BlockFace.UP).getType().isSolid(); + return Util.inBlock(getBukkitEntity()); } private void initialise(MinecraftServer minecraftServer) {