From a675406eae94f08b2a24bf8c048af16539c45120 Mon Sep 17 00:00:00 2001 From: fullwall Date: Tue, 17 Dec 2024 01:08:30 +0800 Subject: [PATCH] Use /npc item for minecarts, and add /npc hologram textshadow --- .../citizensnpcs/commands/NPCCommands.java | 45 +++++++++-------- .../citizensnpcs/npc/CitizensNPCRegistry.java | 6 +-- .../net/citizensnpcs/trait/HologramTrait.java | 39 +++++++++++++-- .../java/net/citizensnpcs/util/Messages.java | 4 ++ main/src/main/resources/en.json | 6 ++- .../nms/v1_10_R1/util/NMSImpl.java | 26 ++++++---- .../nms/v1_11_R1/util/NMSImpl.java | 26 ++++++---- .../nms/v1_12_R1/util/NMSImpl.java | 26 ++++++---- .../nms/v1_13_R2/util/NMSImpl.java | 24 +++++---- .../nms/v1_14_R1/util/NMSImpl.java | 24 +++++---- .../nms/v1_15_R1/util/NMSImpl.java | 24 +++++---- .../nms/v1_16_R3/util/NMSImpl.java | 24 +++++---- .../nms/v1_17_R1/util/NMSImpl.java | 49 +++++++++--------- .../nms/v1_18_R2/util/NMSImpl.java | 49 +++++++++--------- .../nms/v1_19_R3/util/NMSImpl.java | 49 +++++++++--------- .../nms/v1_20_R4/util/NMSImpl.java | 50 ++++++++++--------- .../nms/v1_21_R3/util/NMSImpl.java | 7 ++- .../nms/v1_8_R3/util/NMSImpl.java | 26 ++++++---- 18 files changed, 294 insertions(+), 210 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index ae0565be0..ac7af0053 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -1281,7 +1281,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "hologram add [text] | insert [line #] [text] | set [line #] [text] | remove [line #] | bgcolor [line #] (red,green,blue(,alpha)) | clear | lineheight [height] | viewrange [range] | margintop [line #] [margin] | marginbottom [line #] [margin]", + usage = "hologram add [text] | insert [line #] [text] | set [line #] [text] | remove [line #] | textshadow [line #] | bgcolor [line #] (red,green,blue(,alpha)) | clear | lineheight [height] | viewrange [range] | margintop [line #] [margin] | marginbottom [line #] [margin]", desc = "", modifiers = { "hologram" }, min = 1, @@ -1290,8 +1290,8 @@ public class NPCCommands { public void hologram(CommandContext args, CommandSender sender, NPC npc, @Arg( value = 1, - completions = { "add", "insert", "set", "bgcolor", "remove", "clear", "lineheight", "viewrange", - "margintop", "marginbottom" }) String action, + completions = { "add", "insert", "set", "bgcolor", "textshadow", "remove", "clear", "lineheight", + "viewrange", "margintop", "marginbottom" }) String action, @Arg(value = 2, completionsProvider = HologramTrait.TabCompletions.class) String secondCompletion) throws CommandException { HologramTrait trait = npc.getOrAddTrait(HologramTrait.class); @@ -1332,6 +1332,21 @@ public class NPCCommands { trait.setBackgroundColor(idx, Util.parseColor(args.getString(3))); Messaging.sendTr(sender, Messages.HOLOGRAM_BACKGROUND_COLOR_SET, idx, args.getString(3)); } + } else if (action.equalsIgnoreCase("textshadow")) { + if (args.argsLength() == 3) { + trait.setDefaultTextShadow(!trait.isDefaultTextShadow()); + Messaging.sendTr(sender, trait.isDefaultTextShadow() ? Messages.HOLOGRAM_DEFAULT_SHADOW_SET + : Messages.HOLOGRAM_DEFAULT_SHADOW_UNSET, npc.getName()); + } else { + int idx = args.getString(2).equals("bottom") ? 0 + : args.getString(2).equals("top") ? trait.getLines().size() - 1 + : Math.max(0, args.getInteger(2)); + if (idx >= trait.getLines().size()) + throw new CommandException(Messages.HOLOGRAM_INVALID_LINE); + trait.setTextShadow(idx, Boolean.parseBoolean(args.getString(3))); + Messaging.sendTr(sender, Boolean.parseBoolean(args.getString(3)) ? Messages.HOLOGRAM_SHADOW_SET + : Messages.HOLOGRAM_SHADOW_UNSET, idx); + } } else if (action.equalsIgnoreCase("viewrange")) { if (args.argsLength() == 2) throw new CommandUsageException(); @@ -1566,9 +1581,9 @@ public class NPCCommands { throws CommandException { EntityType type = npc.getOrAddTrait(MobType.class).getType(); if (!type.name().equals("OMINOUS_ITEM_SPAWNER") && !type.name().contains("ITEM_FRAME") - && !type.name().contains("ITEM_DISPLAY") && !type.name().contains("BLOCK_DISPLAY") - && !type.name().equals("DROPPED_ITEM") && !type.name().equals("ITEM") - && type != EntityType.FALLING_BLOCK) + && !type.name().contains("MINECART") && !type.name().contains("ITEM_DISPLAY") + && !type.name().contains("BLOCK_DISPLAY") && !type.name().equals("DROPPED_ITEM") + && !type.name().equals("ITEM") && type != EntityType.FALLING_BLOCK) throw new CommandException(CommandMessages.REQUIREMENTS_INVALID_MOB_TYPE, Util.prettyEnum(type)); ItemStack stack = args.hasFlag('h') ? ((Player) sender).getItemInHand() : new ItemStack(mat, 1); if (modify != null) { @@ -1908,7 +1923,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "minecart (--item item_name(:data)) (--offset offset)", + usage = "minecart (--offset offset)", desc = "", modifiers = { "minecart" }, min = 1, @@ -1920,24 +1935,10 @@ public class NPCCommands { throws CommandException { if (!npc.getOrAddTrait(MobType.class).getType().name().contains("MINECRAFT")) throw new CommandUsageException(); - if (item != null) { - int data = 0; - if (item.contains(":")) { - int dataIndex = item.indexOf(':'); - data = Integer.parseInt(item.substring(dataIndex + 1)); - item = item.substring(0, dataIndex); - } - Material material = Material.matchMaterial(item); - if (material == null) - throw new CommandException(); - npc.data().setPersistent(NPC.Metadata.MINECART_ITEM, material.name()); - npc.data().setPersistent(NPC.Metadata.MINECART_ITEM_DATA, data); - } if (args.hasValueFlag("offset")) { npc.data().setPersistent(NPC.Metadata.MINECART_OFFSET, args.getFlagInteger("offset")); } - Messaging.sendTr(sender, Messages.MINECART_SET, npc.data().get(NPC.Metadata.MINECART_ITEM, ""), - npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0), npc.data().get(NPC.Metadata.MINECART_OFFSET, 0)); + Messaging.sendTr(sender, Messages.MINECART_SET, npc.getName(), npc.data().get(NPC.Metadata.MINECART_OFFSET, 0)); } @Command( diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java index c0c816e7a..bc1b7aa0f 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPCRegistry.java @@ -82,9 +82,9 @@ public class CitizensNPCRegistry implements NPCRegistry { public NPC createNPCUsingItem(EntityType type, String name, ItemStack item) { NPC npc = createNPC(type, name); if (type.name().equals("OMINOUS_ITEM_SPAWNER") || type.name().equals("DROPPED_ITEM") - || type.name().equals("ITEM") || type == EntityType.FALLING_BLOCK || type == EntityType.ITEM_FRAME - || type.name().equals("GLOW_ITEM_FRAME") || type.name().equals("ITEM_DISPLAY") - || type.name().equals("BLOCK_DISPLAY")) { + || type.name().contains("MINECART") || type.name().equals("ITEM") || type == EntityType.FALLING_BLOCK + || type == EntityType.ITEM_FRAME || type.name().equals("GLOW_ITEM_FRAME") + || type.name().equals("ITEM_DISPLAY") || type.name().equals("BLOCK_DISPLAY")) { npc.data().set(NPC.Metadata.ITEM_AMOUNT, item.getAmount()); npc.data().set(NPC.Metadata.ITEM_ID, item.getType().name()); npc.data().set(NPC.Metadata.ITEM_DATA, item.getData().getData()); diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index 27fc245ec..4e4b5051d 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -75,6 +75,8 @@ public class HologramTrait extends Trait { private final NPCRegistry registry = CitizensAPI.getTemporaryNPCRegistry(); private int t; @Persist + private boolean textShadow = true; + @Persist private int viewRange = -1; public HologramTrait() { @@ -226,6 +228,10 @@ public class HologramTrait extends Trait { reloadLineHolograms(); } + public boolean isDefaultTextShadow() { + return textShadow; + } + @Override public void load(DataKey root) { clear(); @@ -237,6 +243,9 @@ public class HologramTrait extends Trait { if (key.keyExists("backgroundcolor")) { line.setBackgroundColor(Color.fromARGB(key.getInt("backgroundcolor"))); } + if (key.keyExists("textshadow")) { + line.setTextShadow(key.getBoolean("textshadow")); + } lines.add(line); } } @@ -355,6 +364,7 @@ public class HologramTrait extends Trait { } else { root.removeKey("lines." + i + ".backgroundcolor"); } + root.setBoolean("lines." + i + ".textshadow", line.shadow); root.setString("lines." + i + ".text", line.text); root.setDouble("lines." + i + ".margin.top", line.mt); root.setDouble("lines." + i + ".margin.bottom", line.mb); @@ -377,6 +387,10 @@ public class HologramTrait extends Trait { reloadLineHolograms(); } + public void setDefaultTextShadow(boolean shadow) { + this.textShadow = shadow; + } + /** * Sets the hologram line at a specific index * @@ -425,6 +439,11 @@ public class HologramTrait extends Trait { reloadLineHolograms(); } + public void setTextShadow(int idx, boolean shadow) { + lines.get(idx).setTextShadow(shadow); + reloadLineHolograms(); + } + public void setViewRange(int range) { this.viewRange = range; reloadLineHolograms(); @@ -490,6 +509,7 @@ public class HologramTrait extends Trait { double mb, mt; boolean persist; HologramRenderer renderer; + boolean shadow = textShadow; String text; int ticks; @@ -541,6 +561,14 @@ public class HologramTrait extends Trait { } renderer.updateText(npc, text); } + + public void setTextShadow(boolean shadow) { + this.shadow = shadow; + if (!shadow) { + renderer = new TextDisplayRenderer(); + } + renderer.setTextShadow(shadow); + } } /** @@ -612,6 +640,9 @@ public class HologramTrait extends Trait { default void setBackgroundColor(Color color) { } + default void setTextShadow(boolean shadow) { + } + /** * Update the hologram text. Will be called first before {@link #render(NPC, Vector3d)}. * @@ -893,14 +924,11 @@ public class HologramTrait extends Trait { public static class TextDisplayRenderer extends SingleEntityHologramRenderer { private Color color; + private boolean shadow; public TextDisplayRenderer() { } - public TextDisplayRenderer(Color color) { - this.color = color; - } - @Override protected NPC createNPC(Entity base, String name, Vector3d offset) { NPC hologram = registry().createNPC(EntityType.TEXT_DISPLAY, ""); @@ -918,6 +946,7 @@ public class HologramTrait extends Trait { if (color != null) { disp.setBackgroundColor(color); } + disp.setShadowed(shadow); if (SpigotUtil.getVersion()[1] >= 21 && base.getEntity() instanceof LivingEntity) { AttributeInstance inst = ((LivingEntity) base.getEntity()) .getAttribute(Util.getRegistryValue(Registry.ATTRIBUTE, "generic.scale", "scale")); @@ -963,7 +992,9 @@ public class HologramTrait extends Trait { } private static final Pattern ITEM_MATCHER = Pattern.compile(""); + private static boolean SUPPORTS_DISPLAY = true; + static { try { Class.forName("org.bukkit.entity.Display"); diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index cd3792950..912287f3e 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -169,6 +169,8 @@ public class Messages { public static final String HOLOGRAM_BACKGROUND_COLOR_SET = "citizens.commands.npc.hologram.background-color-set"; public static final String HOLOGRAM_CLEARED = "citizens.commands.npc.hologram.cleared"; public static final String HOLOGRAM_DEFAULT_BACKGROUND_COLOR_SET = "citizens.commands.npc.hologram.default-background-color-set"; + public static final String HOLOGRAM_DEFAULT_SHADOW_SET = "citizens.commands.npc.hologram.default-shadow-set"; + public static final String HOLOGRAM_DEFAULT_SHADOW_UNSET = "citizens.commands.npc.hologram.default-shadow-unset"; public static final String HOLOGRAM_DESCRIBE_HEADER = "citizens.commands.npc.hologram.text-describe-header"; public static final String HOLOGRAM_INVALID_LINE = "citizens.commands.npc.hologram.invalid-text-id"; public static final String HOLOGRAM_LINE_ADD = "citizens.commands.npc.hologram.line-add"; @@ -177,6 +179,8 @@ public class Messages { public static final String HOLOGRAM_LINE_SET = "citizens.commands.npc.hologram.text-set"; public static final String HOLOGRAM_MARGIN_MISSING = "citizens.commands.npc.hologram.margin-missing"; public static final String HOLOGRAM_MARGIN_SET = "citizens.commands.npc.hologram.margin-set"; + public static final String HOLOGRAM_SHADOW_SET = "citizens.commands.npc.hologram.shadow-set"; + public static final String HOLOGRAM_SHADOW_UNSET = "citizens.commands.npc.hologram.shadow-unset"; public static final String HOLOGRAM_TEXT_MISSING = "citizens.commands.npc.hologram.text-missing"; public static final String HOLOGRAM_TEXT_REMOVED = "citizens.commands.npc.hologram.text-removed"; public static final String HOLOGRAM_VIEW_RANGE_SET = "citizens.commands.npc.hologram.view-range-set"; diff --git a/main/src/main/resources/en.json b/main/src/main/resources/en.json index 9a1de4813..cd887e68c 100644 --- a/main/src/main/resources/en.json +++ b/main/src/main/resources/en.json @@ -74,6 +74,10 @@ "citizens.commands.npc.axolotl.variant-set" : "Variant set to [[{0}]].", "citizens.commands.npc.boat.type-set": "Boat type set to [[{0}]].", "citizens.commands.npc.boat.description": "Sets boat modifiers", + "citizens.commands.npc.hologram.shadow-set" : "Line [[{0}]] now has text shadows.", + "citizens.commands.npc.hologram.shadow-unset" : "Line [[{0}]] no longer has text shadows.", + "citizens.commands.npc.hologram.default-shadow-set" : "[[{0}]]''s holograms now have text shadows by default.", + "citizens.commands.npc.hologram.default-shadow-unset" : "[[{0}]]''s holograms no longer have text shadows by default.", "citizens.commands.npc.hologram.background-color-set": "Background color at line [[{0}]] set to [[{1}]].", "citizens.commands.npc.hologram.default-background-color-set": "Default background color set to [[{0}]].", "citizens.commands.npc.bee.anger-set" : "Anger set to [[{0}]].", @@ -337,7 +341,7 @@ "citizens.commands.npc.metadata.unset" : "Removed [[{0}]] from [[{1}]].", "citizens.commands.npc.minecart.description" : "Sets minecart item", "citizens.commands.npc.minecart.help" : "", - "citizens.commands.npc.minecart.set" : "[[{0}]] now has item [[{1}]]:[[{2}]] with offset [[{3}]].", + "citizens.commands.npc.minecart.set" : "[[{0}]] now has offset [[{1}]].", "citizens.commands.npc.mirror.description" : "Controls mirroring of NPC skins and more", "citizens.commands.npc.mirror.help" : "", "citizens.commands.npc.mirror.namemirror-set" : "[[{0}]] will now mirror player names.", diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index e4550bfc9..f571003ee 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -18,7 +18,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -77,6 +76,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1593,16 +1593,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -1856,12 +1861,11 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { - minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); + minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(0)); } minecart.setDisplayBlockOffset(offset); } diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index 491bff0f1..990ec837e 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -18,7 +18,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -77,6 +76,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1652,16 +1652,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -1914,12 +1919,11 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { - minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); + minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(0)); } minecart.setDisplayBlockOffset(offset); } diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index 498ed3e10..379288dc9 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -19,7 +19,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -78,6 +77,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1660,16 +1660,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -1922,12 +1927,11 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { - minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); + minecart.setDisplayBlock(Block.getByCombinedId(mat.getId()).getBlock().getBlockData()); } minecart.setDisplayBlockOffset(offset); } 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 cdeb2def6..8bffa781e 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 @@ -18,7 +18,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -79,6 +78,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1708,16 +1708,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -2025,11 +2030,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlock(Block.getByCombinedId(mat.getId()).getBlock().getBlockData()); } minecart.setDisplayBlockOffset(offset); 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 d812d0a2b..281518777 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 @@ -17,7 +17,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -76,6 +75,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1805,16 +1805,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -2099,11 +2104,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlock(Block.getByCombinedId(mat.getId()).getBlock().getBlockData()); } minecart.setDisplayBlockOffset(offset); 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 ee7d5b9b3..7f365d2a1 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 @@ -17,7 +17,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -76,6 +75,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1854,16 +1854,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX() || what.lastY != what.locY() || what.lastZ != what.locZ() || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX(), what.locY(), what.locZ(), what.yaw, what.pitch); + if (what.lastX != what.locX() || what.lastY != what.locY() || what.lastZ != what.locZ() + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX(), what.locY(), what.locZ(), what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -2143,11 +2148,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlock(Block.getByCombinedId(mat.getId()).getBlock().getBlockData()); } minecart.setDisplayBlockOffset(offset); 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 5553d63e2..ed756a109 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 @@ -17,7 +17,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -78,6 +77,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1874,16 +1874,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX() || what.lastY != what.locY() || what.lastZ != what.locZ() || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX(), what.locY(), what.locZ(), what.yaw, what.pitch); + if (what.lastX != what.locX() || what.lastY != what.locY() || what.lastZ != what.locZ() + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX(), what.locY(), what.locZ(), what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -2135,11 +2140,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlock(Block.getByCombinedId(mat.getId()).getBlock().getBlockData()); } minecart.setDisplayBlockOffset(offset); 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 3097aa0d5..ccd352710 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 @@ -16,7 +16,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -73,6 +72,7 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1867,6 +1867,28 @@ public class NMSImpl implements NMSBridge { } } + public static void callNPCMoveEvent(T what) { + final NPC npc = what.getNPC(); + if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { + if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() + || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { + Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); + Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), + what.getXRot()); + final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + final Location eventFrom = event.getFrom(); + what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); + } else if (!to.equals(event.getTo())) { + what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); + } + } + } + } + public static void checkAndUpdateHeight(LivingEntity living, EntityDataAccessor datawatcherobject, Consumer> cb) { EntityDimensions size; @@ -2037,24 +2059,6 @@ public class NMSImpl implements NMSBridge { entity.calculateEntityAnimation(entity, entity instanceof net.minecraft.world.entity.animal.FlyingAnimal); } - public static void callNPCMoveEvent(T what) { - final NPC npc = what.getNPC(); - if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { - Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); - Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), what.getXRot()); - final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - final Location eventFrom = event.getFrom(); - what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); - } else if (!to.equals(event.getTo())) { - what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); - } - } - } - } - public static TreeMap getBehaviorMap(LivingEntity entity) { try { return (TreeMap) BEHAVIOR_MAP.invoke(entity.getBrain()); @@ -2135,11 +2139,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.setCustomDisplay(mat != null); - if (mat != null) { + minecart.setCustomDisplay(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlockState(Registry.BLOCK.byId(mat.getId()).defaultBlockState()); } minecart.setDisplayOffset(offset); diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index ce0bc6431..9841e6fdc 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -15,7 +15,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -74,6 +73,7 @@ import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; import net.citizensnpcs.api.event.DespawnReason; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1875,6 +1875,28 @@ public class NMSImpl implements NMSBridge { } } + public static void callNPCMoveEvent(T what) { + final NPC npc = what.getNPC(); + if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { + if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() + || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { + Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); + Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), + what.getXRot()); + final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + final Location eventFrom = event.getFrom(); + what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); + } else if (!to.equals(event.getTo())) { + what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); + } + } + } + } + public static void checkAndUpdateHeight(LivingEntity living, EntityDataAccessor datawatcherobject, Consumer> cb) { EntityDimensions size; @@ -2045,24 +2067,6 @@ public class NMSImpl implements NMSBridge { entity.calculateEntityAnimation(entity, entity instanceof net.minecraft.world.entity.animal.FlyingAnimal); } - public static void callNPCMoveEvent(T what) { - final NPC npc = what.getNPC(); - if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { - Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); - Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), what.getXRot()); - final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - final Location eventFrom = event.getFrom(); - what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); - } else if (!to.equals(event.getTo())) { - what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); - } - } - } - } - public static TreeMap getBehaviorMap(LivingEntity entity) { try { return (TreeMap) BEHAVIOR_TREE_MAP.invoke(entity.getBrain()); @@ -2143,11 +2147,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, ""), false); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.setCustomDisplay(mat != null); - if (mat != null) { + minecart.setCustomDisplay(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlockState(Registry.BLOCK.byId(mat.getId()).defaultBlockState()); } minecart.setDisplayOffset(offset); diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java index a84843212..014780cc5 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java @@ -20,7 +20,6 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -81,6 +80,7 @@ import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; import net.citizensnpcs.api.event.DespawnReason; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -2079,6 +2079,28 @@ public class NMSImpl implements NMSBridge { } } + public static void callNPCMoveEvent(T what) { + final NPC npc = what.getNPC(); + if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { + if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() + || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { + Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); + Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), + what.getXRot()); + final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + final Location eventFrom = event.getFrom(); + what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); + } else if (!to.equals(event.getTo())) { + what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); + } + } + } + } + public static void checkAndUpdateHeight(LivingEntity living, EntityDataAccessor datawatcherobject, Consumer> cb) { EntityDimensions size; @@ -2245,24 +2267,6 @@ public class NMSImpl implements NMSBridge { entity.calculateEntityAnimation(entity instanceof net.minecraft.world.entity.animal.FlyingAnimal); } - public static void callNPCMoveEvent(T what) { - final NPC npc = what.getNPC(); - if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { - Location from = new Location(what.level.getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); - Location to = new Location(what.level.getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), what.getXRot()); - final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - final Location eventFrom = event.getFrom(); - what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); - } else if (!to.equals(event.getTo())) { - what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); - } - } - } - } - public static TreeMap getBehaviorMap(LivingEntity entity) { try { return (TreeMap) BEHAVIOR_TREE_MAP.invoke(entity.getBrain()); @@ -2376,11 +2380,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, ""), false); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.setCustomDisplay(mat != null); - if (mat != null) { + minecart.setCustomDisplay(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlockState(BuiltInRegistries.BLOCK.byId(mat.getId()).defaultBlockState()); } minecart.setDisplayOffset(offset); diff --git a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java index d5f804e65..b947fdca5 100644 --- a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java +++ b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java @@ -18,7 +18,6 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -77,6 +76,7 @@ import net.citizensnpcs.api.astar.pathfinder.DoorExaminer; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; import net.citizensnpcs.api.event.DespawnReason; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -2119,6 +2119,29 @@ public class NMSImpl implements NMSBridge { } } + public static void callNPCMoveEvent(T what) { + final NPC npc = what.getNPC(); + if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { + if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() + || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { + Location from = new Location(what.level().getWorld(), what.xo, what.yo, what.zo, what.yRotO, + what.xRotO); + Location to = new Location(what.level().getWorld(), what.getX(), what.getY(), what.getZ(), + what.getYRot(), what.getXRot()); + final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + final Location eventFrom = event.getFrom(); + what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); + } else if (!to.equals(event.getTo())) { + what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); + } + } + } + } + public static void checkAndUpdateHeight(LivingEntity living, EntityDataAccessor datawatcherobject, Consumer> cb) { EntityDimensions size; @@ -2321,24 +2344,6 @@ public class NMSImpl implements NMSBridge { entity.calculateEntityAnimation(entity instanceof net.minecraft.world.entity.animal.FlyingAnimal); } - public static void callNPCMoveEvent(T what) { - final NPC npc = what.getNPC(); - if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.xo != what.getX() || what.yo != what.getY() || what.zo != what.getZ() || what.yRotO != what.getYRot() || what.xRotO != what.getXRot()) { - Location from = new Location(what.level().getWorld(), what.xo, what.yo, what.zo, what.yRotO, what.xRotO); - Location to = new Location(what.level().getWorld(), what.getX(), what.getY(), what.getZ(), what.getYRot(), what.getXRot()); - final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - final Location eventFrom = event.getFrom(); - what.absMoveTo(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); - } else if (!to.equals(event.getTo())) { - what.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); - } - } - } - } - public static TreeMap getBehaviorMap(LivingEntity entity) { try { return (TreeMap) AVAILABLE_BEHAVIORS_BY_PRIORITY.invoke(entity.getBrain()); @@ -2450,11 +2455,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, ""), false); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.setCustomDisplay(mat != null); - if (mat != null) { + minecart.setCustomDisplay(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlockState(BuiltInRegistries.BLOCK.byId(mat.getId()).defaultBlockState()); } minecart.setDisplayOffset(offset); diff --git a/v1_21_R3/src/main/java/net/citizensnpcs/nms/v1_21_R3/util/NMSImpl.java b/v1_21_R3/src/main/java/net/citizensnpcs/nms/v1_21_R3/util/NMSImpl.java index 75d1d4ae9..c0c76d2b7 100644 --- a/v1_21_R3/src/main/java/net/citizensnpcs/nms/v1_21_R3/util/NMSImpl.java +++ b/v1_21_R3/src/main/java/net/citizensnpcs/nms/v1_21_R3/util/NMSImpl.java @@ -2339,11 +2339,10 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, ""), false); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); // TODO: migration for this int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.setCustomDisplay(mat != null); - if (mat != null) { + minecart.setCustomDisplay(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); minecart.setDisplayBlockState(BuiltInRegistries.BLOCK.byId(mat.getId()).defaultBlockState()); } minecart.setDisplayOffset(offset); diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index 9ee7df0f0..9f06a3cb3 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -19,7 +19,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import net.citizensnpcs.api.event.NPCMoveEvent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -75,6 +74,7 @@ import net.citizensnpcs.api.ai.NavigatorParameters; import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.command.CommandManager; import net.citizensnpcs.api.command.exception.CommandException; +import net.citizensnpcs.api.event.NPCMoveEvent; import net.citizensnpcs.api.gui.ForwardingInventory; import net.citizensnpcs.api.npc.BlockBreaker; import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration; @@ -1524,16 +1524,21 @@ public class NMSImpl implements NMSBridge { public static void callNPCMoveEvent(T what) { final NPC npc = what.getNPC(); if (npc != null && NPCMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { - if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { - Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, what.lastPitch); - Location to = new Location (what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, what.pitch); + if (what.lastX != what.locX || what.lastY != what.locY || what.lastZ != what.locZ + || what.lastYaw != what.yaw || what.lastPitch != what.pitch) { + Location from = new Location(what.world.getWorld(), what.lastX, what.lastY, what.lastZ, what.lastYaw, + what.lastPitch); + Location to = new Location(what.world.getWorld(), what.locX, what.locY, what.locZ, what.yaw, + what.pitch); final NPCMoveEvent event = new NPCMoveEvent(npc, from, to.clone()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { final Location eventFrom = event.getFrom(); - what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), eventFrom.getPitch()); + what.setLocation(eventFrom.getX(), eventFrom.getY(), eventFrom.getZ(), eventFrom.getYaw(), + eventFrom.getPitch()); } else if (!to.equals(event.getTo())) { - what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); + what.setLocation(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), + event.getTo().getYaw(), event.getTo().getPitch()); } } } @@ -1718,12 +1723,11 @@ public class NMSImpl implements NMSBridge { NPC npc = ((NPCHolder) minecart).getNPC(); if (npc == null) return; - Material mat = Material.getMaterial(npc.data().get(NPC.Metadata.MINECART_ITEM, "")); - int data = npc.data().get(NPC.Metadata.MINECART_ITEM_DATA, 0); int offset = npc.data().get(NPC.Metadata.MINECART_OFFSET, 0); - minecart.a(mat != null); - if (mat != null) { - minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(data)); + minecart.a(npc.getItemProvider().get() != null); + if (npc.getItemProvider().get() != null) { + Material mat = npc.getItemProvider().get().getType(); + minecart.setDisplayBlock(Block.getById(mat.getId()).fromLegacyData(0)); } minecart.SetDisplayBlockOffset(offset); }