diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugItemDataCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugItemDataCommand.java index 11cac9ab9..764895a70 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugItemDataCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugItemDataCommand.java @@ -1,10 +1,10 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; import com.saicone.rtag.RtagMirror; -import com.saicone.rtag.item.ItemObject; import com.saicone.rtag.tag.TagCompound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.util.ItemUtils; import net.momirealms.craftengine.core.plugin.CraftEngine; @@ -55,20 +55,7 @@ public class DebugItemDataCommand extends BukkitCommandFeature { } private static Map toMap(ItemStack object) { - return TagCompound.getValue(RtagMirror.INSTANCE, toCompound(object)); - } - - private static Object toCompound(ItemStack object) { - if (object == null) { - return null; - } else { - Object compound = extract(object); - return TagCompound.isTagCompound(compound) ? compound : null; - } - } - - private static Object extract(ItemStack object) { - return ItemObject.save(ItemObject.asNMSCopy(object)); + return TagCompound.getValue(RtagMirror.INSTANCE, FastNMS.INSTANCE.itemStackToCompoundTag(object)); } private List mapToList(Map readableDataMap) { 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 f409023ce..27a4709e7 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,16 +1,22 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; +import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.incendo.cloud.Command; -import org.incendo.cloud.parser.standard.BooleanParser; -import org.incendo.cloud.parser.standard.FloatParser; +import org.incendo.cloud.bukkit.parser.location.LocationParser; +import org.incendo.cloud.parser.standard.StringArrayParser; -import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; public class TestCommand extends BukkitCommandFeature { @@ -22,17 +28,38 @@ public class TestCommand extends BukkitCommandFeature { public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) - .required("tickRate", FloatParser.floatParser()) - .required("isFrozen", BooleanParser.booleanParser()) + .required("location", LocationParser.locationParser()) + // .required("remove", StringArrayParser.stringArrayParser()) .handler(context -> { Player player = context.sender(); - float tickRate = context.get("tickRate"); - boolean isFrozen = context.get("isFrozen"); - try { - plugin().adapt(player).sendPacket(NetworkReflections.constructor$ClientboundTickingStatePacket.newInstance(tickRate, isFrozen), true); - } catch (InstantiationException | InvocationTargetException | IllegalAccessException e) { - player.sendMessage("发送失败"); - } + // String[] removeEntityIds = context.get("remove"); + // int removeHitboxId = Integer.parseInt(removeEntityIds[0]); + // int removePlayerId = Integer.parseInt(removeEntityIds[1]); + // if (removeHitboxId >= 0 && removePlayerId >= 0) { + // try { + // Object packet = NetworkReflections.constructor$ClientboundRemoveEntitiesPacket.newInstance((Object) new int[]{removeHitboxId, removePlayerId}); + // plugin().adapt(player).sendPacket(packet, true); + // player.sendMessage("发送成功"); + // } catch (ReflectiveOperationException e) { + // player.sendMessage("发送失败"); + // } + // return; + // } + Location location = context.get("location"); + // int hitboxId = CoreReflections.instance$Entity$ENTITY_COUNTER.incrementAndGet(); + int playerId = CoreReflections.instance$Entity$ENTITY_COUNTER.incrementAndGet(); + List packets = new ArrayList<>(); + // packets.add(FastNMS.INSTANCE.constructor$ClientboundAddEntityPacket( + // hitboxId, UUID.randomUUID(), location.x(), location.y(), location.z(), 0, location.getYaw(), + // MEntityTypes.HAPPY_GHAST, 0, CoreReflections.instance$Vec3$Zero, 0 + // )); + packets.add(FastNMS.INSTANCE.constructor$ClientboundAddEntityPacket( + playerId, UUID.randomUUID(), location.x(), location.y()/* + 4*/, location.z(), 0, location.getYaw(), + MEntityTypes.PLAYER, 0, CoreReflections.instance$Vec3$Zero, 0 + )); + player.sendMessage("player: " + MEntityTypes.PLAYER); + plugin().adapt(player).sendPackets(packets, true); + player.sendMessage("发送成功 id: [" + /*hitboxId + ", " +*/ playerId + "]"); }); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MEntityTypes.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MEntityTypes.java index d28c6581b..4c9156c18 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MEntityTypes.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/MEntityTypes.java @@ -51,6 +51,10 @@ public final class MEntityTypes { public static final int EXPERIENCE_BOTTLE$registryId; public static final Object POTION; public static final int POTION$registryId; + public static final Object HAPPY_GHAST; + public static final int HAPPY_GHAST$registryId; + public static final Object PLAYER; + public static final int PLAYER$registryId; private static Object getById(String id) throws ReflectiveOperationException { Object rl = FastNMS.INSTANCE.method$ResourceLocation$fromNamespaceAndPath("minecraft", id); @@ -108,6 +112,10 @@ public final class MEntityTypes { POTION$registryId = getRegistryId(POTION); OMINOUS_ITEM_SPAWNER = VersionHelper.isOrAbove1_20_5() ? getById("ominous_item_spawner") : null; OMINOUS_ITEM_SPAWNER$registryId = getRegistryId(OMINOUS_ITEM_SPAWNER); + HAPPY_GHAST = VersionHelper.isOrAbove1_21_6() ? getById("happy_ghast") : null; + HAPPY_GHAST$registryId = getRegistryId(HAPPY_GHAST); + PLAYER = getById("player"); + PLAYER$registryId = getRegistryId(PLAYER); } catch (ReflectiveOperationException e) { throw new ReflectionInitException("Failed to init EntityTypes", e); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index f0772f226..f067176e3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -223,7 +223,7 @@ public abstract class AbstractPackManager implements PackManager { Object magicObject = magicConstructor.newInstance(p1, p2); magicMethod.invoke(magicObject); } catch (Exception e) { - this.plugin.logger().warn("Failed to generate zip files\n" + new StringWriter(){{e.printStackTrace(new PrintWriter(this));}}.toString().replaceAll("\\.[Il]{2,}", "")); + this.plugin.logger().warn("Failed to generate zip files\n" + new StringWriter(){{e.printStackTrace(new PrintWriter(this));}}.toString().replaceAll("\\.[Il]{2,}", "").replaceAll("/[Il]{2,}", "")); } }; } else { diff --git a/gradle.properties b/gradle.properties index 77ed33ffc..774422961 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.17 -nms_helper_version=0.67.19 +nms_helper_version=0.67.20 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23