diff --git a/patches/server/0036-Jade-Protocol.patch b/patches/server/0036-Jade-Protocol.patch index 937d393b..d157eef1 100644 --- a/patches/server/0036-Jade-Protocol.patch +++ b/patches/server/0036-Jade-Protocol.patch @@ -124,26 +124,19 @@ index 30d0133a42ce990352f5c492fcf9beb105364848..1ab2eab686b3a89d406f127a6036c0e2 protected CompositeLootItemCondition(List terms, Predicate predicate) { diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java b/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java new file mode 100644 -index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfde327a412 +index 0000000000000000000000000000000000000000..3506533241e9222d2453cacea5539355c0d4ef22 --- /dev/null +++ b/src/main/java/org/leavesmc/leaves/protocol/jade/JadeProtocol.java -@@ -0,0 +1,413 @@ +@@ -0,0 +1,387 @@ +package org.leavesmc.leaves.protocol.jade; + +import com.google.common.base.Suppliers; -+import com.google.common.collect.Maps; +import io.netty.buffer.ByteBuf; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; -+import net.minecraft.nbt.CompoundTag; -+import net.minecraft.network.FriendlyByteBuf; -+import net.minecraft.network.RegistryFriendlyByteBuf; -+import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; -+import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -+import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; @@ -181,10 +174,8 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd +import net.minecraft.world.phys.EntityHitResult; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; +import org.leavesmc.leaves.LeavesConfig; +import org.leavesmc.leaves.LeavesLogger; -+import org.leavesmc.leaves.protocol.core.LeavesCustomPayload; +import org.leavesmc.leaves.protocol.core.LeavesProtocol; +import org.leavesmc.leaves.protocol.core.ProtocolHandler; +import org.leavesmc.leaves.protocol.core.ProtocolUtils; @@ -193,11 +184,10 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd +import org.leavesmc.leaves.protocol.jade.accessor.DataAccessor; +import org.leavesmc.leaves.protocol.jade.accessor.EntityAccessor; +import org.leavesmc.leaves.protocol.jade.accessor.EntityAccessorImpl; -+import org.leavesmc.leaves.protocol.jade.payload.ClientHandshakePayload; +import org.leavesmc.leaves.protocol.jade.payload.ReceiveDataPayload; +import org.leavesmc.leaves.protocol.jade.payload.RequestBlockPayload; +import org.leavesmc.leaves.protocol.jade.payload.RequestEntityPayload; -+import org.leavesmc.leaves.protocol.jade.payload.ServerHandshakePayload; ++import org.leavesmc.leaves.protocol.jade.payload.ServerPingPayload; +import org.leavesmc.leaves.protocol.jade.provider.IJadeProvider; +import org.leavesmc.leaves.protocol.jade.provider.IServerDataProvider; +import org.leavesmc.leaves.protocol.jade.provider.IServerExtensionProvider; @@ -232,8 +222,6 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; -+import java.util.Map; -+import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.function.Predicate; @@ -247,7 +235,6 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd + private static List shearableBlocks = null; + + public static final String PROTOCOL_ID = "jade"; -+ public static final String PROTOCOL_VERSION = "7"; + + public static final HierarchyLookup> entityDataProviders = new HierarchyLookup<>(Entity.class); + public static final PairHierarchyLookup> blockDataProviders = new PairHierarchyLookup<>(new HierarchyLookup<>(Block.class), new HierarchyLookup<>(BlockEntity.class)); @@ -392,22 +379,9 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd + } + } + -+ @ProtocolHandler.PlayerLeave -+ public static void onPlayerQuit(ServerPlayer player) { -+ enabledPlayers.remove(player.getUUID()); -+ } -+ -+ @ProtocolHandler.PayloadReceiver(payload = ClientHandshakePayload.class, payloadId = "client_handshake") -+ public static void clientHandshake(ServerPlayer player, ClientHandshakePayload payload) { -+ if (!LeavesConfig.jadeProtocol) { -+ return; -+ } -+ if (!payload.protocolVersion().equals(PROTOCOL_VERSION)) { -+ player.sendSystemMessage(Component.literal("You are using a different version of Jade than the server. Please update Jade or report to the server operator").withColor(0xff0000)); -+ return; -+ } -+ ProtocolUtils.sendPayloadPacket(player, new ServerHandshakePayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); -+ enabledPlayers.add(player.getUUID()); ++ @ProtocolHandler.PlayerJoin ++ public static void onPlayerJoin(ServerPlayer player) { ++ ProtocolUtils.sendPayloadPacket(player, new ServerPingPayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); + } + + @ProtocolHandler.PayloadReceiver(payload = RequestEntityPayload.class, payloadId = "request_entity") @@ -536,7 +510,7 @@ index 0000000000000000000000000000000000000000..2d3f3de3f37d635ceeb2f350c844dcfd + public static void enableAllPlayer() { + for (ServerPlayer player : MinecraftServer.getServer().getPlayerList().players) { + if (enabledPlayers.contains(player.getUUID())) { -+ ProtocolUtils.sendPayloadPacket(player, new ServerHandshakePayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); ++ ProtocolUtils.sendPayloadPacket(player, new ServerPingPayload(Collections.emptyMap(), shearableBlocks, blockDataProviders.mappedIds(), entityDataProviders.mappedIds())); + } + } + } @@ -1438,48 +1412,6 @@ index 0000000000000000000000000000000000000000..a92edcbb3e707065455ad5464484068e + } +} \ No newline at end of file -diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ClientHandshakePayload.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ClientHandshakePayload.java -new file mode 100644 -index 0000000000000000000000000000000000000000..a2e58089ad12706e927771e2485380a5bf5e6482 ---- /dev/null -+++ b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ClientHandshakePayload.java -@@ -0,0 +1,36 @@ -+package org.leavesmc.leaves.protocol.jade.payload; -+ -+ -+import net.minecraft.network.FriendlyByteBuf; -+import net.minecraft.network.RegistryFriendlyByteBuf; -+import net.minecraft.network.codec.ByteBufCodecs; -+import net.minecraft.network.codec.StreamCodec; -+import net.minecraft.resources.ResourceLocation; -+import net.minecraft.server.MinecraftServer; -+import org.leavesmc.leaves.protocol.core.LeavesCustomPayload; -+import org.leavesmc.leaves.protocol.jade.JadeProtocol; -+ -+public record ClientHandshakePayload(String protocolVersion) implements LeavesCustomPayload { -+ -+ private static final ResourceLocation PACKET_CLIENT_HANDSHAKE = JadeProtocol.id("client_handshake"); -+ -+ private static final StreamCodec CODEC = StreamCodec.composite( -+ ByteBufCodecs.STRING_UTF8, -+ ClientHandshakePayload::protocolVersion, -+ ClientHandshakePayload::new); -+ -+ @Override -+ public void write(FriendlyByteBuf buf) { -+ CODEC.encode(new RegistryFriendlyByteBuf(buf, MinecraftServer.getServer().registryAccess()), this); -+ } -+ -+ @Override -+ public ResourceLocation id() { -+ return PACKET_CLIENT_HANDSHAKE; -+ } -+ -+ @New -+ public static ClientHandshakePayload create(ResourceLocation location, FriendlyByteBuf buf) { -+ return CODEC.decode(new RegistryFriendlyByteBuf(buf, MinecraftServer.getServer().registryAccess())); -+ } -+} diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ReceiveDataPayload.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ReceiveDataPayload.java new file mode 100644 index 0000000000000000000000000000000000000000..1b474ea8c1075b3dbaa7cd27e5bd95aa904fbe97 @@ -1635,11 +1567,38 @@ index 0000000000000000000000000000000000000000..b398176d0375784c2eff1db48fbaadcc + } +} \ No newline at end of file -diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerHandshakePayload.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerHandshakePayload.java +diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java +new file mode 100644 +index 0000000000000000000000000000000000000000..5a552665cfda2eafe9b66486445832284250ab88 +--- /dev/null ++++ b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java +@@ -0,0 +1,20 @@ ++package org.leavesmc.leaves.protocol.jade.payload; ++ ++ ++import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; ++import net.minecraft.network.protocol.common.custom.CustomPacketPayload; ++import net.minecraft.server.level.ServerPlayer; ++ ++import java.util.Objects; ++ ++public interface ServerPayloadContext { ++ default void execute(Runnable runnable) { ++ Objects.requireNonNull(player().getServer()).execute(runnable); ++ } ++ ++ default void sendPacket(CustomPacketPayload payload) { ++ player().connection.send(new ClientboundCustomPayloadPacket(payload)); ++ } ++ ++ ServerPlayer player(); ++} +\ No newline at end of file +diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java new file mode 100644 -index 0000000000000000000000000000000000000000..c2eb61a7556130e5186dc1bba71329fefef8446f +index 0000000000000000000000000000000000000000..8e5ea16f09dc33fb21820dcc9caeb54c62f7ba25 --- /dev/null -+++ b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerHandshakePayload.java ++++ b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPingPayload.java @@ -0,0 +1,50 @@ +package org.leavesmc.leaves.protocol.jade.payload; + @@ -1662,23 +1621,23 @@ index 0000000000000000000000000000000000000000..c2eb61a7556130e5186dc1bba71329fe + +import static org.leavesmc.leaves.protocol.jade.JadeProtocol.PRIMITIVE_STREAM_CODEC; + -+public record ServerHandshakePayload( ++public record ServerPingPayload( + Map serverConfig, + List shearableBlocks, + List blockProviderIds, -+ List entityProviderIds) implements LeavesCustomPayload { ++ List entityProviderIds) implements LeavesCustomPayload { + -+ private static final ResourceLocation PACKET_SERVER_HANDSHAKE = JadeProtocol.id("server_handshake"); -+ private static final StreamCodec CODEC = StreamCodec.composite( ++ private static final ResourceLocation PACKET_SERVER_HANDSHAKE = JadeProtocol.id("server_ping_v1"); ++ private static final StreamCodec CODEC = StreamCodec.composite( + ByteBufCodecs.map(Maps::newHashMapWithExpectedSize, ResourceLocation.STREAM_CODEC, PRIMITIVE_STREAM_CODEC), -+ ServerHandshakePayload::serverConfig, ++ ServerPingPayload::serverConfig, + ByteBufCodecs.registry(Registries.BLOCK).apply(ByteBufCodecs.list()), -+ ServerHandshakePayload::shearableBlocks, ++ ServerPingPayload::shearableBlocks, + ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), -+ ServerHandshakePayload::blockProviderIds, ++ ServerPingPayload::blockProviderIds, + ByteBufCodecs.list().apply(ResourceLocation.STREAM_CODEC), -+ ServerHandshakePayload::entityProviderIds, -+ ServerHandshakePayload::new); ++ ServerPingPayload::entityProviderIds, ++ ServerPingPayload::new); + + @Override + public void write(FriendlyByteBuf buf) { @@ -1691,33 +1650,6 @@ index 0000000000000000000000000000000000000000..c2eb61a7556130e5186dc1bba71329fe + } +} + -diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java -new file mode 100644 -index 0000000000000000000000000000000000000000..5a552665cfda2eafe9b66486445832284250ab88 ---- /dev/null -+++ b/src/main/java/org/leavesmc/leaves/protocol/jade/payload/ServerPayloadContext.java -@@ -0,0 +1,20 @@ -+package org.leavesmc.leaves.protocol.jade.payload; -+ -+ -+import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -+import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -+import net.minecraft.server.level.ServerPlayer; -+ -+import java.util.Objects; -+ -+public interface ServerPayloadContext { -+ default void execute(Runnable runnable) { -+ Objects.requireNonNull(player().getServer()).execute(runnable); -+ } -+ -+ default void sendPacket(CustomPacketPayload payload) { -+ player().connection.send(new ClientboundCustomPayloadPacket(payload)); -+ } -+ -+ ServerPlayer player(); -+} -\ No newline at end of file diff --git a/src/main/java/org/leavesmc/leaves/protocol/jade/provider/IJadeProvider.java b/src/main/java/org/leavesmc/leaves/protocol/jade/provider/IJadeProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..d62fc8f96fcdee7dbb0204d2460ff6fee4074e1a