13
0
geforkt von Mirrors/Paper

Fix and clean up MapItemSavedData Spigot patch

It's been dysfunctional for a good while, though I don't think it's even needed. That can be investigated later
Dieser Commit ist enthalten in:
Nassim Jahnke 2024-12-16 09:56:45 +01:00
Ursprung e6559c5533
Commit a15bb2bbd0
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: EF6771C01F6EF02F
2 geänderte Dateien mit 12 neuen und 22 gelöschten Zeilen

Datei anzeigen

@ -1097,7 +1097,7 @@
String string = "onTrackingStart called during navigation iteration";
Util.logAndPauseIfInIde(
"onTrackingStart called during navigation iteration", new IllegalStateException("onTrackingStart called during navigation iteration")
@@ -1757,10 +_,61 @@
@@ -1757,10 +_,51 @@
}
entity.updateDynamicGameEventListener(DynamicGameEventListener::add);
@ -1120,28 +1120,18 @@
public void onTrackingEnd(Entity entity) {
+ org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot
+ // Spigot start
+ if ( entity instanceof Player )
+ {
+ com.google.common.collect.Streams.stream( ServerLevel.this.getServer().getAllLevels() ).map( ServerLevel::getDataStorage ).forEach( (worldData) ->
+ {
+ for (Object o : worldData.cache.values() )
+ {
+ if ( o instanceof MapItemSavedData )
+ {
+ MapItemSavedData map = (MapItemSavedData) o;
+ map.carriedByPlayers.remove( (Player) entity );
+ for (
+ java.util.Iterator<net.minecraft.world.level.saveddata.maps.MapItemSavedData.HoldingPlayer> iter = map.carriedBy.iterator();
+ iter.hasNext();
+ ) {
+ if ( iter.next().player == entity )
+ {
+ iter.remove();
+ }
+ }
+ // TODO I don't think this is needed anymore
+ if (entity instanceof Player player) {
+ for (final ServerLevel level : ServerLevel.this.getServer().getAllLevels()) {
+ for (final Optional<net.minecraft.world.level.saveddata.SavedData> savedData : level.getDataStorage().cache.values()) {
+ if (savedData.isEmpty() || !(savedData.get() instanceof MapItemSavedData map)) {
+ continue;
+ }
+
+ map.carriedByPlayers.remove(player);
+ map.carriedBy.removeIf(holdingPlayer -> holdingPlayer.player == player);
+ }
+ } );
+ }
+ }
+ // Spigot end
+ // Spigot Start

Datei anzeigen

@ -857,7 +857,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@Override
public void setPortalCooldown(int cooldown) {
this.getHandle().setPortalCooldown(cooldown);;
this.getHandle().setPortalCooldown(cooldown);
}
@Override