diff options
| author | Raven Szewczyk <git@eigenraven.me> | 2024-05-24 19:13:49 +0100 |
|---|---|---|
| committer | Raven Szewczyk <git@eigenraven.me> | 2024-05-24 19:13:49 +0100 |
| commit | 9b6fc0420059c6b399506cee841290766b72bd53 (patch) | |
| tree | 9a769dda9b37d90d6cdb27e4f8b6b7b2293d5ec1 /gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java | |
| parent | 227856cdae4dae22fca53f2dc027cac476123bd0 (diff) | |
| parent | 75915e9e1fce7a8ee500add139b42e806e9497b5 (diff) | |
| download | GT5-Unofficial-9b6fc0420059c6b399506cee841290766b72bd53.tar.gz GT5-Unofficial-9b6fc0420059c6b399506cee841290766b72bd53.tar.bz2 GT5-Unofficial-9b6fc0420059c6b399506cee841290766b72bd53.zip | |
Merge in GTplusplus with history
git-subtree-dir: gtpp
git-subtree-mainline: 227856cdae4dae22fca53f2dc027cac476123bd0
git-subtree-split: 75915e9e1fce7a8ee500add139b42e806e9497b5
Diffstat (limited to 'gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java')
| -rw-r--r-- | gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java b/gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java new file mode 100644 index 0000000000..60ab048ca3 --- /dev/null +++ b/gtpp/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java @@ -0,0 +1,85 @@ +package gtPlusPlus.plugin.fixes.vanilla; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; + +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gtPlusPlus.api.interfaces.IPlugin; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.plugin.fixes.interfaces.IBugFix; +import gtPlusPlus.preloader.CORE_Preloader; + +public class VanillaBedHeightFix implements IBugFix { + + private final Method mSleepInBedAt; + private final IPlugin mParent; + + public VanillaBedHeightFix(IPlugin minstance) { + mParent = minstance; + Method m; + if (!CORE_Preloader.DEV_ENVIRONMENT) { + m = ReflectionUtils.getMethod(EntityPlayer.class, "func_71018_a", int.class, int.class, int.class); + } else { + m = ReflectionUtils.getMethod( + net.minecraft.entity.player.EntityPlayer.class, + "sleepInBedAt", + int.class, + int.class, + int.class); + } + if (m != null) { + mSleepInBedAt = m; + mParent.log("Registering Bed Height Fix."); + Utils.registerEvent(this); + } else { + mSleepInBedAt = null; + } + } + + @Override + public boolean isFixValid() { + return mSleepInBedAt != null; + } + + /** + * Fix created by deNULL - + * https://github.com/deNULL/BugPatch/blob/master/src/main/java/ru/denull/BugPatch/mod/ClientEvents.java#L45 + * + * @param evt - The event where a player sleeps + */ + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void playerSleepInBed(PlayerSleepInBedEvent evt) { + Logger.WARNING("Sleep Event Detected. Player is sleeping at Y: " + evt.y); + if (evt.y <= 0 && isFixValid()) { + int correctY = 256 + evt.y; + if (correctY <= 0) { + Logger.WARNING( + "You're trying to sleep at y=" + evt.y + + ", which is impossibly low. However, fixed y value is " + + correctY + + ", which is still below 0. Falling back to default behavior."); + } else { + Logger.WARNING( + "You're trying to sleep at y=" + evt.y + + ". This is probably caused by overflow, stopping original event; retrying with y=" + + correctY + + "."); + evt.result = EntityPlayer.EnumStatus.OTHER_PROBLEM; + try { + mSleepInBedAt.invoke(evt.entityPlayer, evt.x, correctY, evt.z); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + Logger.WARNING("Encountered an error trying to sleep."); + } + } + } else if (!isFixValid()) { + Logger.WARNING( + "Method sleepInBedAt was not found in EntityPlayer (wrong MC and/or Forge version?), unable to fix"); + } + } +} |
