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
This commit is contained in:
Nassim Jahnke
2024-12-16 09:56:45 +01:00
parent e6559c5533
commit a15bb2bbd0
2 changed files with 12 additions and 22 deletions

View File

@@ -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