Update Tuinity patches

This commit is contained in:
William Blake Galbreath
2020-03-14 17:05:49 -05:00
parent 69d17aafbb
commit 3afc502214
10 changed files with 176 additions and 222 deletions

View File

@@ -1,4 +1,4 @@
From c794d57af4283d31fe962cea6c96a3602c0e50fd Mon Sep 17 00:00:00 2001
From e39528079ddd25c1b51230d0b66546f55cc8ff27 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Fri, 14 Dec 2018 21:53:58 -0800
Subject: [PATCH] Tuinity Server Patches
@@ -14,37 +14,37 @@ Subject: [PATCH] Tuinity Server Patches
.../chunk/QueuedChangesMapLong2Object.java | 170 ++++
.../tuinity/tuinity/config/TuinityConfig.java | 225 +++++
.../server/TickListServerInterval.java | 42 +
.../tuinity/server/TuinityTickList.java | 614 ++++++++++++
.../tuinity/server/TuinityTickList.java | 614 ++++++++++++++
.../com/tuinity/tuinity/util/ChunkList.java | 119 +++
.../com/tuinity/tuinity/util/EntityList.java | 124 +++
.../tuinity/tuinity/util/IBlockDataList.java | 123 +++
.../tuinity/util/OptimizedSmallEnumSet.java | 65 ++
.../tuinity/util/PrimaryThreadList.java | 241 +++++
.../tuinity/util/PrimaryThreadSet.java | 282 ++++++
.../tuinity/util/PrimaryThreadList.java | 241 ++++++
.../tuinity/util/PrimaryThreadSet.java | 282 +++++++
.../util/TickSynchronizationPoint.java | 40 +
.../com/tuinity/tuinity/util/TickThread.java | 40 +
.../java/com/tuinity/tuinity/util/Util.java | 103 +++
.../fastutil/ExtendedAbstractDoubleList.java | 39 +
.../fastutil/ExtendedDoubleArrayList.java | 65 ++
.../fastutil/ExtendedObjectAVLTreeSet.java | 90 ++
.../com/tuinity/tuinity/util/map/AreaMap.java | 388 ++++++++
.../com/tuinity/tuinity/util/map/AreaMap.java | 388 +++++++++
.../tuinity/util/map/PlayerAreaMap.java | 25 +
.../util/map/PooledLinkedHashSets.java | 287 ++++++
.../util/map/PooledLinkedHashSets.java | 287 +++++++
.../util/pool/PooledBlockPositions.java | 40 +
.../tuinity/util/set/LinkedSortedSet.java | 142 +++
.../tuinity/util/set/LinkedSortedSet.java | 142 ++++
.../net/minecraft/server/ArraySetSorted.java | 41 +-
.../net/minecraft/server/AxisAlignedBB.java | 2 +
.../net/minecraft/server/BlockPosition.java | 1 +
src/main/java/net/minecraft/server/Chunk.java | 134 +++
.../java/net/minecraft/server/ChunkMap.java | 15 +-
.../minecraft/server/ChunkMapDistance.java | 387 +++++++-
.../minecraft/server/ChunkMapDistance.java | 387 ++++++++-
.../minecraft/server/ChunkProviderServer.java | 186 +++-
.../minecraft/server/ChunkRegionLoader.java | 12 +-
.../net/minecraft/server/ChunkStatus.java | 5 +-
.../net/minecraft/server/DedicatedServer.java | 3 +-
.../minecraft/server/DoubleListOffset.java | 2 +-
src/main/java/net/minecraft/server/EULA.java | 2 +-
.../java/net/minecraft/server/Entity.java | 53 ++
.../java/net/minecraft/server/Entity.java | 100 +++
.../minecraft/server/EntityEnderDragon.java | 4 +-
.../minecraft/server/EntityInsentient.java | 19 +-
.../net/minecraft/server/EntityPlayer.java | 41 +-
@@ -74,18 +74,18 @@ Subject: [PATCH] Tuinity Server Patches
.../minecraft/server/PathfinderNormal.java | 4 +-
.../server/PathfinderTargetCondition.java | 1 +
.../net/minecraft/server/PlayerChunk.java | 112 ++-
.../net/minecraft/server/PlayerChunkMap.java | 870 +++++++++++++++---
.../net/minecraft/server/PlayerChunkMap.java | 791 +++++++++++++++---
.../server/PlayerInteractManager.java | 45 +-
.../net/minecraft/server/PlayerInventory.java | 6 +-
.../java/net/minecraft/server/PlayerList.java | 6 +-
.../java/net/minecraft/server/ProtoChunk.java | 16 +-
.../java/net/minecraft/server/RegionFile.java | 420 ++++++++-
.../java/net/minecraft/server/RegionFile.java | 420 +++++++++-
.../minecraft/server/RegionFileBitSet.java | 26 +-
.../net/minecraft/server/RegionFileCache.java | 45 +-
.../server/RegionFileCompression.java | 7 +-
.../server/StructureBoundingBox.java | 14 +-
.../net/minecraft/server/ThreadedMailbox.java | 2 +-
.../net/minecraft/server/TickListServer.java | 51 +
.../net/minecraft/server/TickListServer.java | 51 ++
.../java/net/minecraft/server/Ticket.java | 6 +-
.../java/net/minecraft/server/TicketType.java | 1 +
.../net/minecraft/server/VoxelShapeArray.java | 2 +-
@@ -93,7 +93,7 @@ Subject: [PATCH] Tuinity Server Patches
.../server/VoxelShapeMergerList.java | 2 +-
.../net/minecraft/server/VoxelShapes.java | 2 +-
src/main/java/net/minecraft/server/World.java | 23 +-
.../net/minecraft/server/WorldServer.java | 478 +++++++++-
.../net/minecraft/server/WorldServer.java | 471 ++++++++++-
.../net/minecraft/server/WorldUpgrader.java | 2 +-
.../org/bukkit/craftbukkit/CraftServer.java | 7 +-
.../org/bukkit/craftbukkit/CraftWorld.java | 67 +-
@@ -102,7 +102,7 @@ Subject: [PATCH] Tuinity Server Patches
.../craftbukkit/entity/CraftPlayer.java | 37 +-
.../java/org/spigotmc/ActivationRange.java | 41 +-
src/main/java/org/spigotmc/AsyncCatcher.java | 2 +-
98 files changed, 6858 insertions(+), 486 deletions(-)
98 files changed, 6819 insertions(+), 486 deletions(-)
create mode 100644 src/main/java/com/tuinity/tuinity/chunk/ChunkRegionManager.java
create mode 100644 src/main/java/com/tuinity/tuinity/chunk/QueuedChangesMapLong2Int.java
create mode 100644 src/main/java/com/tuinity/tuinity/chunk/QueuedChangesMapLong2Object.java
@@ -186,7 +186,7 @@ index 132397b3f3..4e12f416f9 100644
continue;
}
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index c7cde1d0a0..e60af9ceba 100644
index 7ca67a4aa5..e76d5fd8df 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -108,7 +108,7 @@ public class PaperWorldConfig {
@@ -5320,17 +5320,64 @@ index cf00f35a5b..e54730f097 100644
throwable = throwable1;
throw throwable1;
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 8974c16bf9..23e91183ef 100644
index 8974c16bf9..181f1742ac 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -208,6 +208,58 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -208,6 +208,105 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
}
// CraftBukkit end
+ // Tuinity start
+ // ender dragon is special cased for its large range, player is special cased for spectator mode + npc plugins
+ // non-final, let plugins set at their discretion
+ protected boolean isLegacyTrackingEntity = this instanceof EntityEnderDragon || this instanceof EntityPlayer;
+ boolean isLegacyTrackingEntity = this instanceof EntityEnderDragon || this instanceof EntityPlayer;
+
+ public final void setLegacyTrackingEntity(final boolean isLegacyTrackingEntity) {
+ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update legacy tracking off of the main thread");
+ if (this.isLegacyTrackingEntity == isLegacyTrackingEntity) {
+ return;
+ }
+
+ if (this.world == null) {
+ this.isLegacyTrackingEntity = isLegacyTrackingEntity;
+ return;
+ }
+
+ WorldServer world = (WorldServer)this.world;
+ PlayerChunkMap chunkMap = world.getChunkProvider().playerChunkMap;
+
+ if (chunkMap.playerEntityTrackerTrackMap == null) {
+ this.isLegacyTrackingEntity = isLegacyTrackingEntity;
+ return;
+ }
+
+ if (this.isLegacyTrackingEntity) {
+ this.isLegacyTrackingEntity = false;
+ chunkMap.activelyTrackedEntitiesLegacy.remove(this);
+
+ PlayerChunkMap.EntityTracker tracker = chunkMap.trackedEntities.get(this.getId());
+ if (tracker != null) {
+ for (EntityPlayer player : world.getPlayers()) {
+ tracker.removeTrackingPlayer(player);
+ tracker.updatePlayer(player);
+ }
+ }
+ } else {
+ this.isLegacyTrackingEntity = true;
+ chunkMap.activelyTrackedEntitiesLegacy.add(this);
+
+ PlayerChunkMap.EntityTracker tracker = this.tracker;
+ if (tracker != null) {
+ com.tuinity.tuinity.util.map.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> inRange = chunkMap.playerEntityTrackerTrackMap.getObjectsInRange(com.tuinity.tuinity.util.Util.getCoordinateKey(this));
+
+ for (EntityPlayer player : world.getPlayers()) {
+ tracker.clear(player);
+ if (inRange != null && inRange.contains(player)) {
+ tracker.updateTrackingPlayer(player);
+ }
+ }
+ }
+ }
+ }
+
+ // We queue changes to tracker here because when adding to a chunk we do not know if the entity is in a trackable state
+ public final it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet trackQueue = new it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet(8);
@@ -5382,7 +5429,7 @@ index 8974c16bf9..23e91183ef 100644
public Entity(EntityTypes<?> entitytypes, World world) {
this.id = Entity.entityCount.incrementAndGet();
this.passengers = Lists.newArrayList();
@@ -1371,6 +1423,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1371,6 +1470,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return MathHelper.c(f * f + f1 * f1 + f2 * f2);
}
@@ -6871,7 +6918,7 @@ index b38bc67758..7297952386 100644
}
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index 57bea926a6..aa625ce2a4 100644
index 57bea926a6..6ce0c8f25f 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -55,8 +55,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -6897,7 +6944,7 @@ index 57bea926a6..aa625ce2a4 100644
// CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback()
public final CallbackExecutor callbackExecutor = new CallbackExecutor();
@@ -109,6 +110,93 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -109,6 +110,89 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
// Paper start - distance maps
private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets<EntityPlayer> pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>();
@@ -6941,7 +6988,6 @@ index 57bea926a6..aa625ce2a4 100644
+ if (this.playerEntityTrackerTrackMap != null) {
+ this.playerEntityTrackerTrackMap.update(player, chunkX, chunkZ, Math.min(this.entityTrackerTrackRange, effectiveViewDistance));
+ this.playerEntityTrackerUntrackMap.update(player, chunkX, chunkZ, Math.min(this.entityTrackerUntrackRange, effectiveViewDistance));
+ this.playerEntityTrackerLegacyMap.update(player, chunkX, chunkZ, this.entityTrackerLegacyMapRange);
+ }
+ // Tuinity end - use distance map to optimise entity tracker
+ }
@@ -6966,11 +7012,8 @@ index 57bea926a6..aa625ce2a4 100644
+ public final int entityTrackerTrackRange;
+ public final int entityTrackerUntrackRange;
+
+ public final com.tuinity.tuinity.util.map.PlayerAreaMap playerEntityTrackerLegacyMap;
+ public final int entityTrackerLegacyMapRange;
+
+ //public final com.tuinity.tuinity.util.EntityList activelyTrackedEntities; // TODO not yet
+ public final com.tuinity.tuinity.util.EntityList activelyTrackedEntitiesLegacy;
+ final com.tuinity.tuinity.util.EntityList activelyTrackedEntitiesLegacy;
+
+ public static boolean isLegacyTrackingEntity(Entity entity) {
+ return entity.isLegacyTrackingEntity;
@@ -6991,7 +7034,7 @@ index 57bea926a6..aa625ce2a4 100644
void addPlayerToDistanceMaps(EntityPlayer player) {
this.updateMaps(player);
@@ -134,10 +222,91 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -134,10 +218,89 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
// Paper end
@@ -7027,7 +7070,6 @@ index 57bea926a6..aa625ce2a4 100644
+ if (this.playerEntityTrackerTrackMap != null) {
+ this.playerEntityTrackerTrackMap.remove(player);
+ this.playerEntityTrackerUntrackMap.remove(player);
+ this.playerEntityTrackerLegacyMap.remove(player);
+ }
+ // Tuinity end - use distance map to optimise entity tracker
+
@@ -7067,7 +7109,6 @@ index 57bea926a6..aa625ce2a4 100644
+ if (this.playerEntityTrackerTrackMap != null) {
+ this.playerEntityTrackerTrackMap.update(player, chunkX, chunkZ, Math.min(this.entityTrackerTrackRange, effectiveViewDistance));
+ this.playerEntityTrackerUntrackMap.update(player, chunkX, chunkZ, Math.min(this.entityTrackerUntrackRange, effectiveViewDistance));
+ this.playerEntityTrackerLegacyMap.update(player, chunkX, chunkZ, this.entityTrackerLegacyMapRange);
+ }
+ // Tuinity end - use distance map to optimise entity tracker
+
@@ -7084,7 +7125,7 @@ index 57bea926a6..aa625ce2a4 100644
this.pendingUnload = new Long2ObjectLinkedOpenHashMap();
this.loadedChunks = new LongOpenHashSet();
this.unloadQueue = new LongOpenHashSet();
@@ -166,7 +335,188 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -166,7 +329,157 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
this.l = supplier;
this.m = new VillagePlace(new File(this.w, "poi"), datafixer, this.world); // Paper
this.setViewDistance(i);
@@ -7171,11 +7212,8 @@ index 57bea926a6..aa625ce2a4 100644
+ if (!this.world.tuinityConfig.useOptimizedTracker) {
+ this.playerEntityTrackerTrackMap = null;
+ this.playerEntityTrackerUntrackMap = null;
+ this.playerEntityTrackerLegacyMap = null;
+ this.entityTrackerTrackRange = -1;
+ this.entityTrackerUntrackRange = -1;
+ this.entityTrackerLegacyMapRange = -1;
+
+ this.activelyTrackedEntitiesLegacy = null;
+ } else {
+ this.activelyTrackedEntitiesLegacy = new com.tuinity.tuinity.util.EntityList();
@@ -7238,34 +7276,6 @@ index 57bea926a6..aa625ce2a4 100644
+ entity.clearTrackingQueues(player);
+ }
+ });
+
+ // legacy tracker
+
+ // TODO check on update
+ int legacyTrackerRange = 10 * 16; // Ender dragon range
+ if (legacyTrackerRange < this.world.spigotConfig.playerTrackingRange) {
+ legacyTrackerRange = this.world.spigotConfig.playerTrackingRange;
+ }
+
+ int legacyTrackerChunkRange = legacyTrackerRange >>> 4 + ((legacyTrackerRange & 15) != 0 ? 1 : 0);
+ this.entityTrackerLegacyMapRange = legacyTrackerChunkRange;
+ this.playerEntityTrackerLegacyMap = new com.tuinity.tuinity.util.map.PlayerAreaMap(sets,
+ (EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ,
+ com.tuinity.tuinity.util.map.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newState) -> {
+ Chunk chunk = PlayerChunkMap.this.world.getChunkProvider().getChunkAtIfLoadedMainThreadNoCache(rangeX, rangeZ);
+ if (chunk == null || newState.size() != 1) {
+ return;
+ }
+ Entity[] entities = chunk.entities.getRawData();
+ for (int index = 0, len = chunk.entities.size(); index < len; ++index) {
+ Entity entity = entities[index];
+ if (!PlayerChunkMap.isLegacyTrackingEntity(entity)) {
+ continue;
+ }
+ PlayerChunkMap.this.activelyTrackedEntitiesLegacy.add(entity); // tracker tick propagates entity
+ }
+ },
+ null); // tracker tick handles entities moving out of range
+ }
+ // Tuinity end - use distance map to optimise entity tracker
+ // Tuinity start - optimise getPlayersInRange type functions
@@ -7274,7 +7284,7 @@ index 57bea926a6..aa625ce2a4 100644
}
public void updatePlayerMobTypeMap(Entity entity) {
@@ -177,15 +527,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -177,15 +490,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
int chunkZ = (int)Math.floor(entity.locZ()) >> 4;
int index = entity.getEntityType().getEnumCreatureType().ordinal();
@@ -7306,7 +7316,7 @@ index 57bea926a6..aa625ce2a4 100644
private static double a(ChunkCoordIntPair chunkcoordintpair, Entity entity) {
double d0 = (double) (chunkcoordintpair.x * 16 + 8);
double d1 = (double) (chunkcoordintpair.z * 16 + 8);
@@ -213,8 +578,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -213,8 +541,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
}
private static int a(ChunkCoordIntPair chunkcoordintpair, int i, int j) {
@@ -7322,7 +7332,7 @@ index 57bea926a6..aa625ce2a4 100644
return Math.max(Math.abs(k), Math.abs(l));
}
@@ -225,12 +595,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -225,12 +558,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@Nullable
protected PlayerChunk getUpdatingChunk(long i) {
@@ -7342,7 +7352,7 @@ index 57bea926a6..aa625ce2a4 100644
}
protected IntSupplier c(long i) {
@@ -308,6 +683,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -308,6 +646,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@Nullable
private PlayerChunk a(long i, int j, @Nullable PlayerChunk playerchunk, int k) {
@@ -7350,7 +7360,7 @@ index 57bea926a6..aa625ce2a4 100644
if (k > PlayerChunkMap.GOLDEN_TICKET && j > PlayerChunkMap.GOLDEN_TICKET) {
return playerchunk;
} else {
@@ -327,11 +703,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -327,11 +666,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
playerchunk = (PlayerChunk) this.pendingUnload.remove(i);
if (playerchunk != null) {
playerchunk.a(j);
@@ -7364,7 +7374,7 @@ index 57bea926a6..aa625ce2a4 100644
this.updatingChunksModified = true;
}
@@ -411,7 +788,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -411,7 +751,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
protected void save(boolean flag) {
if (flag) {
@@ -7373,7 +7383,7 @@ index 57bea926a6..aa625ce2a4 100644
MutableBoolean mutableboolean = new MutableBoolean();
do {
@@ -439,7 +816,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -439,7 +779,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
// this.i(); // Paper - nuke IOWorker
PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName());
} else {
@@ -7382,7 +7392,7 @@ index 57bea926a6..aa625ce2a4 100644
IChunkAccess ichunkaccess = (IChunkAccess) playerchunk.getChunkSave().getNow(null); // CraftBukkit - decompile error
if (ichunkaccess instanceof ProtoChunkExtension || ichunkaccess instanceof Chunk) {
@@ -482,7 +859,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -482,7 +822,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
while (longiterator.hasNext()) { // Spigot
long j = longiterator.nextLong();
longiterator.remove(); // Spigot
@@ -7391,7 +7401,7 @@ index 57bea926a6..aa625ce2a4 100644
if (playerchunk != null) {
this.pendingUnload.put(j, playerchunk);
@@ -610,7 +987,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -610,7 +950,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
if (!this.updatingChunksModified) {
return false;
} else {
@@ -7400,7 +7410,7 @@ index 57bea926a6..aa625ce2a4 100644
this.updatingChunksModified = false;
return true;
}
@@ -903,11 +1280,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -903,11 +1243,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
completablefuture1.thenAcceptAsync((either) -> {
either.mapLeft((chunk) -> {
this.u.getAndIncrement();
@@ -7413,7 +7423,7 @@ index 57bea926a6..aa625ce2a4 100644
return Either.left(chunk);
});
}, (runnable) -> {
@@ -1011,58 +1384,70 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1011,58 +1347,70 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
} // Paper
}
@@ -7505,7 +7515,7 @@ index 57bea926a6..aa625ce2a4 100644
}
protected PlayerChunkMap.a e() {
@@ -1070,12 +1455,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1070,12 +1418,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
}
protected Iterable<PlayerChunk> f() {
@@ -7520,7 +7530,7 @@ index 57bea926a6..aa625ce2a4 100644
while (objectbidirectionaliterator.hasNext()) {
Entry<PlayerChunk> entry = (Entry) objectbidirectionaliterator.next();
@@ -1265,31 +1650,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1265,31 +1613,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
return isOutsideOfRange(chunkcoordintpair, false);
}
@@ -7594,7 +7604,7 @@ index 57bea926a6..aa625ce2a4 100644
private boolean b(EntityPlayer entityplayer) {
return entityplayer.isSpectator() && !this.world.getGameRules().getBoolean(GameRules.SPECTATORS_GENERATE_CHUNKS);
}
@@ -1315,13 +1722,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1315,13 +1685,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
}
}
@@ -7612,7 +7622,7 @@ index 57bea926a6..aa625ce2a4 100644
}
@@ -1329,11 +1734,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1329,11 +1697,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
SectionPosition sectionposition = SectionPosition.a((Entity) entityplayer);
entityplayer.a(sectionposition);
@@ -7626,7 +7636,7 @@ index 57bea926a6..aa625ce2a4 100644
ObjectIterator objectiterator = this.trackedEntities.values().iterator();
while (objectiterator.hasNext()) {
@@ -1345,6 +1751,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1345,6 +1714,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
playerchunkmap_entitytracker.updatePlayer(entityplayer);
}
}
@@ -7634,7 +7644,7 @@ index 57bea926a6..aa625ce2a4 100644
int i = MathHelper.floor(entityplayer.locX()) >> 4;
int j = MathHelper.floor(entityplayer.locZ()) >> 4;
@@ -1384,56 +1791,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1384,56 +1754,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
int k1;
int l1;
@@ -7646,12 +7656,7 @@ index 57bea926a6..aa625ce2a4 100644
+ this.updateMaps(entityplayer); // Paper - distance maps
+ this.updateDistanceMapsTuinity(entityplayer); // Tuinity - distance maps
+ }
- for (int k2 = k1; k2 <= i2; ++k2) {
- for (int l2 = l1; l2 <= j2; ++l2) {
- ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(k2, l2);
- boolean flag3 = a(chunkcoordintpair, i1, j1) <= this.viewDistance;
- boolean flag4 = a(chunkcoordintpair, i, j) <= this.viewDistance;
+
+ @Override
+ public Stream<EntityPlayer> a(ChunkCoordIntPair chunkcoordintpair, boolean flag) {
+ // Tuinity start - per player view distance
@@ -7675,7 +7680,12 @@ index 57bea926a6..aa625ce2a4 100644
+ EntityPlayer player = (EntityPlayer)temp;
+ int viewDistance = this.playerViewDistanceBroadcastMap.getLastViewDistance(player);
+ long lastPosition = this.playerViewDistanceBroadcastMap.getLastCoordinate(player);
+
- for (int k2 = k1; k2 <= i2; ++k2) {
- for (int l2 = l1; l2 <= j2; ++l2) {
- ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(k2, l2);
- boolean flag3 = a(chunkcoordintpair, i1, j1) <= this.viewDistance;
- boolean flag4 = a(chunkcoordintpair, i, j) <= this.viewDistance;
+ int distX = Math.abs(com.tuinity.tuinity.util.Util.getCoordinateX(lastPosition) - chunkcoordintpair.x);
+ int distZ = Math.abs(com.tuinity.tuinity.util.Util.getCoordinateZ(lastPosition) - chunkcoordintpair.z);
@@ -7729,7 +7739,7 @@ index 57bea926a6..aa625ce2a4 100644
}
protected void addEntity(Entity entity) {
@@ -1452,11 +1856,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1452,11 +1819,36 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
entity.tracker = playerchunkmap_entitytracker; // Paper - Fast access to tracker
this.trackedEntities.put(entity.getId(), playerchunkmap_entitytracker);
@@ -7738,10 +7748,8 @@ index 57bea926a6..aa625ce2a4 100644
+ // Tuinity start - implement optimized tracker
+ } else {
+ if (PlayerChunkMap.isLegacyTrackingEntity(entity)) {
+ if (this.playerEntityTrackerLegacyMap.getObjectsInRange(com.tuinity.tuinity.util.Util.getCoordinateKey(entity)) != null) {
+ this.activelyTrackedEntitiesLegacy.add(entity);
+ // tracker tick will propagate updates
+ }
+ this.activelyTrackedEntitiesLegacy.add(entity);
+ // tracker tick will propagate updates
+ } else {
+ int chunkX = com.tuinity.tuinity.util.Util.getChunkCoordinate(entity.locX());
+ int chunkZ = com.tuinity.tuinity.util.Util.getChunkCoordinate(entity.locZ());
@@ -7768,7 +7776,7 @@ index 57bea926a6..aa625ce2a4 100644
ObjectIterator objectiterator = this.trackedEntities.values().iterator();
while (objectiterator.hasNext()) {
@@ -1466,6 +1897,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1466,6 +1858,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
playerchunkmap_entitytracker1.updatePlayer(entityplayer);
}
}
@@ -7776,7 +7784,7 @@ index 57bea926a6..aa625ce2a4 100644
}
}
@@ -1494,9 +1926,112 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1494,9 +1887,102 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
playerchunkmap_entitytracker1.a();
}
entity.tracker = null; // Paper - We're no longer tracked
@@ -7855,7 +7863,7 @@ index 57bea926a6..aa625ce2a4 100644
+ Entity entity = legacyEntities[i];
+ EntityTracker tracker = this.trackedEntities.get(entity.getId());
+ if (tracker == null) {
+ MinecraftServer.LOGGER.error("Entity has no tracker!" + entity);
+ MinecraftServer.LOGGER.error("Legacy tracking entity has no tracker! No longer tracking entity " + entity);
+ this.activelyTrackedEntitiesLegacy.remove(entity);
+ --i;
+ --size;
@@ -7863,18 +7871,8 @@ index 57bea926a6..aa625ce2a4 100644
+ }
+
+ EntityTrackerEntry entry = tracker.trackerEntry;
+ com.tuinity.tuinity.util.map.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> players = this.playerEntityTrackerLegacyMap.getObjectsInRange(com.tuinity.tuinity.util.Util.getCoordinateKey(entity));
+ if (players != null) {
+ tracker.updateTrackingPlayers(this, players);
+ } else {
+ // nothing is tracking it now, remove it
+ tracker.clearAll();
+ this.activelyTrackedEntitiesLegacy.remove(entity);
+ --i;
+ --size;
+ continue;
+ }
+ entry.tick();
+ tracker.track(this.world.getPlayers());
+ entry.tick(); // always tick the entry, even if no player is tracking
+ }
+ }
+ // Tuinity end - optimized tracker
@@ -7889,7 +7887,7 @@ index 57bea926a6..aa625ce2a4 100644
List<EntityPlayer> list = Lists.newArrayList();
List<EntityPlayer> list1 = this.world.getPlayers();
@@ -1554,6 +2089,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1554,6 +2040,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
}
@@ -7897,7 +7895,7 @@ index 57bea926a6..aa625ce2a4 100644
private void a(EntityPlayer entityplayer, Packet<?>[] apacket, Chunk chunk) {
if (apacket[0] == null) {
apacket[0] = new PacketPlayOutMapChunk(chunk, 65535, true); // Paper - Anti-Xray
@@ -1564,6 +2100,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1564,6 +2051,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
PacketDebug.a(this.world, chunk.getPos());
List<Entity> list = Lists.newArrayList();
List<Entity> list1 = Lists.newArrayList();
@@ -7905,7 +7903,7 @@ index 57bea926a6..aa625ce2a4 100644
ObjectIterator objectiterator = this.trackedEntities.values().iterator();
while (objectiterator.hasNext()) {
@@ -1581,6 +2118,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1581,6 +2069,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
}
}
}
@@ -7938,7 +7936,7 @@ index 57bea926a6..aa625ce2a4 100644
Iterator iterator;
Entity entity1;
@@ -1618,7 +2181,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1618,7 +2132,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
public class EntityTracker {
@@ -7947,44 +7945,7 @@ index 57bea926a6..aa625ce2a4 100644
private final Entity tracker;
private final int trackingDistance;
private SectionPosition e;
@@ -1635,6 +2198,36 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
this.e = SectionPosition.a(entity);
}
+ // Tuinity start - optimise entity tracker tracking
+ public void clearAll() {
+ for (EntityPlayer player : this.trackedPlayers) {
+ this.trackerEntry.onUntrack(player);
+ }
+ this.trackedPlayers.clear();
+ }
+
+ void updateTrackingPlayers(PlayerChunkMap chunkMap, com.tuinity.tuinity.util.map.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> fromPlayers) {
+ EntityTrackerEntry entry = this.trackerEntry;
+ for (Iterator<EntityPlayer> iterator = this.trackedPlayers.iterator(); iterator.hasNext();) {
+ EntityPlayer tracker = iterator.next();
+ if (!fromPlayers.contains(tracker)) {
+ // definitely out of range
+ iterator.remove();
+ entry.onUntrack(tracker);
+ }
+ }
+
+ Object[] backingArray = fromPlayers.getBackingSet();
+ for (int i = 0, len = backingArray.length; i < len; ++i) {
+ if (backingArray[i] == null) {
+ continue;
+ }
+ EntityPlayer player = (EntityPlayer)backingArray[i];
+ this.updatePlayer(player);
+ }
+ }
+ // Tuinity end - optimise entity tracker tracking
+
public boolean equals(Object object) {
return object instanceof PlayerChunkMap.EntityTracker ? ((PlayerChunkMap.EntityTracker) object).tracker.getId() == this.tracker.getId() : false;
}
@@ -1684,10 +2277,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1684,10 +2198,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
public void updatePlayer(EntityPlayer entityplayer) {
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
if (entityplayer != this.tracker) {
@@ -8002,7 +7963,7 @@ index 57bea926a6..aa625ce2a4 100644
if (flag) {
boolean flag1 = this.tracker.attachedToPlayer;
@@ -1696,7 +2292,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1696,7 +2213,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair());
if (playerchunk != null && playerchunk.getChunk() != null) {
@@ -8011,7 +7972,7 @@ index 57bea926a6..aa625ce2a4 100644
}
}
@@ -1738,6 +2334,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
@@ -1738,6 +2255,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
return i;
}
@@ -9291,7 +9252,7 @@ index 5117dafbcf..5f69a018d9 100644
if (chunk != null) {
chunk.a(oclass, axisalignedbb, list, predicate);
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index c74b85917a..214b555e73 100644
index c74b85917a..83ccabe710 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -55,7 +55,7 @@ public class WorldServer extends World {
@@ -9299,7 +9260,7 @@ index c74b85917a..214b555e73 100644
private static final Logger LOGGER = LogManager.getLogger();
private final List<Entity> globalEntityList = Lists.newArrayList();
- public final Int2ObjectMap<Entity> entitiesById = new Int2ObjectLinkedOpenHashMap();
+ public final Int2ObjectLinkedOpenHashMap<Entity> entitiesById = new Int2ObjectLinkedOpenHashMap(); // Tuinity - change type for fast iterator
+ public final Int2ObjectMap<Entity> entitiesById = new Int2ObjectLinkedOpenHashMap(); // Tuinity - diff on change, we expect Int2ObjectLinkedOpenHashMap
private final Map<UUID, Entity> entitiesByUUID = Maps.newHashMap();
private final Queue<Entity> entitiesToAdd = Queues.newArrayDeque();
public final List<EntityPlayer> players = Lists.newArrayList(); // Paper - private -> public
@@ -9736,7 +9697,7 @@ index c74b85917a..214b555e73 100644
if (entity.inChunk && this.isChunkLoaded(entity.chunkX, entity.chunkZ)) {
this.getChunkAt(entity.chunkX, entity.chunkZ).a(entity, entity.chunkY);
}
@@ -827,6 +1199,90 @@ public class WorldServer extends World {
@@ -827,6 +1199,83 @@ public class WorldServer extends World {
} else {
this.getChunkAt(i, k).a(entity);
}
@@ -9746,14 +9707,7 @@ index c74b85917a..214b555e73 100644
+ if (entity.valid && (prevChunkX != newChunkX || prevChunkZ != newChunkZ)) {
+ PlayerChunkMap chunkMap = this.getChunkProvider().playerChunkMap;
+ if (chunkMap.playerEntityTrackerTrackMap != null) {
+ if (PlayerChunkMap.isLegacyTrackingEntity(entity)) {
+ if (chunkMap.playerEntityTrackerLegacyMap != null) {
+ if (chunkMap.playerEntityTrackerLegacyMap.getObjectsInRange(newChunkX, newChunkZ) != null) {
+ chunkMap.activelyTrackedEntitiesLegacy.add(entity); // ensure tracked
+ // untracking is handled in tracker tick
+ }
+ }
+ } else {
+ if (!PlayerChunkMap.isLegacyTrackingEntity(entity)) {
+ // handle tracking
+ com.tuinity.tuinity.util.map.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> oldRange =
+ chunkMap.playerEntityTrackerTrackMap.getObjectsInRange(prevChunkX, prevChunkZ);
@@ -9827,7 +9781,7 @@ index c74b85917a..214b555e73 100644
}
this.getMethodProfiler().exit();
@@ -1178,6 +1634,7 @@ public class WorldServer extends World {
@@ -1178,6 +1627,7 @@ public class WorldServer extends World {
this.registerEntity(entityplayer);
this.getChunkProvider().playerChunkMap.addPlayerToDistanceMaps(entityplayer); // Paper - distance maps
@@ -9835,7 +9789,7 @@ index c74b85917a..214b555e73 100644
}
// CraftBukkit start
@@ -1360,6 +1817,7 @@ public class WorldServer extends World {
@@ -1360,6 +1810,7 @@ public class WorldServer extends World {
this.players.remove(entityplayer);
this.getChunkProvider().playerChunkMap.removePlayerFromDistanceMaps(entityplayer); // Paper - distance maps
@@ -9843,7 +9797,7 @@ index c74b85917a..214b555e73 100644
}
this.getScoreboard().a(entity);
@@ -1372,6 +1830,7 @@ public class WorldServer extends World {
@@ -1372,6 +1823,7 @@ public class WorldServer extends World {
if (entity instanceof EntityInsentient) {
this.navigators.remove(((EntityInsentient) entity).getNavigation());
}
@@ -9851,7 +9805,7 @@ index c74b85917a..214b555e73 100644
new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid
entity.valid = false; // CraftBukkit
}
@@ -1428,6 +1887,11 @@ public class WorldServer extends World {
@@ -1428,6 +1880,11 @@ public class WorldServer extends World {
}
// Paper end
entity.shouldBeRemoved = false; // Paper - shouldn't be removed after being re-added

View File

@@ -1,4 +1,4 @@
From ae0dd156cdf32c8f2221f31c81d8c5afa9389050 Mon Sep 17 00:00:00 2001
From c485c84bef3d7371965e13ba58101a79149016c3 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Thu, 6 Feb 2020 19:53:59 -0600
Subject: [PATCH] Ridables
@@ -143,7 +143,7 @@ index a5c4cbb67f..efe6afde9b 100644
public ControllerMove(EntityInsentient entityinsentient) {
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 23e91183ef..d87bfc98e7 100644
index 181f1742ac..8343be49d1 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -78,7 +78,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -182,7 +182,7 @@ index 23e91183ef..d87bfc98e7 100644
private float headHeight;
// CraftBukkit start
public boolean persist = true;
@@ -1337,6 +1337,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1384,6 +1384,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return this.inLava;
}
@@ -190,7 +190,7 @@ index 23e91183ef..d87bfc98e7 100644
public void a(float f, Vec3D vec3d) {
Vec3D vec3d1 = a(vec3d, f, this.yaw);
@@ -2165,7 +2166,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2212,7 +2213,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
} else {
this.passengers.add(entity);
}
@@ -205,7 +205,7 @@ index 23e91183ef..d87bfc98e7 100644
}
return true; // CraftBukkit
}
@@ -2200,6 +2207,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2247,6 +2254,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return false;
}
// Spigot end
@@ -218,7 +218,7 @@ index 23e91183ef..d87bfc98e7 100644
this.passengers.remove(entity);
entity.j = 60;
}
@@ -2586,6 +2599,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2633,6 +2646,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
public void setHeadRotation(float f) {}
@@ -226,7 +226,7 @@ index 23e91183ef..d87bfc98e7 100644
public void l(float f) {}
public boolean bA() {
@@ -3431,4 +3445,43 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -3478,4 +3492,43 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
void accept(Entity entity, double d0, double d1, double d2);
}
@@ -4760,7 +4760,7 @@ index eec1e26b6e..47f0b2df6c 100644
private final EntityWolf j;
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
index 8635d4f40c..e9e2be88e3 100644
index 07ebc1d816..8d1f04415e 100644
--- a/src/main/java/net/minecraft/server/EntityZombie.java
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
@@ -44,11 +44,30 @@ public class EntityZombie extends EntityMonster {

View File

@@ -1,4 +1,4 @@
From 88b381b673aaea1833e1ee600fe714d168aff42d Mon Sep 17 00:00:00 2001
From 3c70f3542a9f6762f720e1a1013b548d810b9fc2 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sat, 4 May 2019 01:10:30 -0500
Subject: [PATCH] Cows eat mushrooms
@@ -11,10 +11,10 @@ Subject: [PATCH] Cows eat mushrooms
4 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index d87bfc98e..3d03e199c 100644
index 8343be49d1..78e0c6a396 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1089,6 +1089,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1136,6 +1136,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return false;
}
@@ -22,7 +22,7 @@ index d87bfc98e..3d03e199c 100644
public void a(SoundEffect soundeffect, float f, float f1) {
if (!this.isSilent()) {
this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), soundeffect, this.getSoundCategory(), f, f1);
@@ -2626,6 +2627,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2673,6 +2674,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
this.invulnerable = flag;
}
@@ -31,7 +31,7 @@ index d87bfc98e..3d03e199c 100644
this.setPositionRotation(entity.locX(), entity.locY(), entity.locZ(), entity.yaw, entity.pitch);
}
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
index 723a9fa1e..f56fd7c01 100644
index 723a9fa1ee..f56fd7c012 100644
--- a/src/main/java/net/minecraft/server/EntityCow.java
+++ b/src/main/java/net/minecraft/server/EntityCow.java
@@ -34,6 +34,7 @@ public class EntityCow extends EntityAnimal {
@@ -124,7 +124,7 @@ index 723a9fa1e..f56fd7c01 100644
public EntityCow createChild(EntityAgeable entityageable) {
return (EntityCow) EntityTypes.COW.a(this.world);
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 17ff8a9fc..6ca11091c 100644
index 17ff8a9fc3..6ca11091c9 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -2812,8 +2812,9 @@ public abstract class EntityLiving extends Entity {
@@ -140,7 +140,7 @@ index 17ff8a9fc..6ca11091c 100644
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 9b60d17bd..661dcce49 100644
index 9b60d17bdf..661dcce493 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -145,10 +145,12 @@ public class PurpurWorldConfig {

View File

@@ -1,4 +1,4 @@
From 170c795de8b12a2cbd865b3b82ac17c5e6757d2c Mon Sep 17 00:00:00 2001
From da13d8898b59821d88c5959b9688877a86f86546 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Thu, 9 May 2019 18:26:06 -0500
Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms
@@ -13,7 +13,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms
6 files changed, 228 insertions(+), 11 deletions(-)
diff --git a/src/main/java/net/minecraft/server/DamageSource.java b/src/main/java/net/minecraft/server/DamageSource.java
index 816d301f1..0971f25b5 100644
index 816d301f1c..0971f25b56 100644
--- a/src/main/java/net/minecraft/server/DamageSource.java
+++ b/src/main/java/net/minecraft/server/DamageSource.java
@@ -81,6 +81,7 @@ public class DamageSource {
@@ -25,10 +25,10 @@ index 816d301f1..0971f25b5 100644
return (new EntityDamageSourceIndirect("indirectMagic", entity, entity1)).setIgnoreArmor().setMagic();
}
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 3d03e199c..43d73385e 100644
index 78e0c6a396..088380a2b0 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1434,6 +1434,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1481,6 +1481,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return d3 * d3 + d4 * d4 + d5 * d5;
}
@@ -36,7 +36,7 @@ index 3d03e199c..43d73385e 100644
public double h(Entity entity) {
return this.c(entity.getPositionVector());
}
@@ -1957,14 +1958,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2004,14 +2005,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
return this.a(new ItemStack(imaterial), (float) i);
}
@@ -55,7 +55,7 @@ index 3d03e199c..43d73385e 100644
return null;
} else if (this.world.isClientSide) {
diff --git a/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/src/main/java/net/minecraft/server/EntityEnderCrystal.java
index a57d0089d..02952c3af 100644
index a57d0089d8..02952c3af8 100644
--- a/src/main/java/net/minecraft/server/EntityEnderCrystal.java
+++ b/src/main/java/net/minecraft/server/EntityEnderCrystal.java
@@ -13,6 +13,12 @@ public class EntityEnderCrystal extends Entity {
@@ -123,7 +123,7 @@ index a57d0089d..02952c3af 100644
@Override
protected void b(NBTTagCompound nbttagcompound) {
diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java
index 6d2984c8d..3b9cd169b 100644
index 6d2984c8d5..3b9cd169bd 100644
--- a/src/main/java/net/minecraft/server/EntityPhantom.java
+++ b/src/main/java/net/minecraft/server/EntityPhantom.java
@@ -8,9 +8,10 @@ import javax.annotation.Nullable;
@@ -352,7 +352,7 @@ index 6d2984c8d..3b9cd169b 100644
return entityliving != null ? EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a) : false;
diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java
index c522a7c2a..9622615b5 100644
index c522a7c2a7..9622615b50 100644
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
+++ b/src/main/java/net/minecraft/server/IEntityAccess.java
@@ -34,6 +34,7 @@ public interface IEntityAccess {
@@ -364,7 +364,7 @@ index c522a7c2a..9622615b5 100644
return this.a(oclass, axisalignedbb, IEntitySelector.f);
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 5bb1b90b3..076e747c5 100644
index 5bb1b90b31..076e747c5b 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -392,6 +392,9 @@ public class PurpurWorldConfig {

View File

@@ -1,4 +1,4 @@
From 930e24e2321f18937f9b6fe97d2bfec91a26bc96 Mon Sep 17 00:00:00 2001
From 9ed0c92f2ae19c2986670fac21c59dbee8e72d57 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sat, 29 Jun 2019 02:32:40 -0500
Subject: [PATCH] Controllable Minecarts
@@ -11,10 +11,10 @@ Subject: [PATCH] Controllable Minecarts
4 files changed, 76 insertions(+), 3 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 43d73385e..4333ca032 100644
index 088380a2b0..ca6ff6380f 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1334,6 +1334,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1381,6 +1381,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
this.inLava = true;
}
@@ -23,7 +23,7 @@ index 43d73385e..4333ca032 100644
return this.inLava;
}
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
index 665bbe07f..1f3e5bd28 100644
index 665bbe07fa..1f3e5bd288 100644
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
@@ -357,12 +357,50 @@ public abstract class EntityMinecartAbstract extends Entity {
@@ -78,7 +78,7 @@ index 665bbe07f..1f3e5bd28 100644
this.setMot(new Vec3D(this.getMot().x * this.derailedX, this.getMot().y * this.derailedY, this.getMot().z * this.derailedZ));
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java
index b73e317fb..e1337a9c0 100644
index b73e317fbb..e1337a9c04 100644
--- a/src/main/java/net/minecraft/server/ItemMinecart.java
+++ b/src/main/java/net/minecraft/server/ItemMinecart.java
@@ -103,8 +103,10 @@ public class ItemMinecart extends Item {
@@ -103,7 +103,7 @@ index b73e317fb..e1337a9c0 100644
}
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 85eaf1a7a..dfa631803 100644
index 85eaf1a7aa..dfa6318039 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -1,10 +1,16 @@

View File

@@ -1,4 +1,4 @@
From e3cc214fd4a87ff6ad0d69f3e6a34ac6bcdec07b Mon Sep 17 00:00:00 2001
From 07539f4ce3643cee95496fedb20ed575f77402f3 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sat, 11 Jan 2020 23:12:52 -0600
Subject: [PATCH] Add EntityPortalReadyEvent
@@ -11,7 +11,7 @@ Subject: [PATCH] Add EntityPortalReadyEvent
4 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java
index 09c7c1318..6880cdd7f 100644
index 09c7c13183..6880cdd7f9 100644
--- a/src/main/java/net/minecraft/server/BlockPortal.java
+++ b/src/main/java/net/minecraft/server/BlockPortal.java
@@ -54,6 +54,7 @@ public class BlockPortal extends Block {
@@ -86,7 +86,7 @@ index 09c7c1318..6880cdd7f 100644
break;
// CraftBukkit start - add the block to our list
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 4333ca032..0c0af2dd3 100644
index ca6ff6380f..3c640ec8b3 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -168,9 +168,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -102,7 +102,7 @@ index 4333ca032..0c0af2dd3 100644
private boolean invulnerable;
protected UUID uniqueID;
protected String am;
@@ -2267,6 +2267,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -2314,6 +2314,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
this.world.getMethodProfiler().enter("portal");
this.ag = i;
this.portalCooldown = this.ba();
@@ -111,7 +111,7 @@ index 4333ca032..0c0af2dd3 100644
if (this instanceof EntityPlayer) {
((EntityPlayer) this).a(this.world.worldProvider.getDimensionManager().getType() == DimensionManager.NETHER ? DimensionManager.OVERWORLD : DimensionManager.NETHER, PlayerTeleportEvent.TeleportCause.NETHER_PORTAL);
diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java
index f84dd6d9b..f50e9670b 100644
index f84dd6d9be..f50e9670bc 100644
--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java
+++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java
@@ -11,6 +11,7 @@ public class PortalTravelAgent {
@@ -141,7 +141,7 @@ index f84dd6d9b..f50e9670b 100644
}
}
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 37b5a1193..2b4f2fbae 100644
index 22a1c4ebfa..c4086ace1f 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -65,7 +65,7 @@ public class WorldServer extends World {

View File

@@ -1,4 +1,4 @@
From 0b1c3f64cab2b1d30e0413e92d74ab61fde82074 Mon Sep 17 00:00:00 2001
From 1256a5fca2b7926b4d8feb3368906f0cf4bdd94d Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sun, 21 Jul 2019 18:06:20 -0500
Subject: [PATCH] Ladders should not bypass cramming gamerule
@@ -17,10 +17,10 @@ Subject: [PATCH] Ladders should not bypass cramming gamerule
10 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 0c0af2dd3..147e30aa2 100644
index 3c640ec8b3..945e2c0e47 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1561,6 +1561,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1608,6 +1608,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
}
public boolean isCollidable() {
@@ -34,7 +34,7 @@ index 0c0af2dd3..147e30aa2 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
index 8ad131e4f..dfe8c57ce 100644
index 8ad131e4fc..dfe8c57cef 100644
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
@@ -318,7 +318,7 @@ public class EntityArmorStand extends EntityLiving {
@@ -47,7 +47,7 @@ index 8ad131e4f..dfe8c57ce 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java
index dfc2ce972..440c21355 100644
index dfc2ce9729..440c21355c 100644
--- a/src/main/java/net/minecraft/server/EntityBat.java
+++ b/src/main/java/net/minecraft/server/EntityBat.java
@@ -85,7 +85,7 @@ public class EntityBat extends EntityAmbient {
@@ -60,7 +60,7 @@ index dfc2ce972..440c21355 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
index fdf306e80..563fc8ced 100644
index fdf306e80a..563fc8ced0 100644
--- a/src/main/java/net/minecraft/server/EntityBoat.java
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
@@ -98,7 +98,7 @@ public class EntityBoat extends Entity {
@@ -73,7 +73,7 @@ index fdf306e80..563fc8ced 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
index e7ba83f32..55e18e4c7 100644
index e7ba83f32a..55e18e4c7a 100644
--- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java
+++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
@@ -188,7 +188,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
@@ -86,7 +86,7 @@ index e7ba83f32..55e18e4c7 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index d64e02628..cd4526039 100644
index d64e026288..cd45260396 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -2673,7 +2673,7 @@ public abstract class EntityLiving extends Entity {
@@ -112,7 +112,7 @@ index d64e02628..cd4526039 100644
@Override
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
index 1f3e5bd28..ae4758f25 100644
index 1f3e5bd288..ae4758f251 100644
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
@@ -105,7 +105,7 @@ public abstract class EntityMinecartAbstract extends Entity {
@@ -125,7 +125,7 @@ index 1f3e5bd28..ae4758f25 100644
}
diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java
index 7ba2f3a35..dd2cd7b21 100644
index 7ba2f3a351..dd2cd7b219 100644
--- a/src/main/java/net/minecraft/server/EntityParrot.java
+++ b/src/main/java/net/minecraft/server/EntityParrot.java
@@ -392,7 +392,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird {
@@ -138,7 +138,7 @@ index 7ba2f3a35..dd2cd7b21 100644
}
diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java
index 4665671ef..037f14e01 100644
index 4665671ef6..037f14e010 100644
--- a/src/main/java/net/minecraft/server/IEntitySelector.java
+++ b/src/main/java/net/minecraft/server/IEntitySelector.java
@@ -36,6 +36,12 @@ public final class IEntitySelector {
@@ -155,7 +155,7 @@ index 4665671ef..037f14e01 100644
ScoreboardTeamBase.EnumTeamPush scoreboardteambase_enumteampush = scoreboardteambase == null ? ScoreboardTeamBase.EnumTeamPush.ALWAYS : scoreboardteambase.getCollisionRule();
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 814ff5935..9319c3b74 100644
index 814ff59352..9319c3b74b 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -145,6 +145,7 @@ public class PurpurWorldConfig {

View File

@@ -1,4 +1,4 @@
From 09525d14594e288727a544da2e67dd9279261e96 Mon Sep 17 00:00:00 2001
From 7842d3b75036b9fb2a925a65872e9eca80ec142b Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sat, 22 Feb 2020 15:54:08 -0600
Subject: [PATCH] Add item entity options
@@ -10,10 +10,10 @@ Subject: [PATCH] Add item entity options
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 147e30aa2f..0d509e8410 100644
index 945e2c0e47..ff42ee6eb6 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1309,6 +1309,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1356,6 +1356,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
}

View File

@@ -1,4 +1,4 @@
From aaac1acff680d1926eff0a74d6ec4c476c542a00 Mon Sep 17 00:00:00 2001
From a3bbecb7563589578a72b322928e547f5a7d3743 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Thu, 27 Feb 2020 21:42:19 -0600
Subject: [PATCH] Configurable void damage height
@@ -9,10 +9,10 @@ Subject: [PATCH] Configurable void damage height
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 0d509e8410..c85e794940 100644
index ff42ee6eb6..a38a29e3d6 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -503,7 +503,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -550,7 +550,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
// Paper start
protected void performVoidDamage() {

View File

@@ -1,4 +1,4 @@
From a261c8fdf00902ccd72fb9032cf0bb431977588d Mon Sep 17 00:00:00 2001
From d50854467c74f3cd32f59b4d793c1e1e12f1aa02 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Fri, 6 Mar 2020 13:37:26 -0600
Subject: [PATCH] Fix the dead lagging the server
@@ -9,10 +9,10 @@ Subject: [PATCH] Fix the dead lagging the server
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index c85e794940..7cc0354d57 100644
index a38a29e3d6..6805ad2cde 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1395,7 +1395,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1442,7 +1442,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
this.pitch = MathHelper.a(f1, -90.0F, 90.0F) % 360.0F;
this.lastYaw = this.yaw;
this.lastPitch = this.pitch;