Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ mcVersion=26.2
apiVersion=26.2
version=26.2

purpurRef=fc3c961cdbea92b1205f2f175b89dcd9b4ab0be2
purpurRef=ed29e9980557c6f252ccbfbc50dced007b6c05f7

org.gradle.configuration-cache=true
org.gradle.caching=true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler().chunkHolderManager.autoSave(); // Paper - rewrite chunk system
}

@@ -702,7 +_,7 @@
@@ -703,7 +_,7 @@
}

// Paper start - optimise chunk tick iteration
Expand All @@ -88,15 +88,15 @@
final ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkData chunkData = ((ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkSystemLevelChunk)levelChunk).moonrise$getChunkHolder().holderData;
final ca.spottedleaf.moonrise.common.misc.NearbyPlayers.TrackedChunk nearbyPlayers = chunkData.nearbyPlayers;
if (nearbyPlayers == null) {
@@ -722,6 +_,7 @@
@@ -723,6 +_,7 @@

Objects.checkFromIndexSize(0, len, raw.length);
for (int i = 0; i < len; ++i) {
+ try { // ShreddedPaper - concurrent modification
// Paper start - PlayerNaturallySpawnCreaturesEvent
com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event = raw[i].playerNaturallySpawnedEvent;
if (event == null || event.isCancelled()) {
@@ -732,31 +_,34 @@
@@ -733,31 +_,34 @@
// Paper end - PlayerNaturallySpawnCreaturesEvent
return true;
}
Expand Down Expand Up @@ -150,7 +150,7 @@

public void forEachBlockTickingChunk(final Consumer<LevelChunk> tickingChunkConsumer) {
this.distanceManager.forEachEntityTickingChunk(chunkPos -> {
@@ -814,7 +_,9 @@
@@ -815,7 +_,9 @@

Objects.checkFromIndexSize(0, len, raw.length);
for (int i = 0; i < len; ++i) {
Expand All @@ -160,15 +160,15 @@
// Paper start - PlayerNaturallySpawnCreaturesEvent
com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event;
blockRange = 16384.0;
@@ -827,6 +_,7 @@
@@ -828,6 +_,7 @@
// Paper end - PlayerNaturallySpawnCreaturesEvent
return true;
}
+ } catch (IndexOutOfBoundsException ignored) {} // ShreddedPaper - concurrent modification
}

return false;
@@ -849,7 +_,9 @@
@@ -850,7 +_,9 @@

Objects.checkFromIndexSize(0, len, raw.length);
for (int i = 0; i < len; ++i) {
Expand All @@ -178,15 +178,15 @@
if (this.playerIsCloseEnoughForSpawning(player, pos, 16384.0D)) { // Spigot
if (ret == null) {
ret = new ArrayList<>(len - i);
@@ -858,6 +_,7 @@
@@ -859,6 +_,7 @@
ret.add(player);
}
}
+ } catch (IndexOutOfBoundsException ignored) {} // ShreddedPaper - concurrent modification
}

return ret == null ? new ArrayList<>() : ret;
@@ -983,9 +_,9 @@
@@ -984,9 +_,9 @@
protected void addEntity(final Entity entity) {
org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot
// Paper start - ignore and warn about illegal addEntity calls instead of crashing server
Expand All @@ -198,7 +198,7 @@
return;
}
// Paper end - ignore and warn about illegal addEntity calls instead of crashing server
@@ -996,12 +_,13 @@
@@ -997,12 +_,13 @@
range = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, range); // Spigot
if (range != 0) {
int updateInterval = type.updateInterval();
Expand All @@ -214,7 +214,7 @@
// Paper start - optimise entity tracker
if (((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity)entity).moonrise$getTrackedEntity() != null) {
throw new IllegalStateException("Entity is already tracked");
@@ -1011,8 +_,9 @@
@@ -1012,8 +_,9 @@
trackedEntity.updatePlayers(this.level.players());
if (entity instanceof ServerPlayer player) {
this.updatePlayerStatus(player, true);
Expand All @@ -225,7 +225,7 @@
if (e.entity != player) {
e.updatePlayer(player);
}
@@ -1027,13 +_,14 @@
@@ -1028,13 +_,14 @@
if (entity instanceof ServerPlayer player) {
this.updatePlayerStatus(player, false);

Expand All @@ -242,7 +242,7 @@
trackedEntity.broadcastRemoved();
}
((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity)entity).moonrise$setTrackedEntity(null); // Paper - optimise entity tracker
@@ -1041,22 +_,25 @@
@@ -1042,22 +_,25 @@

// Paper start - optimise entity tracker
private void newTrackerTick() {
Expand Down Expand Up @@ -282,7 +282,7 @@
}
// Paper end - optimise entity tracker

@@ -1072,7 +_,7 @@
@@ -1073,7 +_,7 @@
List<ServerPlayer> movedPlayers = Lists.newArrayList();
List<ServerPlayer> players = this.level.players();

Expand All @@ -291,7 +291,7 @@
SectionPos oldPos = trackedEntity.lastSectionPos;
SectionPos newPos = SectionPos.of(trackedEntity.entity);
boolean sectionPosChanged = !Objects.equals(oldPos, newPos);
@@ -1091,14 +_,14 @@
@@ -1092,14 +_,14 @@
}

if (!movedPlayers.isEmpty()) {
Expand All @@ -308,7 +308,7 @@
if (trackedEntity != null) {
trackedEntity.sendToTrackingPlayers(packet);
}
@@ -1107,26 +_,26 @@
@@ -1108,26 +_,26 @@
public void sendToTrackingPlayersFiltered(
final Entity entity, final Packet<? super ClientGamePacketListener> packet, final Predicate<ServerPlayer> targetPredicate
) {
Expand Down Expand Up @@ -339,15 +339,15 @@
if (entity.seenBy.contains(player.connection)) {
consumer.accept(entity.entity);
}
@@ -1212,6 +_,7 @@
@@ -1213,6 +_,7 @@
private final int range;
private SectionPos lastSectionPos;
public final Set<ServerPlayerConnection> seenBy = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); // Paper - Perf: optimise map impl
+ public final ReentrantLock seenByLock = new ReentrantLock(); // ShreddedPaper - seenBy thread safety

// Paper start - optimise entity tracker
private long lastChunkUpdate = -1L;
@@ -1237,21 +_,33 @@
@@ -1238,21 +_,33 @@
this.lastChunkUpdate = currChunkUpdate;
this.lastTrackedChunk = chunk;

Expand Down Expand Up @@ -382,7 +382,7 @@
}
}

@@ -1302,6 +_,91 @@
@@ -1303,6 +_,91 @@
this.range = range;
this.lastSectionPos = SectionPos.of(entity);
}
Expand Down Expand Up @@ -474,7 +474,7 @@

@Override
public boolean equals(final Object obj) {
@@ -1315,9 +_,13 @@
@@ -1316,9 +_,13 @@

@Override
public void sendToTrackingPlayers(final Packet<? super ClientGamePacketListener> packet) {
Expand All @@ -488,7 +488,7 @@
}

@Override
@@ -1330,27 +_,33 @@
@@ -1331,27 +_,33 @@

@Override
public void sendToTrackingPlayersFiltered(final Packet<? super ClientGamePacketListener> packet, final Predicate<ServerPlayer> targetPredicate) {
Expand Down Expand Up @@ -522,15 +522,15 @@
}

public void updatePlayer(final ServerPlayer player) {
@@ -1384,6 +_,7 @@
@@ -1385,6 +_,7 @@
}
// CraftBukkit end
if (visibleToPlayer) {
+ this.seenByLock.lock(); try { // ShreddedPaper - seenBy thread safety
if (this.seenBy.add(player.connection)) {
// Paper start - entity tracking events
if (io.papermc.paper.event.player.PlayerTrackEntityEvent.getHandlerList().getRegisteredListeners().length == 0 || new io.papermc.paper.event.player.PlayerTrackEntityEvent(player.getBukkitEntity(), this.entity.getBukkitEntity()).callEvent()) {
@@ -1397,6 +_,7 @@
@@ -1398,6 +_,7 @@
// Paper end - entity tracking events
this.serverEntity.onPlayerAdd(); // Paper - fix desync when a player is added to the tracker
}
Expand Down
Loading