From f10d970bcbccebf2c8689fbfc8c753f446d18eae Mon Sep 17 00:00:00 2001 From: "Alex \"mcmonkey\" Goodwin" Date: Tue, 7 Jun 2022 15:10:00 -0700 Subject: [PATCH] 1.19 step 3: bare minimum changes to make it compile, untested --- .../nms/v1_19/helpers/BlockHelperImpl.java | 2 +- .../nms/v1_19/helpers/ChunkHelperImpl.java | 2 +- .../nms/v1_19/helpers/EntityHelperImpl.java | 11 +- .../nms/v1_19/helpers/PacketHelperImpl.java | 2 +- .../nms/v1_19/helpers/PlayerHelperImpl.java | 4 +- .../nms/v1_19/helpers/WorldHelperImpl.java | 2 +- .../nms/v1_19/impl/ProfileEditorImpl.java | 2 +- .../impl/entities/EntityFakePlayerImpl.java | 2 +- .../handlers/DenizenNetworkManagerImpl.java | 27 ++-- .../network/packets/PacketOutChatImpl.java | 117 ------------------ 10 files changed, 27 insertions(+), 144 deletions(-) delete mode 100644 v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/BlockHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/BlockHelperImpl.java index 19df1a0554..ad55ff4383 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/BlockHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/BlockHelperImpl.java @@ -301,7 +301,7 @@ public int getExpDrop(Block block, org.bukkit.inventory.ItemStack item) { return 0; } return blockType.getExpDrop(((CraftBlock) block).getNMS(), ((CraftBlock) block).getCraftWorld().getHandle(), ((CraftBlock) block).getPosition(), - item == null ? null : CraftItemStack.asNMSCopy(item)); + item == null ? null : CraftItemStack.asNMSCopy(item), true); } @Override diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/ChunkHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/ChunkHelperImpl.java index 8263928dd9..6471d43067 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/ChunkHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/ChunkHelperImpl.java @@ -103,7 +103,7 @@ public void setAllBiomes(Chunk chunk, BiomeNMS biome) { LevelHeightAccessor levelheightaccessor = nmsChunk.getHeightAccessorForGeneration(); for(int k = levelheightaccessor.getMinSection(); k < levelheightaccessor.getMaxSection(); ++k) { LevelChunkSection chunksection = nmsChunk.getSection(nmsChunk.getSectionIndexFromSectionY(k)); - PalettedContainer> datapaletteblock = chunksection.getBiomes(); + PalettedContainer> datapaletteblock = (PalettedContainer>) chunksection.getBiomes(); datapaletteblock.acquire(); for(int l = 0; l < 4; ++l) { for(int i1 = 0; i1 < 4; ++i1) { diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java index 943562fad2..4b0d7ad4e1 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/EntityHelperImpl.java @@ -28,6 +28,7 @@ import net.minecraft.server.network.ServerPlayerConnection; import net.minecraft.stats.RecipeBook; import net.minecraft.stats.ServerRecipeBook; +import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.CombatRules; import net.minecraft.world.damagesource.DamageSource; @@ -643,11 +644,15 @@ public boolean internalLook(Player player, Location at) { return true; } + public static long entityToPacket(double x) { + return Mth.lfloor(x * 4096.0D); + } + @Override public void fakeMove(Entity entity, Vector vector) { - long x = ClientboundMoveEntityPacket.entityToPacket(vector.getX()); - long y = ClientboundMoveEntityPacket.entityToPacket(vector.getY()); - long z = ClientboundMoveEntityPacket.entityToPacket(vector.getZ()); + long x = entityToPacket(vector.getX()); + long y = entityToPacket(vector.getY()); + long z = entityToPacket(vector.getZ()); ClientboundMoveEntityPacket packet = new ClientboundMoveEntityPacket.Pos(entity.getEntityId(), (short) x, (short) y, (short) z, entity.isOnGround()); for (Player player : getPlayersThatSee(entity)) { PacketHelperImpl.send(player, packet); 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 95a1530743..8b4efe85da 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 @@ -183,7 +183,7 @@ else if (entityType == EntityType.ENDERMAN) { // Spectating an entity then immediately respawning the player prevents a client shader update, // allowing the player to retain whatever vision the mob they spectated had. - send(player, new ClientboundAddMobPacket(entity)); + send(player, new ClientboundAddEntityPacket(entity)); send(player, new ClientboundSetCameraPacket(entity)); ((CraftServer) Bukkit.getServer()).getHandle().respawn(((CraftPlayer) player).getHandle(), ((CraftWorld) player.getWorld()).getHandle(), true, player.getLocation(), false); diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PlayerHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PlayerHelperImpl.java index 92f04f6f7e..929f29e21b 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PlayerHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/PlayerHelperImpl.java @@ -412,7 +412,7 @@ public void sendPlayerInfoAddPacket(Player player, ProfileEditMode mode, String if (texture != null) { profile.getProperties().put("textures", new Property("textures", texture, signature)); } - packet.getEntries().add(new ClientboundPlayerInfoPacket.PlayerUpdate(profile, latency, GameType.byName(CoreUtilities.toLowerCase(gameMode.name())), display == null ? null : Handler.componentToNMS(FormattedTextHelper.parse(display, ChatColor.WHITE)))); + packet.getEntries().add(new ClientboundPlayerInfoPacket.PlayerUpdate(profile, latency, GameType.byName(CoreUtilities.toLowerCase(gameMode.name())), display == null ? null : Handler.componentToNMS(FormattedTextHelper.parse(display, ChatColor.WHITE)), null)); PacketHelperImpl.send(player, packet); } @@ -420,7 +420,7 @@ public void sendPlayerInfoAddPacket(Player player, ProfileEditMode mode, String public void sendPlayerRemovePacket(Player player, UUID id) { ClientboundPlayerInfoPacket packet = new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER); GameProfile profile = new GameProfile(id, "name"); - packet.getEntries().add(new ClientboundPlayerInfoPacket.PlayerUpdate(profile, 0, null, null)); + packet.getEntries().add(new ClientboundPlayerInfoPacket.PlayerUpdate(profile, 0, null, null, null)); PacketHelperImpl.send(player, packet); } } diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/WorldHelperImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/WorldHelperImpl.java index a902f0780e..0cbbfdc282 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/WorldHelperImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/helpers/WorldHelperImpl.java @@ -38,7 +38,7 @@ public float getLocalDifficulty(Location location) { @Override public Location getNearestBiomeLocation(Location start, BiomeTag biome) { Pair> result = ((CraftWorld) start.getWorld()).getHandle() - .findNearestBiome(b -> b.is(((BiomeNMSImpl) biome.getBiome()).biomeBase.unwrapKey().get()), new BlockPos(start.getBlockX(), start.getBlockY(), start.getBlockZ()), 6400, 8); + .findClosestBiome3d(b -> b.is(((BiomeNMSImpl) biome.getBiome()).biomeBase.unwrapKey().get()), new BlockPos(start.getBlockX(), start.getBlockY(), start.getBlockZ()), 6400, 32, 64); if (result == null || result.getFirst() == null) { return null; } diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/ProfileEditorImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/ProfileEditorImpl.java index bb7b460209..4ba50afe23 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/ProfileEditorImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/ProfileEditorImpl.java @@ -105,7 +105,7 @@ public static boolean handleAlteredProfiles(ClientboundPlayerInfoPacket packet, } String listRename = RenameCommand.getCustomNameFor(data.getProfile().getId(), manager.player.getBukkitEntity(), true); Component displayName = listRename != null ? Handler.componentToNMS(FormattedTextHelper.parse(listRename, ChatColor.WHITE)) : data.getDisplayName(); - ClientboundPlayerInfoPacket.PlayerUpdate newData = new ClientboundPlayerInfoPacket.PlayerUpdate(patchedProfile, data.getLatency(), data.getGameMode(), displayName); + ClientboundPlayerInfoPacket.PlayerUpdate newData = new ClientboundPlayerInfoPacket.PlayerUpdate(patchedProfile, data.getLatency(), data.getGameMode(), displayName, data.getProfilePublicKey()); newPacketDataList.add(newData); manager.oldManager.send(newPacket); } diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/EntityFakePlayerImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/EntityFakePlayerImpl.java index b76d3b61ed..1eaae2d39d 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/EntityFakePlayerImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/EntityFakePlayerImpl.java @@ -18,7 +18,7 @@ public class EntityFakePlayerImpl extends ServerPlayer { public EntityFakePlayerImpl(MinecraftServer minecraftserver, ServerLevel worldserver, GameProfile gameprofile, boolean doAdd) { - super(minecraftserver, worldserver, gameprofile); + super(minecraftserver, worldserver, gameprofile, null); try { Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakePlayerImpl((CraftServer) Bukkit.getServer(), this)); } diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java index d019e529cd..f47221a660 100644 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java +++ b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/handlers/DenizenNetworkManagerImpl.java @@ -274,7 +274,7 @@ else if (packet instanceof ClientboundRemoveEntitiesPacket) { public void send(Packet packet, GenericFutureListener> genericfuturelistener) { if (!Bukkit.isPrimaryThread()) { if (Settings.cache_warnOnAsyncPackets - && !(packet instanceof ClientboundChatPacket) // Vanilla supports an async chat system, though it's normally disabled, some plugins use this as justification for sending messages async + && !(packet instanceof ClientboundSystemChatPacket) && !(packet instanceof ClientboundPlayerChatPacket) // Vanilla supports an async chat system, though it's normally disabled, some plugins use this as justification for sending messages async && !(packet instanceof ClientboundCommandSuggestionsPacket)) { // Async tab complete is wholly unsupported in Spigot (and will cause an exception), however Paper explicitly adds async support (for unclear reasons), so let it through too Debug.echoError("Warning: packet sent off main thread! This is completely unsupported behavior! Denizen network interceptor ignoring packet to avoid crash. Packet class: " + packet.getClass().getCanonicalName() + " sent to " + player.getScoreboardName() + " identify the sender of the packet from the stack trace:"); @@ -373,7 +373,7 @@ public boolean processTablistPacket(Packet packet, GenericFutureListener packet, GenericFutureListener< else if (packet instanceof ClientboundAddEntityPacket) { ider = ((ClientboundAddEntityPacket) packet).getId(); } - else if (packet instanceof ClientboundAddMobPacket) { - ider = ((ClientboundAddMobPacket) packet).getId(); - } if (ider != -1) { Entity e = player.getLevel().getEntity(ider); if (e == null) { @@ -1033,12 +1030,6 @@ public boolean processHiddenEntitiesForPacket(Packet packet) { else if (packet instanceof ClientboundAddEntityPacket) { ider = ((ClientboundAddEntityPacket) packet).getId(); } - else if (packet instanceof ClientboundAddMobPacket) { - ider = ((ClientboundAddMobPacket) packet).getId(); - } - else if (packet instanceof ClientboundAddPaintingPacket) { - ider = ((ClientboundAddPaintingPacket) packet).getId(); - } else if (packet instanceof ClientboundAddExperienceOrbPacket) { ider = ((ClientboundAddExperienceOrbPacket) packet).getId(); } @@ -1100,10 +1091,12 @@ public boolean processMirrorForPacket(Packet packet) { } public boolean processPacketHandlerForPacket(Packet packet) { + // TODO: 1.19: New chat system, probably needs event changes? + /* if (packet instanceof ClientboundChatPacket && DenizenPacketHandler.instance.shouldInterceptChatPacket()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutChatImpl((ClientboundChatPacket) packet)); } - else if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { + else */if (packet instanceof ClientboundSetEntityDataPacket && DenizenPacketHandler.instance.shouldInterceptMetadata()) { return DenizenPacketHandler.instance.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((ClientboundSetEntityDataPacket) packet)); } return false; @@ -1172,16 +1165,18 @@ else if (packet instanceof ClientboundBlockUpdatePacket) { return true; } } - else if (packet instanceof ClientboundBlockBreakAckPacket) { - ClientboundBlockBreakAckPacket origPack = (ClientboundBlockBreakAckPacket) packet; + else if (packet instanceof ClientboundBlockChangedAckPacket) { + // TODO: 1.19: Can no longer determine what block this packet is for. Would have to track separately? Possibly from the inbound packet rather than the outbound one. + /* + ClientboundBlockChangedAckPacket origPack = (ClientboundBlockChangedAckPacket) packet; BlockPos pos = origPack.pos(); LocationTag loc = new LocationTag(player.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()); FakeBlock block = FakeBlock.getFakeBlockFor(player.getUUID(), loc); if (block != null) { - ClientboundBlockBreakAckPacket newPacket = new ClientboundBlockBreakAckPacket(origPack.pos(), FakeBlockHelper.getNMSState(block), origPack.action(), false); + ClientboundBlockChangedAckPacket newPacket = new ClientboundBlockChangedAckPacket(origPack.pos(), FakeBlockHelper.getNMSState(block), origPack.action(), false); oldManager.send(newPacket, genericfuturelistener); return true; - } + }*/ } } catch (Throwable ex) { diff --git a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java b/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java deleted file mode 100644 index d227f03635..0000000000 --- a/v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketOutChatImpl.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.denizenscript.denizen.nms.v1_19.impl.network.packets; - -import com.denizenscript.denizen.nms.interfaces.packets.PacketOutChat; -import com.denizenscript.denizencore.utilities.ReflectionHelper; -import com.denizenscript.denizen.nms.v1_19.Handler; -import com.denizenscript.denizen.utilities.FormattedTextHelper; -import com.denizenscript.denizencore.utilities.debugging.Debug; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.chat.ComponentSerializer; -import net.minecraft.network.chat.ChatType; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundChatPacket; - -import java.lang.reflect.Field; - -public class PacketOutChatImpl implements PacketOutChat { - - private ClientboundChatPacket internal; - private String message; - private String rawJson; - private boolean bungee; - private ChatType position; - - public PacketOutChatImpl(ClientboundChatPacket internal) { - this.internal = internal; - try { - Component baseComponent = (Component) MESSAGE.get(internal); - if (baseComponent != null) { - message = FormattedTextHelper.stringify(Handler.componentToSpigot(baseComponent), ChatColor.WHITE); - rawJson = Component.Serializer.toJson(baseComponent); - } - else { - if (internal.components != null) { - message = FormattedTextHelper.stringify(internal.components, ChatColor.WHITE); - rawJson = ComponentSerializer.toString(internal.components); - } - bungee = true; - } - position = (ChatType) POSITION.get(internal); - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public boolean isSystem() { - return position == ChatType.SYSTEM; - } - - @Override - public boolean isActionbar() { - return position == ChatType.GAME_INFO; - } - - @Override - public int getPosition() { - return position.ordinal(); - } - - @Override - public String getMessage() { - return message; - } - - @Override - public String getRawJson() { - return rawJson; - } - - @Override - public void setPosition(int position) { - try { - POSITION.set(internal, position); - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public void setMessage(String message) { - try { - if (!bungee) { - MESSAGE.set(internal, Handler.componentToNMS(FormattedTextHelper.parse(message, ChatColor.WHITE))); - } - else { - internal.components = FormattedTextHelper.parse(message, ChatColor.WHITE); - } - } - catch (Exception e) { - Debug.echoError(e); - } - } - - @Override - public void setRawJson(String rawJson) { - try { - if (!bungee) { - MESSAGE.set(internal, Component.Serializer.fromJson(rawJson)); - } - else { - internal.components = ComponentSerializer.parse(rawJson); - } - } - catch (Exception e) { - Debug.echoError(e); - } - } - - private static final Field MESSAGE, POSITION; - - static { - MESSAGE = ReflectionHelper.getFields(ClientboundChatPacket.class).getFirstOfType(Component.class); - POSITION = ReflectionHelper.getFields(ClientboundChatPacket.class).getFirstOfType(ChatType.class); - } -}