Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .minepkg-lock.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ""

Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
2 changes: 1 addition & 1 deletion minepkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/io/minepkg/testutils/RuleBookGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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) -> {
Expand Down Expand Up @@ -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);
}

Expand Down
8 changes: 3 additions & 5 deletions src/main/java/io/minepkg/testutils/RuleBookItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -16,15 +14,15 @@ public RuleBookItem(Settings settings) {
}

@Override
public TypedActionResult<ItemStack> 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;
}
}
33 changes: 15 additions & 18 deletions src/main/java/io/minepkg/testutils/TestUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<Item> 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
Expand Down Expand Up @@ -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(
Expand All @@ -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);
}
}
12 changes: 6 additions & 6 deletions src/main/java/io/minepkg/testutils/TestUtilsClient.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
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;
import net.minecraft.client.MinecraftClient;

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
Expand All @@ -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);
});
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<GameruleSyncPayload> 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<PacketByteBuf, GameruleSyncPayload> 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<? extends CustomPayload> getId() {
return ID;
}
}

This file was deleted.

6 changes: 6 additions & 0 deletions src/main/resources/assets/testutils/items/rulebook.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "testutils:item/rulebook"
}
}