diff --git a/.minepkg-lock.toml b/.minepkg-lock.toml index f70df62..1848b53 100644 --- a/.minepkg-lock.toml +++ b/.minepkg-lock.toml @@ -4,20 +4,20 @@ lockfileVersion = 1 [fabric] - minecraft = "1.21.1" + minecraft = "1.21.4" fabricLoader = "0.16.10" - mapping = "1.21.1+build.3" + mapping = "1.21.4+build.8" [dependencies] [dependencies.fabric] name = "fabric" - version = "0.115.2+1.21.1.mpkg.1" + version = "0.119.0+1.21.4.mpkg.1" versionName = "" type = "mod" ipfsHash = "" - Sha256 = "92401650136b38eada3e74a451640ffe50971d5c6f532742924a931c271e6a67" - url = "https://api.preview.minepkg.io/v1/releases/fabric/fabric@0.115.2+1.21.1.mpkg.1/download" + Sha256 = "8baa413a05a01c4784ccac5be0bee2015a67e1f35b4c27334b9998c4017e29a1" + url = "https://api.preview.minepkg.io/v1/releases/fabric/fabric@0.119.0+1.21.4.mpkg.1/download" provider = "minepkg" dependent = "" diff --git a/gradle.properties b/gradle.properties index 32c7736..88daf40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,8 +3,8 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/versions.html -minecraft_version=1.21 -yarn_mappings=1.21+build.9 +minecraft_version=1.21.2 +yarn_mappings=1.21.2+build.1 loader_version=0.16.10 # Mod Properties @@ -13,8 +13,8 @@ maven_group=io.minepkg archives_base_name=test-utils # Dependencies -fabric_version=0.102.0+1.21 -libgui_version=11.1.0+1.21 +fabric_version=0.106.1+1.21.2 +libgui_version=12.0.1+1.21.2 -minecraft_version_range= >=1.21 <=1.21.1 +minecraft_version_range= >=1.21.2 <=1.21.4 java_version=21 diff --git a/minepkg.toml b/minepkg.toml index 4509d32..d40dc6d 100755 --- a/minepkg.toml +++ b/minepkg.toml @@ -13,7 +13,7 @@ manifestVersion = 0 # These are global requirements [requirements] - minecraft = ">=1.21.0 <=1.21.1" + minecraft = ">=1.21.2 <=1.21.4" fabricLoader = "*" [dependencies] diff --git a/src/main/java/io/minepkg/testutils/RuleBookGUI.java b/src/main/java/io/minepkg/testutils/RuleBookGUI.java index 4ecd9d1..b76435c 100644 --- a/src/main/java/io/minepkg/testutils/RuleBookGUI.java +++ b/src/main/java/io/minepkg/testutils/RuleBookGUI.java @@ -21,7 +21,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.GameRules; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; @@ -184,7 +183,7 @@ public RuleBookGUI(World w, PlayerEntity player) { timeSlider.setValue(timeOfDay); envBox.setTimeOfDay(timeOfDay); - btnLockTime.setToggle(!w.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)); + btnLockTime.setToggle(!TestUtilsClient.doDaylightCycle); btnLockWeather.setToggle(!TestUtilsClient.doWeatherCycle); timeSlider.setValueChangeListener((time) -> { @@ -219,7 +218,7 @@ public void tick() { this.timeSlider.setValue((int)time); // update if someone else changed the game rules - btnLockTime.setToggle(!world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)); + btnLockTime.setToggle(!TestUtilsClient.doDaylightCycle); btnLockWeather.setToggle(!TestUtilsClient.doWeatherCycle); } diff --git a/src/main/java/io/minepkg/testutils/RuleBookItem.java b/src/main/java/io/minepkg/testutils/RuleBookItem.java index 657f417..05ee08b 100644 --- a/src/main/java/io/minepkg/testutils/RuleBookItem.java +++ b/src/main/java/io/minepkg/testutils/RuleBookItem.java @@ -2,12 +2,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundEvents; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; public class RuleBookItem extends Item { @@ -16,15 +14,15 @@ public RuleBookItem(Settings settings) { } @Override - public TypedActionResult use(World world, PlayerEntity playerEntity, Hand hand) { + public ActionResult use(World world, PlayerEntity playerEntity, Hand hand) { if (world.isClient) { playerEntity.playSound(SoundEvents.ITEM_BOOK_PAGE_TURN, 1.0F, 1.0F); } else { ServerPlayerEntity serverPlayer = (ServerPlayerEntity) playerEntity; - TestUtils.sendWeatherRule(serverPlayer); + TestUtils.sendGameRules(serverPlayer); TestUtils.sendOpenBookPacket(serverPlayer); } - return new TypedActionResult<>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand)); + return ActionResult.SUCCESS; } } diff --git a/src/main/java/io/minepkg/testutils/TestUtils.java b/src/main/java/io/minepkg/testutils/TestUtils.java index f9b6c88..cd9395b 100644 --- a/src/main/java/io/minepkg/testutils/TestUtils.java +++ b/src/main/java/io/minepkg/testutils/TestUtils.java @@ -3,8 +3,8 @@ import io.minepkg.testutils.network.c2s.SetRulePayload; import io.minepkg.testutils.network.c2s.SetTimePayload; import io.minepkg.testutils.network.c2s.SetWeatherPayload; +import io.minepkg.testutils.network.s2c.GameruleSyncPayload; import io.minepkg.testutils.network.s2c.OpenBookPayload; -import io.minepkg.testutils.network.s2c.WeatherGameruleSyncPayload; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; @@ -14,6 +14,8 @@ import net.minecraft.item.ItemGroups; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; @@ -43,18 +45,15 @@ public void onInitialize() { // This code runs as soon as Minecraft is in a mod-load-ready state. // However, some things (like resources) may still be uninitialized. // Proceed with mild caution. - RuleBookItem TestUtils_Item = new RuleBookItem(new Item.Settings().maxCount(1)); - ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(entries -> entries.add(TestUtils_Item)); + RegistryKey itemKey = RegistryKey.of(RegistryKeys.ITEM, TestUtils.id("rulebook")); + RuleBookItem rulebook = new RuleBookItem(new Item.Settings().maxCount(1).registryKey(itemKey)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(entries -> entries.add(rulebook)); - Registry.register( - Registries.ITEM, - TestUtils.id("rulebook"), - TestUtils_Item - ); + Registry.register(Registries.ITEM, itemKey, rulebook); // sync weather rule on player connect ServerPlayConnectionEvents.JOIN.register((handler, sender, client) -> { - sendWeatherRule(handler.player); + sendGameRules(handler.player); }); // client wants to set the time @@ -96,15 +95,15 @@ public void onInitialize() { GameRules rules = world.getGameRules(); switch(payload.ruleID()) { - // daylight cycle case DO_DAYLIGHT_CYCLE_RULE -> { BooleanRule rule = rules.get(GameRules.DO_DAYLIGHT_CYCLE); rule.set(payload.value(), server); + broadcastGameRules(server, rules); } case DO_WEATHER_CYCLE_RULE -> { BooleanRule rule = rules.get(GameRules.DO_WEATHER_CYCLE); rule.set(payload.value(), server); - broadcastWeatherRuleChange(server, payload.value()); + broadcastGameRules(server, rules); } default -> LOGGER.error( @@ -121,19 +120,17 @@ public static void sendOpenBookPacket(ServerPlayerEntity player) { ServerPlayNetworking.send(player, new OpenBookPayload()); } - public static void broadcastWeatherRuleChange(MinecraftServer server, boolean value) { - var payload = new WeatherGameruleSyncPayload(value); + public static void broadcastGameRules(MinecraftServer server, GameRules gameRules) { + var payload = new GameruleSyncPayload(gameRules); - // Notify each player on the server about the weather gamerule update. + // Notify each player on the server about the relevant gamerules server.getPlayerManager().getPlayerList().forEach(player -> { ServerPlayNetworking.send(player, payload); }); } - public static void sendWeatherRule(ServerPlayerEntity player) { - ServerWorld world = player.getServerWorld(); - boolean doWeatherCycle = world.getGameRules().getBoolean(GameRules.DO_WEATHER_CYCLE); - var payload = new WeatherGameruleSyncPayload(doWeatherCycle); + public static void sendGameRules(ServerPlayerEntity player) { + var payload = new GameruleSyncPayload(player.getServerWorld().getGameRules()); ServerPlayNetworking.send(player, payload); } } diff --git a/src/main/java/io/minepkg/testutils/TestUtilsClient.java b/src/main/java/io/minepkg/testutils/TestUtilsClient.java index 6b096f0..1312aeb 100644 --- a/src/main/java/io/minepkg/testutils/TestUtilsClient.java +++ b/src/main/java/io/minepkg/testutils/TestUtilsClient.java @@ -1,7 +1,7 @@ package io.minepkg.testutils; +import io.minepkg.testutils.network.s2c.GameruleSyncPayload; import io.minepkg.testutils.network.s2c.OpenBookPayload; -import io.minepkg.testutils.network.s2c.WeatherGameruleSyncPayload; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; @@ -9,7 +9,8 @@ public class TestUtilsClient implements ClientModInitializer { - // used by GUI instead of native game rule because we can not change them + // used to sync the gamerules to the GUI + public static boolean doDaylightCycle = true; public static boolean doWeatherCycle = true; @Override @@ -23,12 +24,11 @@ public void onInitializeClient() { }); }); - PayloadTypeRegistry.playS2C().register(WeatherGameruleSyncPayload.ID, WeatherGameruleSyncPayload.CODEC); - ClientPlayNetworking.registerGlobalReceiver(WeatherGameruleSyncPayload.ID, (payload, context) -> { + PayloadTypeRegistry.playS2C().register(GameruleSyncPayload.ID, GameruleSyncPayload.CODEC); + ClientPlayNetworking.registerGlobalReceiver(GameruleSyncPayload.ID, (payload, context) -> { context.client().execute(() -> { + TestUtilsClient.doDaylightCycle = payload.doDaylightCycle(); TestUtilsClient.doWeatherCycle = payload.doWeatherCycle(); - // Does not work because .. minecraft - // ((GameRules.BooleanRule)client.world.getGameRules().get(GameRules.DO_WEATHER_CYCLE)).set(doWeatherCycle, (MinecraftServer)null); }); }); } diff --git a/src/main/java/io/minepkg/testutils/network/s2c/GameruleSyncPayload.java b/src/main/java/io/minepkg/testutils/network/s2c/GameruleSyncPayload.java new file mode 100644 index 0000000..792eaab --- /dev/null +++ b/src/main/java/io/minepkg/testutils/network/s2c/GameruleSyncPayload.java @@ -0,0 +1,36 @@ +package io.minepkg.testutils.network.s2c; + +import io.minepkg.testutils.TestUtils; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.world.GameRules; + +public record GameruleSyncPayload(boolean doDaylightCycle, boolean doWeatherCycle) implements CustomPayload { + public static final Id ID = new Id<>(TestUtils.id("weather_sync")); + + public GameruleSyncPayload(GameRules gameRules) { + this( + gameRules.getBoolean(GameRules.DO_DAYLIGHT_CYCLE), + gameRules.getBoolean(GameRules.DO_WEATHER_CYCLE) + ); + } + + public static final PacketCodec CODEC = PacketCodec.of( + (payload, buf) -> { + buf.writeBoolean(payload.doDaylightCycle); + buf.writeBoolean(payload.doWeatherCycle); + }, + buf -> { + boolean doDayLightCycle = buf.readBoolean(); + boolean doWeatherCycle = buf.readBoolean(); + + return new GameruleSyncPayload(doDayLightCycle, doWeatherCycle); + } + ); + + @Override + public Id getId() { + return ID; + } +} diff --git a/src/main/java/io/minepkg/testutils/network/s2c/WeatherGameruleSyncPayload.java b/src/main/java/io/minepkg/testutils/network/s2c/WeatherGameruleSyncPayload.java deleted file mode 100644 index 299fb0e..0000000 --- a/src/main/java/io/minepkg/testutils/network/s2c/WeatherGameruleSyncPayload.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.minepkg.testutils.network.s2c; - -import io.minepkg.testutils.TestUtils; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.codec.PacketCodec; -import net.minecraft.network.packet.CustomPayload; - -public record WeatherGameruleSyncPayload(boolean doWeatherCycle) implements CustomPayload { - public static final Id ID = new Id<>(TestUtils.id("weather_sync")); - - public static final PacketCodec CODEC = PacketCodec.of( - (payload, buf) -> buf.writeBoolean(payload.doWeatherCycle), - buf -> new WeatherGameruleSyncPayload(buf.readBoolean()) - ); - - @Override - public Id getId() { - return ID; - } -} diff --git a/src/main/resources/assets/testutils/items/rulebook.json b/src/main/resources/assets/testutils/items/rulebook.json new file mode 100644 index 0000000..c740561 --- /dev/null +++ b/src/main/resources/assets/testutils/items/rulebook.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "testutils:item/rulebook" + } +}