2018-12-17 05:18:06 +00:00
|
|
|
From d7b5f8d2bb11e9fd2f230fd0e1c2f9c8d6ad15b5 Mon Sep 17 00:00:00 2001
|
2018-08-01 01:13:40 +00:00
|
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
|
|
Date: Tue, 31 Jul 2018 19:32:57 -0500
|
|
|
|
Subject: [PATCH] Make portal teleportation adjustment math more accurate
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EnumDirection.java b/src/main/java/net/minecraft/server/EnumDirection.java
|
2018-12-17 05:18:06 +00:00
|
|
|
index 44c91ba26..c6933c1a3 100644
|
2018-08-01 01:13:40 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/EnumDirection.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EnumDirection.java
|
2018-08-31 22:56:57 +00:00
|
|
|
@@ -95,6 +95,7 @@ public enum EnumDirection implements INamable {
|
2018-08-01 01:13:40 +00:00
|
|
|
return this.i;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public final EnumDirection.EnumAxisDirection getAxisDirection() { return c(); } // Paper - OBFHELPER
|
|
|
|
public EnumDirection.EnumAxisDirection c() {
|
|
|
|
return this.l;
|
|
|
|
}
|
2018-08-31 22:56:57 +00:00
|
|
|
@@ -103,6 +104,7 @@ public enum EnumDirection implements INamable {
|
2018-08-01 01:13:40 +00:00
|
|
|
return fromType1(this.h);
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public final EnumDirection rotateY() { return e(); } // Paper - OBFHELPER
|
|
|
|
public EnumDirection e() {
|
2018-08-31 22:56:57 +00:00
|
|
|
switch(this) {
|
2018-08-01 01:13:40 +00:00
|
|
|
case NORTH:
|
2018-12-17 05:18:06 +00:00
|
|
|
@@ -317,6 +319,7 @@ public enum EnumDirection implements INamable {
|
2018-08-31 22:56:57 +00:00
|
|
|
this.d = s1;
|
2018-08-01 01:13:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
+ public final int getOffset() { return a(); } // Paper - OBFHELPER
|
|
|
|
public int a() {
|
|
|
|
return this.c;
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MathHelper.java b/src/main/java/net/minecraft/server/MathHelper.java
|
2018-12-15 01:17:27 +00:00
|
|
|
index d53d0c242..49fba0979 100644
|
2018-08-01 01:13:40 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/MathHelper.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/MathHelper.java
|
2018-08-31 22:56:57 +00:00
|
|
|
@@ -83,6 +83,7 @@ public class MathHelper {
|
|
|
|
}
|
2018-08-01 01:13:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
+ public static double clamp(double d0, double d1, double d2) { return a(d0, d1, d2); } // Paper - OBFHELPER
|
|
|
|
public static double a(double d0, double d1, double d2) {
|
2018-08-31 22:56:57 +00:00
|
|
|
if (d0 < d1) {
|
|
|
|
return d1;
|
2018-08-01 01:13:40 +00:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
2018-12-17 05:18:06 +00:00
|
|
|
index a24bd02d5..d30a8a6bd 100644
|
2018-08-01 01:13:40 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
|
|
|
@@ -208,11 +208,27 @@ public class PortalTravelAgent {
|
|
|
|
++d4;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start - Prevent portal suffocation (and therefore getting teleported up in an attempt to avoid it)
|
|
|
|
+ // Based on work by CarpetMod - Licensed GPL-3.0
|
|
|
|
+ double offset = (1.0D - entity.getPortalOffset().x) * (double) shapedetector_shapedetectorcollection.getWidth() * (double) shapedetector_shapedetectorcollection.getFacing().rotateY().getAxisDirection().getOffset();
|
|
|
|
+ double adjustedRadius = 1.02 * entity.width / 2;
|
|
|
|
+ if (adjustedRadius >= shapedetector_shapedetectorcollection.getWidth() - adjustedRadius) {
|
|
|
|
+ // entity wider than portal, place it in the middle
|
|
|
|
+ adjustedRadius = (double) shapedetector_shapedetectorcollection.getWidth() / 2 - 0.001;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (offset >= 0) {
|
|
|
|
+ offset = MathHelper.clamp(offset, adjustedRadius, (double) shapedetector_shapedetectorcollection.getWidth() - adjustedRadius);
|
|
|
|
+ } else {
|
|
|
|
+ offset = MathHelper.clamp(offset, (double) -shapedetector_shapedetectorcollection.getWidth() + adjustedRadius, -adjustedRadius);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if (shapedetector_shapedetectorcollection.getFacing().k() == EnumDirection.EnumAxis.X) {
|
|
|
|
- d3 = d4 + (1.0D - entity.getPortalOffset().x) * (double) shapedetector_shapedetectorcollection.d() * (double) shapedetector_shapedetectorcollection.getFacing().e().c().a();
|
|
|
|
+ d3 = d4 + offset;
|
|
|
|
} else {
|
|
|
|
- d2 = d4 + (1.0D - entity.getPortalOffset().x) * (double) shapedetector_shapedetectorcollection.d() * (double) shapedetector_shapedetectorcollection.getFacing().e().c().a();
|
|
|
|
+ d2 = d4 + offset;
|
|
|
|
}
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
float f1 = 0.0F;
|
|
|
|
float f2 = 0.0F;
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ShapeDetector.java b/src/main/java/net/minecraft/server/ShapeDetector.java
|
2018-12-17 05:18:06 +00:00
|
|
|
index 78234cbdd..daeb3f83e 100644
|
2018-08-01 01:13:40 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/ShapeDetector.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/ShapeDetector.java
|
2018-12-17 05:18:06 +00:00
|
|
|
@@ -139,6 +139,7 @@ public class ShapeDetector {
|
2018-08-01 01:13:40 +00:00
|
|
|
return this.c;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public final int getWidth() { return this.d(); } // Paper - OBFHELPER
|
|
|
|
public int d() {
|
|
|
|
return this.e;
|
|
|
|
}
|
|
|
|
--
|
2018-12-15 01:17:27 +00:00
|
|
|
2.20.0
|
2018-08-01 01:13:40 +00:00
|
|
|
|