geforkt von Mirrors/Paper
#644: Fix ChunkMapDistance#removeAllTicketsFor not propagating ticket level updates
Now call the method used in removeTicket for propagating the change, so that chunks are guaranteed to unload
Dieser Commit ist enthalten in:
Ursprung
a6f809378c
Commit
796eb15a5b
@ -110,7 +110,7 @@
|
||||
}
|
||||
|
||||
public <T> void addTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
|
||||
@@ -251,6 +281,21 @@
|
||||
@@ -251,6 +281,26 @@
|
||||
return this.i.a();
|
||||
}
|
||||
|
||||
@ -118,21 +118,26 @@
|
||||
+ public <T> void removeAllTicketsFor(TicketType<T> ticketType, int ticketLevel, T ticketIdentifier) {
|
||||
+ Ticket<T> target = new Ticket<>(ticketType, ticketLevel, ticketIdentifier);
|
||||
+
|
||||
+ for (java.util.Iterator<ArraySetSorted<Ticket<?>>> iterator = this.tickets.values().iterator(); iterator.hasNext();) {
|
||||
+ ArraySetSorted<Ticket<?>> tickets = iterator.next();
|
||||
+ tickets.remove(target);
|
||||
+ for (java.util.Iterator<Entry<ArraySetSorted<Ticket<?>>>> iterator = this.tickets.long2ObjectEntrySet().fastIterator(); iterator.hasNext();) {
|
||||
+ Entry<ArraySetSorted<Ticket<?>>> entry = iterator.next();
|
||||
+ ArraySetSorted<Ticket<?>> tickets = entry.getValue();
|
||||
+ if (tickets.remove(target)) {
|
||||
+ // copied from removeTicket
|
||||
+ this.e.b(entry.getLongKey(), a(tickets), false); // PAIL ticketLevelTracker // PAIL update // PAIL getLowestTicketLevel
|
||||
+
|
||||
+ // can't use entry after it's removed
|
||||
+ if (tickets.isEmpty()) {
|
||||
+ iterator.remove();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
+
|
||||
class a extends ChunkMap {
|
||||
|
||||
public a() {
|
||||
@@ -331,13 +376,13 @@
|
||||
@@ -331,13 +381,13 @@
|
||||
Ticket<?> ticket = new Ticket<>(TicketType.PLAYER, ChunkMapDistance.b, new ChunkCoordIntPair(i));
|
||||
|
||||
if (flag1) {
|
||||
@ -148,7 +153,7 @@
|
||||
}, i, false));
|
||||
}
|
||||
|
||||
@@ -346,7 +391,7 @@
|
||||
@@ -346,7 +396,7 @@
|
||||
return j;
|
||||
}));
|
||||
} else {
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren