From 556dd63c8f0916dbc7328aa441c635082a37e9f0 Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Tue, 2 Jan 2024 00:14:41 +0200 Subject: [PATCH] [CHORE] Backport from 1.20.3 --- .jenkins/Jenkinsfile.deploy | 4 +- .jenkins/Jenkinsfile.snapshot | 6 +- .../event/server/CraterAdvancementEvent.java | 11 +-- .../client/gui/config/CraterConfigScreen.java | 11 ++- .../client/gui/config/widgets/BaseWidget.java | 2 +- .../core/network/CraterNetworkHandler.java | 2 +- .../mixin/events/PlayerAdvancementsMixin.java | 12 +-- .../mixin/events/PlayerListMixin.java | 3 +- .../mixin/events/client/ClientLevelMixin.java | 13 +-- .../mixin/events/client/MinecraftMixin.java | 3 +- .../events/client/RealmsMainScreenMixin.java | 2 +- Fabric/build.gradle | 4 +- .../network/FabricNetworkHandler.java | 25 ++--- .../network/FabricNetworkHelper.java | 9 +- Fabric/src/main/resources/fabric.mod.json | 2 +- Forge/build.gradle | 4 +- .../network/ForgeNetworkHandler.java | 96 +++++++------------ Forge/src/main/resources/META-INF/mods.toml | 6 +- gradle.properties | 13 +-- settings.gradle | 2 +- 20 files changed, 88 insertions(+), 142 deletions(-) diff --git a/.jenkins/Jenkinsfile.deploy b/.jenkins/Jenkinsfile.deploy index 98fe985..3359e66 100644 --- a/.jenkins/Jenkinsfile.deploy +++ b/.jenkins/Jenkinsfile.deploy @@ -9,7 +9,7 @@ pipeline { stage("Notify Discord") { steps { discordSend webhookURL: env.FDD_WH_ADMIN, - title: "Deploy Started: CraterLib 1.20.2 Deploy #${BUILD_NUMBER}", + title: "Deploy Started: CraterLib 1.20 Deploy #${BUILD_NUMBER}", link: env.BUILD_URL, result: 'SUCCESS', description: "Build: [${BUILD_NUMBER}](${env.BUILD_URL})" @@ -38,7 +38,7 @@ pipeline { deleteDir() discordSend webhookURL: env.FDD_WH_ADMIN, - title: "CraterLib 1.20.2 Deploy #${BUILD_NUMBER}", + title: "CraterLib 1.20 Deploy #${BUILD_NUMBER}", link: env.BUILD_URL, result: currentBuild.currentResult, description: "Build: [${BUILD_NUMBER}](${env.BUILD_URL})\nStatus: ${currentBuild.currentResult}" diff --git a/.jenkins/Jenkinsfile.snapshot b/.jenkins/Jenkinsfile.snapshot index 1644b6d..5829e94 100644 --- a/.jenkins/Jenkinsfile.snapshot +++ b/.jenkins/Jenkinsfile.snapshot @@ -13,7 +13,7 @@ pipeline { stage("Notify Discord") { steps { discordSend webhookURL: env.SSS_WEBHOOK, - title: "Deploy Started: ${projectName} 1.20.2 Deploy #${BUILD_NUMBER}", + title: "Deploy Started: ${projectName} 1.20.1/2 Deploy #${BUILD_NUMBER}", link: env.BUILD_URL, result: 'SUCCESS', description: "Build: [${BUILD_NUMBER}](${env.BUILD_URL})" @@ -53,8 +53,8 @@ pipeline { projectIcon: "${projectIcon}", versionName: "Snapshot 1.0.${BUILD_NUMBER}", version: "1.0.${BUILD_NUMBER}", - modLoaders: "forge|neoforge|fabric|quilt", - minecraftVersions: "1.20.2", + modLoaders: "forge|fabric|quilt", + minecraftVersions: "1.20|1.20.1", failWebhook: env.SSS_WEBHOOK, publishWebhooks: "${env.SSS_WEBHOOK}|${env.FDD_WH}" diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java index 3a3c774..619e2ed 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java @@ -19,15 +19,8 @@ public class CraterAdvancementEvent extends CraterEvent { this.player = player; this.advancement = advancement; - Optional displayInfo = advancement.display(); - - if (displayInfo.isPresent()) { - this.title = displayInfo.get().getTitle(); - this.description = displayInfo.get().getDescription(); - } else { - this.title = Component.literal("Unknown"); - this.description = Component.literal("Unknown"); - } + this.title = advancement.getDisplay().getTitle(); + this.description = advancement.getDisplay().getDescription(); } public Advancement getAdvancement() { 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..1bd1ff5 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 @@ -179,6 +179,7 @@ public class CraterConfigScreen extends Screen { @Override public void render(@NotNull GuiGraphics matrices, int mouseX, int mouseY, float delta) { overlayBackground(matrices.pose(), TOP, height - BOTTOM, 32); + renderScrollBar(); matrices.pose().pushPose(); @@ -187,9 +188,8 @@ public class CraterConfigScreen extends Screen { overlayBackground(matrices.pose(), height - BOTTOM, height, 64); renderShadow(matrices.pose()); matrices.drawCenteredString(font, getTitle(), width / 2, 9, 0xFFFFFF); - matrices.pose().popPose(); - super.render(matrices, mouseX, mouseY, delta); + matrices.pose().popPose(); int y = (int) (TOP + 4 - Math.round(scrollerAmount)); for (Option option : options) { @@ -266,11 +266,12 @@ public class CraterConfigScreen extends Screen { } protected void overlayBackground(Matrix4f matrix, int minX, int minY, int maxX, int maxY, int red, int green, int blue, int startAlpha, int endAlpha) { + Tesselator tesselator = Tesselator.getInstance(); BufferBuilder buffer = tesselator.getBuilder(); - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION); RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); 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(); buffer.vertex(matrix, maxX, maxY, 0.0F).uv(maxX / 32.0F, maxY / 32.0F).color(red, green, blue, endAlpha).endVertex(); @@ -334,12 +335,12 @@ public class CraterConfigScreen extends Screen { } @Override - public boolean mouseScrolled(double d, double e, double f, double g) { + public boolean mouseScrolled(double d, double e, double f) { if (e >= TOP && e <= height - BOTTOM) { scrollerAmount = Mth.clamp(scrollerAmount - f * 16.0D, 0, scrollHeight()); return true; } - return super.mouseScrolled(d, e, f, g); + return super.mouseScrolled(d, e, f); } @Override diff --git a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/BaseWidget.java b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/BaseWidget.java index 0583e61..79ef163 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/BaseWidget.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/BaseWidget.java @@ -50,7 +50,7 @@ public class BaseWidget extends Option { } else { text.withStyle(ChatFormatting.GRAY); } - matrices.drawString(font, text, x, y + font.lineHeight - 2, 0xFFFFFF); + matrices.drawString(font, text, x, y, 0xFFFFFF); resetButton.setX(x + width - 46); resetButton.setY(y + 1); resetButton.active = isNotDefault(); diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java b/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java index cb32346..eb34a06 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java @@ -12,7 +12,7 @@ import java.util.function.Supplier; */ public interface CraterNetworkHandler { - > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection); + > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection); Packet toServerBound(CraterPacket packet); diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java index e81bd95..05cb37f 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java @@ -3,7 +3,6 @@ package com.hypherionmc.craterlib.mixin.events; import com.hypherionmc.craterlib.api.event.server.CraterAdvancementEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; import net.minecraft.advancements.Advancement; -import net.minecraft.advancements.AdvancementHolder; import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Mixin; @@ -15,16 +14,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PlayerAdvancements.class) public class PlayerAdvancementsMixin { - @Shadow - private ServerPlayer player; + @Shadow private ServerPlayer player; @Inject(method = "award", at = @At(value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V", shift = At.Shift.AFTER)) - private void injectAdvancementEvent(AdvancementHolder advancementHolder, String string, CallbackInfoReturnable cir) { - CraterAdvancementEvent event = new CraterAdvancementEvent(this.player, advancementHolder.value()); + private void injectAdvancementEvent(Advancement advancement, String $$1, CallbackInfoReturnable cir) { + CraterAdvancementEvent event = new CraterAdvancementEvent(this.player, advancement); - Advancement advancement = advancementHolder.value(); - - if (advancement.display().isPresent() && advancement.display().get().shouldAnnounceChat()) { + if (advancement.getDisplay() != null && advancement.getDisplay().shouldAnnounceChat()) { CraterEventBus.INSTANCE.postEvent(event); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java index 851ba8b..793a2fc 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java @@ -8,7 +8,6 @@ import com.mojang.authlib.GameProfile; import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.CommonListenerCookie; import net.minecraft.server.players.PlayerList; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -29,7 +28,7 @@ public class PlayerListMixin { } @Inject(method = "placeNewPlayer", at = @At("TAIL")) - private void injectPlayerLoginEvent(Connection connection, ServerPlayer serverPlayer, CommonListenerCookie commonListenerCookie, CallbackInfo ci) { + private void injectPlayerLoginEvent(Connection connection, ServerPlayer serverPlayer, CallbackInfo ci) { CraterPlayerEvent.PlayerLoggedIn loggedIn = new CraterPlayerEvent.PlayerLoggedIn(serverPlayer); CraterEventBus.INSTANCE.postEvent(loggedIn); } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java index 44805fc..0e9a461 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java @@ -3,8 +3,7 @@ package com.hypherionmc.craterlib.mixin.events.client; import com.hypherionmc.craterlib.api.event.client.CraterSinglePlayerEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; +import net.minecraft.client.player.AbstractClientPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,12 +12,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientLevel.class) public class ClientLevelMixin { - @Inject(method = "addEntity", at = @At("HEAD")) - private void injectSinglePlayerJoinEvent(Entity entity, CallbackInfo ci) { - if (entity instanceof Player player) { - CraterSinglePlayerEvent.PlayerLogin playerLogin = new CraterSinglePlayerEvent.PlayerLogin(player); - CraterEventBus.INSTANCE.postEvent(playerLogin); - } + @Inject(method = "addPlayer", at = @At("HEAD")) + private void injectSinglePlayerJoinEvent(int $$0, AbstractClientPlayer player, CallbackInfo ci) { + CraterSinglePlayerEvent.PlayerLogin playerLogin = new CraterSinglePlayerEvent.PlayerLogin(player); + CraterEventBus.INSTANCE.postEvent(playerLogin); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java index 2d2420b..b9b8596 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java @@ -14,8 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MinecraftMixin { - @Shadow - @Nullable + @Shadow @Nullable public Screen screen; @Inject(method = "setScreen", at = @At(value = "TAIL")) diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java index 9c3b3e0..ae814ef 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java @@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class RealmsMainScreenMixin { @Inject(at = @At("HEAD"), method = "play") - private static void play(RealmsServer serverData, Screen parent, CallbackInfo ci) { + private void play(RealmsServer serverData, Screen parent, CallbackInfo ci) { PlayerJoinRealmEvent playerJoinRealm = new PlayerJoinRealmEvent(serverData); CraterEventBus.INSTANCE.postEvent(playerJoinRealm); } diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 86cac77..26e47fd 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -116,8 +116,8 @@ publisher { versionType = "release" changelog = "https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-fabric.md" version = "${minecraft_version}-${project.version}" - displayName = "[FABRIC/QUILT 1.20.2] CraterLib - ${project.version}" - gameVersions = ["1.20.2"] + displayName = "[FABRIC/QUILT 1.20.1/2] CraterLib - ${project.version}" + gameVersions = ["1.20", "1.20.1"] loaders = ["fabric", "quilt"] artifact = remapJar diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHandler.java b/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHandler.java index fd48642..76e5224 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHandler.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHandler.java @@ -35,22 +35,16 @@ public class FabricNetworkHandler implements CraterNetworkHandler { this.modid = modid; } - public synchronized static CraterNetworkHandler of(String modId) { - return NETWORK_HANDLERS.computeIfAbsent(modId, FabricNetworkHandler::new); - } - @Override - public > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection) { + public > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection) { ResourceLocation channelName = this.nextId(); this.packets.put(clazz, new PacketData(clazz, channelName, packetDirection)); final Function> decoder = buf -> Util.make(supplier.get(), message -> message.read(buf)); switch (packetDirection) { - case TO_CLIENT -> - FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerClientReceiver(channelName, decoder); - case TO_SERVER -> - FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerServerReceiver(channelName, decoder); + case TO_CLIENT -> FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerClientReceiver(channelName, decoder); + case TO_SERVER -> FabricNetworkHelper.getForDist(FabricLoader.getInstance().getEnvironmentType()).registerServerReceiver(channelName, decoder); } } @@ -60,15 +54,13 @@ public class FabricNetworkHandler implements CraterNetworkHandler { @Override public Packet toServerBound(CraterPacket packet) { - if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_SERVER) - throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_SERVER, PacketDirection.TO_CLIENT)); + if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_SERVER) throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_SERVER, PacketDirection.TO_CLIENT)); return this.toPacket(ClientPlayNetworking::createC2SPacket, packet); } @Override public Packet toClientBound(CraterPacket packet) { - if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_CLIENT) - throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_CLIENT, PacketDirection.TO_SERVER)); + if (this.packets.get(packet.getClass()).direction() != PacketDirection.TO_CLIENT) throw new IllegalStateException("Attempted sending message to wrong side, expected %s, was %s".formatted(PacketDirection.TO_CLIENT, PacketDirection.TO_SERVER)); return this.toPacket(ServerPlayNetworking::createS2CPacket, packet); } @@ -79,8 +71,11 @@ public class FabricNetworkHandler implements CraterNetworkHandler { return packetFactory.apply(identifier, byteBuf); } - private record PacketData(Class> clazz, ResourceLocation identifier, - PacketDirection direction) { + public synchronized static CraterNetworkHandler of(String modId) { + return NETWORK_HANDLERS.computeIfAbsent(modId, FabricNetworkHandler::new); + } + + private record PacketData(Class> clazz, ResourceLocation identifier, PacketDirection direction) { } } diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHelper.java b/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHelper.java index 8f52b0c..e5ec67f 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHelper.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/FabricNetworkHelper.java @@ -12,6 +12,10 @@ import java.util.function.Function; public interface FabricNetworkHelper { + /* FABRIC ONLY */ + void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function> factory); + void registerServerReceiver(ResourceLocation channelName, Function> factory); + public static FabricNetworkHelper getForDist(EnvType dist) { switch (dist) { case CLIENT -> { @@ -24,9 +28,4 @@ public interface FabricNetworkHelper { return null; } - /* FABRIC ONLY */ - void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function> factory); - - void registerServerReceiver(ResourceLocation channelName, Function> factory); - } diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index 7275fcd..68897d9 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ "depends": { "fabricloader": ">=0.14.21", "fabric-api": "*", - "minecraft": ">=1.20.2", + "minecraft": ">=1.20", "java": ">=17" } } diff --git a/Forge/build.gradle b/Forge/build.gradle index af7700c..37100f9 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -111,8 +111,8 @@ publisher { versionType = "release" changelog = "https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md" version = "${minecraft_version}-${project.version}" - displayName = "[FORGE 1.20.2] CraterLib - ${project.version}" - gameVersions = ["1.20.2"] + displayName = "[FORGE 1.20.1/2] CraterLib - ${project.version}" + gameVersions = ["1.20", "1.20.1"] loaders = ["forge"] artifact = remapJar } \ No newline at end of file diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java b/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java index 285db0b..0ffeec8 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java @@ -5,20 +5,17 @@ import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.network.CraterPacket; import com.hypherionmc.craterlib.core.network.PacketDirection; import com.hypherionmc.craterlib.core.platform.ClientPlatform; -import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraftforge.common.util.LogicalSidedProvider; -import net.minecraftforge.event.network.CustomPayloadEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.ChannelBuilder; import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.SimpleChannel; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.simple.SimpleChannel; -import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiConsumer; @@ -32,6 +29,7 @@ import java.util.function.Supplier; public class ForgeNetworkHandler implements CraterNetworkHandler { private static final Map NETWORK_HANDLERS = Maps.newConcurrentMap(); + private static final String PROTOCOL = Integer.toString(1); private final SimpleChannel channel; @@ -41,87 +39,52 @@ public class ForgeNetworkHandler implements CraterNetworkHandler { private final AtomicInteger packetID = new AtomicInteger(); - private HashMap, Integer> packetMap = new LinkedHashMap<>(); - private ForgeNetworkHandler(SimpleChannel channel, boolean clientRequired, boolean serverRequired) { this.channel = channel; this.clientRequired = clientRequired; this.serverRequired = serverRequired; } - public synchronized static CraterNetworkHandler of(String modId, boolean clientRequired, boolean serverRequired) { - ForgeNetworkHandler handler = NETWORK_HANDLERS.computeIfAbsent(modId, modId1 -> new ForgeNetworkHandler(buildSimpleChannel(modId1, clientRequired, serverRequired), clientRequired, serverRequired)); - if (handler.clientRequired != clientRequired) - throw new IllegalArgumentException("client channel settings mismatch, expected %s, but was %s".formatted(handler.clientRequired, clientRequired)); - if (handler.serverRequired != serverRequired) - throw new IllegalArgumentException("server channel settings mismatch, expected %s, but was %s".formatted(handler.serverRequired, serverRequired)); - return handler; - } - - private static SimpleChannel buildSimpleChannel(String modId, boolean clientAcceptsVanillaOrMissing, boolean serverAcceptsVanillaOrMissing) { - ChannelBuilder builder = ChannelBuilder.named(new ResourceLocation(modId, "crater_network")); - - if (clientAcceptsVanillaOrMissing) { - builder = builder.optionalClient(); - } - - if (serverAcceptsVanillaOrMissing) { - builder = builder.optionalServer(); - } - - return builder.simpleChannel(); - } - @Override - public > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection) { + public > void registerPacket(Class clazz, Supplier supplier, PacketDirection packetDirection) { BiConsumer encoder = CraterPacket::write; Function decoder = buf -> { - T packet = supplier.get(); - packet.read(buf); - return packet; + T packet = supplier.get(); + packet.read(buf); + return packet; }; - BiConsumer handler = (packet, sup) -> { + BiConsumer> handler = (packet, sup) -> { + NetworkEvent.Context context = sup.get(); LogicalSide expectedSide = getSideFromDirection(packetDirection); - LogicalSide currentSide = sup.getDirection().getReceptionSide(); + LogicalSide currentSide = context.getDirection().getReceptionSide(); if (expectedSide != currentSide) { throw new IllegalStateException(String.format("Received message on wrong side, expected %s, was %s", expectedSide, currentSide)); } - sup.enqueueWork(() -> { + context.enqueueWork(() -> { Player player; if (packetDirection == PacketDirection.TO_CLIENT) { player = ClientPlatform.INSTANCE.getClientPlayer(); } else { - player = sup.getSender(); + player = context.getSender(); } packet.handle(player, LogicalSidedProvider.WORKQUEUE.get(expectedSide)); }); - sup.setPacketHandled(true); + context.setPacketHandled(true); }; - - int id = packetID.getAndIncrement(); - packetMap.put(clazz, id); - - this.channel - .messageBuilder((Class) clazz, id) - .encoder(encoder) - .decoder(decoder) - .consumerNetworkThread(handler) - .add(); + this.channel.registerMessage(this.packetID.getAndIncrement(), (Class) clazz, encoder, decoder, handler); } @Override public Packet toServerBound(CraterPacket packet) { - return NetworkDirection.PLAY_TO_SERVER.buildPacket(toBuffer(packet), channel.getName()).getThis(); - //return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_SERVER); + return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_SERVER); } @Override public Packet toClientBound(CraterPacket packet) { - return NetworkDirection.PLAY_TO_CLIENT.buildPacket(toBuffer(packet), channel.getName()).getThis(); - //return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_CLIENT); + return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_CLIENT); } @Override @@ -129,16 +92,23 @@ public class ForgeNetworkHandler implements CraterNetworkHandler { CraterNetworkHandler.super.sendToServer(packet); } + public synchronized static CraterNetworkHandler of(String modId, boolean clientRequired, boolean serverRequired) { + ForgeNetworkHandler handler = NETWORK_HANDLERS.computeIfAbsent(modId, modId1 -> new ForgeNetworkHandler(buildSimpleChannel(modId1, clientRequired, serverRequired), clientRequired, serverRequired)); + if (handler.clientRequired != clientRequired) throw new IllegalArgumentException("client channel settings mismatch, expected %s, but was %s".formatted(handler.clientRequired, clientRequired)); + if (handler.serverRequired != serverRequired) throw new IllegalArgumentException("server channel settings mismatch, expected %s, but was %s".formatted(handler.serverRequired, serverRequired)); + return handler; + } + + private static SimpleChannel buildSimpleChannel(String modId, boolean clientAcceptsVanillaOrMissing, boolean serverAcceptsVanillaOrMissing) { + return NetworkRegistry.ChannelBuilder + .named(new ResourceLocation(modId, "crater_network")) + .networkProtocolVersion(() -> PROTOCOL) + .clientAcceptedVersions(clientAcceptsVanillaOrMissing ? NetworkRegistry.acceptMissingOr(PROTOCOL) : PROTOCOL::equals) + .serverAcceptedVersions(serverAcceptsVanillaOrMissing ? NetworkRegistry.acceptMissingOr(PROTOCOL) : PROTOCOL::equals) + .simpleChannel(); + } + private LogicalSide getSideFromDirection(PacketDirection direction) { return direction == PacketDirection.TO_CLIENT ? LogicalSide.CLIENT : LogicalSide.SERVER; } - - protected FriendlyByteBuf toBuffer(CraterPacket message) { - var msg = packetMap.get(message.getClass()); - - var ret = new FriendlyByteBuf(Unpooled.buffer()); - ret.writeVarInt(msg); - message.write(ret); - return ret; - } } diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml index 6fe86bf..3b053ed 100644 --- 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 = "[48,)" +loaderVersion = "[46,)" license = "MIT" issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" @@ -19,13 +19,13 @@ displayTest = "MATCH_VERSION" [[dependencies.${mod_id}]] modId = "forge" mandatory = true -versionRange = "[48,)" +versionRange = "[46,)" ordering = "NONE" side = "BOTH" [[dependencies.${mod_id}]] modId = "minecraft" mandatory = true -versionRange = "[1.20.2,1.20.3)" +versionRange = "[1.20,1.20.2)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 356aca5..3f72771 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,20 +10,17 @@ mod_id=craterlib mod_name=CraterLib # Shared -minecraft_version=1.20.2 +minecraft_version=1.20 # Fabric -fabric_loader=0.14.22 -fabric_api=0.89.0+1.20.2 +fabric_loader=0.14.21 +fabric_api=0.83.0+1.20 # Forge -forge_version=48.0.6 - -# NeoForged -neoforge_version=64-beta +forge_version=46.0.1 # Dependencies -mod_menu_version=8.0.0-beta.2 +mod_menu_version=7.0.0-beta.2 moon_config=1.0.9 # Publishing diff --git a/settings.gradle b/settings.gradle index f46fd20..f4aa48f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,4 +11,4 @@ pluginManagement { } rootProject.name = 'CraterLib' -include("Common", "Fabric", "Forge") \ No newline at end of file +include("Common", "Fabric", "Forge")