aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java
diff options
context:
space:
mode:
authoriouter <62897714+iouter@users.noreply.github.com>2022-01-07 12:36:06 +0800
committerGitHub <noreply@github.com>2022-01-07 12:36:06 +0800
commit0834d4b8b45a881f36ed5b295ac0fb38df49fa9a (patch)
tree6fb4a45cf17dd22748148417bc7bb0efb850cea3 /src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java
parentea1439a4195c8f77c45625ea2593a232bf19984e (diff)
parent9b2e050151ad93170e84321d067d1e9d4ded4ba5 (diff)
downloadGT5-Unofficial-0834d4b8b45a881f36ed5b295ac0fb38df49fa9a.tar.gz
GT5-Unofficial-0834d4b8b45a881f36ed5b295ac0fb38df49fa9a.tar.bz2
GT5-Unofficial-0834d4b8b45a881f36ed5b295ac0fb38df49fa9a.zip
Merge branch 'GTNewHorizons:master' into master
Diffstat (limited to 'src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java')
-rw-r--r--src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java
new file mode 100644
index 0000000000..f33cc71fc6
--- /dev/null
+++ b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java
@@ -0,0 +1,82 @@
+package gtPlusPlus.plugin.fixes.vanilla;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+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.DevHelper;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
+
+public class VanillaBedHeightFix implements IBugFix {
+
+ private final Method mSleepInBedAt;
+ private final IPlugin mParent;
+
+ public VanillaBedHeightFix(IPlugin minstance) {
+ mParent = minstance;
+ if (DevHelper.isValidHelperObject()) {
+ Method m;
+ if (DevHelper.isObfuscatedEnvironment()) {
+ 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;
+ }
+ } else {
+ mSleepInBedAt = null;
+ }
+ }
+
+ 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");
+ }
+ }
+
+}