From 319612ae2caa554ebe2e74e840cbf66901de6ac1 Mon Sep 17 00:00:00 2001 From: Temm Date: Fri, 23 Aug 2024 19:07:30 +0200 Subject: [PATCH] fix: morpheus not properly waking players --- dependencies.gradle | 1 + .../hodgepodge/config/FixesConfig.java | 7 +++++ .../mitchej123/hodgepodge/mixins/Mixins.java | 10 ++++++- .../hodgepodge/mixins/TargetedMod.java | 1 + .../early/minecraft/WorldServerAccessor.java | 13 +++++++++ .../morpheus/MixinMorpheusWakePlayers.java | 28 +++++++++++++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/WorldServerAccessor.java create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/late/morpheus/MixinMorpheusWakePlayers.java diff --git a/dependencies.gradle b/dependencies.gradle index b8d257d2..b824c34e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -35,6 +35,7 @@ dependencies { transformedModCompileOnly("curse.maven:extra-utilities-225561:2264384") transformedModCompileOnly(rfg.deobf("curse.maven:extratic-72728:2299292")) transformedModCompileOnly(rfg.deobf("curse.maven:journeymap-32274:4500658")) + transformedModCompileOnly(rfg.deobf("curse.maven:morpheus-69118:2280761")) transformedModCompileOnly(deobf('https://dist.creeper.host/ichun/filespg/PortalGun-4.0.0-beta-6.jar')) transformedModCompileOnly("curse.maven:travellers-gear-224440:2262113") transformedModCompileOnly(rfg.deobf("curse.maven:witchery-69673:2234410")) diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java index daa18b72..f95a741a 100644 --- a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java +++ b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java @@ -557,6 +557,13 @@ public class FixesConfig { @Config.RequiresMcRestart public static boolean java12MineChemCompat; + // Morpheus + + @Config.Comment("Fix not properly waking players if not everyone is sleeping") + @Config.DefaultBoolean(true) + @Config.RequiresMcRestart + public static boolean fixMorpheusWaking; + // Optifine @Config.Comment("Forces the chunk loading option from optifine to default since other values can crash the game") diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java index c5dc1804..a5fc4e41 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java @@ -833,7 +833,15 @@ public enum Mixins { // Candycraft FIX_SUGARBLOCK_NPE(new Builder("Fix NPE when interacting with sugar block") .addMixinClasses("candycraft.MixinBlockSugar").setPhase(Phase.LATE).setSide(Side.BOTH) - .setApplyIf(() -> FixesConfig.fixCandycraftBlockSugarNPE).addTargetedMod(TargetedMod.CANDYCRAFT)); + .setApplyIf(() -> FixesConfig.fixCandycraftBlockSugarNPE).addTargetedMod(TargetedMod.CANDYCRAFT)), + + // Morpheus + FIX_NOT_WAKING_PLAYERS_ACCESSOR(new Builder("WorldServer Accessor for Morpheus waking fix") + .addMixinClasses("minecraft.WorldServerAccessor").setPhase(Phase.EARLY).setSide(Side.SERVER) + .setApplyIf(() -> FixesConfig.fixMorpheusWaking).addTargetedMod(TargetedMod.VANILLA)), + FIX_NOT_WAKING_PLAYERS(new Builder("Fix players not being woken properly when not everyone is sleeping") + .addMixinClasses("morpheus.MixinMorpheusWakePlayers").setPhase(Phase.LATE).setSide(Side.SERVER) + .setApplyIf(() -> FixesConfig.fixMorpheusWaking).addTargetedMod(TargetedMod.MORPHEUS)); private final List mixinClasses; private final List targetedMods; diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java b/src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java index ae7497f8..ffd4a00f 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java @@ -36,6 +36,7 @@ public enum TargetedMod { LWJGL3IFY("lwjgl3ify", "me.eigenraven.lwjgl3ify.core.Lwjgl3ifyCoremod", "lwjgl3ify"), MINECHEM("Minechem", null, "minechem"), MINEFACTORY_RELOADED("MineFactory Reloaded", null, "MineFactoryReloaded"), + MORPHEUS("Morpheus", null, "Morpheus"), MRTJPCORE("MrTJPCore", null, "MrTJPCoreMod"), NOTENOUGHITEMS("NotEnoughItems", "codechicken.nei.asm.NEICorePlugin", "NotEnoughItems"), OPTIFINE("Optifine", "optifine.OptiFineForgeTweaker", "Optifine"), diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/WorldServerAccessor.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/WorldServerAccessor.java new file mode 100644 index 00000000..4bdd4e76 --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/WorldServerAccessor.java @@ -0,0 +1,13 @@ +package com.mitchej123.hodgepodge.mixins.early.minecraft; + +import net.minecraft.world.WorldServer; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(WorldServer.class) +public interface WorldServerAccessor { + + @Invoker("wakeAllPlayers") + void hodgepodge$wakeAllPlayers(); +} diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/late/morpheus/MixinMorpheusWakePlayers.java b/src/main/java/com/mitchej123/hodgepodge/mixins/late/morpheus/MixinMorpheusWakePlayers.java new file mode 100644 index 00000000..89d0ecff --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/late/morpheus/MixinMorpheusWakePlayers.java @@ -0,0 +1,28 @@ +package com.mitchej123.hodgepodge.mixins.late.morpheus; + +import net.minecraft.world.World; +import net.quetzi.morpheus.SleepChecker; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mitchej123.hodgepodge.mixins.early.minecraft.WorldServerAccessor; + +@Mixin(value = SleepChecker.class, remap = false) +public class MixinMorpheusWakePlayers { + + @Inject( + method = "advanceToMorning", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/WorldProvider;resetRainAndThunder()V", + shift = At.Shift.BEFORE), + cancellable = true) + public void hodgepodge$fixWakePlayers(World world, CallbackInfo c) { + if (!(world instanceof WorldServerAccessor worldServer)) return; + worldServer.hodgepodge$wakeAllPlayers(); + c.cancel(); + } +}