Port Eigencraft to 1.16

This commit is contained in:
Mariell Hoversholm 2020-08-04 12:23:54 +02:00 committed by MiniDigger
parent 0bad695802
commit 3efe45f56d
1 changed files with 58 additions and 48 deletions

View File

@ -19,12 +19,12 @@ Aside from making the obvious class/function renames and obfhelpers I didn't nee
Just added Bukkit's event system and took a few liberties with dead code and comment misspellings. Just added Bukkit's event system and took a few liberties with dead code and comment misspellings.
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 0862a1d629435dea92178fb5473068f23a15adf2..4ba72275b965693f3650f9b4fb138d3320d1b88b 100644 index d5a1ade21749bba420257f3ece7878f32148d6ff..9b96b1b326169e7963d828eb9d0612c3c8cb428a 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -432,4 +432,14 @@ public class PaperWorldConfig { @@ -654,4 +654,14 @@ public class PaperWorldConfig {
private void preventMovingIntoUnloadedChunks() { maxLightningFlashDistance = 512; // Vanilla value
preventMovingIntoUnloadedChunks = getBoolean("prevent-moving-into-unloaded-chunks", false); }
} }
+ +
+ public boolean useEigencraftRedstone = false; + public boolean useEigencraftRedstone = false;
@ -959,7 +959,7 @@ index 0000000000000000000000000000000000000000..b69803cbf2db2781aa050b145bf88468
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/src/main/java/net/minecraft/server/BlockRedstoneWire.java diff --git a/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed49490c15 100644 index 7b3ccded0451f7b6634aeca0bdc1b5cc94f52b96..6abc3d4cfbe8f5cc1dbe83031d90ee8df3b2f914 100644
--- a/src/main/java/net/minecraft/server/BlockRedstoneWire.java --- a/src/main/java/net/minecraft/server/BlockRedstoneWire.java
+++ b/src/main/java/net/minecraft/server/BlockRedstoneWire.java +++ b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
@@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
@ -968,21 +968,19 @@ index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed
+import com.destroystokyo.paper.PaperConfig; +import com.destroystokyo.paper.PaperConfig;
+import com.destroystokyo.paper.util.RedstoneWireTurbo; +import com.destroystokyo.paper.util.RedstoneWireTurbo;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@@ -22,8 +24,8 @@ public class BlockRedstoneWire extends Block { import com.google.common.collect.Sets;
public static final BlockStateInteger POWER = BlockProperties.at; @@ -25,7 +27,7 @@ public class BlockRedstoneWire extends Block {
public static final Map<EnumDirection, BlockStateEnum<BlockPropertyRedstoneSide>> f = Maps.newEnumMap(ImmutableMap.of(EnumDirection.NORTH, BlockRedstoneWire.NORTH, EnumDirection.EAST, BlockRedstoneWire.EAST, EnumDirection.SOUTH, BlockRedstoneWire.SOUTH, EnumDirection.WEST, BlockRedstoneWire.WEST)); private final Map<IBlockData, VoxelShape> j = Maps.newHashMap();
protected static final VoxelShape[] g = new VoxelShape[]{Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.a(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)}; private static final Vector3fa[] k = new Vector3fa[16];
- private boolean h = true; private final IBlockData o;
- private final Set<BlockPosition> i = Sets.newHashSet(); - private boolean p = true;
+ private boolean h = true; public final boolean canProvidePower() { return this.h; } public final void setCanProvidePower(boolean value) { this.h = value; } // Paper - OBFHELPER + private boolean p = true; public final boolean canProvidePower() { return this.p; } public final void setCanProvidePower(boolean value) { this.p = value; } // Paper - OBFHELPER
+ private final Set<BlockPosition> i = Sets.newHashSet(); private Set<BlockPosition> getBlocksNeedingUpdate() { return this.i; } // Paper - OBFHELPER
public BlockRedstoneWire(Block.Info block_info) { public BlockRedstoneWire(BlockBase.Info blockbase_info) {
super(block_info); super(blockbase_info);
@@ -157,6 +159,117 @@ public class BlockRedstoneWire extends Block { @@ -212,6 +214,120 @@ public class BlockRedstoneWire extends Block {
return iblockdata1.d(iworldreader, blockposition1, EnumDirection.UP) || iblockdata1.getBlock() == Blocks.HOPPER; return iblockdata.d(iblockaccess, blockposition, EnumDirection.UP) || iblockdata.a(Blocks.HOPPER);
} }
+ // Paper start - Optimize redstone + // Paper start - Optimize redstone
@ -994,11 +992,11 @@ index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed
+ * this.neighborChanged and a few other methods in this class. + * this.neighborChanged and a few other methods in this class.
+ * Note: Added 'source' argument so as to help determine direction of information flow + * Note: Added 'source' argument so as to help determine direction of information flow
+ */ + */
+ private IBlockData updateSurroundingRedstone(World worldIn, BlockPosition pos, IBlockData state, BlockPosition source) { + private void updateSurroundingRedstone(World worldIn, BlockPosition pos, IBlockData state, BlockPosition source) {
+ if (worldIn.paperConfig.useEigencraftRedstone) { + if (worldIn.paperConfig.useEigencraftRedstone) {
+ return turbo.updateSurroundingRedstone(worldIn, pos, state, source); + turbo.updateSurroundingRedstone(worldIn, pos, state, source);
+ } + }
+ return a(worldIn, pos, state); + a(worldIn, pos, state);
+ } + }
+ +
+ /* + /*
@ -1011,7 +1009,7 @@ index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed
+ */ + */
+ public IBlockData calculateCurrentChanges(World worldIn, BlockPosition pos1, BlockPosition pos2, IBlockData state) { + public IBlockData calculateCurrentChanges(World worldIn, BlockPosition pos1, BlockPosition pos2, IBlockData state) {
+ IBlockData iblockstate = state; + IBlockData iblockstate = state;
+ int i = state.get(POWER).intValue(); + int i = state.get(POWER);
+ int j = 0; + int j = 0;
+ j = this.getPower(j, worldIn.getType(pos2)); + j = this.getPower(j, worldIn.getType(pos2));
+ this.setCanProvidePower(false); + this.setCanProvidePower(false);
@ -1076,48 +1074,60 @@ index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed
+ } + }
+ +
+ if (i != j) { + if (i != j) {
+ state = state.set(POWER, Integer.valueOf(j)); + state = state.set(POWER, j);
+ +
+ if (worldIn.getType(pos1) == iblockstate) { + if (worldIn.getType(pos1) == iblockstate) {
+ worldIn.setTypeAndData(pos1, state, 2); + worldIn.setTypeAndData(pos1, state, 2);
+ } + }
+ +
+ if (!worldIn.paperConfig.useEigencraftRedstone) { + // 1.16(.1?) dropped the need for blocks needing updates.
+ // The new search algorithm keeps track of blocks needing updates in its own data structures, + // Whether this is necessary after all is to be seen.
+ // so only add anything to blocksNeedingUpdate if we're using the vanilla update algorithm. +// if (!worldIn.paperConfig.useEigencraftRedstone) {
+ this.getBlocksNeedingUpdate().add(pos1); +// // The new search algorithm keeps track of blocks needing updates in its own data structures,
+ +// // so only add anything to blocksNeedingUpdate if we're using the vanilla update algorithm.
+ for (EnumDirection enumfacing1 : EnumDirection.values()) { +// this.getBlocksNeedingUpdate().add(pos1);
+ this.getBlocksNeedingUpdate().add(pos1.shift(enumfacing1)); +//
+ } +// for (EnumDirection enumfacing1 : EnumDirection.values()) {
+ } +// this.getBlocksNeedingUpdate().add(pos1.shift(enumfacing1));
+// }
+// }
+ } + }
+ +
+ return state; + return state;
+ } + }
+ // Paper end + // Paper end
private IBlockData a(World world, BlockPosition blockposition, IBlockData iblockdata) { +
iblockdata = this.b(world, blockposition, iblockdata); private void a(World world, BlockPosition blockposition, IBlockData iblockdata) {
List<BlockPosition> list = Lists.newArrayList(this.i); int i = this.a(world, blockposition);
@@ -255,7 +368,7 @@ public class BlockRedstoneWire extends Block {
@@ -281,6 +397,8 @@ public class BlockRedstoneWire extends Block {
return Math.max(i, j - 1);
}
+ private int getPower(int min, IBlockData iblockdata) { return Math.max(min, getPower(iblockdata)); } // Paper - Optimize redstone
+ private int getPower(IBlockData iblockdata) { return this.o(iblockdata); } // Paper - OBFHELPER
private int o(IBlockData iblockdata) {
return iblockdata.a((Block) this) ? (Integer) iblockdata.get(BlockRedstoneWire.POWER) : 0;
}
@@ -303,7 +421,7 @@ public class BlockRedstoneWire extends Block {
@Override @Override
public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) {
if (iblockdata1.getBlock() != iblockdata.getBlock() && !world.isClientSide) { if (!iblockdata1.a(iblockdata.getBlock()) && !world.isClientSide) {
- this.a(world, blockposition, iblockdata); - this.a(world, blockposition, iblockdata);
+ this.updateSurroundingRedstone(world, blockposition, iblockdata, null); // Paper - Optimize redstone + this.updateSurroundingRedstone(world, blockposition, iblockdata, null); // Paper - Optimize redstone
Iterator iterator = EnumDirection.EnumDirectionLimit.VERTICAL.iterator(); Iterator iterator = EnumDirection.EnumDirectionLimit.VERTICAL.iterator();
EnumDirection enumdirection; while (iterator.hasNext()) {
@@ -302,7 +415,7 @@ public class BlockRedstoneWire extends Block { @@ -330,7 +448,7 @@ public class BlockRedstoneWire extends Block {
world.applyPhysics(blockposition.shift(enumdirection), this); world.applyPhysics(blockposition.shift(enumdirection), this);
} }
- this.a(world, blockposition, iblockdata); - this.a(world, blockposition, iblockdata);
+ this.updateSurroundingRedstone(world, blockposition, iblockdata, null); // Paper - Optimize redstone + this.updateSurroundingRedstone(world, blockposition, iblockdata, null); // Paper - Optimize redstone
Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); this.d(world, blockposition);
}
EnumDirection enumdirection1; }
@@ -343,7 +456,7 @@ public class BlockRedstoneWire extends Block { @@ -365,7 +483,7 @@ public class BlockRedstoneWire extends Block {
public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1, boolean flag) { public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1, boolean flag) {
if (!world.isClientSide) { if (!world.isClientSide) {
if (iblockdata.canPlace(world, blockposition)) { if (iblockdata.canPlace(world, blockposition)) {
@ -1127,10 +1137,10 @@ index 5bf2fc0b3f0a5209682b6056a6512ba9dbdca6d0..52a4982ecd7e4346e55c6fbab80032ed
c(iblockdata, world, blockposition); c(iblockdata, world, blockposition);
world.a(blockposition, false); world.a(blockposition, false);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 2db91e85bd5e95d15b607a96114f33b6e7687b19..29594e5fcddfd47d543813a2bf12234d9cbd29fd 100644 index 287db5203f3a4995c2b09bfd9fe17734538e7466..d20fe9232ec09289969cc16cfbaec57fe4bb381d 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -523,6 +523,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -607,6 +607,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
} }
@ -1138,11 +1148,11 @@ index 2db91e85bd5e95d15b607a96114f33b6e7687b19..29594e5fcddfd47d543813a2bf12234d
public void a(BlockPosition blockposition, Block block, BlockPosition blockposition1) { public void a(BlockPosition blockposition, Block block, BlockPosition blockposition1) {
if (!this.isClientSide) { if (!this.isClientSide) {
IBlockData iblockdata = this.getType(blockposition); IBlockData iblockdata = this.getType(blockposition);
@@ -1278,6 +1279,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -1232,6 +1233,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
return this.getBlockFacePower(blockposition.down(), EnumDirection.DOWN) > 0 ? true : (this.getBlockFacePower(blockposition.up(), EnumDirection.UP) > 0 ? true : (this.getBlockFacePower(blockposition.north(), EnumDirection.NORTH) > 0 ? true : (this.getBlockFacePower(blockposition.south(), EnumDirection.SOUTH) > 0 ? true : (this.getBlockFacePower(blockposition.west(), EnumDirection.WEST) > 0 ? true : this.getBlockFacePower(blockposition.east(), EnumDirection.EAST) > 0)))); return this.getBlockFacePower(blockposition.down(), EnumDirection.DOWN) > 0 ? true : (this.getBlockFacePower(blockposition.up(), EnumDirection.UP) > 0 ? true : (this.getBlockFacePower(blockposition.north(), EnumDirection.NORTH) > 0 ? true : (this.getBlockFacePower(blockposition.south(), EnumDirection.SOUTH) > 0 ? true : (this.getBlockFacePower(blockposition.west(), EnumDirection.WEST) > 0 ? true : this.getBlockFacePower(blockposition.east(), EnumDirection.EAST) > 0))));
} }
+ public int isBlockIndirectlyGettingPowered(BlockPosition pos) { return this.q(pos); } // Paper - OBFHELPER + public int isBlockIndirectlyGettingPowered(BlockPosition pos) { return this.s(pos); } // Paper - OBFHELPER
public int q(BlockPosition blockposition) { public int s(BlockPosition blockposition) {
int i = 0; int i = 0;
EnumDirection[] aenumdirection = World.a; EnumDirection[] aenumdirection = World.a;