diff --git a/Spigot-Server-Patches/0003-MC-Dev-fixes.patch b/Spigot-Server-Patches/0003-MC-Dev-fixes.patch index 95c35863f..fe155cf9f 100644 --- a/Spigot-Server-Patches/0003-MC-Dev-fixes.patch +++ b/Spigot-Server-Patches/0003-MC-Dev-fixes.patch @@ -1,4 +1,4 @@ -From d50ec96bb408e2663c832c8855519eb623fb0e07 Mon Sep 17 00:00:00 2001 +From 7d151ab9a57541eb1cace4e484d444406f66f86f Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 30 Mar 2016 19:36:20 -0400 Subject: [PATCH] MC Dev fixes @@ -126,6 +126,70 @@ index a661789c1..785a1a218 100644 } public Iterator iterator() { +diff --git a/src/main/java/net/minecraft/server/EnumDirection.java b/src/main/java/net/minecraft/server/EnumDirection.java +index 188d49d82..854ad49b6 100644 +--- a/src/main/java/net/minecraft/server/EnumDirection.java ++++ b/src/main/java/net/minecraft/server/EnumDirection.java +@@ -255,7 +255,7 @@ public enum EnumDirection implements INamable { + return Iterators.forArray(this.c); + } + +- public boolean test(@Nullable Object object) { ++ public boolean test(@Nullable EnumDirection object) { // Paper - Decompile fix + return this.a((EnumDirection) object); + } + } +@@ -293,9 +293,10 @@ public enum EnumDirection implements INamable { + return d0; + } + +- public boolean test(@Nullable Object object) { +- return super.a((EnumDirection) object); +- } ++ // Paper - Decompile fix ++ //public boolean test(@Nullable Object object) { ++ // return super.a((EnumDirection) object); ++ //} + }, + Y("y") { + ; +@@ -307,9 +308,10 @@ public enum EnumDirection implements INamable { + return d1; + } + +- public boolean test(@Nullable Object object) { +- return super.a((EnumDirection) object); +- } ++ // Paper - Decompile fix ++ //public boolean test(@Nullable Object object) { ++ // return super.a((EnumDirection) object); ++ //} + }, + Z("z") { + ; +@@ -321,9 +323,10 @@ public enum EnumDirection implements INamable { + return d2; + } + +- public boolean test(@Nullable Object object) { +- return super.a((EnumDirection) object); +- } ++ // Paper - Decompile fix ++ //public boolean test(@Nullable Object object) { ++ // return super.a((EnumDirection) object); ++ //} + }; + + private static final Map d = (Map) Arrays.stream(values()).collect(Collectors.toMap(EnumDirection.EnumAxis::a, (enumdirection_enumaxis) -> { +@@ -377,7 +380,7 @@ public enum EnumDirection implements INamable { + + public abstract double a(double d0, double d1, double d2); + +- public boolean test(@Nullable Object object) { ++ public boolean test(@Nullable EnumDirection object) { // Paper - Decompile fix + return this.a((EnumDirection) object); + } + diff --git a/src/main/java/net/minecraft/server/LocaleLanguage.java b/src/main/java/net/minecraft/server/LocaleLanguage.java index 8f06c5848..4361b2cee 100644 --- a/src/main/java/net/minecraft/server/LocaleLanguage.java @@ -139,6 +203,19 @@ index 8f06c5848..4361b2cee 100644 } this.e = SystemUtils.b(); +diff --git a/src/main/java/net/minecraft/server/MathHelper.java b/src/main/java/net/minecraft/server/MathHelper.java +index 86585a13f..f52b9c6f0 100644 +--- a/src/main/java/net/minecraft/server/MathHelper.java ++++ b/src/main/java/net/minecraft/server/MathHelper.java +@@ -8,7 +8,7 @@ import java.util.function.IntPredicate; + public class MathHelper { + + public static final float a = c(2.0F); +- private static final float[] b = (float[]) SystemUtils.a((Object) (new float[65536]), (afloat) -> { ++ private static final float[] b = (float[]) SystemUtils.a((new float[65536]), (afloat) -> { // Paper - Decompile fix + for (int i = 0; i < afloat.length; ++i) { + afloat[i] = (float) Math.sin((double) i * 3.141592653589793D * 2.0D / 65536.0D); + } diff --git a/src/main/java/net/minecraft/server/RegistryID.java b/src/main/java/net/minecraft/server/RegistryID.java index 3b8f6ec16..bde5714dd 100644 --- a/src/main/java/net/minecraft/server/RegistryID.java @@ -180,6 +257,19 @@ index 3b8f6ec16..bde5714dd 100644 this.e = 0; this.f = 0; +diff --git a/src/main/java/net/minecraft/server/ShapeDetector.java b/src/main/java/net/minecraft/server/ShapeDetector.java +index 43596cb2d..3faf74a22 100644 +--- a/src/main/java/net/minecraft/server/ShapeDetector.java ++++ b/src/main/java/net/minecraft/server/ShapeDetector.java +@@ -171,7 +171,7 @@ public class ShapeDetector { + return new ShapeDetectorBlock(this.a, blockposition, this.b); + } + +- public Object load(Object object) throws Exception { ++ public ShapeDetectorBlock load(BlockPosition object) throws Exception { // Paper - Decompile fix + return this.a((BlockPosition) object); + } + } diff --git a/src/main/java/net/minecraft/server/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java index 4b5463cca..53c9f2188 100644 --- a/src/main/java/net/minecraft/server/VoxelShape.java diff --git a/Spigot-Server-Patches/0328-Make-portal-teleportation-adjustment-math-more-accur.patch b/Spigot-Server-Patches/0328-Make-portal-teleportation-adjustment-math-more-accur.patch new file mode 100644 index 000000000..276f737fc --- /dev/null +++ b/Spigot-Server-Patches/0328-Make-portal-teleportation-adjustment-math-more-accur.patch @@ -0,0 +1,95 @@ +From 7a62941977f7d8b8ebb5ca2742e389fed0763274 Mon Sep 17 00:00:00 2001 +From: Zach Brown +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 +@@ -85,6 +85,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; + } +@@ -93,6 +94,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: +@@ -272,6 +274,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 f52b9c6f0..3adbfb820 100644 +--- a/src/main/java/net/minecraft/server/MathHelper.java ++++ b/src/main/java/net/minecraft/server/MathHelper.java +@@ -82,6 +82,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 ba8d15431..6d2f5faf2 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 3faf74a22..4e1f8c211 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.17.1 +