diff options
Diffstat (limited to 'src/main/java/world/anhgelus')
5 files changed, 116 insertions, 97 deletions
diff --git a/src/main/java/world/anhgelus/molehunt/Molehunt.java b/src/main/java/world/anhgelus/molehunt/Molehunt.java index 7fa10a3..8df6e32 100644 --- a/src/main/java/world/anhgelus/molehunt/Molehunt.java +++ b/src/main/java/world/anhgelus/molehunt/Molehunt.java @@ -7,19 +7,23 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleBuilder; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleEvents; import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.packet.s2c.play.OverlayMessageS2CPacket; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; import net.minecraft.world.GameMode; -import net.minecraft.world.GameRules; +import net.minecraft.world.rule.GameRule; +import net.minecraft.world.rule.GameRuleCategory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import world.anhgelus.molehunt.config.Config; @@ -29,6 +33,7 @@ import world.anhgelus.molehunt.game.Game; import world.anhgelus.molehunt.game.GamePayload; import java.util.HashMap; +import java.util.UUID; import static net.minecraft.server.command.CommandManager.literal; @@ -41,93 +46,100 @@ public class Molehunt implements ModInitializer { public static final SimpleConfig CONFIG_FILE = Config.configFile(MOD_ID); - public static final GameRules.Key<GameRules.IntRule> GAME_DURATION = GameRuleRegistry.register( - MOD_ID +":gameDurationMinutes", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("game_duration", 90)) - ); - public static final GameRules.Key<GameRules.IntRule> MOLE_PERCENTAGE = GameRuleRegistry.register( - MOD_ID +":molePercentage", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("mole_percentage", 25)) - ); - public static final GameRules.Key<GameRules.IntRule> MOLE_COUNT = GameRuleRegistry.register( - MOD_ID +":moleCount", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("mole_count", -1)) - ); - public static final GameRules.Key<GameRules.BooleanRule> SHOW_NAMETAGS = GameRuleRegistry.register( - MOD_ID +":showNametags", - GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(CONFIG_FILE.getOrDefault("show_nametags", false), (server, val) -> { - if (CONFIG == null) return; - CONFIG.sendConfigPayload(); - }) - ); - public static final GameRules.Key<GameRules.BooleanRule> SHOW_TAB = GameRuleRegistry.register( - MOD_ID +":showTab" - , GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(CONFIG_FILE.getOrDefault("show_tab", false), (server, val) -> { - if (CONFIG == null) return; - CONFIG.sendConfigPayload(); - }) - ); - public static final GameRules.Key<GameRules.BooleanRule> SHOW_SKINS = GameRuleRegistry.register( - MOD_ID +":showSkins", - GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(CONFIG_FILE.getOrDefault("show_skins", false), (server, val) -> { - if (CONFIG == null) return; - CONFIG.sendConfigPayload(); - }) - ); - public static final GameRules.Key<GameRules.IntRule> INITIAL_WORLD_SIZE = GameRuleRegistry.register( - MOD_ID +":initialWorldSize", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("initial_world_size", 600), 0) - ); - public static final GameRules.Key<GameRules.IntRule> FINAL_WORLD_SIZE = GameRuleRegistry.register( - MOD_ID +":finalWorldSize", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("final_world_size", 100), 0) - ); - public static final GameRules.Key<GameRules.IntRule> MOVING_STARTING_TIME_OFFSET = GameRuleRegistry.register( - MOD_ID +":borderMovingStartingTimeOffsetMinutes", - GameRules.Category.MISC, - GameRuleFactory.createIntRule(CONFIG_FILE.getOrDefault("border_moving_starting_time_offset", 30), 0) - ); - public static final GameRules.Key<GameRules.BooleanRule> ENABLE_PORTALS = GameRuleRegistry.register( - MOD_ID +":enablePortals", - GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(CONFIG_FILE.getOrDefault("enable_portals", false)) - ); - public static final GameRules.Key<GameRules.BooleanRule> FOOD_ON_START = GameRuleRegistry.register( - MOD_ID +":foodOnStart", - GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(CONFIG_FILE.getOrDefault("food_on_start", true)) - ); + public static final GameRule<Integer> GAME_DURATION = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("game_duration", 90)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "gameDurationMinutes")); + + public static final GameRule<Integer> MOLE_PERCENTAGE = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("mole_percentage", 25)) + .range(0, 100) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "molePercentage")); + + public static final GameRule<Integer> MOLE_COUNT = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("mole_count", -1)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "moleCount")); + + public static final GameRule<Boolean> SHOW_NAMETAGS = GameRuleBuilder + .forBoolean(CONFIG_FILE.getOrDefault("show_nametags", false)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "showNametags")); + + public static final GameRule<Boolean> SHOW_TAB = GameRuleBuilder + .forBoolean(CONFIG_FILE.getOrDefault("show_tab", false)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "showTab")); + + public static final GameRule<Boolean> SHOW_SKINS = GameRuleBuilder + .forBoolean(CONFIG_FILE.getOrDefault("show_skins", false)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "showSkins")); + + public static final GameRule<Integer> INITIAL_WORLD_SIZE = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("initial_world_size", 600)) + .minValue(0) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "initialWorldSize")); + + public static final GameRule<Integer> FINAL_WORLD_SIZE = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("final_world_size", 100)) + .minValue(0) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "finalWorldSize")); + + public static final GameRule<Integer> MOVING_STARTING_TIME_OFFSET = GameRuleBuilder + .forInteger(CONFIG_FILE.getOrDefault("border_moving_starting_time_offset", 30)) + .minValue(0) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "borderMovingStartingTimeOffsetMinutes")); + + public static final GameRule<Boolean> ENABLE_PORTALS = GameRuleBuilder + .forBoolean(CONFIG_FILE.getOrDefault("enable_portals", false)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "enablePortals")); + + public static final GameRule<Boolean> FOOD_ON_START = GameRuleBuilder + .forBoolean(CONFIG_FILE.getOrDefault("food_on_start", true)) + .category(GameRuleCategory.MISC) + .buildAndRegister(Identifier.of(MOD_ID, "foodOnStart")); public Game game; - public static HashMap<ServerPlayerEntity, Boolean> timerVisibility = new HashMap<>(); + public static HashMap<UUID, Boolean> timerVisibility = new HashMap<>(); + + private static <T> void sendConfigPayload(T v, MinecraftServer server) { + if (CONFIG == null) return; + CONFIG.sendConfigPayload(); + } + + static { + GameRuleEvents.changeCallback(SHOW_NAMETAGS).register(Molehunt::sendConfigPayload); + GameRuleEvents.changeCallback(SHOW_TAB).register(Molehunt::sendConfigPayload); + GameRuleEvents.changeCallback(SHOW_SKINS).register(Molehunt::sendConfigPayload); + } @Override public void onInitialize() { LOGGER.info("Initializing Molehunt"); final var command = literal("molehunt"); - command.then(literal("start").requires(source -> source.hasPermissionLevel(1)).executes(context -> { + command.then(literal("start") + .requires(CommandManager.requirePermissionLevel(CommandManager.GAMEMASTERS_CHECK)) + .executes(context -> { game = new Game(context.getSource().getServer()); game.start(); return Command.SINGLE_SUCCESS; })); command.then(literal("timer").requires(ServerCommandSource::isExecutedByPlayer).then( literal("show").executes(context -> { - timerVisibility.put(context.getSource().getPlayer(), true); - context.getSource().sendFeedback(() -> Text.translatable("commands.molehunt.timer.show"), false); - var player = context.getSource().getPlayer(); assert player != null; + timerVisibility.put(player.getUuid(), true); + context.getSource().sendFeedback(() -> Text.translatable("commands.molehunt.timer.show"), false); + if (game == null || !game.started()) { player.networkHandler.sendPacket(new OverlayMessageS2CPacket( Text.translatable("commands.molehunt.error.game_not_started").formatted(Formatting.RED) @@ -140,7 +152,10 @@ public class Molehunt implements ModInitializer { }) ).then( literal("hide").executes(context -> { - timerVisibility.put(context.getSource().getPlayer(), false); + var player = context.getSource().getPlayer(); + assert player != null; + + timerVisibility.put(player.getUuid(), false); context.getSource().sendFeedback(() -> Text.translatable("commands.molehunt.timer.hide"), false); return Command.SINGLE_SUCCESS; }) @@ -174,7 +189,9 @@ public class Molehunt implements ModInitializer { return Command.SINGLE_SUCCESS; })); - command.then(literal("stop").requires(source -> source.hasPermissionLevel(1)).executes(context -> { + command.then(literal("stop") + .requires(CommandManager.requirePermissionLevel(CommandManager.GAMEMASTERS_CHECK)) + .executes(context -> { if (game == null || !game.started()) { throw (new SimpleCommandExceptionType(Text.translatable("commands.molehunt.error.game_not_started"))).create(); } diff --git a/src/main/java/world/anhgelus/molehunt/config/Config.java b/src/main/java/world/anhgelus/molehunt/config/Config.java index e448f7d..08c3850 100644 --- a/src/main/java/world/anhgelus/molehunt/config/Config.java +++ b/src/main/java/world/anhgelus/molehunt/config/Config.java @@ -25,47 +25,47 @@ public class Config { } public int getGameDuration() { - return server.getGameRules().getInt(Molehunt.GAME_DURATION); + return server.getOverworld().getGameRules().getValue(Molehunt.GAME_DURATION); } public int getMolePercentage() { - return server.getGameRules().getInt(Molehunt.MOLE_PERCENTAGE); + return server.getOverworld().getGameRules().getValue(Molehunt.MOLE_PERCENTAGE); } public int getMoleCount() { - return server.getGameRules().getInt(Molehunt.MOLE_COUNT); + return server.getOverworld().getGameRules().getValue(Molehunt.MOLE_COUNT); } public boolean nametagsEnabled() { - return server.getGameRules().getBoolean(Molehunt.SHOW_NAMETAGS); + return server.getOverworld().getGameRules().getValue(Molehunt.SHOW_NAMETAGS); } public boolean skinsEnabled() { - return server.getGameRules().getBoolean(Molehunt.SHOW_SKINS); + return server.getOverworld().getGameRules().getValue(Molehunt.SHOW_SKINS); } public boolean tabEnabled() { - return server.getGameRules().getBoolean(Molehunt.SHOW_TAB); + return server.getOverworld().getGameRules().getValue(Molehunt.SHOW_TAB); } public int getInitialWorldSize() { - return server.getGameRules().getInt(Molehunt.INITIAL_WORLD_SIZE); + return server.getOverworld().getGameRules().getValue(Molehunt.INITIAL_WORLD_SIZE); } public int getFinalWorldSize() { - return server.getGameRules().getInt(Molehunt.FINAL_WORLD_SIZE); + return server.getOverworld().getGameRules().getValue(Molehunt.FINAL_WORLD_SIZE); } public int getBorderShrinkingStartingTimeOffset() { - return server.getGameRules().getInt(Molehunt.MOVING_STARTING_TIME_OFFSET); + return server.getOverworld().getGameRules().getValue(Molehunt.MOVING_STARTING_TIME_OFFSET); } public boolean portalsEnabled() { - return server.getGameRules().getBoolean(Molehunt.ENABLE_PORTALS); + return server.getOverworld().getGameRules().getValue(Molehunt.ENABLE_PORTALS); } public boolean foodOnStart() { - return server.getGameRules().getBoolean(Molehunt.FOOD_ON_START); + return server.getOverworld().getGameRules().getValue(Molehunt.FOOD_ON_START); } public static SimpleConfig configFile(String fileName) { diff --git a/src/main/java/world/anhgelus/molehunt/config/ConfigPayload.java b/src/main/java/world/anhgelus/molehunt/config/ConfigPayload.java index 0123e74..b43bd1b 100644 --- a/src/main/java/world/anhgelus/molehunt/config/ConfigPayload.java +++ b/src/main/java/world/anhgelus/molehunt/config/ConfigPayload.java @@ -12,9 +12,9 @@ public record ConfigPayload(boolean showNametags, boolean showSkins, boolean sho public static final CustomPayload.Id<ConfigPayload> ID = new CustomPayload.Id<>(CONFIG_PACKET_ID);
public static final PacketCodec<RegistryByteBuf, ConfigPayload> CODEC = PacketCodec.tuple(
- PacketCodecs.BOOL, ConfigPayload::showNametags,
- PacketCodecs.BOOL, ConfigPayload::showSkins,
- PacketCodecs.BOOL, ConfigPayload::showTab,
+ PacketCodecs.BOOLEAN, ConfigPayload::showNametags,
+ PacketCodecs.BOOLEAN, ConfigPayload::showSkins,
+ PacketCodecs.BOOLEAN, ConfigPayload::showTab,
ConfigPayload::new
);
diff --git a/src/main/java/world/anhgelus/molehunt/game/Game.java b/src/main/java/world/anhgelus/molehunt/game/Game.java index 58ea4ee..117dbce 100644 --- a/src/main/java/world/anhgelus/molehunt/game/Game.java +++ b/src/main/java/world/anhgelus/molehunt/game/Game.java @@ -11,7 +11,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.world.GameMode;
-import net.minecraft.world.GameRules;
+import net.minecraft.world.rule.GameRules;
import world.anhgelus.molehunt.Molehunt;
import world.anhgelus.molehunt.utils.TimeUtils;
@@ -53,12 +53,12 @@ public class Game { players.remove(r);
}
- final var gamerules = server.getGameRules();
+ final var gamerules = server.getOverworld().getGameRules();
// immutable gamerules
- gamerules.get(GameRules.SHOW_DEATH_MESSAGES).set(false, server);
- gamerules.get(GameRules.ANNOUNCE_ADVANCEMENTS).set(false, server);
+ gamerules.setValue(GameRules.SHOW_DEATH_MESSAGES, false, server);
+ gamerules.setValue(GameRules.ANNOUNCE_ADVANCEMENTS, false, server);
// gamerules for the start
- gamerules.get(GameRules.DO_IMMEDIATE_RESPAWN).set(true, server);
+ gamerules.setValue(GameRules.DO_IMMEDIATE_RESPAWN, true, server);
final var worldBorder = server.getOverworld().getWorldBorder();
worldBorder.setSize(Molehunt.CONFIG.getInitialWorldSize());
@@ -70,7 +70,9 @@ public class Game { worldBorder.interpolateSize(
Molehunt.CONFIG.getInitialWorldSize(),
Molehunt.CONFIG.getFinalWorldSize(),
- (long) (Molehunt.CONFIG.getGameDuration() - Molehunt.CONFIG.getBorderShrinkingStartingTimeOffset()) * 60 * 1000);
+ (long) (Molehunt.CONFIG.getGameDuration() - Molehunt.CONFIG.getBorderShrinkingStartingTimeOffset()) * 60 * 1000,
+ 0L
+ );
}
}, (long) Molehunt.CONFIG.getBorderShrinkingStartingTimeOffset() * 60 * 1000);
}
@@ -78,7 +80,7 @@ public class Game { final var title = new TitleS2CPacket(Text.translatable("molehunt.game.start.suspense"));
playerManager.getPlayerList().forEach(p -> {
p.getInventory().clear();
- p.kill();
+ p.kill(p.getEntityWorld());
p.networkHandler.sendPacket(timing);
p.networkHandler.sendPacket(title);
p.changeGameMode(GameMode.SURVIVAL);
@@ -105,7 +107,7 @@ public class Game { p.getHungerManager().setSaturationLevel(5.0f);
});
// reset gamerules after the start
- gamerules.get(GameRules.DO_IMMEDIATE_RESPAWN).set(false, server);
+ gamerules.setValue(GameRules.DO_IMMEDIATE_RESPAWN, false, server);
// reset time and weather
server.getOverworld().setTimeOfDay(0);
server.getOverworld().resetWeather();
diff --git a/src/main/java/world/anhgelus/molehunt/game/GamePayload.java b/src/main/java/world/anhgelus/molehunt/game/GamePayload.java index 4f7b8ce..66e3209 100644 --- a/src/main/java/world/anhgelus/molehunt/game/GamePayload.java +++ b/src/main/java/world/anhgelus/molehunt/game/GamePayload.java @@ -12,7 +12,7 @@ public record GamePayload(boolean gameLaunched) implements CustomPayload { public static final CustomPayload.Id<GamePayload> ID = new CustomPayload.Id<>(GAME_PACKET_ID);
public static final PacketCodec<RegistryByteBuf, GamePayload> CODEC = PacketCodec.tuple(
- PacketCodecs.BOOL, GamePayload::gameLaunched,
+ PacketCodecs.BOOLEAN, GamePayload::gameLaunched,
GamePayload::new
);
|
