mirror of
https://github.com/PaperMC/Paper.git
synced 2024-08-28 07:29:40 +02:00
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 material9ead7009
SPIGOT-4677: Add minecraft.admin.command_feedback permissionc3749a23
Remove the Damage tag from items when it is 0.f74c7b95
SPIGOT-4706: Can't interact with active item494eef45
Mention requirement of JIRA ticket for bug fixes51d62dec
SPIGOT-4702: Exception when middle clicking certain slotsbe557e69
SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN
96 lines
4.5 KiB
Diff
96 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
|
|
|