mirror of
https://github.com/PaperMC/Paper.git
synced 2024-08-28 23:49:41 +02:00
Fixes GH-1295 Non-standard sized portals exacerbate a flaw in the vanilla portal teleportation adjustment logic. As a result, an entity can end up slightly inside of the surrounding portal blocks. In vanilla, this issue is minor and you are adjusted out as if it never happened. In CraftBukkit and derivatives, the anti-suffocation behavior activates and players end up teleported on top of their portals. This improves the offset so as to keep the issue from ever occurring in the first place. Special thanks to CarpetMod who appears to have had this fixed for some time, and has licensed their code such that we can use it as needed.
289 lines
14 KiB
Diff
289 lines
14 KiB
Diff
From 7d151ab9a57541eb1cace4e484d444406f66f86f Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Wed, 30 Mar 2016 19:36:20 -0400
|
|
Subject: [PATCH] MC Dev fixes
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
index 002da2a19..9f3aa2459 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
|
@@ -150,7 +150,7 @@ public class BlockPosition extends BaseBlockPosition {
|
|
return a(Math.min(blockposition.getX(), blockposition1.getX()), Math.min(blockposition.getY(), blockposition1.getY()), Math.min(blockposition.getZ(), blockposition1.getZ()), Math.max(blockposition.getX(), blockposition1.getX()), Math.max(blockposition.getY(), blockposition1.getY()), Math.max(blockposition.getZ(), blockposition1.getZ()));
|
|
}
|
|
|
|
- public static Iterable<BlockPosition> a(int i, int j, int k, int l, int i1, int j1) {
|
|
+ public static Iterable<BlockPosition> a(int x0, int y0, int z0, int l, int i1, int j1) {
|
|
return () -> {
|
|
return new AbstractIterator() {
|
|
private boolean g = true;
|
|
@@ -161,21 +161,21 @@ public class BlockPosition extends BaseBlockPosition {
|
|
protected BlockPosition a() {
|
|
if (this.g) {
|
|
this.g = false;
|
|
- this.h = i;
|
|
- this.i = j;
|
|
- this.j = k;
|
|
- return new BlockPosition(i, j, k);
|
|
+ this.h = x0;
|
|
+ this.i = y0;
|
|
+ this.j = z0;
|
|
+ return new BlockPosition(x0, y0, z0);
|
|
} else if (this.h == l && this.i == i1 && this.j == j1) {
|
|
return (BlockPosition) this.endOfData();
|
|
} else {
|
|
if (this.h < l) {
|
|
++this.h;
|
|
} else if (this.i < i1) {
|
|
- this.h = i;
|
|
+ this.h = x0;
|
|
++this.i;
|
|
} else if (this.j < j1) {
|
|
- this.h = i;
|
|
- this.i = j;
|
|
+ this.h = x0;
|
|
+ this.i = y0;
|
|
++this.j;
|
|
}
|
|
|
|
@@ -213,8 +213,11 @@ public class BlockPosition extends BaseBlockPosition {
|
|
if (this.g.b < l) {
|
|
++this.g.b;
|
|
} else if (this.g.c < i1) {
|
|
+ this.g.b = i; // Paper - Readd line removed by the decompiler
|
|
++this.g.c;
|
|
} else if (this.g.d < j1) {
|
|
+ this.g.b = i; // Paper - Readd line removed by the decompiler
|
|
+ this.g.c = j; // Paper - Readd line removed by the decompiler
|
|
++this.g.d;
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
|
|
index 650ef1475..35aea4829 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkSection.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
|
|
@@ -15,7 +15,7 @@ public class ChunkSection {
|
|
|
|
public ChunkSection(int i, boolean flag) {
|
|
this.yPos = i;
|
|
- this.blockIds = new DataPaletteBlock(ChunkSection.GLOBAL_PALETTE, Block.REGISTRY_ID, GameProfileSerializer::d, GameProfileSerializer::a, Blocks.AIR.getBlockData());
|
|
+ this.blockIds = new DataPaletteBlock<>(ChunkSection.GLOBAL_PALETTE, Block.REGISTRY_ID, GameProfileSerializer::d, GameProfileSerializer::a, Blocks.AIR.getBlockData()); // Paper - Decompile error
|
|
this.emittedLight = new NibbleArray();
|
|
if (flag) {
|
|
this.skyLight = new NibbleArray();
|
|
diff --git a/src/main/java/net/minecraft/server/DefinedStructure.java b/src/main/java/net/minecraft/server/DefinedStructure.java
|
|
index a661789c1..785a1a218 100644
|
|
--- a/src/main/java/net/minecraft/server/DefinedStructure.java
|
|
+++ b/src/main/java/net/minecraft/server/DefinedStructure.java
|
|
@@ -88,7 +88,7 @@ public class DefinedStructure {
|
|
}
|
|
|
|
private void a(World world, BlockPosition blockposition, BlockPosition blockposition1) {
|
|
- List list = world.a(Entity.class, new AxisAlignedBB(blockposition, blockposition1), (entity) -> {
|
|
+ List list = world.a(Entity.class, new AxisAlignedBB(blockposition, blockposition1),(Predicate<? super Entity>) (entity) -> { // Paper - decompile fix
|
|
return !(entity instanceof EntityHuman);
|
|
});
|
|
|
|
@@ -285,21 +285,24 @@ public class DefinedStructure {
|
|
voxelshapebitset.a(blockposition3.getX() - i2, blockposition3.getY() - j2, blockposition3.getZ() - l1, true, true);
|
|
}
|
|
|
|
- voxelshapebitset.a((enumdirection, i, j, k) -> {
|
|
- BlockPosition blockposition = new BlockPosition(l + i, i1 + j, j1 + k);
|
|
- BlockPosition blockposition1 = blockposition.shift(enumdirection);
|
|
- IBlockData iblockdata = generatoraccess.getType(blockposition);
|
|
+ // Paper start - decompile fixes
|
|
+ int finalL = l1;
|
|
+ voxelshapebitset.a((enumdirection, i_, j_, k_) -> {
|
|
+ BlockPosition innerBlockposition = new BlockPosition(i2 + i_, j2 + j_, finalL + k_);
|
|
+ BlockPosition blockposition1 = innerBlockposition.shift(enumdirection);
|
|
+ IBlockData iblockdata = generatoraccess.getType(innerBlockposition);
|
|
IBlockData iblockdata1 = generatoraccess.getType(blockposition1);
|
|
- IBlockData iblockdata2 = iblockdata.updateState(enumdirection, iblockdata1, generatoraccess, blockposition, blockposition1);
|
|
+ IBlockData iblockdata2 = iblockdata.updateState(enumdirection, iblockdata1, generatoraccess, innerBlockposition, blockposition1);
|
|
|
|
if (iblockdata != iblockdata2) {
|
|
- generatoraccess.setTypeAndData(blockposition, iblockdata2, k1 & -2 | 16);
|
|
+ generatoraccess.setTypeAndData(innerBlockposition, iblockdata2, i & -2 | 16);
|
|
}
|
|
|
|
- IBlockData iblockdata3 = iblockdata1.updateState(enumdirection.opposite(), iblockdata2, generatoraccess, blockposition1, blockposition);
|
|
+ IBlockData iblockdata3 = iblockdata1.updateState(enumdirection.opposite(), iblockdata2, generatoraccess, blockposition1, innerBlockposition);
|
|
|
|
if (iblockdata1 != iblockdata3) {
|
|
- generatoraccess.setTypeAndData(blockposition1, iblockdata3, k1 & -2 | 16);
|
|
+ generatoraccess.setTypeAndData(blockposition1, iblockdata3, i & -2 | 16);
|
|
+ // Paper end - decompile fixes
|
|
}
|
|
|
|
});
|
|
@@ -734,7 +737,7 @@ public class DefinedStructure {
|
|
public IBlockData a(int i) {
|
|
IBlockData iblockdata = (IBlockData) this.b.fromId(i);
|
|
|
|
- return iblockdata == null ? DefinedStructure.a.a : iblockdata;
|
|
+ return iblockdata == null ? a : iblockdata; // Paper - decompile error - Blocks.AIR.getBlockData()
|
|
}
|
|
|
|
public Iterator<IBlockData> 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<String, EnumDirection.EnumAxis> 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
|
|
+++ b/src/main/java/net/minecraft/server/LocaleLanguage.java
|
|
@@ -34,7 +34,7 @@ public class LocaleLanguage {
|
|
Entry entry = (Entry) iterator.next();
|
|
String s = LocaleLanguage.b.matcher(ChatDeserializer.a((JsonElement) entry.getValue(), (String) entry.getKey())).replaceAll("%$1s");
|
|
|
|
- this.d.put(entry.getKey(), s);
|
|
+ this.d.put((String) entry.getKey(), s); // Paper - Decompile fix
|
|
}
|
|
|
|
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
|
|
+++ b/src/main/java/net/minecraft/server/RegistryID.java
|
|
@@ -6,7 +6,7 @@ import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
import javax.annotation.Nullable;
|
|
|
|
-public class RegistryID<K> implements Registry<K> {
|
|
+public class RegistryID<K> implements Registry { // Paper - decompile fix
|
|
|
|
private static final Object a = null;
|
|
private K[] b;
|
|
@@ -17,9 +17,9 @@ public class RegistryID<K> implements Registry<K> {
|
|
|
|
public RegistryID(int i) {
|
|
i = (int) ((float) i / 0.8F);
|
|
- this.b = (Object[]) (new Object[i]);
|
|
+ this.b = (K[]) (new Object[i]); // Paper - decompile fix
|
|
this.c = new int[i];
|
|
- this.d = (Object[]) (new Object[i]);
|
|
+ this.d = (K[]) (new Object[i]); // Paper - decompile fix
|
|
}
|
|
|
|
public int getId(@Nullable K k0) {
|
|
@@ -51,12 +51,12 @@ public class RegistryID<K> implements Registry<K> {
|
|
}
|
|
|
|
private void d(int i) {
|
|
- Object[] aobject = this.b;
|
|
+ K[] aobject = this.b; // Paper - decompile fix
|
|
int[] aint = this.c;
|
|
|
|
- this.b = (Object[]) (new Object[i]);
|
|
+ this.b = (K[]) (new Object[i]); // Paper - decompile fix
|
|
this.c = new int[i];
|
|
- this.d = (Object[]) (new Object[i]);
|
|
+ this.d = (K[]) (new Object[i]); // Paper - decompile fix
|
|
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
|
|
+++ b/src/main/java/net/minecraft/server/VoxelShape.java
|
|
@@ -67,7 +67,7 @@ public abstract class VoxelShape {
|
|
ArrayList arraylist = Lists.newArrayList();
|
|
|
|
this.b((d0, d1, d2, d3, d4, d5) -> {
|
|
- list.add(new AxisAlignedBB(d0, d1, d2, d3, d4, d5));
|
|
+ arraylist.add(new AxisAlignedBB(d0, d1, d2, d3, d4, d5)); // Paper - decompile fix
|
|
});
|
|
return arraylist;
|
|
}
|
|
--
|
|
2.17.1
|
|
|