From 6b6c53265b7baad575671cce0b2cd1b58af3a75f Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Sun, 5 May 2024 23:07:50 +0200 Subject: [PATCH] [PORT] 1.20.6 port --- .idea/misc.xml | 2 +- .../api/networking/CommonPacketWrapper.java | 19 ++++ .../client/gui/config/CraterConfigScreen.java | 2 +- .../client/gui/config/widgets/Option.java | 12 +-- .../core/networking/CraterPacketNetwork.java | 5 +- .../core/networking/PacketRegistry.java | 2 +- .../core/networking/data/PacketHolder.java | 24 ++++- .../client/multiplayer/BridgedServerData.java | 4 +- .../craterlib/utils/ChatUtils.java | 5 +- .../ServerGamePacketListenerImplMixin.java | 2 +- .../network/CraterFabricNetworkHandler.java | 78 +++++++--------- Fabric/src/main/resources/fabric.mod.json | 6 +- .../ServerGamePacketListenerImplMixin.java | 2 +- .../network/CraterForgeNetworkHandler.java | 2 +- Forge/src/main/resources/META-INF/mods.toml | 44 ++++----- NeoForge/build.gradle | 2 +- .../com/hypherionmc/craterlib/CraterLib.java | 15 ++++ .../client/NeoForgeClientEvents.java | 10 +-- .../mixin/ConfigScreenHandlerMixin.java | 43 --------- .../ServerGamePacketListenerImplMixin.java | 2 +- .../network/CraterNeoForgeNetworkHandler.java | 89 ++++++------------- .../craterlib/network/NeoForgePacket.java | 24 ----- .../network/NeoForgePacketContainer.java | 16 ---- .../src/main/resources/META-INF/mods.toml | 31 ------- .../resources/META-INF/neoforge.mods.toml | 31 +++++++ .../resources/craterlib.neoforge.mixins.json | 4 +- build.gradle | 2 +- gradle.properties | 14 +-- settings.gradle | 3 +- 29 files changed, 204 insertions(+), 291 deletions(-) create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java delete mode 100644 NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java delete mode 100644 NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java delete mode 100644 NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java delete mode 100644 NeoForge/src/main/resources/META-INF/mods.toml create mode 100644 NeoForge/src/main/resources/META-INF/neoforge.mods.toml diff --git a/.idea/misc.xml b/.idea/misc.xml index 121ee87..b194438 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java new file mode 100644 index 0000000..fe94544 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java @@ -0,0 +1,19 @@ +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/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 index 81a9ed7..70084eb 100644 --- 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 @@ public class CraterConfigScreen extends Screen { Tesselator tesselator = Tesselator.getInstance(); BufferBuilder buffer = tesselator.getBuilder(); RenderSystem.setShader(GameRenderer::getPositionTexColorShader); - RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); + RenderSystem.setShaderTexture(0, Screen.MENU_BACKGROUND); 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/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java index 821c749..f49ca68 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java @@ -1,5 +1,7 @@ package com.hypherionmc.craterlib.client.gui.config.widgets; +import lombok.Getter; +import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; @@ -28,16 +30,10 @@ public abstract class Option extends AbstractContainerEventHandler { public T value; public boolean hasErrors; public List children = new ArrayList<>(); + @Setter + @Getter private List langKeys = new ArrayList<>(); - public List getLangKeys() { - return langKeys; - } - - public void setLangKeys(List langKeys) { - this.langKeys = langKeys; - } - public abstract void render(Minecraft minecraft, Font font, int x, int y, int width, int height, GuiGraphics matrices, int mouseX, int mouseY, float delta); public int height() { diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java index da7ba92..081c8fb 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java @@ -3,6 +3,7 @@ package com.hypherionmc.craterlib.core.networking; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; +import lombok.Getter; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -11,6 +12,7 @@ import java.util.function.Function; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 */ +@Getter public class CraterPacketNetwork { private final PacketRegistry packetRegistry; @@ -38,7 +40,4 @@ public class CraterPacketNetwork { } } - public PacketRegistry getPacketRegistry() { - return packetRegistry; - } } \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java index c14b370..d1ec06c 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java @@ -18,7 +18,7 @@ import java.util.function.Function; */ public abstract class PacketRegistry implements CraterNetworkHandler, PacketRegistrar { - final Map, PacketHolder> PACKET_MAP = new HashMap<>(); + protected final Map, PacketHolder> PACKET_MAP = new HashMap<>(); protected final PacketSide side; diff --git 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 index b5697a9..10873c5 100644 --- 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,7 +1,11 @@ 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; @@ -10,9 +14,27 @@ import java.util.function.Function; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 */ -public record PacketHolder(ResourceIdentifier packetId, +public record PacketHolder(CustomPacketPayload.Type 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)))); + } + } \ No newline at end of file diff --git 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 index c594872..8a2a5a0 100644 --- 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 class BridgedServerData { } public int getMaxPlayers() { - if (!internal.pinged || internal.players == null) { + if (internal.players == null) { try { - new ServerStatusPinger().pingServer(internal, () -> {}); + new ServerStatusPinger().pingServer(internal, () -> {}, () -> {}); } catch (Exception ignored) {} } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 0c557ff..b6c6cc3 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -7,6 +7,7 @@ import net.kyori.adventure.text.format.NamedTextColor; 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; @@ -14,11 +15,11 @@ public class ChatUtils { public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = GsonComponentSerializer.gson().serialize(inComponent); - return Component.Serializer.fromJson(serialised); + return Component.Serializer.fromJson(serialised, RegistryAccess.EMPTY); } public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) { - final String serialised = Component.Serializer.toJson(inComponent); + final String serialised = Component.Serializer.toJson(inComponent, RegistryAccess.EMPTY); return GsonComponentSerializer.gson().deserialize(serialised); } diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java index 4a7d904..c654433 100644 --- 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 class ServerGamePacketListenerImplMixin { public ServerPlayer player; @Inject( - method = "lambda$handleChat$6", + method = "lambda$handleChat$5", at = @At("HEAD"), cancellable = true ) diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java index 110e314..cd8740b 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java @@ -1,55 +1,46 @@ 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.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.PacketByteBufs; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.FriendlyByteBuf; - -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) { - if (CHANNELS.get(holder.messageType()) == null) { - CHANNELS.put(holder.messageType(), new Message<>(holder.packetId(), holder.encoder())); - - if (PacketSide.CLIENT.equals(this.side)) { - ClientPlayNetworking.registerGlobalReceiver(holder.packetId().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.packetId().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()); + 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)))); } public void sendToServer(T packet) { @@ -57,26 +48,21 @@ public class CraterFabricNetworkHandler extends PacketRegistry { } public void sendToServer(T packet, boolean ignoreCheck) { - Message message = (Message) CHANNELS.get(packet.getClass()); + PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); - 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); + if (container != null) { + if (ignoreCheck || ClientPlayNetworking.canSend(container.type().id())) { + ClientPlayNetworking.send(new CommonPacketWrapper<>(container, packet)); + } } } public void sendToClient(T packet, BridgedPlayer player) { - 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); + 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)); + } } } - - public record Message(ResourceIdentifier id, BiConsumer encoder) { } } diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index b863c60..47a55c0 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -31,9 +31,9 @@ "${mod_id}.fabric.mixins.json" ], "depends": { - "fabricloader": ">=0.14.21", + "fabricloader": ">=0.15.0", "fabric-api": "*", - "minecraft": ">=1.20.4", - "java": ">=17" + "minecraft": ">=1.20.6", + "java": ">=21" } } diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java index 6e2f601..299f52c 100644 --- 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 class ServerGamePacketListenerImplMixin { public ServerPlayer player; @Inject( - method = "lambda$handleChat$6", + method = "lambda$handleChat$5", at = @At("HEAD"), cancellable = true ) diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java index cc84b04..cc14988 100644 --- 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 @@ public class CraterForgeNetworkHandler extends PacketRegistry { protected void registerPacket(PacketHolder holder) { if (CHANNELS.get(holder.messageType()) == null) { SimpleChannel channel = ChannelBuilder - .named(holder.packetId().toMojang()) + .named(holder.type().id()) .clientAcceptedVersions((a, b) -> true) .serverAcceptedVersions((a, b) -> true) .networkProtocolVersion(1) diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml index c2ecdab..c2c7608 100644 --- a/Forge/src/main/resources/META-INF/mods.toml +++ b/Forge/src/main/resources/META-INF/mods.toml @@ -1,31 +1,31 @@ modLoader = "javafml" -loaderVersion = "[49,)" +loaderVersion = "[50,)" 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 = "MATCH_VERSION" + 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 = "forge" -mandatory = true -versionRange = "[49,)" -ordering = "NONE" -side = "BOTH" + modId = "forge" + mandatory = true + versionRange = "[50,)" + ordering = "NONE" + side = "BOTH" [[dependencies.${ mod_id }]] -modId = "minecraft" -mandatory = true -versionRange = "[1.20.4,1.21)" -ordering = "NONE" -side = "BOTH" + modId = "minecraft" + mandatory = true + versionRange = "[1.20.6,1.21)" + ordering = "NONE" + side = "BOTH" diff --git a/NeoForge/build.gradle b/NeoForge/build.gradle index cbb7925..c71d840 100644 --- a/NeoForge/build.gradle +++ b/NeoForge/build.gradle @@ -50,7 +50,7 @@ processResources { from project(":Common").sourceSets.main.resources def buildProps = project.properties.clone() - filesMatching("META-INF/mods.toml") { + filesMatching("META-INF/neoforge.mods.toml") { expand buildProps } } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java index 2ae793b..900cdf1 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java @@ -1,8 +1,12 @@ 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; @@ -13,12 +17,16 @@ import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; 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 { @@ -39,6 +47,13 @@ public class CraterLib { 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/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java index 69cd537..3e6455a 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java @@ -7,15 +7,15 @@ import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import net.minecraft.client.Minecraft; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.Mod; -import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.tick.LevelTickEvent; -@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +@EventBusSubscriber(modid = CraterConstants.MOD_ID, value = Dist.CLIENT) public class NeoForgeClientEvents { @SubscribeEvent - public static void clientTick(TickEvent.LevelTickEvent event) { - if (event.level == null) + public static void clientTick(LevelTickEvent.Pre event) { + if (Minecraft.getInstance().level == null) return; CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java deleted file mode 100644 index 9a98092..0000000 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -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/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java index 6e2f601..299f52c 100644 --- 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 class ServerGamePacketListenerImplMixin { public ServerPlayer player; @Inject( - method = "lambda$handleChat$6", + method = "lambda$handleChat$5", at = @At("HEAD"), cancellable = true ) diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java index 344bb72..59cb127 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java @@ -1,70 +1,40 @@ 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.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.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; 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 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()); - }); + 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()))); } } + @Override protected void registerPacket(PacketHolder container) { - if (PACKETS.get(container.messageType()) == null) { - var packetContainer = new NeoForgePacketContainer<>( - container.messageType(), - container.packetId().toMojang(), - mojangEncoder(container.encoder()), - decoder(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) { @@ -72,45 +42,36 @@ public class CraterNeoForgeNetworkHandler extends PacketRegistry { } public void sendToServer(T packet, boolean ignoreCheck) { - 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); + PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass()); + if (container != null) { + PacketDistributor.sendToServer(new CommonPacketWrapper<>(container, packet)); } } public void sendToClient(T packet, BridgedPlayer player) { - 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)); + 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)); } - } 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; - Player player = ctx.player().orElse(null); - handler.accept(new PacketContext<>(BridgedPlayer.of(player), payload.packet(), side)); - } catch (Throwable t) { + 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) { 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))); - } } \ No newline at end of file diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java deleted file mode 100644 index f4fe45d..0000000 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hypherionmc.craterlib.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; - -/** - * 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(@NotNull FriendlyByteBuf buff) - { - container().encoder().accept(packet(), buff); - } - - @Override - public @NotNull ResourceLocation id() - { - return container().packetId(); - } -} \ No newline at end of file diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java deleted file mode 100644 index cddddb6..0000000 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java +++ /dev/null @@ -1,16 +0,0 @@ -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) { } \ No newline at end of file diff --git a/NeoForge/src/main/resources/META-INF/mods.toml b/NeoForge/src/main/resources/META-INF/mods.toml deleted file mode 100644 index ceb3416..0000000 --- a/NeoForge/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,31 +0,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 = "MATCH_VERSION" - -[[dependencies.${ mod_id }]] -modId = "neoforge" -mandatory = true -versionRange = "[20.4,)" -ordering = "NONE" -side = "BOTH" - -[[dependencies.${ mod_id }]] -modId = "minecraft" -mandatory = true -versionRange = "[1.20.4,1.21)" -ordering = "NONE" -side = "BOTH" diff --git a/NeoForge/src/main/resources/META-INF/neoforge.mods.toml b/NeoForge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..b5afd9b --- /dev/null +++ b/NeoForge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,31 @@ +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/NeoForge/src/main/resources/craterlib.neoforge.mixins.json b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json index aa072d1..e1af981 100644 --- a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json +++ b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json @@ -5,9 +5,7 @@ "compatibilityLevel": "JAVA_17", "mixins": [ ], - "client": [ - "ConfigScreenHandlerMixin" - ], + "client": [], "server": [ "ServerGamePacketListenerImplMixin" ], diff --git a/build.gradle b/build.gradle index d068e7d..01cd33a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'com.github.johnrengelman.shadow' version '8.1.1' apply false - id "xyz.wagyourtail.unimined" version "1.1.0-SNAPSHOT" apply false + id "xyz.wagyourtail.unimined" version "1.2.4" apply false id "me.hypherionmc.modutils.modpublisher" version "1.0.23+" id "com.hypherionmc.modutils.orion" version "1.0.10" id 'maven-publish' diff --git a/gradle.properties b/gradle.properties index a0432db..5b0a086 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,18 +9,18 @@ mod_id=craterlib mod_name=CraterLib # Shared -minecraft_version=1.20.4 +minecraft_version=1.20.6 project_group=com.hypherionmc.craterlib # Fabric fabric_loader=0.15.0 -fabric_api=0.92.0+1.20.4 +fabric_api=0.97.8+1.20.6 # Forge -forge_version=49.0.13 +forge_version=50.0.6 # NeoForged -neoforge_version=73-beta +neoforge_version=41-beta # Dependencies moon_config=1.0.9 @@ -30,9 +30,9 @@ rpc_sdk=1.0 discord_formatter=2.0.0 # Mod Dependencies -fabrictailor=2.1.2 -vanish=1.4.2+1.20 -mod_menu_version=8.0.0-beta.2 +fabrictailor=2.3.1 +vanish=1.5.4+1.20.5 +mod_menu_version=10.0.0-beta.1 vanishmod=1.1.12.1 vanishmod_neo=puxrKAMr diff --git a/settings.gradle b/settings.gradle index 2988fbb..090bd43 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,5 +11,4 @@ pluginManagement { } rootProject.name = 'CraterLib' -include("Common", "Fabric", "Forge") -include 'NeoForge' \ No newline at end of file +include("Common", "Fabric", "NeoForge", "Forge") \ No newline at end of file