From 15d506cc06bdc113d4b1bee25083fecf3d3d8138 Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Thu, 9 May 2024 14:36:33 +0200 Subject: [PATCH] [PORT] Back port for 1.20.4 --- commit.sha | 1 + .../networking/CommonPacketWrapper.java.patch | 22 +++ .../gui/config/CraterConfigScreen.java.patch | 11 ++ .../networking/data/PacketHolder.java.patch | 43 ++++++ .../multiplayer/BridgedServerData.java.patch | 14 ++ .../craterlib/utils/ChatUtils.java.patch | 24 +++ patches/Fabric/build.gradle.patch | 13 ++ ...rverGamePacketListenerImplMixin.java.patch | 11 ++ .../CraterFabricNetworkHandler.java.patch | 119 ++++++++++++++ .../src/main/resources/fabric.mod.json.patch | 12 ++ patches/Forge/build.gradle.patch | 13 ++ ...rverGamePacketListenerImplMixin.java.patch | 11 ++ .../CraterForgeNetworkHandler.java.patch | 11 ++ .../main/resources/META-INF/mods.toml.patch | 25 +++ patches/NeoForge/build.gradle.patch | 13 ++ .../craterlib/CraterLib.java.patch | 46 ++++++ .../client/NeoForgeClientEvents.java.patch | 21 +++ .../mixin/ConfigScreenHandlerMixin.java.patch | 46 ++++++ ...rverGamePacketListenerImplMixin.java.patch | 11 ++ .../CraterNeoForgeNetworkHandler.java.patch | 146 ++++++++++++++++++ .../network/NeoForgePacket.java.patch | 24 +++ .../NeoForgePacketContainer.java.patch | 19 +++ .../main/resources/META-INF/mods.toml.patch | 36 +++++ .../META-INF/neoforge.mods.toml.patch | 34 ++++ .../craterlib.neoforge.mixins.json.patch | 13 ++ patches/gradle.properties.patch | 38 +++++ 26 files changed, 777 insertions(+) create mode 100644 commit.sha create mode 100644 patches/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java.patch create mode 100644 patches/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java.patch create mode 100644 patches/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java.patch create mode 100644 patches/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java.patch create mode 100644 patches/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch create mode 100644 patches/Fabric/build.gradle.patch create mode 100644 patches/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch create mode 100644 patches/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java.patch create mode 100644 patches/Fabric/src/main/resources/fabric.mod.json.patch create mode 100644 patches/Forge/build.gradle.patch create mode 100644 patches/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch create mode 100644 patches/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch create mode 100644 patches/Forge/src/main/resources/META-INF/mods.toml.patch create mode 100644 patches/NeoForge/build.gradle.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java.patch create mode 100644 patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java.patch create mode 100644 patches/NeoForge/src/main/resources/META-INF/mods.toml.patch create mode 100644 patches/NeoForge/src/main/resources/META-INF/neoforge.mods.toml.patch create mode 100644 patches/NeoForge/src/main/resources/craterlib.neoforge.mixins.json.patch create mode 100644 patches/gradle.properties.patch diff --git a/commit.sha b/commit.sha new file mode 100644 index 0000000..6863d84 --- /dev/null +++ b/commit.sha @@ -0,0 +1 @@ +9078372212648fa1237a1ac646946c6cce343154 \ No newline at end of file diff --git a/patches/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java.patch b/patches/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java.patch new file mode 100644 index 0000000..922d98a --- /dev/null +++ b/patches/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java.patch @@ -0,0 +1,22 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java ++++ /dev/null +@@ -1,19 +1,0 @@ +-package com.hypherionmc.craterlib.api.networking; +- +-import com.hypherionmc.craterlib.core.networking.data.PacketHolder; +-import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +-import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +- +-public record CommonPacketWrapper(PacketHolder container, T packet) implements CustomPacketPayload +-{ +- public void encode(BridgedFriendlyByteBuf buf) +- { +- container().encoder().accept(packet(), buf); +- } +- +- @Override +- public Type type() +- { +- return container.type(); +- } +-} diff --git a/patches/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java.patch b/patches/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java.patch new file mode 100644 index 0000000..c0be618 --- /dev/null +++ b/patches/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java.patch @@ -0,0 +1,11 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java +@@ -269,7 +269,7 @@ + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder buffer = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); +- RenderSystem.setShaderTexture(0, Screen.MENU_BACKGROUND); ++ RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + buffer.vertex(matrix, minX, maxY, 0.0F).uv(minX / 32.0F, maxY / 32.0F).color(red, green, blue, endAlpha).endVertex(); diff --git a/patches/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java.patch b/patches/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java.patch new file mode 100644 index 0000000..546a1b1 --- /dev/null +++ b/patches/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java.patch @@ -0,0 +1,43 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java +@@ -1,11 +1,7 @@ + package com.hypherionmc.craterlib.core.networking.data; + +-import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper; + import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; + import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; +-import net.minecraft.network.FriendlyByteBuf; +-import net.minecraft.network.codec.StreamCodec; +-import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + + import java.util.function.BiConsumer; + import java.util.function.Consumer; +@@ -14,27 +10,9 @@ + /** + * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 + */ +-public record PacketHolder(CustomPacketPayload.Type type, ++public record PacketHolder(ResourceIdentifier type, + Class messageType, + BiConsumer encoder, + Function decoder, + Consumer> handler) { +- +- public PacketHolder(ResourceIdentifier packetId, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { +- this(new CustomPacketPayload.Type<>(packetId.toMojang()), messageType, encoder, decoder, handler); +- } +- +- @SuppressWarnings("unchecked") +- public CustomPacketPayload.Type getType() +- { +- return (CustomPacketPayload.Type) type(); +- } +- +- public StreamCodec getCodec() +- { +- return CustomPacketPayload.codec( +- (packet, buf) -> this.encoder().accept((T)packet.packet(), BridgedFriendlyByteBuf.of(buf)), +- (buf) -> new CommonPacketWrapper<>(this, this.decoder().apply(BridgedFriendlyByteBuf.of(buf)))); +- } +- + } diff --git a/patches/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java.patch b/patches/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java.patch new file mode 100644 index 0000000..569c8bf --- /dev/null +++ b/patches/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java.patch @@ -0,0 +1,14 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java +@@ -24,9 +24,9 @@ + } + + public int getMaxPlayers() { +- if (internal.players == null) { ++ if (!internal.pinged || internal.players == null) { + try { +- new ServerStatusPinger().pingServer(internal, () -> {}, () -> {}); ++ new ServerStatusPinger().pingServer(internal, () -> {}); + } catch (Exception ignored) {} + } + diff --git a/patches/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch new file mode 100644 index 0000000..24f97af --- /dev/null +++ b/patches/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -0,0 +1,24 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +@@ -7,7 +7,6 @@ + import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; + import net.minecraft.ChatFormatting; + import net.minecraft.Util; +-import net.minecraft.core.RegistryAccess; + import net.minecraft.network.chat.Component; + import net.minecraft.network.chat.Style; + +@@ -15,11 +14,11 @@ + + public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { + final String serialised = GsonComponentSerializer.gson().serialize(inComponent); +- return Component.Serializer.fromJson(serialised, RegistryAccess.EMPTY); ++ return Component.Serializer.fromJson(serialised); + } + + public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) { +- final String serialised = Component.Serializer.toJson(inComponent, RegistryAccess.EMPTY); ++ final String serialised = Component.Serializer.toJson(inComponent); + return GsonComponentSerializer.gson().deserialize(serialised); + } + diff --git a/patches/Fabric/build.gradle.patch b/patches/Fabric/build.gradle.patch new file mode 100644 index 0000000..0272ed9 --- /dev/null +++ b/patches/Fabric/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Fabric/build.gradle ++++ b/Fabric/build.gradle +@@ -110,8 +110,8 @@ + setVersionType("release") + setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-fabric.md") + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[FABRIC/QUILT 1.20.6] CraterLib - ${project.version}") +- setGameVersions("1.20.6") ++ setDisplayName("[FABRIC/QUILT 1.20.4] CraterLib - ${project.version}") ++ setGameVersions("1.20.4") + setLoaders("fabric", "quilt") + setArtifact(remapJar) + setCurseEnvironment("both") diff --git a/patches/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch b/patches/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch new file mode 100644 index 0000000..1678ae9 --- /dev/null +++ b/patches/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch @@ -0,0 +1,11 @@ +--- a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java ++++ b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java +@@ -22,7 +22,7 @@ + public ServerPlayer player; + + @Inject( +- method = "lambda$handleChat$5", ++ method = "lambda$handleChat$6", + at = @At("HEAD"), + cancellable = true + ) diff --git a/patches/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java.patch b/patches/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java.patch new file mode 100644 index 0000000..dbe9cc7 --- /dev/null +++ b/patches/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java.patch @@ -0,0 +1,119 @@ +--- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java ++++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java +@@ -1,46 +1,57 @@ + package com.hypherionmc.craterlib.network; + +-import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper; ++import com.hypherionmc.craterlib.CraterConstants; + import com.hypherionmc.craterlib.core.networking.PacketRegistry; + import com.hypherionmc.craterlib.core.networking.data.PacketContext; + import com.hypherionmc.craterlib.core.networking.data.PacketHolder; + import com.hypherionmc.craterlib.core.networking.data.PacketSide; ++import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; ++import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; + import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; + import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +-import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; ++import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; + import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; ++import net.minecraft.network.FriendlyByteBuf; ++import net.minecraft.resources.ResourceLocation; ++import net.minecraft.server.level.ServerPlayer; ++ ++import java.util.HashMap; ++import java.util.Map; ++import java.util.function.BiConsumer; + + /** + * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 + */ + public class CraterFabricNetworkHandler extends PacketRegistry { + ++ private final Map, Message> CHANNELS = new HashMap(); ++ + public CraterFabricNetworkHandler(PacketSide side) { + super(side); + } + + protected void registerPacket(PacketHolder holder) { +- try +- { +- PayloadTypeRegistry.playC2S().register(holder.getType(), holder.getCodec()); +- PayloadTypeRegistry.playS2C().register(holder.getType(), holder.getCodec()); +- } +- catch (IllegalArgumentException e) +- { +- // do nothing +- } +- +- if (PacketSide.CLIENT.equals(this.side)) { +- ClientPlayNetworking.registerGlobalReceiver(holder.getType(), +- (ClientPlayNetworking.PlayPayloadHandler>) (payload, context) -> context.client().execute(() -> +- holder.handler().accept( +- new PacketContext<>(payload.packet(), side)))); +- } +- +- ServerPlayNetworking.registerGlobalReceiver(holder.getType(), +- (ServerPlayNetworking.PlayPayloadHandler>) (payload, context) -> context.player().server.execute(() -> +- holder.handler().accept( +- new PacketContext<>(BridgedPlayer.of(context.player()), payload.packet(), side)))); ++ if (CHANNELS.get(holder.messageType()) == null) { ++ CHANNELS.put(holder.messageType(), new Message<>(holder.type(), holder.encoder())); ++ ++ if (PacketSide.CLIENT.equals(this.side)) { ++ ClientPlayNetworking.registerGlobalReceiver(holder.type().toMojang(), ((client, listener, buf, responseSender) -> { ++ buf.readByte(); ++ T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf)); ++ client.execute(() -> holder.handler().accept(new PacketContext<>(message, PacketSide.CLIENT))); ++ })); ++ } else { ++ ++ ServerPlayNetworking.registerGlobalReceiver(holder.type().toMojang(), ((server, player, listener, buf, responseSender) -> { ++ buf.readByte(); ++ T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf)); ++ server.execute(() -> holder.handler().accept(new PacketContext<>(BridgedPlayer.of(player), message, PacketSide.SERVER))); ++ })); ++ } ++ ++ } else { ++ CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType()); ++ } + } + + public void sendToServer(T packet) { +@@ -48,21 +59,25 @@ + } + + public void sendToServer(T packet, boolean ignoreCheck) { +- PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); ++ Message message = (Message) CHANNELS.get(packet.getClass()); + +- if (container != null) { +- if (ignoreCheck || ClientPlayNetworking.canSend(container.type().id())) { +- ClientPlayNetworking.send(new CommonPacketWrapper<>(container, packet)); +- } ++ if (ClientPlayNetworking.canSend(message.id().toMojang()) || ignoreCheck) { ++ FriendlyByteBuf buf = PacketByteBufs.create(); ++ buf.writeByte(0); ++ message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf)); ++ ClientPlayNetworking.send(message.id().toMojang(), buf); + } + } + + public void sendToClient(T packet, BridgedPlayer player) { +- PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); +- if (container != null) { +- if (ServerPlayNetworking.canSend(player.toMojangServerPlayer(), container.type().id())) { +- ServerPlayNetworking.send(player.toMojangServerPlayer(), new CommonPacketWrapper<>(container, packet)); +- } ++ Message message = (Message) CHANNELS.get(packet.getClass()); ++ if (ServerPlayNetworking.canSend(player.toMojangServerPlayer(), message.id().toMojang())) { ++ FriendlyByteBuf buf = PacketByteBufs.create(); ++ buf.writeByte(0); ++ message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf)); ++ ServerPlayNetworking.send(player.toMojangServerPlayer(), message.id().toMojang(), buf); + } + } ++ ++ public record Message(ResourceIdentifier id, BiConsumer encoder) { } + } diff --git a/patches/Fabric/src/main/resources/fabric.mod.json.patch b/patches/Fabric/src/main/resources/fabric.mod.json.patch new file mode 100644 index 0000000..c97c881 --- /dev/null +++ b/patches/Fabric/src/main/resources/fabric.mod.json.patch @@ -0,0 +1,12 @@ +--- a/Fabric/src/main/resources/fabric.mod.json ++++ b/Fabric/src/main/resources/fabric.mod.json +@@ -33,7 +33,7 @@ + "depends": { + "fabricloader": ">=0.15.0", + "fabric-api": "*", +- "minecraft": ">=1.20.6", +- "java": ">=21" ++ "minecraft": "1.20.4", ++ "java": ">=17" + } + } diff --git a/patches/Forge/build.gradle.patch b/patches/Forge/build.gradle.patch new file mode 100644 index 0000000..29b9351 --- /dev/null +++ b/patches/Forge/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Forge/build.gradle ++++ b/Forge/build.gradle +@@ -104,8 +104,8 @@ + setVersionType("release") + setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") +- setGameVersions("1.20.6") ++ setDisplayName("[Forge 1.20.4] CraterLib - ${project.version}") ++ setGameVersions("1.20.4") + setLoaders("forge") + setArtifact(remapJar) + setCurseEnvironment("both") diff --git a/patches/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch b/patches/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch new file mode 100644 index 0000000..5acefd4 --- /dev/null +++ b/patches/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch @@ -0,0 +1,11 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java ++++ b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java +@@ -22,7 +22,7 @@ + public ServerPlayer player; + + @Inject( +- method = "lambda$handleChat$5", ++ method = "lambda$handleChat$6", + at = @At("HEAD"), + cancellable = true + ) diff --git a/patches/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch b/patches/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch new file mode 100644 index 0000000..b9806fe --- /dev/null +++ b/patches/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch @@ -0,0 +1,11 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java ++++ b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java +@@ -36,7 +36,7 @@ + protected void registerPacket(PacketHolder holder) { + if (CHANNELS.get(holder.messageType()) == null) { + SimpleChannel channel = ChannelBuilder +- .named(holder.type().id()) ++ .named(holder.type().toMojang()) + .clientAcceptedVersions((a, b) -> true) + .serverAcceptedVersions((a, b) -> true) + .networkProtocolVersion(1) diff --git a/patches/Forge/src/main/resources/META-INF/mods.toml.patch b/patches/Forge/src/main/resources/META-INF/mods.toml.patch new file mode 100644 index 0000000..11766c3 --- /dev/null +++ b/patches/Forge/src/main/resources/META-INF/mods.toml.patch @@ -0,0 +1,25 @@ +--- a/Forge/src/main/resources/META-INF/mods.toml ++++ b/Forge/src/main/resources/META-INF/mods.toml +@@ -1,5 +1,5 @@ + modLoader = "javafml" +-loaderVersion = "[50,)" ++loaderVersion = "[49,)" + license = "MIT" + issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" + +@@ -19,13 +19,13 @@ + [[dependencies.${ mod_id }]] + modId = "forge" + mandatory = true +- versionRange = "[50,)" ++ versionRange = "[49,)" + ordering = "NONE" + side = "BOTH" + + [[dependencies.${ mod_id }]] + modId = "minecraft" + mandatory = true +- versionRange = "[1.20.6,1.21)" ++ versionRange = "[1.20.4,1.20.5)" + ordering = "NONE" + side = "BOTH" diff --git a/patches/NeoForge/build.gradle.patch b/patches/NeoForge/build.gradle.patch new file mode 100644 index 0000000..c23dd92 --- /dev/null +++ b/patches/NeoForge/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/NeoForge/build.gradle ++++ b/NeoForge/build.gradle +@@ -103,8 +103,8 @@ + setVersionType("release") + setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[NeoForge 1.20.6] CraterLib - ${project.version}") +- setGameVersions("1.20.6") ++ setDisplayName("[NeoForge 1.20.4] CraterLib - ${project.version}") ++ setGameVersions("1.20.4") + setLoaders("neoforge") + setArtifact(remapJar) + setCurseEnvironment("both") diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch new file mode 100644 index 0000000..61abbbb --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch @@ -0,0 +1,46 @@ +--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +@@ -1,12 +1,8 @@ + package com.hypherionmc.craterlib; + + import com.hypherionmc.craterlib.api.events.client.LateInitEvent; +-import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; + import com.hypherionmc.craterlib.common.NeoForgeServerEvents; + import com.hypherionmc.craterlib.compat.Vanish; +-import com.hypherionmc.craterlib.core.config.ConfigController; +-import com.hypherionmc.craterlib.core.config.ModuleConfig; +-import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; + import com.hypherionmc.craterlib.core.event.CraterEventBus; + import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; + import com.hypherionmc.craterlib.core.networking.PacketRegistry; +@@ -17,16 +13,12 @@ + import com.hypherionmc.craterlib.nojang.client.BridgedOptions; + import net.minecraft.client.Minecraft; + import net.neoforged.bus.api.IEventBus; +-import net.neoforged.fml.ModList; + import net.neoforged.fml.common.Mod; + import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; + import net.neoforged.fml.loading.FMLEnvironment; + import net.neoforged.fml.loading.FMLLoader; +-import net.neoforged.neoforge.client.gui.IConfigScreenFactory; + import net.neoforged.neoforge.common.NeoForge; + +-import java.util.Optional; +- + @Mod(CraterConstants.MOD_ID) + public class CraterLib { + +@@ -47,13 +39,6 @@ + if (FMLEnvironment.dist.isClient()) { + LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); + CraterEventBus.INSTANCE.postEvent(event); +- +- ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { +- if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { +- ModuleConfig config = (ModuleConfig) conf; +- ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen)))); +- } +- }); + } + } + } diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java.patch new file mode 100644 index 0000000..5cb5e06 --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java.patch @@ -0,0 +1,21 @@ +--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java +@@ -7,14 +7,14 @@ + import net.minecraft.client.Minecraft; + import net.neoforged.api.distmarker.Dist; + import net.neoforged.bus.api.SubscribeEvent; +-import net.neoforged.fml.common.EventBusSubscriber; +-import net.neoforged.neoforge.event.tick.LevelTickEvent; ++import net.neoforged.fml.common.Mod; ++import net.neoforged.neoforge.event.TickEvent; + +-@EventBusSubscriber(modid = CraterConstants.MOD_ID, value = Dist.CLIENT) ++@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) + public class NeoForgeClientEvents { + + @SubscribeEvent +- public static void clientTick(LevelTickEvent.Pre event) { ++ public static void clientTick(TickEvent.LevelTickEvent event) { + if (Minecraft.getInstance().level == null) + return; + diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch new file mode 100644 index 0000000..c701073 --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch @@ -0,0 +1,46 @@ +--- /dev/null ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +@@ -1,0 +1,43 @@ ++package com.hypherionmc.craterlib.mixin; ++ ++import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; ++import com.hypherionmc.craterlib.core.config.ConfigController; ++import com.hypherionmc.craterlib.core.config.ModuleConfig; ++import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; ++import net.minecraft.client.Minecraft; ++import net.minecraft.client.gui.screens.Screen; ++import net.neoforged.neoforge.client.ConfigScreenHandler; ++import net.neoforged.neoforgespi.language.IModInfo; ++import org.spongepowered.asm.mixin.Mixin; ++import org.spongepowered.asm.mixin.injection.At; ++import org.spongepowered.asm.mixin.injection.Inject; ++import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; ++ ++import java.util.Optional; ++import java.util.function.BiFunction; ++ ++/** ++ * @author HypherionSA ++ */ ++@Mixin(ConfigScreenHandler.class) ++public class ConfigScreenHandlerMixin { ++ ++ /** ++ * Inject Auto Generated config Screens into forge ++ * ++ */ ++ @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) ++ private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { ++ ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { ++ if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { ++ ModuleConfig config = (ModuleConfig) conf; ++ if (config.getModId().equals(selectedMod.getModId())) { ++ cir.setReturnValue( ++ Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen)) ++ ); ++ } ++ } ++ }); ++ } ++ ++} diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch new file mode 100644 index 0000000..96dc485 --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch @@ -0,0 +1,11 @@ +--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java +@@ -22,7 +22,7 @@ + public ServerPlayer player; + + @Inject( +- method = "lambda$handleChat$5", ++ method = "lambda$handleChat$6", + at = @At("HEAD"), + cancellable = true + ) diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java.patch new file mode 100644 index 0000000..93a34a9 --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java.patch @@ -0,0 +1,146 @@ +--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java +@@ -1,40 +1,71 @@ + package com.hypherionmc.craterlib.network; + + import com.hypherionmc.craterlib.CraterConstants; +-import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper; + import com.hypherionmc.craterlib.core.networking.PacketRegistry; + import com.hypherionmc.craterlib.core.networking.data.PacketContext; + import com.hypherionmc.craterlib.core.networking.data.PacketHolder; + import com.hypherionmc.craterlib.core.networking.data.PacketSide; ++import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; + import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; ++import net.minecraft.network.FriendlyByteBuf; ++import net.minecraft.server.level.ServerPlayer; ++import net.minecraft.world.entity.player.Player; + import net.neoforged.bus.api.SubscribeEvent; + import net.neoforged.fml.LogicalSide; + import net.neoforged.neoforge.network.PacketDistributor; +-import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; ++import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; + import net.neoforged.neoforge.network.handling.IPayloadHandler; ++import net.neoforged.neoforge.network.registration.IPayloadRegistrar; + ++import java.util.HashMap; ++import java.util.Map; ++import java.util.function.BiConsumer; + import java.util.function.Consumer; ++import java.util.function.Function; + + /** + * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 + */ + public class CraterNeoForgeNetworkHandler extends PacketRegistry { + ++ private final Map, NeoForgePacketContainer> PACKETS = new HashMap<>(); ++ + public CraterNeoForgeNetworkHandler(PacketSide side) { + super(side); + } + + @SubscribeEvent +- public void register(final RegisterPayloadHandlersEvent event) { +- if (!PACKET_MAP.isEmpty()) { +- PACKET_MAP.forEach((type, container) -> event.registrar(container.getType().id().getNamespace()) +- .optional().commonBidirectional(container.getType(), container.getCodec(), buildHandler(container.handler()))); ++ public void register(final RegisterPayloadHandlerEvent event) { ++ if (!PACKETS.isEmpty()) { ++ PACKETS.forEach((type, container) -> { ++ final IPayloadRegistrar registrar = event.registrar(container.packetId().getNamespace()); ++ registrar.common( ++ container.packetId(), ++ container.decoder(), ++ container.handler()); ++ }); + } + } + +- @Override + protected void registerPacket(PacketHolder container) { +- ++ if (PACKETS.get(container.messageType()) == null) { ++ var packetContainer = new NeoForgePacketContainer<>( ++ container.messageType(), ++ container.type().toMojang(), ++ this.mojangEncoder(container.encoder()), ++ decoder(this.mojangDecoder(container.decoder())), ++ buildHandler(container.handler()) ++ ); ++ ++ PACKETS.put(container.messageType(), packetContainer); ++ } ++ } ++ ++ private FriendlyByteBuf.Reader> decoder(Function decoder) { ++ return (buf -> { ++ T packet = decoder.apply(buf); ++ return new NeoForgePacket(PACKETS.get(packet.getClass()), packet); ++ }); + } + + public void sendToServer(T packet) { +@@ -42,36 +73,45 @@ + } + + public void sendToServer(T packet, boolean ignoreCheck) { +- PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); +- if (container != null) { +- PacketDistributor.sendToServer(new CommonPacketWrapper<>(container, packet)); ++ NeoForgePacketContainer container = PACKETS.get(packet.getClass()); ++ try { ++ PacketDistributor.SERVER.noArg().send(new NeoForgePacket<>(container, packet)); ++ } catch (Throwable t) { ++ CraterConstants.LOG.error("{} packet not registered on the client, this is needed.", packet.getClass(), t); + } + } + + public void sendToClient(T packet, BridgedPlayer player) { +- PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); +- if (container != null) { +- if (player.getConnection().hasChannel(container.type())) { +- PacketDistributor.sendToPlayer(player.toMojangServerPlayer(), new CommonPacketWrapper<>(container, packet)); ++ NeoForgePacketContainer container = PACKETS.get(packet.getClass()); ++ try { ++ if (player.getConnection() == null) ++ return; ++ ++ if (player.getConnection().isConnected(container.packetId())) { ++ PacketDistributor.PLAYER.with(player.toMojangServerPlayer()).send(new NeoForgePacket<>(container, packet)); + } ++ } catch (Throwable t) { ++ CraterConstants.LOG.error("{} packet not registered on the server, this is needed.", packet.getClass(), t); + } + } + +- private > IPayloadHandler buildHandler(Consumer> handler) { ++ private > IPayloadHandler buildHandler(Consumer> handler) { + return (payload, ctx) -> { +- try +- { ++ try { + PacketSide side = ctx.flow().getReceptionSide().equals(LogicalSide.SERVER) ? PacketSide.SERVER : PacketSide.CLIENT; +- if (PacketSide.SERVER.equals(side)) { +- handler.accept(new PacketContext<>(BridgedPlayer.of(ctx.player()), payload.packet(), side)); +- } else { +- handler.accept(new PacketContext<>(payload.packet(), side)); +- } +- +- } +- catch (Throwable t) { ++ Player player = ctx.player().orElse(null); ++ handler.accept(new PacketContext<>(BridgedPlayer.of(player), payload.packet(), side)); ++ } catch (Throwable t) { + CraterConstants.LOG.error("Error handling packet: {} -> ", payload.packet().getClass(), t); + } + }; ++ } ++ ++ private Function mojangDecoder(Function handler) { ++ return (byteBuf) -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); ++ } ++ ++ private BiConsumer mojangEncoder(BiConsumer handler) { ++ return (t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf)); + } + } diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java.patch new file mode 100644 index 0000000..db1079e --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java.patch @@ -0,0 +1,24 @@ +--- /dev/null ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java +@@ -1,0 +1,21 @@ ++package com.hypherionmc.craterlib.network; ++ ++import net.minecraft.network.FriendlyByteBuf; ++import net.minecraft.network.protocol.common.custom.CustomPacketPayload; ++import net.minecraft.resources.ResourceLocation; ++ ++/** ++ * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 ++ */ ++public record NeoForgePacket(NeoForgePacketContainer container, T packet) implements CustomPacketPayload { ++ ++ @Override ++ public void write(FriendlyByteBuf buff) { ++ container().encoder().accept(packet(), buff); ++ } ++ ++ @Override ++ public ResourceLocation id() { ++ return container().packetId(); ++ } ++} diff --git a/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java.patch b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java.patch new file mode 100644 index 0000000..961249b --- /dev/null +++ b/patches/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java.patch @@ -0,0 +1,19 @@ +--- /dev/null ++++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java +@@ -1,0 +1,16 @@ ++package com.hypherionmc.craterlib.network; ++ ++import net.minecraft.network.FriendlyByteBuf; ++import net.minecraft.resources.ResourceLocation; ++import net.neoforged.neoforge.network.handling.IPayloadHandler; ++ ++import java.util.function.BiConsumer; ++ ++/** ++ * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 ++ */ ++public record NeoForgePacketContainer(Class messageType, ++ ResourceLocation packetId, ++ BiConsumer encoder, ++ FriendlyByteBuf.Reader> decoder, ++ IPayloadHandler> handler) { } diff --git a/patches/NeoForge/src/main/resources/META-INF/mods.toml.patch b/patches/NeoForge/src/main/resources/META-INF/mods.toml.patch new file mode 100644 index 0000000..eb85772 --- /dev/null +++ b/patches/NeoForge/src/main/resources/META-INF/mods.toml.patch @@ -0,0 +1,36 @@ +--- /dev/null ++++ b/NeoForge/src/main/resources/META-INF/mods.toml +@@ -1,0 +1,33 @@ ++modLoader = "javafml" ++loaderVersion = "[1,)" ++license = "MIT" ++issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" ++ ++[[mods]] ++ modId = "${mod_id}" ++ version = "${version}" ++ displayName = "${mod_name}" ++ displayURL = "https://modrinth.com/mod/craterlib" ++ logoFile = "craterlib_logo.png" ++ #credits="Thanks for this example mod goes to Java" ++ authors = "${mod_author}, Zenith" ++ description = ''' ++ A library mod used by First Dark Development and HypherionSA Mods ++ ''' ++ displayTest = "NONE" ++ ++[[dependencies.${ mod_id }]] ++ modId = "neoforge" ++ type="required" ++ required=true ++ versionRange = "[20.4,)" ++ ordering = "NONE" ++ side = "BOTH" ++ ++[[dependencies.${ mod_id }]] ++ modId = "minecraft" ++ type="required" ++ required=true ++ versionRange = "[1.20.4,1.20.5)" ++ ordering = "NONE" ++ side = "BOTH" diff --git a/patches/NeoForge/src/main/resources/META-INF/neoforge.mods.toml.patch b/patches/NeoForge/src/main/resources/META-INF/neoforge.mods.toml.patch new file mode 100644 index 0000000..27e2e32 --- /dev/null +++ b/patches/NeoForge/src/main/resources/META-INF/neoforge.mods.toml.patch @@ -0,0 +1,34 @@ +--- a/NeoForge/src/main/resources/META-INF/neoforge.mods.toml ++++ /dev/null +@@ -1,31 +1,0 @@ +-modLoader = "javafml" +-loaderVersion = "[1,)" +-license = "MIT" +-issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" +- +-[[mods]] +- modId = "${mod_id}" +- version = "${version}" +- displayName = "${mod_name}" +- displayURL = "https://modrinth.com/mod/craterlib" +- logoFile = "craterlib_logo.png" +- #credits="Thanks for this example mod goes to Java" +- authors = "${mod_author}, Zenith" +- description = ''' +- A library mod used by First Dark Development and HypherionSA Mods +- ''' +- displayTest = "NONE" +- +-[[dependencies.${ mod_id }]] +- modId = "neoforge" +- type="required" +- versionRange = "[20.6,)" +- ordering = "NONE" +- side = "BOTH" +- +-[[dependencies.${ mod_id }]] +- modId = "minecraft" +- type="required" +- versionRange = "[1.20.6,1.21)" +- ordering = "NONE" +- side = "BOTH" diff --git a/patches/NeoForge/src/main/resources/craterlib.neoforge.mixins.json.patch b/patches/NeoForge/src/main/resources/craterlib.neoforge.mixins.json.patch new file mode 100644 index 0000000..f9348e6 --- /dev/null +++ b/patches/NeoForge/src/main/resources/craterlib.neoforge.mixins.json.patch @@ -0,0 +1,13 @@ +--- a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json ++++ b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json +@@ -5,7 +5,9 @@ + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], +- "client": [], ++ "client": [ ++ "ConfigScreenHandlerMixin" ++ ], + "server": [ + "ServerGamePacketListenerImplMixin" + ], diff --git a/patches/gradle.properties.patch b/patches/gradle.properties.patch new file mode 100644 index 0000000..45ae265 --- /dev/null +++ b/patches/gradle.properties.patch @@ -0,0 +1,38 @@ +--- a/gradle.properties ++++ b/gradle.properties +@@ -9,18 +9,18 @@ + mod_name=CraterLib + + # Shared +-minecraft_version=1.20.6 ++minecraft_version=1.20.4 + project_group=com.hypherionmc.craterlib + + # Fabric + fabric_loader=0.15.0 +-fabric_api=0.97.8+1.20.6 ++fabric_api=0.97.0+1.20.4 + + # Forge +-forge_version=50.0.6 ++forge_version=49.0.49 + + # NeoForged +-neoforge_version=41-beta ++neoforge_version=234 + + # Dependencies + moon_config=1.0.9 +@@ -31,9 +31,9 @@ + + # Mod Dependencies + fabrictailor=2.3.1 +-vanish=1.5.4+1.20.5 +-mod_menu_version=10.0.0-beta.1 +-vanishmod=1.1.12.1 ++vanish=1.5.4+1.20.4 ++mod_menu_version=9.2.0-beta.2 ++vanishmod=1.1.15 + vanishmod_neo=puxrKAMr + + # Publishing