fb25dc17c6
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: da08d022 SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN 0cef14e4 Remove draft API from selectEntities CraftBukkit Changes: a46fdbc6 Remove outdated build delay. 3697519b SPIGOT-4708: Fix ExactChoice recipes neglecting material 9ead7009 SPIGOT-4677: Add minecraft.admin.command_feedback permission c3749a23 Remove the Damage tag from items when it is 0. f74c7b95 SPIGOT-4706: Can't interact with active item 494eef45 Mention requirement of JIRA ticket for bug fixes 51d62dec SPIGOT-4702: Exception when middle clicking certain slots be557e69 SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN
95 lines
4.5 KiB
Diff
95 lines
4.5 KiB
Diff
From e14ede8e0e2799cd730248905844cb35c42989e5 Mon Sep 17 00:00:00 2001
|
|
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
|
|
index 13f0fb0b67..ce71811271 100644
|
|
--- a/src/main/java/net/minecraft/server/EnumDirection.java
|
|
+++ b/src/main/java/net/minecraft/server/EnumDirection.java
|
|
@@ -82,6 +82,7 @@ public enum EnumDirection implements INamable {
|
|
return this.i;
|
|
}
|
|
|
|
+ public final EnumDirection.EnumAxisDirection getAxisDirection() { return c(); } // Paper - OBFHELPER
|
|
public EnumDirection.EnumAxisDirection c() {
|
|
return this.l;
|
|
}
|
|
@@ -90,6 +91,7 @@ public enum EnumDirection implements INamable {
|
|
return fromType1(this.h);
|
|
}
|
|
|
|
+ public final EnumDirection rotateY() { return e(); } // Paper - OBFHELPER
|
|
public EnumDirection e() {
|
|
switch (this) {
|
|
case NORTH:
|
|
@@ -255,6 +257,7 @@ 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 52918b971f..8bb2593aa9 100644
|
|
--- a/src/main/java/net/minecraft/server/MathHelper.java
|
|
+++ b/src/main/java/net/minecraft/server/MathHelper.java
|
|
@@ -81,6 +81,7 @@ 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 a24bd02d5b..d30a8a6bdd 100644
|
|
--- 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
|
|
index 8ba4da0ea0..8716f5fd95 100644
|
|
--- a/src/main/java/net/minecraft/server/ShapeDetector.java
|
|
+++ b/src/main/java/net/minecraft/server/ShapeDetector.java
|
|
@@ -140,6 +140,7 @@ public class ShapeDetector {
|
|
return this.c;
|
|
}
|
|
|
|
+ public final int getWidth() { return this.d(); } // Paper - OBFHELPER
|
|
public int d() {
|
|
return this.e;
|
|
}
|
|
--
|
|
2.21.0
|
|
|