From 3da3cc2ae87c030ace003aad64c90bfdd9154329 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sat, 27 Nov 2021 12:19:19 +0800 Subject: [PATCH] Fix /npc villager --profession error message, more sane boundingbox calculation --- main/src/main/java/net/citizensnpcs/util/NMS.java | 2 +- main/src/main/java/net/citizensnpcs/util/Util.java | 4 ++-- .../java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java | 5 +---- .../java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java | 2 +- .../java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java | 5 +---- .../java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java | 2 +- .../java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java | 5 +---- .../java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java | 2 +- .../java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java | 5 +---- .../java/net/citizensnpcs/nms/v1_17_R1/trait/Commands.java | 2 +- .../java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java | 5 +---- 11 files changed, 12 insertions(+), 27 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 46b9dc9b0..18704d952 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -79,7 +79,7 @@ public class NMS { public static BoundingBox getCollisionBox(Block block) { if (block.getType() == Material.AIR) { - return new BoundingBox(0, 0, 0, 0, 0, 0); + return BoundingBox.EMPTY; } return BRIDGE.getCollisionBox(block).add(block.getX(), block.getY(), block.getZ()); } diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index e975f277a..21da09492 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -122,8 +122,8 @@ public class Util { Location center = new Location(bloc.getWorld(), bloc.getBlockX() + 0.5, bloc.getBlockY(), bloc.getBlockZ() + 0.5); BoundingBox bb = NMS.getCollisionBox(block); - if (bb != null && bb.maxY < 0.6D) { - center.setY(center.getY() + bb.maxY); + if (bb != null && (bb.maxY - bb.minY) < 0.6D) { + center.setY(center.getY() + (bb.maxY - bb.minY)); } return center; } diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index be7119def..f7e19fd87 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -388,10 +388,7 @@ public class NMSImpl implements NMSBridge { public BoundingBox getCollisionBox(org.bukkit.block.Block block) { WorldServer world = ((CraftWorld) block.getWorld()).getHandle(); VoxelShape shape = ((CraftBlock) block).getNMS().getCollisionShape(world, ((CraftBlock) block).getPosition()); - AxisAlignedBB aabb = shape.isEmpty() - ? ((CraftBlock) block).getNMS().getShape(world, ((CraftBlock) block).getPosition()).getBoundingBox() - : shape.getBoundingBox(); - return aabb == null ? BoundingBox.convert(block.getBoundingBox()) : NMSBoundingBox.wrap(aabb); + return shape.isEmpty() ? new BoundingBox(0, 0, 0, 0, 0, 0) : NMSBoundingBox.wrap(shape.getBoundingBox()); } private float getDragonYaw(Entity handle, double tX, double tZ) { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java index af14ed2ce..9627306bd 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/trait/Commands.java @@ -510,7 +510,7 @@ public class Commands { if (args.hasValueFlag("profession")) { Profession parsed = Util.matchEnum(Profession.values(), args.getFlag("profession")); if (parsed == null) { - throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), + throw new CommandException(Messages.INVALID_PROFESSION, args.getFlag("profession"), Joiner.on(',').join(Profession.values())); } npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index a1ccd6f27..646160dd4 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -424,10 +424,7 @@ public class NMSImpl implements NMSBridge { public BoundingBox getCollisionBox(org.bukkit.block.Block block) { WorldServer world = ((CraftWorld) block.getWorld()).getHandle(); VoxelShape shape = ((CraftBlock) block).getNMS().getCollisionShape(world, ((CraftBlock) block).getPosition()); - AxisAlignedBB aabb = shape.isEmpty() - ? ((CraftBlock) block).getNMS().getShape(world, ((CraftBlock) block).getPosition()).getBoundingBox() - : shape.getBoundingBox(); - return aabb == null ? BoundingBox.convert(block.getBoundingBox()) : NMSBoundingBox.wrap(aabb); + return shape.isEmpty() ? new BoundingBox(0, 0, 0, 0, 0, 0) : NMSBoundingBox.wrap(shape.getBoundingBox()); } private float getDragonYaw(Entity handle, double tX, double tZ) { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java index 896f6a896..5e433c8ad 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/trait/Commands.java @@ -554,7 +554,7 @@ public class Commands { if (args.hasValueFlag("profession")) { Profession parsed = Util.matchEnum(Profession.values(), args.getFlag("profession")); if (parsed == null) { - throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), + throw new CommandException(Messages.INVALID_PROFESSION, args.getFlag("profession"), Joiner.on(',').join(Profession.values())); } npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 012bc311e..b25cbd5c2 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -432,10 +432,7 @@ public class NMSImpl implements NMSBridge { public BoundingBox getCollisionBox(org.bukkit.block.Block block) { WorldServer world = ((CraftWorld) block.getWorld()).getHandle(); VoxelShape shape = ((CraftBlock) block).getNMS().getCollisionShape(world, ((CraftBlock) block).getPosition()); - AxisAlignedBB aabb = shape.isEmpty() - ? ((CraftBlock) block).getNMS().getShape(world, ((CraftBlock) block).getPosition()).getBoundingBox() - : shape.getBoundingBox(); - return aabb == null ? BoundingBox.convert(block.getBoundingBox()) : NMSBoundingBox.wrap(aabb); + return shape.isEmpty() ? new BoundingBox(0, 0, 0, 0, 0, 0) : NMSBoundingBox.wrap(shape.getBoundingBox()); } private float getDragonYaw(Entity handle, double tX, double tZ) { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java index 46518cda1..9ea354196 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/trait/Commands.java @@ -554,7 +554,7 @@ public class Commands { if (args.hasValueFlag("profession")) { Profession parsed = Util.matchEnum(Profession.values(), args.getFlag("profession")); if (parsed == null) { - throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), + throw new CommandException(Messages.INVALID_PROFESSION, args.getFlag("profession"), Joiner.on(',').join(Profession.values())); } npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index ff6b5f6cb..66a7fbfd7 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -438,10 +438,7 @@ public class NMSImpl implements NMSBridge { public BoundingBox getCollisionBox(org.bukkit.block.Block block) { WorldServer world = ((CraftWorld) block.getWorld()).getHandle(); VoxelShape shape = ((CraftBlock) block).getNMS().getCollisionShape(world, ((CraftBlock) block).getPosition()); - AxisAlignedBB aabb = shape.isEmpty() - ? ((CraftBlock) block).getNMS().getShape(world, ((CraftBlock) block).getPosition()).getBoundingBox() - : shape.getBoundingBox(); - return aabb == null ? BoundingBox.convert(block.getBoundingBox()) : NMSBoundingBox.wrap(aabb); + return shape.isEmpty() ? new BoundingBox(0, 0, 0, 0, 0, 0) : NMSBoundingBox.wrap(shape.getBoundingBox()); } private float getDragonYaw(Entity handle, double tX, double tZ) { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/trait/Commands.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/trait/Commands.java index c60628840..f3ab6b4d9 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/trait/Commands.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/trait/Commands.java @@ -590,7 +590,7 @@ public class Commands { if (args.hasValueFlag("profession")) { Profession parsed = Util.matchEnum(Profession.values(), args.getFlag("profession")); if (parsed == null) { - throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), + throw new CommandException(Messages.INVALID_PROFESSION, args.getFlag("profession"), Joiner.on(',').join(Profession.values())); } npc.getOrAddTrait(VillagerProfession.class).setProfession(parsed); diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index f5977fe01..16ee840b0 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -448,10 +448,7 @@ public class NMSImpl implements NMSBridge { public BoundingBox getCollisionBox(org.bukkit.block.Block block) { ServerLevel world = ((CraftWorld) block.getWorld()).getHandle(); VoxelShape shape = ((CraftBlock) block).getNMS().getCollisionShape(world, ((CraftBlock) block).getPosition()); - AABB aabb = shape.isEmpty() - ? ((CraftBlock) block).getNMS().getShape(world, ((CraftBlock) block).getPosition()).bounds() - : shape.bounds(); - return aabb == null ? BoundingBox.convert(block.getBoundingBox()) : NMSBoundingBox.wrap(aabb); + return shape.isEmpty() ? new BoundingBox(0, 0, 0, 0, 0, 0) : NMSBoundingBox.wrap(shape.bounds()); } private float getDragonYaw(Entity handle, double tX, double tZ) {