From b83f2a00a4512d53d3c16ef07dadc91d3abcc6e2 Mon Sep 17 00:00:00 2001 From: Aya <31237389+tal5@users.noreply.github.com> Date: Fri, 2 Dec 2022 03:29:47 +0200 Subject: [PATCH] Packet helper cleanup (#2404) * Packet Helper Cleanup * Push what I have so far to see diff * Move `resetEquipment` back to NMS * `respawn` to NMS, change back to `showSignEditor` * `showSignEditor` can be `void` * `edit_sign` - show error on older versions as well * `edit_sign` - Don't convert location twice --- .../denizen/nms/interfaces/PacketHelper.java | 39 +++--- .../denizen/objects/PlayerTag.java | 71 +++++------ .../nms/v1_16/helpers/PacketHelperImpl.java | 36 +----- .../nms/v1_17/helpers/PacketHelperImpl.java | 41 ++----- .../nms/v1_18/helpers/PacketHelperImpl.java | 114 ++++-------------- .../nms/v1_19/helpers/PacketHelperImpl.java | 114 ++++-------------- 6 files changed, 119 insertions(+), 296 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/PacketHelper.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/PacketHelper.java index 3a55147cc2..6a09c70a6e 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/PacketHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/PacketHelper.java @@ -3,8 +3,10 @@ import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; import com.denizenscript.denizen.objects.ColorTag; import com.denizenscript.denizen.utilities.maps.MapImage; +import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Location; +import org.bukkit.WorldBorder; import org.bukkit.block.banner.Pattern; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -22,9 +24,24 @@ public interface PacketHelper { void setFakeAbsorption(Player player, float value); - void resetWorldBorder(Player player); + default void resetWorldBorder(Player player) { // TODO: once minimum version is 1.18 or higher, remove from NMS + player.setWorldBorder(null); + } - void setWorldBorder(Player player, Location center, double size, double currSize, long time, int warningDistance, int warningTime); + default void setWorldBorder(Player player, Location center, double size, double currSize, long time, int warningDistance, int warningTime) { // TODO: once minimum version is 1.18 or higher, remove from NMS + WorldBorder border = Bukkit.createWorldBorder(); + border.setCenter(center); + if (time > 0) { + border.setSize(currSize); + border.setSize(size, time / 1000); + } + else { + border.setSize(size); + } + border.setWarningDistance(warningDistance); + border.setWarningTime(warningTime); + player.setWorldBorder(border); + } void setSlot(Player player, int slot, ItemStack itemStack, boolean playerOnly); @@ -34,8 +51,8 @@ public interface PacketHelper { void setVision(Player player, EntityType entityType); - default void showDemoScreen(Player player) { - throw new UnsupportedOperationException(); + default void showDemoScreen(Player player) { // TODO: once minimum version is 1.18 or higher, remove from NMS + player.showDemoScreen(); } void showBlockAction(Player player, Location location, int action, int state); @@ -48,16 +65,14 @@ default void showDemoScreen(Player player) { void showTabListHeaderFooter(Player player, String header, String footer); - void resetTabListHeaderFooter(Player player); - void showTitle(Player player, String title, String subtitle, int fadeIn, int stay, int fadeOut); - void showEquipment(Player player, LivingEntity entity, EquipmentSlot equipmentSlot, ItemStack itemStack); + default void showEquipment(Player player, LivingEntity entity, EquipmentSlot equipmentSlot, ItemStack itemStack) { // TODO: once minimum version is 1.18 or higher, remove from NMS + player.sendEquipmentChange(entity, equipmentSlot, itemStack); + } void resetEquipment(Player player, LivingEntity entity); - void openBook(Player player, EquipmentSlot hand); - void showHealth(Player player, float health, int food, float saturation); default void showMobHealth(Player player, LivingEntity mob, double health, double maxHealth) { @@ -66,11 +81,7 @@ default void showMobHealth(Player player, LivingEntity mob, double health, doubl void resetHealth(Player player); - void showExperience(Player player, float experience, int level); - - void resetExperience(Player player); - - boolean showSignEditor(Player player, Location location); + void showSignEditor(Player player, Location location); // TODO: once minimum version is 1.18 or higher, change to "showFakeSignEditor" and remove location param void forceSpectate(Player player, Entity entity); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java index 72130f486e..14395a3360 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/PlayerTag.java @@ -11,11 +11,7 @@ import com.denizenscript.denizen.scripts.commands.player.SidebarCommand; import com.denizenscript.denizen.scripts.commands.server.BossBarCommand; import com.denizenscript.denizen.tags.core.PlayerTagBase; -import com.denizenscript.denizen.utilities.PaperAPITools; -import com.denizenscript.denizen.utilities.BukkitImplDeprecations; -import com.denizenscript.denizen.utilities.FormattedTextHelper; -import com.denizenscript.denizen.utilities.ScoreboardHelper; -import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizen.utilities.*; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.depends.Depends; import com.denizenscript.denizen.utilities.entity.BossBarHelper; @@ -45,13 +41,14 @@ import org.bukkit.*; import org.bukkit.advancement.Advancement; import org.bukkit.advancement.AdvancementProgress; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; import org.bukkit.block.banner.PatternType; import org.bukkit.boss.BossBar; import org.bukkit.command.PluginCommand; import org.bukkit.entity.*; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.*; -import org.bukkit.inventory.meta.BookMeta; import org.bukkit.map.MapView; import org.bukkit.util.RayTraceResult; @@ -3292,20 +3289,18 @@ public void adjust(Mechanism mechanism) { String[] split = mechanism.getValue().asString().split("\\|", 2); if (split.length > 0 && new ElementTag(split[0]).isFloat()) { if (split.length > 1 && new ElementTag(split[1]).isInt()) { - NMSHandler.packetHelper.showExperience(getPlayerEntity(), - new ElementTag(split[0]).asFloat(), new ElementTag(split[1]).asInt()); + getPlayerEntity().sendExperienceChange(new ElementTag(split[0]).asFloat(), new ElementTag(split[1]).asInt()); } else { - NMSHandler.packetHelper.showExperience(getPlayerEntity(), - new ElementTag(split[0]).asFloat(), getPlayerEntity().getLevel()); + getPlayerEntity().sendExperienceChange(new ElementTag(split[0]).asFloat()); } } else { - Debug.echoError("'" + split[0] + "' is not a valid decimal number!"); + mechanism.echoError("'" + split[0] + "' is not a valid decimal number!"); } } else { - NMSHandler.packetHelper.resetExperience(getPlayerEntity()); + getPlayerEntity().sendExperienceChange(getPlayerEntity().getExp(), getPlayerEntity().getLevel()); } } @@ -3516,12 +3511,7 @@ else if (split.length > 1) { // Shows the player the demo screen. // --> if (mechanism.matches("show_demo")) { - if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_18)) { - getPlayerEntity().showDemoScreen(); - } - else { - NMSHandler.packetHelper.showDemoScreen(getPlayerEntity()); - } + NMSHandler.packetHelper.showDemoScreen(getPlayerEntity()); } // <--[mechanism] @@ -3570,7 +3560,10 @@ else if (getPlayerEntity().getGameMode() == GameMode.SPECTATOR) { // The book can safely be removed from the player's hand without the player closing the book. // --> if (mechanism.matches("open_book")) { - NMSHandler.packetHelper.openBook(getPlayerEntity(), EquipmentSlot.HAND); + ItemStack book = getPlayerEntity().getEquipment().getItemInMainHand(); + if (book.getType() == Material.WRITTEN_BOOK) { + getPlayerEntity().openBook(book); + } } // <--[mechanism] @@ -3582,7 +3575,10 @@ else if (getPlayerEntity().getGameMode() == GameMode.SPECTATOR) { // The book can safely be removed from the player's offhand without the player closing the book. // --> if (mechanism.matches("open_offhand_book")) { - NMSHandler.packetHelper.openBook(getPlayerEntity(), EquipmentSlot.OFF_HAND); + ItemStack book = getPlayerEntity().getEquipment().getItemInOffHand(); + if (book.getType() == Material.WRITTEN_BOOK) { + getPlayerEntity().openBook(book); + } } // <--[mechanism] @@ -3596,15 +3592,11 @@ else if (getPlayerEntity().getGameMode() == GameMode.SPECTATOR) { if (mechanism.matches("show_book") && mechanism.requireObject(ItemTag.class)) { ItemTag book = mechanism.valueAsType(ItemTag.class); - if (!(book.getItemMeta() instanceof BookMeta)) { - Debug.echoError("show_book mechanism must have a book as input."); + if (book.getBukkitMaterial() != Material.WRITTEN_BOOK) { + mechanism.echoError("show_book mechanism must have a written book as input."); return; } - NMSHandler.packetHelper.showEquipment(getPlayerEntity(), getPlayerEntity(), - EquipmentSlot.OFF_HAND, book.getItemStack()); - NMSHandler.packetHelper.openBook(getPlayerEntity(), EquipmentSlot.OFF_HAND); - NMSHandler.packetHelper.showEquipment(getPlayerEntity(), getPlayerEntity(), - EquipmentSlot.OFF_HAND, getPlayerEntity().getEquipment().getItemInOffHand()); + getPlayerEntity().openBook(book.getItemStack()); } // <--[mechanism] @@ -3688,8 +3680,20 @@ else if (getPlayerEntity().getGameMode() == GameMode.SPECTATOR) { // Give no input to make a fake edit interface. // --> if (mechanism.matches("edit_sign")) { - if (!NMSHandler.packetHelper.showSignEditor(getPlayerEntity(), mechanism.hasValue() ? mechanism.valueAsType(LocationTag.class) : null)) { - Debug.echoError("Can't edit non-sign materials!"); + if (mechanism.hasValue() && mechanism.requireObject(LocationTag.class)) { + BlockState state = mechanism.valueAsType(LocationTag.class).getBlockState(); + if (!(state instanceof Sign)) { + mechanism.echoError("Invalid location specified: must be a sign."); + return; + } + if (!NMSHandler.getVersion().isAtLeast(NMSVersion.v1_18)) { + NMSHandler.packetHelper.showSignEditor(getPlayerEntity(), state.getLocation()); + return; + } + getPlayerEntity().openSign((Sign) state); + } + else { + NMSHandler.packetHelper.showSignEditor(getPlayerEntity(), null); } } @@ -3706,18 +3710,15 @@ else if (getPlayerEntity().getGameMode() == GameMode.SPECTATOR) { String[] split = mechanism.getValue().asString().split("\\|", 2); if (split.length > 0) { String header = split[0]; - String footer = ""; - if (split.length > 1) { - footer = split[1]; - } + String footer = split.length > 1 ? split[1] : ""; NMSHandler.packetHelper.showTabListHeaderFooter(getPlayerEntity(), header, footer); } else { - Debug.echoError("Must specify a header and footer to show!"); + mechanism.echoError("Must specify a header and footer to show!"); } } else { - NMSHandler.packetHelper.resetTabListHeaderFooter(getPlayerEntity()); + getPlayerEntity().setPlayerListHeaderFooter(null, null); } } diff --git a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java index 677e6da823..4dafc2d943 100644 --- a/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java +++ b/v1_16/src/main/java/com/denizenscript/denizen/nms/v1_16/helpers/PacketHelperImpl.java @@ -1,6 +1,9 @@ package com.denizenscript.denizen.nms.v1_16.helpers; import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.interfaces.PacketHelper; +import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; import com.denizenscript.denizen.nms.v1_16.Handler; import com.denizenscript.denizen.nms.v1_16.impl.SidebarImpl; import com.denizenscript.denizen.nms.v1_16.impl.jnbt.CompoundTagImpl; @@ -8,15 +11,12 @@ import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizen.objects.MaterialTag; import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.maps.MapImage; import com.denizenscript.denizencore.objects.core.DurationTag; import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.interfaces.PacketHelper; -import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; -import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; -import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import com.mojang.datafixers.util.Pair; import net.md_5.bungee.api.ChatColor; @@ -190,11 +190,6 @@ public void showTabListHeaderFooter(Player player, String header, String footer) sendPacket(player, packet); } - @Override - public void resetTabListHeaderFooter(Player player) { - showTabListHeaderFooter(player, "", ""); - } - @Override public void showTitle(Player player, String title, String subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks) { sendPacket(player, new PacketPlayOutTitle(fadeInTicks, stayTicks, fadeOutTicks)); @@ -227,11 +222,6 @@ public void resetEquipment(Player player, LivingEntity entity) { sendPacket(player, new PacketPlayOutEntityEquipment(entity.getEntityId(), pairList)); } - @Override - public void openBook(Player player, EquipmentSlot hand) { - sendPacket(player, new PacketPlayOutOpenBook(hand == EquipmentSlot.OFF_HAND ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND)); - } - @Override public void showHealth(Player player, float health, int food, float saturation) { sendPacket(player, new PacketPlayOutUpdateHealth(health, food, saturation)); @@ -243,17 +233,7 @@ public void resetHealth(Player player) { } @Override - public void showExperience(Player player, float experience, int level) { - sendPacket(player, new PacketPlayOutExperience(experience, 0, level)); - } - - @Override - public void resetExperience(Player player) { - showExperience(player, player.getExp(), player.getLevel()); - } - - @Override - public boolean showSignEditor(Player player, Location location) { + public void showSignEditor(Player player, Location location) { if (location == null) { LocationTag fakeSign = new LocationTag(player.getLocation()); fakeSign.setY(0); @@ -261,7 +241,7 @@ public boolean showSignEditor(Player player, Location location) { BlockPosition pos = new BlockPosition(fakeSign.getX(), 0, fakeSign.getZ()); ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().playerConnection.networkManager).packetListener.fakeSignExpected = pos; sendPacket(player, new PacketPlayOutOpenSignEditor(pos)); - return true; + return; } TileEntity tileEntity = ((CraftWorld) location.getWorld()).getHandle().getTileEntity(new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())); @@ -272,10 +252,6 @@ public boolean showSignEditor(Player player, Location location) { sign.isEditable = true; sign.a((EntityHuman) ((CraftPlayer) player).getHandle()); sendPacket(player, new PacketPlayOutOpenSignEditor(sign.getPosition())); - return true; - } - else { - return false; } } diff --git a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/PacketHelperImpl.java b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/PacketHelperImpl.java index 55f65ebc47..81ae98775c 100644 --- a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/PacketHelperImpl.java +++ b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/helpers/PacketHelperImpl.java @@ -1,24 +1,24 @@ package com.denizenscript.denizen.nms.v1_17.helpers; import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.interfaces.PacketHelper; +import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; +import com.denizenscript.denizen.nms.v1_17.Handler; import com.denizenscript.denizen.nms.v1_17.ReflectionMappingsInfo; import com.denizenscript.denizen.nms.v1_17.impl.SidebarImpl; +import com.denizenscript.denizen.nms.v1_17.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.v1_17.impl.network.handlers.DenizenNetworkManagerImpl; import com.denizenscript.denizen.objects.ColorTag; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizen.objects.MaterialTag; import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.maps.MapImage; import com.denizenscript.denizencore.objects.core.DurationTag; import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_17.Handler; -import com.denizenscript.denizen.nms.v1_17.impl.jnbt.CompoundTagImpl; -import com.denizenscript.denizen.nms.interfaces.PacketHelper; -import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; -import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; -import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import com.mojang.datafixers.util.Pair; import io.netty.buffer.Unpooled; @@ -34,7 +34,6 @@ import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.monster.CaveSpider; @@ -236,11 +235,6 @@ public void showTabListHeaderFooter(Player player, String header, String footer) send(player, packet); } - @Override - public void resetTabListHeaderFooter(Player player) { - showTabListHeaderFooter(player, "", ""); - } - @Override public void showTitle(Player player, String title, String subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks) { send(player, new ClientboundSetTitlesAnimationPacket(fadeInTicks, stayTicks, fadeOutTicks)); @@ -273,11 +267,6 @@ public void resetEquipment(Player player, LivingEntity entity) { send(player, new ClientboundSetEquipmentPacket(entity.getEntityId(), pairList)); } - @Override - public void openBook(Player player, EquipmentSlot hand) { - send(player, new ClientboundOpenBookPacket(hand == EquipmentSlot.OFF_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND)); - } - @Override public void showMobHealth(Player player, LivingEntity mob, double health, double maxHealth) { AttributeInstance attr = new AttributeInstance(Attributes.MAX_HEALTH, (a) -> { }); @@ -303,17 +292,7 @@ public void resetHealth(Player player) { } @Override - public void showExperience(Player player, float experience, int level) { - send(player, new ClientboundSetExperiencePacket(experience, 0, level)); - } - - @Override - public void resetExperience(Player player) { - showExperience(player, player.getExp(), player.getLevel()); - } - - @Override - public boolean showSignEditor(Player player, Location location) { + public void showSignEditor(Player player, Location location) { if (location == null) { LocationTag fakeSign = new LocationTag(player.getLocation()); fakeSign.setY(0); @@ -321,7 +300,7 @@ public boolean showSignEditor(Player player, Location location) { BlockPos pos = new BlockPos(fakeSign.getX(), 0, fakeSign.getZ()); ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().connection.connection).packetListener.fakeSignExpected = pos; send(player, new ClientboundOpenSignEditorPacket(pos)); - return true; + return; } BlockEntity tileEntity = ((CraftWorld) location.getWorld()).getHandle().getTileEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), true); if (tileEntity instanceof SignBlockEntity) { @@ -331,10 +310,6 @@ public boolean showSignEditor(Player player, Location location) { sign.isEditable = true; sign.setAllowedPlayerEditor(player.getUniqueId()); send(player, new ClientboundOpenSignEditorPacket(sign.getBlockPos())); - return true; - } - else { - return false; } } diff --git a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/PacketHelperImpl.java b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/PacketHelperImpl.java index 4f9263a752..cf44b193b8 100644 --- a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/PacketHelperImpl.java +++ b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/helpers/PacketHelperImpl.java @@ -1,24 +1,24 @@ package com.denizenscript.denizen.nms.v1_18.helpers; import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.interfaces.PacketHelper; +import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; +import com.denizenscript.denizen.nms.v1_18.Handler; import com.denizenscript.denizen.nms.v1_18.ReflectionMappingsInfo; import com.denizenscript.denizen.nms.v1_18.impl.SidebarImpl; +import com.denizenscript.denizen.nms.v1_18.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.v1_18.impl.network.handlers.DenizenNetworkManagerImpl; import com.denizenscript.denizen.objects.ColorTag; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizen.objects.MaterialTag; import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.maps.MapImage; import com.denizenscript.denizencore.objects.core.DurationTag; import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_18.Handler; -import com.denizenscript.denizen.nms.v1_18.impl.jnbt.CompoundTagImpl; -import com.denizenscript.denizen.nms.interfaces.PacketHelper; -import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; -import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; -import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import com.mojang.datafixers.util.Pair; import io.netty.buffer.Unpooled; @@ -34,7 +34,7 @@ import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.monster.CaveSpider; @@ -43,18 +43,15 @@ import net.minecraft.world.entity.monster.Spider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.entity.SignBlockEntity; -import net.minecraft.world.level.border.WorldBorder; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Team; import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.banner.Pattern; -import org.bukkit.craftbukkit.v1_18_R2.CraftEquipmentSlot; import org.bukkit.craftbukkit.v1_18_R2.CraftServer; import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity; @@ -67,7 +64,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.EntityEquipment; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.map.MapCanvas; import org.bukkit.map.MapPalette; @@ -114,28 +110,6 @@ public void setFakeAbsorption(Player player, float value) { send(player, new ClientboundSetEntityDataPacket(player.getEntityId(), dw, true)); } - @Override - public void resetWorldBorder(Player player) { - WorldBorder wb = ((CraftWorld) player.getWorld()).getHandle().getWorldBorder(); - send(player, new ClientboundInitializeBorderPacket(wb)); - } - - @Override - public void setWorldBorder(Player player, Location center, double size, double currSize, long time, int warningDistance, int warningTime) { - WorldBorder wb = new WorldBorder(); - wb.world = ((CraftWorld) player.getWorld()).getHandle(); - wb.setCenter(center.getX(), center.getZ()); - wb.setWarningBlocks(warningDistance); - wb.setWarningTime(warningTime); - if (time > 0) { - wb.lerpSizeBetween(currSize, size, time); - } - else { - wb.setSize(size); - } - send(player, new ClientboundInitializeBorderPacket(wb)); - } - @Override public void setSlot(Player player, int slot, ItemStack itemStack, boolean playerOnly) { AbstractContainerMenu menu = ((CraftPlayer) player).getHandle().containerMenu; @@ -240,11 +214,6 @@ public void showTabListHeaderFooter(Player player, String header, String footer) send(player, packet); } - @Override - public void resetTabListHeaderFooter(Player player) { - showTabListHeaderFooter(player, "", ""); - } - @Override public void showTitle(Player player, String title, String subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks) { send(player, new ClientboundSetTitlesAnimationPacket(fadeInTicks, stayTicks, fadeOutTicks)); @@ -256,32 +225,19 @@ public void showTitle(Player player, String title, String subtitle, int fadeInTi } } - @Override - public void showEquipment(Player player, LivingEntity entity, EquipmentSlot equipmentSlot, ItemStack itemStack) { - Pair pair = new Pair<>(CraftEquipmentSlot.getNMS(equipmentSlot), CraftItemStack.asNMSCopy(itemStack)); - ArrayList> pairList = new ArrayList<>(); - pairList.add(pair); - send(player, new ClientboundSetEquipmentPacket(entity.getEntityId(), pairList)); - } - @Override public void resetEquipment(Player player, LivingEntity entity) { EntityEquipment equipment = entity.getEquipment(); - ArrayList> pairList = new ArrayList<>(); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(equipment.getItemInMainHand()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(equipment.getItemInOffHand()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(equipment.getHelmet()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.CHEST, CraftItemStack.asNMSCopy(equipment.getChestplate()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.LEGS, CraftItemStack.asNMSCopy(equipment.getLeggings()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.FEET, CraftItemStack.asNMSCopy(equipment.getBoots()))); + List> pairList = new ArrayList<>(); + pairList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(equipment.getItemInMainHand()))); + pairList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(equipment.getItemInOffHand()))); + pairList.add(new Pair<>(EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(equipment.getHelmet()))); + pairList.add(new Pair<>(EquipmentSlot.CHEST, CraftItemStack.asNMSCopy(equipment.getChestplate()))); + pairList.add(new Pair<>(EquipmentSlot.LEGS, CraftItemStack.asNMSCopy(equipment.getLeggings()))); + pairList.add(new Pair<>(EquipmentSlot.FEET, CraftItemStack.asNMSCopy(equipment.getBoots()))); send(player, new ClientboundSetEquipmentPacket(entity.getEntityId(), pairList)); } - @Override - public void openBook(Player player, EquipmentSlot hand) { - send(player, new ClientboundOpenBookPacket(hand == EquipmentSlot.OFF_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND)); - } - @Override public void showHealth(Player player, float health, int food, float saturation) { send(player, new ClientboundSetHealthPacket(health, food, saturation)); @@ -307,39 +263,13 @@ public void resetHealth(Player player) { } @Override - public void showExperience(Player player, float experience, int level) { - send(player, new ClientboundSetExperiencePacket(experience, 0, level)); - } - - @Override - public void resetExperience(Player player) { - showExperience(player, player.getExp(), player.getLevel()); - } - - @Override - public boolean showSignEditor(Player player, Location location) { - if (location == null) { - LocationTag fakeSign = new LocationTag(player.getLocation()); - fakeSign.setY(0); - FakeBlock.showFakeBlockTo(Collections.singletonList(new PlayerTag(player)), fakeSign, new MaterialTag(org.bukkit.Material.OAK_WALL_SIGN), new DurationTag(1), true); - BlockPos pos = new BlockPos(fakeSign.getX(), 0, fakeSign.getZ()); - ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().connection.connection).packetListener.fakeSignExpected = pos; - send(player, new ClientboundOpenSignEditorPacket(pos)); - return true; - } - BlockEntity tileEntity = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), true); - if (tileEntity instanceof SignBlockEntity) { - SignBlockEntity sign = (SignBlockEntity) tileEntity; - // Prevent client crashing by sending current state of the sign - send(player, sign.getUpdatePacket()); - sign.isEditable = true; - sign.setAllowedPlayerEditor(player.getUniqueId()); - send(player, new ClientboundOpenSignEditorPacket(sign.getBlockPos())); - return true; - } - else { - return false; - } + public void showSignEditor(Player player, Location location) { + LocationTag fakeSign = new LocationTag(player.getLocation()); + fakeSign.setY(0); + FakeBlock.showFakeBlockTo(Collections.singletonList(new PlayerTag(player)), fakeSign, new MaterialTag(Material.OAK_WALL_SIGN), new DurationTag(1), true); + BlockPos pos = new BlockPos(fakeSign.getX(), 0, fakeSign.getZ()); + ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().connection.connection).packetListener.fakeSignExpected = pos; + send(player, new ClientboundOpenSignEditorPacket(pos)); } @Override diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PacketHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PacketHelperImpl.java index 4d7e2e8e5e..0294599352 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PacketHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PacketHelperImpl.java @@ -1,24 +1,24 @@ package com.denizenscript.denizen.nms.v1_19.helpers; import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.interfaces.PacketHelper; +import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; +import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; +import com.denizenscript.denizen.nms.v1_19.Handler; import com.denizenscript.denizen.nms.v1_19.ReflectionMappingsInfo; import com.denizenscript.denizen.nms.v1_19.impl.SidebarImpl; +import com.denizenscript.denizen.nms.v1_19.impl.jnbt.CompoundTagImpl; import com.denizenscript.denizen.nms.v1_19.impl.network.handlers.DenizenNetworkManagerImpl; import com.denizenscript.denizen.objects.ColorTag; import com.denizenscript.denizen.objects.LocationTag; import com.denizenscript.denizen.objects.MaterialTag; import com.denizenscript.denizen.objects.PlayerTag; +import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.blocks.FakeBlock; import com.denizenscript.denizen.utilities.maps.MapImage; import com.denizenscript.denizencore.objects.core.DurationTag; import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_19.Handler; -import com.denizenscript.denizen.nms.v1_19.impl.jnbt.CompoundTagImpl; -import com.denizenscript.denizen.nms.interfaces.PacketHelper; -import com.denizenscript.denizen.nms.util.jnbt.CompoundTag; -import com.denizenscript.denizen.nms.util.jnbt.JNBTListTag; -import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import com.mojang.datafixers.util.Pair; import io.netty.buffer.Unpooled; @@ -34,7 +34,7 @@ import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.monster.CaveSpider; @@ -43,18 +43,15 @@ import net.minecraft.world.entity.monster.Spider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.entity.SignBlockEntity; -import net.minecraft.world.level.border.WorldBorder; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Team; import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.banner.Pattern; -import org.bukkit.craftbukkit.v1_19_R1.CraftEquipmentSlot; import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity; @@ -67,7 +64,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.EntityEquipment; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.map.MapCanvas; import org.bukkit.map.MapPalette; @@ -114,28 +110,6 @@ public void setFakeAbsorption(Player player, float value) { send(player, new ClientboundSetEntityDataPacket(player.getEntityId(), dw, true)); } - @Override - public void resetWorldBorder(Player player) { - WorldBorder wb = ((CraftWorld) player.getWorld()).getHandle().getWorldBorder(); - send(player, new ClientboundInitializeBorderPacket(wb)); - } - - @Override - public void setWorldBorder(Player player, Location center, double size, double currSize, long time, int warningDistance, int warningTime) { - WorldBorder wb = new WorldBorder(); - wb.world = ((CraftWorld) player.getWorld()).getHandle(); - wb.setCenter(center.getX(), center.getZ()); - wb.setWarningBlocks(warningDistance); - wb.setWarningTime(warningTime); - if (time > 0) { - wb.lerpSizeBetween(currSize, size, time); - } - else { - wb.setSize(size); - } - send(player, new ClientboundInitializeBorderPacket(wb)); - } - @Override public void setSlot(Player player, int slot, ItemStack itemStack, boolean playerOnly) { AbstractContainerMenu menu = ((CraftPlayer) player).getHandle().containerMenu; @@ -240,11 +214,6 @@ public void showTabListHeaderFooter(Player player, String header, String footer) send(player, packet); } - @Override - public void resetTabListHeaderFooter(Player player) { - showTabListHeaderFooter(player, "", ""); - } - @Override public void showTitle(Player player, String title, String subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks) { send(player, new ClientboundSetTitlesAnimationPacket(fadeInTicks, stayTicks, fadeOutTicks)); @@ -256,32 +225,19 @@ public void showTitle(Player player, String title, String subtitle, int fadeInTi } } - @Override - public void showEquipment(Player player, LivingEntity entity, EquipmentSlot equipmentSlot, ItemStack itemStack) { - Pair pair = new Pair<>(CraftEquipmentSlot.getNMS(equipmentSlot), CraftItemStack.asNMSCopy(itemStack)); - ArrayList> pairList = new ArrayList<>(); - pairList.add(pair); - send(player, new ClientboundSetEquipmentPacket(entity.getEntityId(), pairList)); - } - @Override public void resetEquipment(Player player, LivingEntity entity) { EntityEquipment equipment = entity.getEquipment(); - ArrayList> pairList = new ArrayList<>(); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(equipment.getItemInMainHand()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(equipment.getItemInOffHand()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(equipment.getHelmet()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.CHEST, CraftItemStack.asNMSCopy(equipment.getChestplate()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.LEGS, CraftItemStack.asNMSCopy(equipment.getLeggings()))); - pairList.add(new Pair<>(net.minecraft.world.entity.EquipmentSlot.FEET, CraftItemStack.asNMSCopy(equipment.getBoots()))); + List> pairList = new ArrayList<>(); + pairList.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(equipment.getItemInMainHand()))); + pairList.add(new Pair<>(EquipmentSlot.OFFHAND, CraftItemStack.asNMSCopy(equipment.getItemInOffHand()))); + pairList.add(new Pair<>(EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(equipment.getHelmet()))); + pairList.add(new Pair<>(EquipmentSlot.CHEST, CraftItemStack.asNMSCopy(equipment.getChestplate()))); + pairList.add(new Pair<>(EquipmentSlot.LEGS, CraftItemStack.asNMSCopy(equipment.getLeggings()))); + pairList.add(new Pair<>(EquipmentSlot.FEET, CraftItemStack.asNMSCopy(equipment.getBoots()))); send(player, new ClientboundSetEquipmentPacket(entity.getEntityId(), pairList)); } - @Override - public void openBook(Player player, EquipmentSlot hand) { - send(player, new ClientboundOpenBookPacket(hand == EquipmentSlot.OFF_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND)); - } - @Override public void showHealth(Player player, float health, int food, float saturation) { send(player, new ClientboundSetHealthPacket(health, food, saturation)); @@ -307,39 +263,13 @@ public void resetHealth(Player player) { } @Override - public void showExperience(Player player, float experience, int level) { - send(player, new ClientboundSetExperiencePacket(experience, 0, level)); - } - - @Override - public void resetExperience(Player player) { - showExperience(player, player.getExp(), player.getLevel()); - } - - @Override - public boolean showSignEditor(Player player, Location location) { - if (location == null) { - LocationTag fakeSign = new LocationTag(player.getLocation()); - fakeSign.setY(0); - FakeBlock.showFakeBlockTo(Collections.singletonList(new PlayerTag(player)), fakeSign, new MaterialTag(org.bukkit.Material.OAK_WALL_SIGN), new DurationTag(1), true); - BlockPos pos = new BlockPos(fakeSign.getX(), 0, fakeSign.getZ()); - ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().connection.connection).packetListener.fakeSignExpected = pos; - send(player, new ClientboundOpenSignEditorPacket(pos)); - return true; - } - BlockEntity tileEntity = ((CraftWorld) location.getWorld()).getHandle().getBlockEntity(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), true); - if (tileEntity instanceof SignBlockEntity) { - SignBlockEntity sign = (SignBlockEntity) tileEntity; - // Prevent client crashing by sending current state of the sign - send(player, sign.getUpdatePacket()); - sign.isEditable = true; - sign.setAllowedPlayerEditor(player.getUniqueId()); - send(player, new ClientboundOpenSignEditorPacket(sign.getBlockPos())); - return true; - } - else { - return false; - } + public void showSignEditor(Player player, Location location) { + LocationTag fakeSign = new LocationTag(player.getLocation()); + fakeSign.setY(0); + FakeBlock.showFakeBlockTo(Collections.singletonList(new PlayerTag(player)), fakeSign, new MaterialTag(Material.OAK_WALL_SIGN), new DurationTag(1), true); + BlockPos pos = new BlockPos(fakeSign.getX(), 0, fakeSign.getZ()); + ((DenizenNetworkManagerImpl) ((CraftPlayer) player).getHandle().connection.connection).packetListener.fakeSignExpected = pos; + send(player, new ClientboundOpenSignEditorPacket(pos)); } @Override