diff --git a/gradle.properties b/gradle.properties index 337f553..0b8f1c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -52,7 +52,7 @@ mod_name=Mind & Motion # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=1.4.0 +mod_version=1.4.2 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/net/fretux/mindmotion/ConfigMM.java b/src/main/java/net/fretux/mindmotion/ConfigMM.java index 83adaec..881ca72 100644 --- a/src/main/java/net/fretux/mindmotion/ConfigMM.java +++ b/src/main/java/net/fretux/mindmotion/ConfigMM.java @@ -80,12 +80,14 @@ public final class ConfigMM { } public static class Common { + public final ForgeConfigSpec.BooleanValue ENABLE_SANITY; public final ForgeConfigSpec.DoubleValue BASE_SANITY_REGEN_LIGHT; public final ForgeConfigSpec.DoubleValue BASE_SANITY_DECAY_DARK; public final ForgeConfigSpec.BooleanValue ENABLE_LOW_SANITY_SOUNDS; public final ForgeConfigSpec.BooleanValue ENABLE_SANITY_GAMEPLAY_EFFECTS; public final ForgeConfigSpec.DoubleValue SCRATCHING_CHANCE; public final ForgeConfigSpec.DoubleValue PANIC_CHANCE; + public final ForgeConfigSpec.BooleanValue ENABLE_TEMPO; public final ForgeConfigSpec.IntValue TEMPO_DECAY_DELAY; public final ForgeConfigSpec.IntValue VENT_COST; public final ForgeConfigSpec.IntValue TEMPO_PER_MANA_REGEN_PERCENT; @@ -93,6 +95,10 @@ public final class ConfigMM { Common(ForgeConfigSpec.Builder b) { b.push("sanity"); + ENABLE_SANITY = b + .comment("Enable the sanity and insanity systems, including HUD, shaders, sounds, commands, and gameplay effects.") + .define("enableSanity", true); + BASE_SANITY_REGEN_LIGHT = b .comment("Sanity gained per tick in bright light.") .defineInRange("sanityRegenLight", 0.03, 0.0, 1.0); @@ -121,6 +127,10 @@ public final class ConfigMM { b.pop().push("tempo"); + ENABLE_TEMPO = b + .comment("Enable the tempo system, including HUD, combat gain, decay, Vent, and compatibility bonuses.") + .define("enableTempo", true); + TEMPO_DECAY_DELAY = b .comment("Ticks without combat before tempo begins to decay.") .defineInRange("tempoDecayDelay", 100, 0, 20000); diff --git a/src/main/java/net/fretux/mindmotion/client/ClientData.java b/src/main/java/net/fretux/mindmotion/client/ClientData.java index fdaa1cd..5266bce 100644 --- a/src/main/java/net/fretux/mindmotion/client/ClientData.java +++ b/src/main/java/net/fretux/mindmotion/client/ClientData.java @@ -9,4 +9,6 @@ public class ClientData { // NEW: synced from server public static float MAX_SANITY = 80f; public static int MAX_TEMPO = 120; -} \ No newline at end of file + public static boolean SANITY_ENABLED = true; + public static boolean TEMPO_ENABLED = true; +} diff --git a/src/main/java/net/fretux/mindmotion/client/ClientEvents.java b/src/main/java/net/fretux/mindmotion/client/ClientEvents.java index 6775010..673c51c 100644 --- a/src/main/java/net/fretux/mindmotion/client/ClientEvents.java +++ b/src/main/java/net/fretux/mindmotion/client/ClientEvents.java @@ -1,5 +1,6 @@ package net.fretux.mindmotion.client; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.network.ModMessages; import net.fretux.mindmotion.network.VentPacket; import net.minecraft.client.Minecraft; @@ -13,12 +14,14 @@ public class ClientEvents { @SubscribeEvent public static void onKeyInput(InputEvent.Key event) { - if (Keybinds.VENT_KEY.isDown()) { + boolean tempoEnabled = ConfigMM.COMMON.ENABLE_TEMPO.get() && ClientData.TEMPO_ENABLED; + boolean sanityEnabled = ConfigMM.COMMON.ENABLE_SANITY.get() && ClientData.SANITY_ENABLED; + if (tempoEnabled && Keybinds.VENT_KEY.isDown()) { ModMessages.CHANNEL.sendToServer(new VentPacket()); } if (Keybinds.HUD_EDITOR_KEY.consumeClick()) { Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.screen == null) { + if (minecraft.screen == null && (tempoEnabled || sanityEnabled)) { minecraft.setScreen(new HudEditorScreen(null)); } } diff --git a/src/main/java/net/fretux/mindmotion/client/ClientPacketHandlers.java b/src/main/java/net/fretux/mindmotion/client/ClientPacketHandlers.java index 3449944..bc99357 100644 --- a/src/main/java/net/fretux/mindmotion/client/ClientPacketHandlers.java +++ b/src/main/java/net/fretux/mindmotion/client/ClientPacketHandlers.java @@ -1,5 +1,6 @@ package net.fretux.mindmotion.client; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.client.shader.VentShaderHandler; import net.minecraft.client.Minecraft; @@ -8,6 +9,9 @@ public final class ClientPacketHandlers { } public static void handleVentEffect() { + if (!ConfigMM.COMMON.ENABLE_TEMPO.get() || !ClientData.TEMPO_ENABLED) { + return; + } Minecraft mc = Minecraft.getInstance(); if (mc.player == null) { return; diff --git a/src/main/java/net/fretux/mindmotion/client/HudEditorScreen.java b/src/main/java/net/fretux/mindmotion/client/HudEditorScreen.java index cb5f1d5..90a4a14 100644 --- a/src/main/java/net/fretux/mindmotion/client/HudEditorScreen.java +++ b/src/main/java/net/fretux/mindmotion/client/HudEditorScreen.java @@ -65,6 +65,8 @@ public class HudEditorScreen extends Screen { int sliderWidth = 150; int y = 36; int step = 24; + boolean tempoEnabled = ConfigMM.COMMON.ENABLE_TEMPO.get() && ClientData.TEMPO_ENABLED; + boolean sanityEnabled = ConfigMM.COMMON.ENABLE_SANITY.get() && ClientData.SANITY_ENABLED; barWidthSlider = addRenderableWidget(new IntSlider( leftX, @@ -90,52 +92,56 @@ public class HudEditorScreen extends Screen { )); y += step; - tempoXSlider = addRenderableWidget(new IntSlider( - leftX, - y, - sliderWidth, - 20, - "screen.mindmotion.hud_editor.tempo_x", - MIN_OFFSET, - MAX_OFFSET, - tempoOffsetX, - value -> setTempoOffsetX(value, false) - )); - tempoYSlider = addRenderableWidget(new IntSlider( - rightX, - y, - sliderWidth, - 20, - "screen.mindmotion.hud_editor.tempo_y", - MIN_OFFSET, - MAX_OFFSET, - tempoOffsetY, - value -> setTempoOffsetY(value, false) - )); + if (tempoEnabled) { + tempoXSlider = addRenderableWidget(new IntSlider( + leftX, + y, + sliderWidth, + 20, + "screen.mindmotion.hud_editor.tempo_x", + MIN_OFFSET, + MAX_OFFSET, + tempoOffsetX, + value -> setTempoOffsetX(value, false) + )); + tempoYSlider = addRenderableWidget(new IntSlider( + rightX, + y, + sliderWidth, + 20, + "screen.mindmotion.hud_editor.tempo_y", + MIN_OFFSET, + MAX_OFFSET, + tempoOffsetY, + value -> setTempoOffsetY(value, false) + )); + y += step; + } - y += step; - sanityXSlider = addRenderableWidget(new IntSlider( - leftX, - y, - sliderWidth, - 20, - "screen.mindmotion.hud_editor.sanity_x", - MIN_OFFSET, - MAX_OFFSET, - sanityOffsetX, - value -> setSanityOffsetX(value, false) - )); - sanityYSlider = addRenderableWidget(new IntSlider( - rightX, - y, - sliderWidth, - 20, - "screen.mindmotion.hud_editor.sanity_y", - MIN_OFFSET, - MAX_OFFSET, - sanityOffsetY, - value -> setSanityOffsetY(value, false) - )); + if (sanityEnabled) { + sanityXSlider = addRenderableWidget(new IntSlider( + leftX, + y, + sliderWidth, + 20, + "screen.mindmotion.hud_editor.sanity_x", + MIN_OFFSET, + MAX_OFFSET, + sanityOffsetX, + value -> setSanityOffsetX(value, false) + )); + sanityYSlider = addRenderableWidget(new IntSlider( + rightX, + y, + sliderWidth, + 20, + "screen.mindmotion.hud_editor.sanity_y", + MIN_OFFSET, + MAX_OFFSET, + sanityOffsetY, + value -> setSanityOffsetY(value, false) + )); + } int buttonY = this.height - 28; addRenderableWidget(Button.builder( @@ -170,7 +176,7 @@ public class HudEditorScreen extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 0) { BarPosition tempoBar = getTempoBarPosition(); - if (isMouseOver(mouseX, mouseY, tempoBar)) { + if (isTempoEnabled() && isMouseOver(mouseX, mouseY, tempoBar)) { draggingTempo = true; dragStartX = mouseX; dragStartY = mouseY; @@ -179,7 +185,7 @@ public class HudEditorScreen extends Screen { return true; } BarPosition sanityBar = getSanityBarPosition(); - if (isMouseOver(mouseX, mouseY, sanityBar)) { + if (isSanityEnabled() && isMouseOver(mouseX, mouseY, sanityBar)) { draggingSanity = true; dragStartX = mouseX; dragStartY = mouseY; @@ -231,18 +237,22 @@ public class HudEditorScreen extends Screen { private void renderPreview(GuiGraphics gui) { BarPosition tempoBar = getTempoBarPosition(); BarPosition sanityBar = getSanityBarPosition(); - drawRoundedBar(gui, tempoBar, 0xFF33AFFF, (int) (barWidth * 0.75f)); - gui.drawString(this.font, Component.literal("Tempo"), tempoBar.x, tempoBar.y - 12, 0x66CCFF, false); - drawRoundedBar(gui, sanityBar, 0xFFFFFFFF, (int) (barWidth * 0.6f)); - int sanityLabelWidth = this.font.width("Sanity"); - gui.drawString( - this.font, - Component.literal("Sanity"), - sanityBar.x + barWidth - sanityLabelWidth, - sanityBar.y - 12, - 0xFFFFFF, - false - ); + if (isTempoEnabled()) { + drawRoundedBar(gui, tempoBar, 0xFF33AFFF, (int) (barWidth * 0.75f)); + gui.drawString(this.font, Component.literal("Tempo"), tempoBar.x, tempoBar.y - 12, 0x66CCFF, false); + } + if (isSanityEnabled()) { + drawRoundedBar(gui, sanityBar, 0xFFFFFFFF, (int) (barWidth * 0.6f)); + int sanityLabelWidth = this.font.width("Sanity"); + gui.drawString( + this.font, + Component.literal("Sanity"), + sanityBar.x + barWidth - sanityLabelWidth, + sanityBar.y - 12, + 0xFFFFFF, + false + ); + } } private BarPosition getTempoBarPosition() { @@ -327,6 +337,14 @@ public class HudEditorScreen extends Screen { ConfigMM.CLIENT_SPEC.save(); } + private static boolean isTempoEnabled() { + return ConfigMM.COMMON.ENABLE_TEMPO.get() && ClientData.TEMPO_ENABLED; + } + + private static boolean isSanityEnabled() { + return ConfigMM.COMMON.ENABLE_SANITY.get() && ClientData.SANITY_ENABLED; + } + private static int clamp(int value, int min, int max) { return Math.min(Math.max(value, min), max); } diff --git a/src/main/java/net/fretux/mindmotion/client/SanityTempoOverlay.java b/src/main/java/net/fretux/mindmotion/client/SanityTempoOverlay.java index b5cbce8..525b5b6 100644 --- a/src/main/java/net/fretux/mindmotion/client/SanityTempoOverlay.java +++ b/src/main/java/net/fretux/mindmotion/client/SanityTempoOverlay.java @@ -20,6 +20,9 @@ public class SanityTempoOverlay { public static void onRenderOverlay(RenderGuiOverlayEvent.Post event) { Minecraft mc = Minecraft.getInstance(); if (mc.player == null || mc.options.hideGui) return; + boolean tempoEnabled = ConfigMM.COMMON.ENABLE_TEMPO.get() && ClientData.TEMPO_ENABLED; + boolean sanityEnabled = ConfigMM.COMMON.ENABLE_SANITY.get() && ClientData.SANITY_ENABLED; + if (!tempoEnabled && !sanityEnabled) return; GuiGraphics gui = event.getGuiGraphics(); int width = event.getWindow().getGuiScaledWidth(); int height = event.getWindow().getGuiScaledHeight(); @@ -44,9 +47,11 @@ public class SanityTempoOverlay { int tempoFill = (int) (barWidth * tempoPercent); int insanityFill = (int) (barWidth * insanityPercent); RenderSystem.enableBlend(); - drawRoundedBar(gui, xTempo, yTempo, barWidth, barHeight, 0xFF33AFFF, tempoFill); - gui.drawString(mc.font, Component.literal("Tempo"), xTempo, yTempo - labelOffset, 0x66CCFF, false); - if (ClientData.VENT_COOLDOWN > 0) { + if (tempoEnabled) { + drawRoundedBar(gui, xTempo, yTempo, barWidth, barHeight, 0xFF33AFFF, tempoFill); + gui.drawString(mc.font, Component.literal("Tempo"), xTempo, yTempo - labelOffset, 0x66CCFF, false); + } + if (tempoEnabled && ClientData.VENT_COOLDOWN > 0) { int seconds = ClientData.VENT_COOLDOWN / 20; String ventText = "Vent: " + seconds + "s"; gui.drawString( @@ -59,27 +64,29 @@ public class SanityTempoOverlay { ); } boolean insaneMode = sanity <= 0; - if (!insaneMode) { - drawRoundedBar(gui, xSanity, ySanity, barWidth, barHeight, 0xFFFFFFFF, sanityFill); - int sanityLabelWidth = mc.font.width("Sanity"); - int sanityLabelX = xSanity + barWidth - sanityLabelWidth; - gui.drawString(mc.font, Component.literal("Sanity"), sanityLabelX, ySanity - labelOffset, 0xFFFFFF, false); - } else { - int purple = 0xFFAA33FF; - int darkPurple = 0xFF6611AA; - drawRoundedRect(gui, xSanity, ySanity, barWidth, barHeight, 0xDD000000); - drawRoundedRect(gui, xSanity, ySanity, insanityFill, barHeight, purple, darkPurple); - int insanityLabelWidth = mc.font.width("Insanity"); - int insanityLabelX = xSanity + barWidth - insanityLabelWidth; - gui.drawString(mc.font, Component.literal("Insanity"), insanityLabelX, ySanity - labelOffset, 0xCC66FF, false); + if (sanityEnabled) { + if (!insaneMode) { + drawRoundedBar(gui, xSanity, ySanity, barWidth, barHeight, 0xFFFFFFFF, sanityFill); + int sanityLabelWidth = mc.font.width("Sanity"); + int sanityLabelX = xSanity + barWidth - sanityLabelWidth; + gui.drawString(mc.font, Component.literal("Sanity"), sanityLabelX, ySanity - labelOffset, 0xFFFFFF, false); + } else { + int purple = 0xFFAA33FF; + int darkPurple = 0xFF6611AA; + drawRoundedRect(gui, xSanity, ySanity, barWidth, barHeight, 0xDD000000); + drawRoundedRect(gui, xSanity, ySanity, insanityFill, barHeight, purple, darkPurple); + int insanityLabelWidth = mc.font.width("Insanity"); + int insanityLabelX = xSanity + barWidth - insanityLabelWidth; + gui.drawString(mc.font, Component.literal("Insanity"), insanityLabelX, ySanity - labelOffset, 0xCC66FF, false); + } } double mouseX = mc.mouseHandler.xpos() * width / (double) event.getWindow().getScreenWidth(); double mouseY = mc.mouseHandler.ypos() * height / (double) event.getWindow().getScreenHeight(); - if (isMouseOver(mouseX, mouseY, xTempo, yTempo, barWidth, barHeight)) { + if (tempoEnabled && isMouseOver(mouseX, mouseY, xTempo, yTempo, barWidth, barHeight)) { String text = String.format("%.0f%%", tempoPercent * 100f); gui.drawCenteredString(mc.font, text, xTempo + barWidth / 2, yTempo - (labelOffset + 2), 0x66CCFF); } - if (isMouseOver(mouseX, mouseY, xSanity, ySanity, barWidth, barHeight)) { + if (sanityEnabled && isMouseOver(mouseX, mouseY, xSanity, ySanity, barWidth, barHeight)) { if (!insaneMode) { String text = String.format("%.0f%%", sanityPercent * 100f); gui.drawCenteredString(mc.font, text, xSanity + barWidth / 2, ySanity - (labelOffset + 2), 0xFFFFFF); diff --git a/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java b/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java index f4f354e..517945b 100644 --- a/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java +++ b/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java @@ -69,7 +69,7 @@ public final class FakeChatMessageHandler { if (event.phase != TickEvent.Phase.END) return; Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || minecraft.player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get()) { + if (minecraft.level == null || minecraft.player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get() || !ConfigMM.COMMON.ENABLE_SANITY.get() || !ClientData.SANITY_ENABLED) { reset(); return; } diff --git a/src/main/java/net/fretux/mindmotion/client/effects/SanityShaderHandler.java b/src/main/java/net/fretux/mindmotion/client/effects/SanityShaderHandler.java index f14fade..0b36607 100644 --- a/src/main/java/net/fretux/mindmotion/client/effects/SanityShaderHandler.java +++ b/src/main/java/net/fretux/mindmotion/client/effects/SanityShaderHandler.java @@ -46,7 +46,7 @@ public class SanityShaderHandler { @SubscribeEvent public static void onRenderWorld(RenderLevelStageEvent event) { Minecraft mc = Minecraft.getInstance(); - if (ConfigMM.CLIENT.DISABLE_SHADERS.get()) { + if (ConfigMM.CLIENT.DISABLE_SHADERS.get() || !ConfigMM.COMMON.ENABLE_SANITY.get() || !ClientData.SANITY_ENABLED) { if (mc.gameRenderer.currentEffect() != null) mc.gameRenderer.shutdownEffect(); return; @@ -181,4 +181,4 @@ public class SanityShaderHandler { } }); } -} \ No newline at end of file +} diff --git a/src/main/java/net/fretux/mindmotion/client/effects/ShadowFigureHandler.java b/src/main/java/net/fretux/mindmotion/client/effects/ShadowFigureHandler.java index 58c0a7e..204c5d1 100644 --- a/src/main/java/net/fretux/mindmotion/client/effects/ShadowFigureHandler.java +++ b/src/main/java/net/fretux/mindmotion/client/effects/ShadowFigureHandler.java @@ -49,7 +49,7 @@ public final class ShadowFigureHandler { Minecraft minecraft = Minecraft.getInstance(); LocalPlayer player = minecraft.player; - if (minecraft.level == null || player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get()) { + if (minecraft.level == null || player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get() || !ConfigMM.COMMON.ENABLE_SANITY.get() || !ClientData.SANITY_ENABLED) { FIGURES.clear(); spawnCooldown = MIN_SPAWN_DELAY; return; @@ -77,7 +77,7 @@ public final class ShadowFigureHandler { if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES || FIGURES.isEmpty()) return; Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || minecraft.player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get()) return; + if (minecraft.level == null || minecraft.player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get() || !ConfigMM.COMMON.ENABLE_SANITY.get() || !ClientData.SANITY_ENABLED) return; Camera camera = event.getCamera(); Vec3 cameraPos = camera.getPosition(); diff --git a/src/main/java/net/fretux/mindmotion/command/SanityCommand.java b/src/main/java/net/fretux/mindmotion/command/SanityCommand.java index a148f20..a2b39f9 100644 --- a/src/main/java/net/fretux/mindmotion/command/SanityCommand.java +++ b/src/main/java/net/fretux/mindmotion/command/SanityCommand.java @@ -2,9 +2,11 @@ package net.fretux.mindmotion.command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.FloatArgumentType; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.player.PlayerCapabilityProvider; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -17,6 +19,10 @@ public class SanityCommand { .then(Commands.literal("set") .then(Commands.argument("sanity", FloatArgumentType.floatArg(0)) .executes(ctx -> { + if (!ConfigMM.COMMON.ENABLE_SANITY.get()) { + ctx.getSource().sendFailure(Component.literal("Sanity system is disabled.")); + return 0; + } ServerPlayer player = ctx.getSource().getPlayerOrException(); float requestedSanity = FloatArgumentType.getFloat(ctx, "sanity"); final float[] appliedSanity = new float[] {0f}; @@ -30,7 +36,7 @@ public class SanityCommand { }); ctx.getSource().sendSuccess(() -> - net.minecraft.network.chat.Component.literal("Set sanity = " + appliedSanity[0]), + Component.literal("Set sanity = " + appliedSanity[0]), true ); @@ -44,6 +50,10 @@ public class SanityCommand { .then(Commands.literal("set") .then(Commands.argument("insanity", FloatArgumentType.floatArg(0)) .executes(ctx -> { + if (!ConfigMM.COMMON.ENABLE_SANITY.get()) { + ctx.getSource().sendFailure(Component.literal("Sanity system is disabled.")); + return 0; + } ServerPlayer player = ctx.getSource().getPlayerOrException(); float requestedInsanity = FloatArgumentType.getFloat(ctx, "insanity"); final float[] appliedInsanity = new float[] {0f}; @@ -57,7 +67,7 @@ public class SanityCommand { }); ctx.getSource().sendSuccess(() -> - net.minecraft.network.chat.Component.literal("Set insanity = " + appliedInsanity[0]), + Component.literal("Set insanity = " + appliedInsanity[0]), true ); diff --git a/src/main/java/net/fretux/mindmotion/compat/AscendCompat.java b/src/main/java/net/fretux/mindmotion/compat/AscendCompat.java index 380da2c..d0fa891 100644 --- a/src/main/java/net/fretux/mindmotion/compat/AscendCompat.java +++ b/src/main/java/net/fretux/mindmotion/compat/AscendCompat.java @@ -2,6 +2,7 @@ package net.fretux.mindmotion.compat; import net.fretux.ascend.player.PlayerStatsProvider; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.player.PlayerCapabilityProvider; import net.fretux.mindmotion.player.SanityCapability; import net.fretux.mindmotion.player.TempoCapability; @@ -16,16 +17,20 @@ public final class AscendCompat { int willpower = stats.getAttributeLevel("willpower"); float sanityBonus = willpower * 3.0f; float tempoBonus = willpower * 0.5f; - player.getCapability(PlayerCapabilityProvider.SANITY).ifPresent(cap -> { - if (cap instanceof SanityCapability impl) { - impl.setBonusMaxSanity(sanityBonus); - } - }); - player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(cap -> { - if (cap instanceof TempoCapability impl) { - impl.setBonusMaxTempo(tempoBonus); - } - }); + if (ConfigMM.COMMON.ENABLE_SANITY.get()) { + player.getCapability(PlayerCapabilityProvider.SANITY).ifPresent(cap -> { + if (cap instanceof SanityCapability impl) { + impl.setBonusMaxSanity(sanityBonus); + } + }); + } + if (ConfigMM.COMMON.ENABLE_TEMPO.get()) { + player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(cap -> { + if (cap instanceof TempoCapability impl) { + impl.setBonusMaxTempo(tempoBonus); + } + }); + } }); } } diff --git a/src/main/java/net/fretux/mindmotion/event/CombatEvents.java b/src/main/java/net/fretux/mindmotion/event/CombatEvents.java index f6310de..5c1ec72 100644 --- a/src/main/java/net/fretux/mindmotion/event/CombatEvents.java +++ b/src/main/java/net/fretux/mindmotion/event/CombatEvents.java @@ -1,5 +1,6 @@ package net.fretux.mindmotion.event; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.player.PlayerCapabilityProvider; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -11,13 +12,21 @@ public class CombatEvents { @SubscribeEvent public static void onEntityHurt(LivingHurtEvent event) { if (event.getEntity() instanceof net.minecraft.world.entity.player.Player player) { - player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> tempo.addTempo(3)); - PlayerTickHandler.markCombat(player); + if (ConfigMM.COMMON.ENABLE_TEMPO.get()) { + player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> tempo.addTempo(3)); + } + if (ConfigMM.COMMON.ENABLE_SANITY.get() || ConfigMM.COMMON.ENABLE_TEMPO.get()) { + PlayerTickHandler.markCombat(player); + } } if (event.getSource().getEntity() instanceof net.minecraft.world.entity.player.Player attacker) { - attacker.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> tempo.addTempo(4)); - PlayerTickHandler.markCombat(attacker); + if (ConfigMM.COMMON.ENABLE_TEMPO.get()) { + attacker.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> tempo.addTempo(4)); + } + if (ConfigMM.COMMON.ENABLE_SANITY.get() || ConfigMM.COMMON.ENABLE_TEMPO.get()) { + PlayerTickHandler.markCombat(attacker); + } } } } diff --git a/src/main/java/net/fretux/mindmotion/event/CommonEvents.java b/src/main/java/net/fretux/mindmotion/event/CommonEvents.java index 9341d17..c8e7486 100644 --- a/src/main/java/net/fretux/mindmotion/event/CommonEvents.java +++ b/src/main/java/net/fretux/mindmotion/event/CommonEvents.java @@ -1,5 +1,6 @@ package net.fretux.mindmotion.event; +import net.fretux.mindmotion.ConfigMM; import net.fretux.mindmotion.player.PlayerCapabilityProvider; import net.fretux.mindmotion.player.SanityCapability; import net.minecraft.world.entity.monster.Monster; @@ -15,6 +16,7 @@ public class CommonEvents { public void onPlayerHurt(LivingHurtEvent event) { if (!(event.getEntity() instanceof net.minecraft.world.entity.player.Player player)) return; if (player.level().isClientSide) return; + if (!ConfigMM.COMMON.ENABLE_SANITY.get()) return; float loss = Math.min(5f, 0.5f + event.getAmount() * 0.25f); player.getCapability(PlayerCapabilityProvider.SANITY).ifPresent(sanity -> sanity.reduceSanity(loss)); @@ -24,6 +26,7 @@ public class CommonEvents { public void onLivingDeath(LivingDeathEvent event) { if (!(event.getSource().getEntity() instanceof net.minecraft.world.entity.player.Player player)) return; if (player.level().isClientSide) return; + if (!ConfigMM.COMMON.ENABLE_SANITY.get()) return; player.getCapability(PlayerCapabilityProvider.SANITY).ifPresent(sanity -> { if (event.getEntity() instanceof Monster) { diff --git a/src/main/java/net/fretux/mindmotion/event/PlayerTickHandler.java b/src/main/java/net/fretux/mindmotion/event/PlayerTickHandler.java index b00a87b..845c395 100644 --- a/src/main/java/net/fretux/mindmotion/event/PlayerTickHandler.java +++ b/src/main/java/net/fretux/mindmotion/event/PlayerTickHandler.java @@ -78,21 +78,29 @@ public class PlayerTickHandler { int tick = player.tickCount; boolean sanityTick = tick % SANITY_TICK_INTERVAL == 0; boolean tempoSyncTick = tick % TEMPO_TICK_INTERVAL == 0; + boolean sanityEnabled = ConfigMM.COMMON.ENABLE_SANITY.get(); + boolean tempoEnabled = ConfigMM.COMMON.ENABLE_TEMPO.get(); - if (sanityTick) handleSanityAndInsanity(player); - handleTempoTick(player, tick); + if (sanityEnabled && sanityTick) handleSanityAndInsanity(player); + if (tempoEnabled) { + handleTempoTick(player, tick); + } else if (tick % TEMPO_TICK_INTERVAL == 0) { + applyTempoToManaRegen(player, 0); + } if (player instanceof ServerPlayer serverPlayer && (sanityTick || tempoSyncTick)) { player.getCapability(PlayerCapabilityProvider.SANITY).ifPresent(sanity -> player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> ModMessages.CHANNEL.sendTo( new SyncStatsS2CPacket( - sanity.getSanity(), - sanity.getInsanity(), - tempo.getTempo(), - tempo.getVentCooldown(), + sanityEnabled ? sanity.getSanity() : sanity.getMaxSanity(), + sanityEnabled ? sanity.getInsanity() : 0f, + tempoEnabled ? tempo.getTempo() : 0, + tempoEnabled ? tempo.getVentCooldown() : 0, sanity.getMaxSanity(), - tempo.getMaxTempo() + tempo.getMaxTempo(), + sanityEnabled, + tempoEnabled ), serverPlayer.connection.connection, net.minecraftforge.network.NetworkDirection.PLAY_TO_CLIENT diff --git a/src/main/java/net/fretux/mindmotion/network/ModMessages.java b/src/main/java/net/fretux/mindmotion/network/ModMessages.java index d27392e..ab4d49e 100644 --- a/src/main/java/net/fretux/mindmotion/network/ModMessages.java +++ b/src/main/java/net/fretux/mindmotion/network/ModMessages.java @@ -9,7 +9,7 @@ import net.fretux.mindmotion.AscendMindMotion; public class ModMessages { - private static final String PROTOCOL_VERSION = "1"; + private static final String PROTOCOL_VERSION = "2"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( ResourceLocation.fromNamespaceAndPath(AscendMindMotion.MODID, "main"), () -> PROTOCOL_VERSION, diff --git a/src/main/java/net/fretux/mindmotion/network/SyncStatsS2CPacket.java b/src/main/java/net/fretux/mindmotion/network/SyncStatsS2CPacket.java index 77afadd..58baf39 100644 --- a/src/main/java/net/fretux/mindmotion/network/SyncStatsS2CPacket.java +++ b/src/main/java/net/fretux/mindmotion/network/SyncStatsS2CPacket.java @@ -13,19 +13,25 @@ public class SyncStatsS2CPacket { private final int ventCooldown; private final float maxSanity; private final int maxTempo; + private final boolean sanityEnabled; + private final boolean tempoEnabled; public SyncStatsS2CPacket(float sanity, float insanity, int tempo, int ventCooldown, float maxSanity, - int maxTempo) { + int maxTempo, + boolean sanityEnabled, + boolean tempoEnabled) { this.sanity = sanity; this.insanity = insanity; this.tempo = tempo; this.ventCooldown = ventCooldown; this.maxSanity = maxSanity; this.maxTempo = maxTempo; + this.sanityEnabled = sanityEnabled; + this.tempoEnabled = tempoEnabled; } public static void encode(SyncStatsS2CPacket msg, FriendlyByteBuf buf) { @@ -35,6 +41,8 @@ public class SyncStatsS2CPacket { buf.writeInt(msg.ventCooldown); buf.writeFloat(msg.maxSanity); buf.writeInt(msg.maxTempo); + buf.writeBoolean(msg.sanityEnabled); + buf.writeBoolean(msg.tempoEnabled); } public static SyncStatsS2CPacket decode(FriendlyByteBuf buf) { @@ -44,7 +52,9 @@ public class SyncStatsS2CPacket { int ventCooldown = buf.readInt(); float maxSanity = buf.readFloat(); int maxTempo = buf.readInt(); - return new SyncStatsS2CPacket(sanity, insanity, tempo, ventCooldown, maxSanity, maxTempo); + boolean sanityEnabled = buf.readBoolean(); + boolean tempoEnabled = buf.readBoolean(); + return new SyncStatsS2CPacket(sanity, insanity, tempo, ventCooldown, maxSanity, maxTempo, sanityEnabled, tempoEnabled); } public static void handle(SyncStatsS2CPacket msg, Supplier ctx) { @@ -55,6 +65,8 @@ public class SyncStatsS2CPacket { ClientData.VENT_COOLDOWN = msg.ventCooldown; ClientData.MAX_SANITY = msg.maxSanity; ClientData.MAX_TEMPO = msg.maxTempo; + ClientData.SANITY_ENABLED = msg.sanityEnabled; + ClientData.TEMPO_ENABLED = msg.tempoEnabled; }); ctx.get().setPacketHandled(true); @@ -64,7 +76,9 @@ public class SyncStatsS2CPacket { ", Tempo: " + msg.tempo + ", VentCD: " + msg.ventCooldown + ", MaxSanity: " + msg.maxSanity + - ", MaxTempo: " + msg.maxTempo + ", MaxTempo: " + msg.maxTempo + + ", SanityEnabled: " + msg.sanityEnabled + + ", TempoEnabled: " + msg.tempoEnabled ); } -} \ No newline at end of file +} diff --git a/src/main/java/net/fretux/mindmotion/network/VentPacket.java b/src/main/java/net/fretux/mindmotion/network/VentPacket.java index 497c7e2..585ecf2 100644 --- a/src/main/java/net/fretux/mindmotion/network/VentPacket.java +++ b/src/main/java/net/fretux/mindmotion/network/VentPacket.java @@ -23,6 +23,7 @@ public class VentPacket { ctx.get().enqueueWork(() -> { ServerPlayer player = ctx.get().getSender(); if (player == null) return; + if (!ConfigMM.COMMON.ENABLE_TEMPO.get()) return; int ventCost = ConfigMM.COMMON.VENT_COST.get(); player.getCapability(PlayerCapabilityProvider.TEMPO).ifPresent(tempo -> { if (tempo.getTempo() < ventCost) return; @@ -48,4 +49,4 @@ public class VentPacket { ctx.get().setPacketHandled(true); return true; } -} \ No newline at end of file +}