diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java index 368aab382..c8468833e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; +import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.util.CustomTridentUtils; import net.momirealms.craftengine.core.item.Item; @@ -11,6 +12,7 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.entity.Trident; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; import org.checkerframework.checker.nullness.qual.NonNull; @@ -18,11 +20,14 @@ import org.incendo.cloud.Command; import org.incendo.cloud.bukkit.parser.NamespacedKeyParser; import org.incendo.cloud.context.CommandContext; import org.incendo.cloud.context.CommandInput; +import org.incendo.cloud.parser.standard.BooleanParser; import org.incendo.cloud.parser.standard.IntegerParser; import org.incendo.cloud.suggestion.Suggestion; import org.incendo.cloud.suggestion.SuggestionProvider; -import java.util.Objects; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -37,6 +42,7 @@ public class TestCommand extends BukkitCommandFeature { public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) + .required("forceUpdate", BooleanParser.booleanParser()) .required("id", NamespacedKeyParser.namespacedKeyComponent().suggestionProvider(new SuggestionProvider<>() { @Override public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { @@ -53,6 +59,18 @@ public class TestCommand extends BukkitCommandFeature { // .required("w", FloatParser.floatParser()) .handler(context -> { Player player = context.sender(); + if (context.get("forceUpdate")) { + net.momirealms.craftengine.core.entity.player.Player cePlayer = plugin().adapt(player); + Collection tridents = player.getWorld().getEntitiesByClass(Trident.class); + List packets = new ArrayList<>(); + for (Trident trident : tridents) { + int entityId = FastNMS.INSTANCE.method$Entity$getId(FastNMS.INSTANCE.method$CraftEntity$getHandle(trident)); + player.sendMessage("COMMAND entityId: " + entityId); + packets.add(CustomTridentUtils.buildCustomTridentSetEntityDataPacket(cePlayer, entityId)); + } + cePlayer.sendPackets(packets, true); + return; + } NamespacedKey namespacedKey = context.get("id"); ItemStack item = new ItemStack(Material.TRIDENT); // NamespacedKey displayTypeKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:display_type")); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/CustomTridentUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/CustomTridentUtils.java index 761b411e2..aeb96c865 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/CustomTridentUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/CustomTridentUtils.java @@ -38,9 +38,7 @@ public class CustomTridentUtils { modifyCustomTridentPacket(packet); List itemDisplayValues = buildEntityDataValues(trident); user.tridentView().put(entityId, itemDisplayValues); - event.addDelayedTask(() -> { - user.sendPacket(FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(entityId, itemDisplayValues), true); - }); + event.addDelayedTask(() -> user.sendPacket(FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(entityId, itemDisplayValues), true)); } @Nullable @@ -105,14 +103,20 @@ public class CustomTridentUtils { Reflections.field$ClientboundMoveEntityPacket$yRot.setByte(packet, MCUtils.packDegrees(-yRot)); } - public static void modifyCustomTridentSetEntityData(NetWorkUser user, NMSPacketEvent event, int entityId) { - List newData = user.tridentView().get(entityId); + public static Object buildCustomTridentSetEntityDataPacket(NetWorkUser user, int entityId) { + List newData = user.tridentView().getOrDefault(entityId, List.of()); if (newData.isEmpty()) { Trident trident = getTridentById(user, entityId); - if (!isCustomTrident(trident)) return; + if (!isCustomTrident(trident)) return null; newData = buildEntityDataValues(trident); user.tridentView().put(entityId, newData); } - event.replacePacket(FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(entityId, newData)); + return FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(entityId, newData); + } + + public static void modifyCustomTridentSetEntityData(NetWorkUser user, NMSPacketEvent event, int entityId) { + Object packet = buildCustomTridentSetEntityDataPacket(user, entityId); + if (packet == null) return; + event.replacePacket(packet); } }