diff --git a/build.gradle b/build.gradle index 5885aeb..9112094 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ processResources { } } -def targetJavaVersion = 17 +def targetJavaVersion = 21 tasks.withType(JavaCompile).configureEach { it.options.encoding = "UTF-8" if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { diff --git a/gradle.properties b/gradle.properties index b3adc1f..050452c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ -minecraft_version=1.20.1 +minecraft_version=1.20.5 yarn_mappings=build.1 loader_version=0.16.10 -mod_version=1.0 +mod_version=1.1 maven_group=com.mingliqiye.minecraft.enchantment.conflict archives_base_name=enchantmentdoesnotconflict -fabric_version=0.92.6 +fabric_version=0.97.8 diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/Mod.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/Mod.java index 70c64d1..7592211 100644 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/Mod.java +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/Mod.java @@ -1,13 +1,13 @@ package com.mingliqiye.minecraft.enchantment.conflict; +import com.mingliqiye.minecraft.enchantment.conflict.network.ConfigPayload; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.minecraft.server.MinecraftServer; public class Mod implements ModInitializer { public static String MOD_ID = "enchantmentdoesnotconflict"; @Override public void onInitialize() { + ConfigPayload.initializeServer(); } } diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/client/ModClient.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/client/ModClient.java index 1eb4ce7..3fd264b 100644 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/client/ModClient.java +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/client/ModClient.java @@ -1,11 +1,11 @@ package com.mingliqiye.minecraft.enchantment.conflict.client; -import com.mingliqiye.minecraft.enchantment.conflict.network.NetworkHandler; +import com.mingliqiye.minecraft.enchantment.conflict.network.ConfigPayload; import net.fabricmc.api.ClientModInitializer; public class ModClient implements ClientModInitializer { @Override public void onInitializeClient() { - NetworkHandler.registerReceivers(); + ConfigPayload.initializeClient(); } } diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/config/ModConfig.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/config/ModConfig.java index 8da9670..4e03cff 100644 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/config/ModConfig.java +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/config/ModConfig.java @@ -13,17 +13,15 @@ import java.nio.file.Path; import static com.mingliqiye.minecraft.enchantment.conflict.Mod.MOD_ID; public class ModConfig { - private static final Path CONFIG_PATH = - FabricLoader.getInstance().getConfigDir().resolve(MOD_ID + ".json"); - private static final Gson GSON = - new GsonBuilder().setPrettyPrinting().serializeNulls().create(); + private static final Path CONFIG_PATH = FabricLoader.getInstance().getConfigDir().resolve(MOD_ID + ".json"); + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); private static ModConfig instance; private boolean allowDamageEnchantment = true; private boolean allowInfinityEnchantment = true; private boolean allowPiercingEnchantment = true; - private boolean allowProtectionEnchantmentMixin = true; + private boolean allowProtectionEnchantment = true; public ModConfig() { } @@ -39,8 +37,7 @@ public class ModConfig { public static ModConfig load() { try { if (Files.exists(CONFIG_PATH)) { - return GSON.fromJson(Files.newBufferedReader(CONFIG_PATH), - ModConfig.class); + return GSON.fromJson(Files.newBufferedReader(CONFIG_PATH), ModConfig.class); } } catch (IOException e) { e.printStackTrace(); @@ -87,23 +84,19 @@ public class ModConfig { this.allowPiercingEnchantment = allowPiercingEnchantment; } - public boolean isAllowProtectionEnchantmentMixin() { - return allowProtectionEnchantmentMixin; + public boolean isAllowProtectionEnchantment() { + return allowProtectionEnchantment; } - public void setAllowProtectionEnchantmentMixin( - boolean allowProtectionEnchantmentMixin + public void setAllowProtectionEnchantment( + boolean allowProtectionEnchantment ) { - this.allowProtectionEnchantmentMixin = allowProtectionEnchantmentMixin; + this.allowProtectionEnchantment = allowProtectionEnchantment; } public String toString() { - return this.getClass().getName() + "(" + "allowDamageEnchantment" + - "=" + allowDamageEnchantment + "," + - "allowInfinityEnchantment" + "=" + allowInfinityEnchantment + - "," + "allowPiercingEnchantment" + "=" + - allowPiercingEnchantment + "," + - "allowProtectionEnchantmentMixin" + "=" + - allowProtectionEnchantmentMixin + ")"; + return this.getClass().getName() + "(" + "allowDamageEnchantment" + "=" + allowDamageEnchantment + "," + + "allowInfinityEnchantment" + "=" + allowInfinityEnchantment + "," + "allowPiercingEnchantment" + "=" + + allowPiercingEnchantment + "," + "allowProtectionEnchantment" + "=" + allowProtectionEnchantment + ")"; } } diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/PlayerManagerMixin.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/PlayerManagerMixin.java index e3beb14..d8e0b66 100644 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/PlayerManagerMixin.java +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/PlayerManagerMixin.java @@ -1,9 +1,9 @@ package com.mingliqiye.minecraft.enchantment.conflict.mixin; -import com.mingliqiye.minecraft.enchantment.conflict.config.ModConfig; -import com.mingliqiye.minecraft.enchantment.conflict.network.NetworkHandler; +import com.mingliqiye.minecraft.enchantment.conflict.network.ConfigPayload; import net.minecraft.network.ClientConnection; import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ConnectedClientData; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -15,9 +15,8 @@ public abstract class PlayerManagerMixin { @Inject(method = "onPlayerConnect" ,at = @At("RETURN")) private void onPlayerConnect( - ClientConnection connection, ServerPlayerEntity player, - CallbackInfo ci + ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci ){ - NetworkHandler.sendConfigToClient(player); + ConfigPayload.sendToPlayer(player); } } diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/ProtectionEnchantmentMixin.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/ProtectionEnchantmentMixin.java index b4b5443..b799860 100644 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/ProtectionEnchantmentMixin.java +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/mixin/ProtectionEnchantmentMixin.java @@ -20,7 +20,7 @@ public abstract class ProtectionEnchantmentMixin { @NotNull CallbackInfoReturnable cir ) { if (enchantment instanceof ProtectionEnchantment) { - cir.setReturnValue(ModConfig.getInstance().isAllowProtectionEnchantmentMixin()); + cir.setReturnValue(ModConfig.getInstance().isAllowProtectionEnchantment()); } } } diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/ConfigPayload.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/ConfigPayload.java new file mode 100644 index 0000000..857da7b --- /dev/null +++ b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/ConfigPayload.java @@ -0,0 +1,58 @@ +package com.mingliqiye.minecraft.enchantment.conflict.network; + +import com.google.gson.Gson; +import com.mingliqiye.minecraft.enchantment.conflict.Mod; +import com.mingliqiye.minecraft.enchantment.conflict.config.ModConfig; +import com.mojang.logging.LogUtils; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; +import org.slf4j.Logger; + +import static com.mingliqiye.minecraft.enchantment.conflict.Mod.MOD_ID; + +public record ConfigPayload(ModConfig data) implements CustomPayload { + + private static final Logger LOGGER = LogUtils.getLogger(); + public static final CustomPayload.Id TYPE = + new CustomPayload.Id<>(Identifier.of(Mod.MOD_ID, "config_packet")); + + private static final Gson GSON = new Gson(); + + + public static final PacketCodec CODEC = + PacketCodec.of((payload, buf) -> buf.writeString(GSON.toJson(payload.data())), + buf -> new ConfigPayload(GSON.fromJson(buf.readString(), ModConfig.class))); + + @Override + public Id getId() { + return TYPE; + } + + public static void initializeClient() { + ClientPlayNetworking.registerGlobalReceiver(TYPE, (payload, ctx) -> { + ctx.client().execute(() -> { + ModConfig.setInstance(payload.data()); + LOGGER.info("Load Server {} config {}", MOD_ID, payload.data()); + }); + }); + } + + public static void initializeServer() { + PayloadTypeRegistry.playS2C().register(TYPE, CODEC); + } + + public static void sendToPlayer(ServerPlayerEntity player) { + if (ServerPlayNetworking.canSend(player, TYPE)) { + ServerPlayNetworking.send(player, new ConfigPayload(ModConfig.getInstance())); + LOGGER.info("Send {} config to player({}) ok", Mod.MOD_ID, player.getName().getString()); + } else { + LOGGER.error("Cannot send config to {}: channel not registered", player.getName()); + } + } +} diff --git a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/NetworkHandler.java b/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/NetworkHandler.java deleted file mode 100644 index df6fb68..0000000 --- a/src/main/java/com/mingliqiye/minecraft/enchantment/conflict/network/NetworkHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mingliqiye.minecraft.enchantment.conflict.network; - -import com.google.gson.Gson; -import com.mingliqiye.minecraft.enchantment.conflict.config.ModConfig; -import com.mojang.logging.LogUtils; -import io.netty.buffer.Unpooled; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; - -import com.mingliqiye.minecraft.enchantment.conflict.Mod; -import org.slf4j.Logger; - -public class NetworkHandler { - public static final Identifier CONFIG_PACKET_ID = new Identifier(Mod.MOD_ID, "config_packet"); - public static final Gson GSON = new Gson(); - - private static final Logger LOGGER = LogUtils.getLogger(); - - public static void sendConfigToClient(ServerPlayerEntity player) { - PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer()); - buf.writeString(GSON.toJson(ModConfig.getInstance())); - ServerPlayNetworking.send(player, NetworkHandler.CONFIG_PACKET_ID, buf); - LOGGER.info("Send Player({}) Server {} config {}", player.getName().getString(), Mod.MOD_ID, - ModConfig.getInstance()); - } - - public static void registerReceivers() { - ClientPlayNetworking.registerGlobalReceiver(NetworkHandler.CONFIG_PACKET_ID, - (client, handler, buf, responseSender) -> { - ModConfig configData = GSON.fromJson(buf.readString(), ModConfig.class); - client.execute(() -> { - ModConfig.setInstance(configData); - LOGGER.info("Load Server {} config {}", Mod.MOD_ID, configData); - }); - }); - } -} diff --git a/src/main/resources/enchantmentdoesnotconflict.mixins.json b/src/main/resources/enchantmentdoesnotconflict.mixins.json index d1ab67c..9786e63 100644 --- a/src/main/resources/enchantmentdoesnotconflict.mixins.json +++ b/src/main/resources/enchantmentdoesnotconflict.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.mingliqiye.minecraft.enchantment.conflict.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ "DamageEnchantmentMixin", "InfinityEnchantmentMixin",