mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-06 18:50:51 +01:00
72d0717d5d
A recent commit has been made that caused patches to be out of order, rebuilding
93 lines
No EOL
4.5 KiB
Diff
93 lines
No EOL
4.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <1254957+zachbr@users.noreply.github.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
|
|
index 854ad49b6..3ee310a9a 100644
|
|
--- a/src/main/java/net/minecraft/server/EnumDirection.java
|
|
+++ b/src/main/java/net/minecraft/server/EnumDirection.java
|
|
@@ -0,0 +0,0 @@ public enum EnumDirection implements INamable {
|
|
return this.i;
|
|
}
|
|
|
|
+ public final EnumDirection.EnumAxisDirection getAxisDirection() { return c(); } // Paper - OBFHELPER
|
|
public EnumDirection.EnumAxisDirection c() {
|
|
return this.l;
|
|
}
|
|
@@ -0,0 +0,0 @@ public enum EnumDirection implements INamable {
|
|
return fromType1(this.h);
|
|
}
|
|
|
|
+ public final EnumDirection rotateY() { return e(); } // Paper - OBFHELPER
|
|
public EnumDirection e() {
|
|
switch (this) {
|
|
case NORTH:
|
|
@@ -0,0 +0,0 @@ public enum EnumDirection implements INamable {
|
|
this.d = s;
|
|
}
|
|
|
|
+ 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
|
|
index f52b9c6f0..3adbfb820 100644
|
|
--- a/src/main/java/net/minecraft/server/MathHelper.java
|
|
+++ b/src/main/java/net/minecraft/server/MathHelper.java
|
|
@@ -0,0 +0,0 @@ public class MathHelper {
|
|
return f < f1 ? f1 : (f > f2 ? f2 : f);
|
|
}
|
|
|
|
+ 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) {
|
|
return d0 < d1 ? d1 : (d0 > d2 ? d2 : d0);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
|
index 72b85bf60..67938e39c 100644
|
|
--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
|
+++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
|
@@ -0,0 +0,0 @@ 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
|
|
index 3faf74a22..4e1f8c211 100644
|
|
--- a/src/main/java/net/minecraft/server/ShapeDetector.java
|
|
+++ b/src/main/java/net/minecraft/server/ShapeDetector.java
|
|
@@ -0,0 +0,0 @@ public class ShapeDetector {
|
|
return this.c;
|
|
}
|
|
|
|
+ public final int getWidth() { return this.d(); } // Paper - OBFHELPER
|
|
public int d() {
|
|
return this.e;
|
|
}
|
|
--
|