From 3eac6fd7207e9719646ae1e47e178564f9271eae Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sun, 31 Dec 2023 17:24:48 +1100 Subject: [PATCH] Now runs on servers properly --- .github/ISSUE_TEMPLATE/1-bug_report.yml | 4 +- .github/ISSUE_TEMPLATE/2-crash_report.yml | 4 +- .github/ISSUE_TEMPLATE/3-feature_request.yml | 4 +- .../java/toughasnails/core/ToughAsNails.java | 31 +++++++------ .../toughasnails/init/ModContainerTypes.java | 7 ++- .../java/toughasnails/init/ModPackets.java | 13 ++++-- .../toughasnails/mixin/client/MixinGui.java | 4 +- .../mixin/client/MixinLocalPlayer.java | 4 +- .../network/DrinkInWorldPacket.java | 1 - .../network/UpdateTemperaturePacket.java | 20 ++++++--- .../network/UpdateThirstPacket.java | 20 +++++++-- ...Hooks.java => TemperatureHooksClient.java} | 2 +- .../java/toughasnails/thirst/ThirstHooks.java | 34 -------------- .../thirst/ThirstHooksClient.java | 45 +++++++++++++++++++ .../toughasnails/core/ToughAsNailsFabric.java | 9 +++- fabric/src/main/resources/fabric.mod.json | 3 ++ .../toughasnails/core/ToughAsNailsForge.java | 4 +- gradle.properties | 2 +- .../core/ToughAsNailsNeoForge.java | 4 +- 19 files changed, 131 insertions(+), 84 deletions(-) rename common/src/main/java/toughasnails/temperature/{TemperatureHooks.java => TemperatureHooksClient.java} (98%) create mode 100644 common/src/main/java/toughasnails/thirst/ThirstHooksClient.java diff --git a/.github/ISSUE_TEMPLATE/1-bug_report.yml b/.github/ISSUE_TEMPLATE/1-bug_report.yml index 8fd1a25d..5768222d 100644 --- a/.github/ISSUE_TEMPLATE/1-bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1-bug_report.yml @@ -1,11 +1,11 @@ -name: 1.19+ Bug Report +name: 1.20.4+ Bug Report description: File a bug report labels: [bug] body: - type: markdown attributes: value: | - For bugs experienced with Minecraft 1.19+. Older versions are not supported. + For bugs experienced with Minecraft 1.20.4+. Older versions are not supported. If any section does not apply, replace its content with "N/A". Please search for existing bug reports before making your own report. diff --git a/.github/ISSUE_TEMPLATE/2-crash_report.yml b/.github/ISSUE_TEMPLATE/2-crash_report.yml index a0696450..af9843e7 100644 --- a/.github/ISSUE_TEMPLATE/2-crash_report.yml +++ b/.github/ISSUE_TEMPLATE/2-crash_report.yml @@ -1,11 +1,11 @@ -name: 1.19+ Crash Report +name: 1.20.4+ Crash Report description: File a crash report labels: [crash] body: - type: markdown attributes: value: | - For crashes experienced with Minecraft 1.19+. Older versions are not supported. + For crashes experienced with Minecraft 1.20.4+. Older versions are not supported. If any section does not apply, replace its content with "N/A". Please search for existing crash reports before making your own report. diff --git a/.github/ISSUE_TEMPLATE/3-feature_request.yml b/.github/ISSUE_TEMPLATE/3-feature_request.yml index fd52488a..0daaeabd 100644 --- a/.github/ISSUE_TEMPLATE/3-feature_request.yml +++ b/.github/ISSUE_TEMPLATE/3-feature_request.yml @@ -1,11 +1,11 @@ -name: 1.19+ Feature Request +name: 1.20.4+ Feature Request description: Request a new feature labels: [feature] body: - type: markdown attributes: value: | - Feature requests for Minecraft 1.19+. Older versions are not supported. + Feature requests for Minecraft 1.20.4+. Older versions are not supported. If any section does not apply, replace its contents with "N/A". Please search for existing feature requests before you make your own request. diff --git a/common/src/main/java/toughasnails/core/ToughAsNails.java b/common/src/main/java/toughasnails/core/ToughAsNails.java index 2224bb28..6481a935 100644 --- a/common/src/main/java/toughasnails/core/ToughAsNails.java +++ b/common/src/main/java/toughasnails/core/ToughAsNails.java @@ -5,11 +5,7 @@ package toughasnails.core; import glitchcore.event.EventManager; -import glitchcore.util.Environment; import glitchcore.util.RegistryHelper; -import glitchcore.util.RenderTypeHelper; -import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.registries.Registries; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -21,9 +17,6 @@ import toughasnails.thirst.ThirstHandler; import toughasnails.thirst.ThirstOverlayRenderer; -import static toughasnails.api.block.TANBlocks.RAIN_COLLECTOR; -import static toughasnails.api.block.TANBlocks.WATER_PURIFIER; - public class ToughAsNails { public static final String MOD_ID = TANAPI.MOD_ID; @@ -39,9 +32,10 @@ public static void init() ModApi.init(); } - public static void initClient() + public static void setupClient() { ModBlocks.registerRenderers(); + addClientHandlers(); } private static void addRegistrars() @@ -62,23 +56,32 @@ private static void addRegistrars() private static void addHandlers() { // Temperature handlers - EventManager.addListener(TemperatureOverlayRenderer::onClientTick); - EventManager.addListener(TemperatureOverlayRenderer::onBeginRenderFood); - EventManager.addListener(TemperatureOverlayRenderer::onBeginRenderFrostbite); EventManager.addListener(TemperatureHandler::onChangeDimension); // Thirst handlers - EventManager.addListener(ThirstOverlayRenderer::onClientTick); - EventManager.addListener(ThirstOverlayRenderer::onBeginRenderAir); EventManager.addListener(ThirstHandler::onChangeDimension); EventManager.addListener(ThirstHandler::onItemUseFinish); EventManager.addListener(ThirstHandler::onPlayerUseItem); + } + + private static void addClientHandlers() + { + // Temperature + EventManager.addListener(TemperatureOverlayRenderer::onClientTick); + EventManager.addListener(TemperatureOverlayRenderer::onBeginRenderFood); + EventManager.addListener(TemperatureOverlayRenderer::onBeginRenderFrostbite); + + // Thirst + EventManager.addListener(ThirstOverlayRenderer::onClientTick); + EventManager.addListener(ThirstOverlayRenderer::onBeginRenderAir); EventManager.addListener(ThirstHandler::onUseEmpty); EventManager.addListener(ThirstHandler::onClientTick); - // Client handlers + // Coloring EventManager.addListener(ModBlocks::registerBlockColors); EventManager.addListener(ModItems::registerItemColors); + + // Tooltips EventManager.addListener(TooltipHandler::onTooltip); EventManager.addListener(TooltipHandler::onRenderTooltip); } diff --git a/common/src/main/java/toughasnails/init/ModContainerTypes.java b/common/src/main/java/toughasnails/init/ModContainerTypes.java index c1d63c56..e510dba9 100644 --- a/common/src/main/java/toughasnails/init/ModContainerTypes.java +++ b/common/src/main/java/toughasnails/init/ModContainerTypes.java @@ -4,6 +4,7 @@ ******************************************************************************/ package toughasnails.init; +import glitchcore.util.Environment; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.flag.FeatureFlags; @@ -21,7 +22,11 @@ public class ModContainerTypes public static void registerContainers(BiConsumer> func) { TANContainerTypes.WATER_PURIFIER = register(func, "water_purifier", WaterPurifierContainer::new); - MenuScreens.register((MenuType)TANContainerTypes.WATER_PURIFIER, WaterPurifierScreen::new); + + if (Environment.isClient()) + { + MenuScreens.register((MenuType) TANContainerTypes.WATER_PURIFIER, WaterPurifierScreen::new); + } } public static MenuType register(BiConsumer> func, String name, MenuType.MenuSupplier factory) diff --git a/common/src/main/java/toughasnails/init/ModPackets.java b/common/src/main/java/toughasnails/init/ModPackets.java index c64f99b6..a19be538 100644 --- a/common/src/main/java/toughasnails/init/ModPackets.java +++ b/common/src/main/java/toughasnails/init/ModPackets.java @@ -4,9 +4,11 @@ ******************************************************************************/ package toughasnails.init; +import glitchcore.network.CustomPacket; import glitchcore.network.PacketHandler; import net.minecraft.resources.ResourceLocation; import toughasnails.api.TANAPI; +import toughasnails.core.ToughAsNails; import toughasnails.network.DrinkInWorldPacket; import toughasnails.network.UpdateTemperaturePacket; import toughasnails.network.UpdateThirstPacket; @@ -17,8 +19,13 @@ public class ModPackets public static final PacketHandler HANDLER = new PacketHandler(CHANNEL); public static void init() { - HANDLER.register(new UpdateTemperaturePacket()); - HANDLER.register(new UpdateThirstPacket()); - HANDLER.register(new DrinkInWorldPacket()); + register("update_temperature", new UpdateTemperaturePacket()); + register("update_thirst", new UpdateThirstPacket()); + register("drink_in_world", new DrinkInWorldPacket()); + } + + public static void register(String name, CustomPacket packet) + { + HANDLER.register(new ResourceLocation(ToughAsNails.MOD_ID, name), packet); } } diff --git a/common/src/main/java/toughasnails/mixin/client/MixinGui.java b/common/src/main/java/toughasnails/mixin/client/MixinGui.java index f229f20b..5734f9ce 100644 --- a/common/src/main/java/toughasnails/mixin/client/MixinGui.java +++ b/common/src/main/java/toughasnails/mixin/client/MixinGui.java @@ -10,7 +10,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import toughasnails.temperature.TemperatureHooks; +import toughasnails.temperature.TemperatureHooksClient; @Mixin(Gui.class) public abstract class MixinGui @@ -18,7 +18,7 @@ public abstract class MixinGui @Inject(method="renderHeart", at=@At(value="HEAD"), cancellable = true) public void onRenderHeart(GuiGraphics gui, Gui.HeartType heartType, int x, int y, boolean isHardcore, boolean isBlinking, boolean isHalf, CallbackInfo ci) { - TemperatureHooks.heartBlit(gui, heartType, x, y, isHardcore, isBlinking, isHalf); + TemperatureHooksClient.heartBlit(gui, heartType, x, y, isHardcore, isBlinking, isHalf); ci.cancel(); } } \ No newline at end of file diff --git a/common/src/main/java/toughasnails/mixin/client/MixinLocalPlayer.java b/common/src/main/java/toughasnails/mixin/client/MixinLocalPlayer.java index a8baa4fa..65b4ad2a 100644 --- a/common/src/main/java/toughasnails/mixin/client/MixinLocalPlayer.java +++ b/common/src/main/java/toughasnails/mixin/client/MixinLocalPlayer.java @@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import toughasnails.thirst.ThirstHooks; +import toughasnails.thirst.ThirstHooksClient; @Mixin(LocalPlayer.class) public class MixinLocalPlayer @@ -16,6 +16,6 @@ public class MixinLocalPlayer @Redirect(method="aiStep", at=@At(value="INVOKE", target="Lnet/minecraft/client/player/LocalPlayer;setSprinting(Z)V")) public void aiStep_setSprinting(LocalPlayer player, boolean sprinting) { - ThirstHooks.onAiStepSetSprinting(player, sprinting); + ThirstHooksClient.onAiStepSetSprinting(player, sprinting); } } diff --git a/common/src/main/java/toughasnails/network/DrinkInWorldPacket.java b/common/src/main/java/toughasnails/network/DrinkInWorldPacket.java index 37cd8db2..849bbd1c 100644 --- a/common/src/main/java/toughasnails/network/DrinkInWorldPacket.java +++ b/common/src/main/java/toughasnails/network/DrinkInWorldPacket.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; import toughasnails.api.potion.TANEffects; -import toughasnails.api.temperature.TemperatureLevel; import toughasnails.api.thirst.IThirst; import toughasnails.api.thirst.ThirstHelper; import toughasnails.init.ModConfig; diff --git a/common/src/main/java/toughasnails/network/UpdateTemperaturePacket.java b/common/src/main/java/toughasnails/network/UpdateTemperaturePacket.java index 2882d503..36c22658 100644 --- a/common/src/main/java/toughasnails/network/UpdateTemperaturePacket.java +++ b/common/src/main/java/toughasnails/network/UpdateTemperaturePacket.java @@ -11,9 +11,6 @@ import toughasnails.api.temperature.ITemperature; import toughasnails.api.temperature.TemperatureHelper; import toughasnails.api.temperature.TemperatureLevel; -import toughasnails.api.thirst.IThirst; -import toughasnails.api.thirst.ThirstHelper; -import toughasnails.core.ToughAsNails; public class UpdateTemperaturePacket implements CustomPacket { @@ -47,10 +44,19 @@ public void handle(UpdateTemperaturePacket packet, Context context) if (context.isServerSide()) return; - Player player = Minecraft.getInstance().player; - ITemperature temperature = TemperatureHelper.getTemperatureData(player); + Detail.setTemperatureClient(packet.temperatureLevel, packet.hyperthermiaTicks); + } - temperature.setLevel(packet.temperatureLevel); - temperature.setHyperthermiaTicks(packet.hyperthermiaTicks); + // Used to isolate client code from the server + private static class Detail + { + private static void setTemperatureClient(TemperatureLevel level, int hyperthermiaTicks) + { + Player player = Minecraft.getInstance().player; + ITemperature temperature = TemperatureHelper.getTemperatureData(player); + + temperature.setLevel(level); + temperature.setHyperthermiaTicks(hyperthermiaTicks); + } } } diff --git a/common/src/main/java/toughasnails/network/UpdateThirstPacket.java b/common/src/main/java/toughasnails/network/UpdateThirstPacket.java index 313a189d..6b3deca8 100644 --- a/common/src/main/java/toughasnails/network/UpdateThirstPacket.java +++ b/common/src/main/java/toughasnails/network/UpdateThirstPacket.java @@ -8,6 +8,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; +import toughasnails.api.temperature.ITemperature; +import toughasnails.api.temperature.TemperatureHelper; +import toughasnails.api.temperature.TemperatureLevel; import toughasnails.api.thirst.IThirst; import toughasnails.api.thirst.ThirstHelper; @@ -43,10 +46,19 @@ public void handle(UpdateThirstPacket packet, Context context) if (context.isServerSide()) return; - Player player = Minecraft.getInstance().player; - IThirst thirst = ThirstHelper.getThirst(player); + Detail.setThirstClient(packet.thirstLevel, packet.hydrationLevel); + } + + // Used to isolate client code from the server + private static class Detail + { + private static void setThirstClient(int thirstLevel, float hydrationLevel) + { + Player player = Minecraft.getInstance().player; + IThirst thirst = ThirstHelper.getThirst(player); - thirst.setThirst(packet.thirstLevel); - thirst.setHydration(packet.hydrationLevel); + thirst.setThirst(thirstLevel); + thirst.setHydration(hydrationLevel); + } } } diff --git a/common/src/main/java/toughasnails/temperature/TemperatureHooks.java b/common/src/main/java/toughasnails/temperature/TemperatureHooksClient.java similarity index 98% rename from common/src/main/java/toughasnails/temperature/TemperatureHooks.java rename to common/src/main/java/toughasnails/temperature/TemperatureHooksClient.java index 0da38cc7..fc7d2f39 100644 --- a/common/src/main/java/toughasnails/temperature/TemperatureHooks.java +++ b/common/src/main/java/toughasnails/temperature/TemperatureHooksClient.java @@ -11,7 +11,7 @@ import net.minecraft.resources.ResourceLocation; import toughasnails.api.temperature.TemperatureHelper; -public class TemperatureHooks +public class TemperatureHooksClient { private static final ResourceLocation OVERHEATED_HEART_FULL = new ResourceLocation("toughasnails:hud/heart/overheated_full"); private static final ResourceLocation OVERHEATED_HEART_FULL_BLINKING = new ResourceLocation("toughasnails:hud/heart/overheated_full_blinking"); diff --git a/common/src/main/java/toughasnails/thirst/ThirstHooks.java b/common/src/main/java/toughasnails/thirst/ThirstHooks.java index be2d5126..af2774d1 100644 --- a/common/src/main/java/toughasnails/thirst/ThirstHooks.java +++ b/common/src/main/java/toughasnails/thirst/ThirstHooks.java @@ -1,6 +1,5 @@ package toughasnails.thirst; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.Difficulty; import net.minecraft.world.entity.player.Player; import net.minecraft.world.food.FoodData; @@ -90,37 +89,4 @@ else if (data.foodLevel <= 0) } } - public static void onAiStep(LocalPlayer player) - { - if (player.isSprinting()) - { - boolean sprintingAllowable = canSprintWithThirst(player); - - if (player.isSwimming()) - { - if (!player.onGround() && !player.input.shiftKeyDown && !sprintingAllowable || !player.isInWater()) - { - player.setSprinting(false); - } - } - else if (!sprintingAllowable) - { - player.setSprinting(false); - } - } - } - - public static void onAiStepSetSprinting(LocalPlayer player, boolean sprinting) - { - // Don't allow sprinting if the player has insufficient thirst - if (sprinting && !canSprintWithThirst(player)) - sprinting = false; - - player.setSprinting(sprinting); - } - - private static boolean canSprintWithThirst(LocalPlayer player) - { - return ThirstHelper.getThirst(player).getThirst() > 6 || player.getAbilities().mayfly; - } } diff --git a/common/src/main/java/toughasnails/thirst/ThirstHooksClient.java b/common/src/main/java/toughasnails/thirst/ThirstHooksClient.java new file mode 100644 index 00000000..00dfd61b --- /dev/null +++ b/common/src/main/java/toughasnails/thirst/ThirstHooksClient.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright 2023, the Glitchfiend Team. + * All rights reserved. + ******************************************************************************/ +package toughasnails.thirst; + +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.player.Player; +import toughasnails.api.thirst.ThirstHelper; + +public class ThirstHooksClient { + public static void onAiStep(LocalPlayer player) + { + if (player.isSprinting()) + { + boolean sprintingAllowable = canSprintWithThirst(player); + + if (player.isSwimming()) + { + if (!player.onGround() && !player.input.shiftKeyDown && !sprintingAllowable || !player.isInWater()) + { + player.setSprinting(false); + } + } + else if (!sprintingAllowable) + { + player.setSprinting(false); + } + } + } + + public static void onAiStepSetSprinting(LocalPlayer player, boolean sprinting) + { + // Don't allow sprinting if the player has insufficient thirst + if (sprinting && !canSprintWithThirst(player)) + sprinting = false; + + player.setSprinting(sprinting); + } + + private static boolean canSprintWithThirst(LocalPlayer player) + { + return ThirstHelper.getThirst(player).getThirst() > 6 || player.getAbilities().mayfly; + } +} diff --git a/fabric/src/main/java/toughasnails/core/ToughAsNailsFabric.java b/fabric/src/main/java/toughasnails/core/ToughAsNailsFabric.java index c29d1ebb..59060ad9 100644 --- a/fabric/src/main/java/toughasnails/core/ToughAsNailsFabric.java +++ b/fabric/src/main/java/toughasnails/core/ToughAsNailsFabric.java @@ -5,10 +5,11 @@ package toughasnails.core; import glitchcore.fabric.GlitchCoreFabric; +import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; -public class ToughAsNailsFabric implements ModInitializer +public class ToughAsNailsFabric implements ModInitializer, ClientModInitializer { /** Fabric TODOs * Add config synchronization for thirst/temperature @@ -20,9 +21,13 @@ public void onInitialize() { ToughAsNails.init(); GlitchCoreFabric.prepareEvents(); + } + @Override + public void onInitializeClient() + { ClientLifecycleEvents.CLIENT_STARTED.register(client -> { - ToughAsNails.initClient(); + ToughAsNails.setupClient(); }); } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 224fb0e0..dea5713b 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -18,6 +18,9 @@ "entrypoints": { "main": [ "toughasnails.core.ToughAsNailsFabric" + ], + "client": [ + "toughasnails.core.ToughAsNailsFabric" ] }, "mixins": [ diff --git a/forge/src/main/java/toughasnails/core/ToughAsNailsForge.java b/forge/src/main/java/toughasnails/core/ToughAsNailsForge.java index f7df0069..e424afb0 100644 --- a/forge/src/main/java/toughasnails/core/ToughAsNailsForge.java +++ b/forge/src/main/java/toughasnails/core/ToughAsNailsForge.java @@ -10,8 +10,6 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import toughasnails.init.*; @Mod(value = ToughAsNails.MOD_ID) @@ -29,7 +27,7 @@ public ToughAsNailsForge() private void clientSetup(final FMLClientSetupEvent event) { - event.enqueueWork(ToughAsNails::initClient); + event.enqueueWork(ToughAsNails::setupClient); } private void loadComplete(final FMLLoadCompleteEvent event) diff --git a/gradle.properties b/gradle.properties index c486fd49..c0630c29 100644 --- a/gradle.properties +++ b/gradle.properties @@ -40,5 +40,5 @@ org.gradle.daemon=false # Dependencies nightconfig_version=3.6.7 -glitchcore_version=1.0.0.17 +glitchcore_version=1.0.0.21 serene_seasons_version=9.3.0.0 diff --git a/neoforge/src/main/java/toughasnails/core/ToughAsNailsNeoForge.java b/neoforge/src/main/java/toughasnails/core/ToughAsNailsNeoForge.java index dcd7221b..653ca852 100644 --- a/neoforge/src/main/java/toughasnails/core/ToughAsNailsNeoForge.java +++ b/neoforge/src/main/java/toughasnails/core/ToughAsNailsNeoForge.java @@ -9,8 +9,6 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext; -import toughasnails.api.TANAPI; -import toughasnails.init.*; @Mod(value = ToughAsNails.MOD_ID) public class ToughAsNailsNeoForge @@ -26,6 +24,6 @@ public ToughAsNailsNeoForge() private void clientSetup(final FMLClientSetupEvent event) { - event.enqueueWork(ToughAsNails::initClient); + event.enqueueWork(ToughAsNails::setupClient); } }