From 0e18dca4968316ccfb29534c40b031884896d82d Mon Sep 17 00:00:00 2001 From: fretuks Date: Tue, 26 May 2026 11:20:16 +0200 Subject: [PATCH] add schizophrenia part 2 season 3 --- .../effects/FakeChatMessageHandler.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java diff --git a/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java b/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java new file mode 100644 index 0000000..9a71d40 --- /dev/null +++ b/src/main/java/net/fretux/mindmotion/client/effects/FakeChatMessageHandler.java @@ -0,0 +1,78 @@ +package net.fretux.mindmotion.client.effects; + +import net.fretux.mindmotion.ConfigMM; +import net.fretux.mindmotion.client.ClientData; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.Random; + +@Mod.EventBusSubscriber(modid = "mindmotion", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.FORGE) +public final class FakeChatMessageHandler { + private static final Random RANDOM = new Random(); + private static final int MIN_MESSAGE_DELAY = 600; + private static final int RANDOM_MESSAGE_DELAY = 900; + + private static final String[] FAKE_MESSAGES = { + "<...> behind you", + " did you hear that", + " stop looking at me", + "<...> this is not real", + "<...> closer", + " I can see you", + "Your bed is too far away", + "You are no longer alone", + "Footsteps approach from below", + "Something moved in the dark" + }; + + private static int messageCooldown = MIN_MESSAGE_DELAY; + private static boolean wasInsane; + + private FakeChatMessageHandler() { + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) return; + + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.level == null || minecraft.player == null || ConfigMM.CLIENT.DISABLE_SHADERS.get()) { + reset(); + return; + } + + boolean insane = ClientData.SANITY <= 0f; + if (!insane) { + reset(); + return; + } + + if (!wasInsane) { + messageCooldown = MIN_MESSAGE_DELAY + RANDOM.nextInt(RANDOM_MESSAGE_DELAY + 1); + wasInsane = true; + return; + } + + if (--messageCooldown <= 0) { + sendFakeMessage(minecraft); + messageCooldown = MIN_MESSAGE_DELAY + RANDOM.nextInt(RANDOM_MESSAGE_DELAY + 1); + } + } + + private static void sendFakeMessage(Minecraft minecraft) { + String message = FAKE_MESSAGES[RANDOM.nextInt(FAKE_MESSAGES.length)]; + Component component = Component.literal(message).withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.ITALIC); + minecraft.gui.getChat().addMessage(component); + } + + private static void reset() { + messageCooldown = MIN_MESSAGE_DELAY; + wasInsane = false; + } +}