Commits

md_5 authored af4d848ffd5
SPIGOT-6934: Bring plugin chunk tickets back in line with forceload tickets
No tags

nms-patches/net/minecraft/server/level/ChunkMapDistance.patch

Modified
49 49 + boolean removeTicket(long i, Ticket<?> ticket) { // CraftBukkit - void -> boolean
50 50 ArraySetSorted<Ticket<?>> arraysetsorted = this.getTickets(i);
51 51
52 52 + boolean removed = false; // CraftBukkit
53 53 if (arraysetsorted.remove(ticket)) {
54 54 - ;
55 55 + removed = true; // CraftBukkit
56 56 }
57 57
58 58 if (arraysetsorted.isEmpty()) {
59 -@@ -188,16 +205,29 @@
59 +@@ -188,6 +205,7 @@
60 60 }
61 61
62 62 this.ticketTracker.update(i, getTicketLevelAt(arraysetsorted), false);
63 63 + return removed; // CraftBukkit
64 64 }
65 65
66 66 public <T> void addTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
67 -- this.addTicket(chunkcoordintpair.toLong(), new Ticket<>(tickettype, i, t0));
67 +@@ -201,19 +219,33 @@
68 + }
69 +
70 + public <T> void addRegionTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
68 71 + // CraftBukkit start
69 -+ this.addTicketAtLevel(tickettype, chunkcoordintpair, i, t0);
72 ++ addRegionTicketAtDistance(tickettype, chunkcoordintpair, i, t0);
70 73 + }
71 74 +
72 -+ public <T> boolean addTicketAtLevel(TicketType<T> ticketType, ChunkCoordIntPair chunkcoordintpair, int level, T identifier) {
73 -+ return this.addTicket(chunkcoordintpair.toLong(), new Ticket<>(ticketType, level, identifier));
75 ++ public <T> boolean addRegionTicketAtDistance(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
74 76 + // CraftBukkit end
77 + Ticket<T> ticket = new Ticket<>(tickettype, 33 - i, t0);
78 + long j = chunkcoordintpair.toLong();
79 +
80 +- this.addTicket(j, ticket);
81 ++ boolean added = this.addTicket(j, ticket); // CraftBukkit
82 + this.tickingTicketsTracker.addTicket(j, ticket);
83 ++ return added; // CraftBukkit
75 84 }
76 85
77 - public <T> void removeTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
78 -- Ticket<T> ticket = new Ticket<>(tickettype, i, t0);
86 + public <T> void removeRegionTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
79 87 + // CraftBukkit start
80 -+ this.removeTicketAtLevel(tickettype, chunkcoordintpair, i, t0);
88 ++ removeRegionTicketAtDistance(tickettype, chunkcoordintpair, i, t0);
81 89 + }
82 -
83 -- this.removeTicket(chunkcoordintpair.toLong(), ticket);
84 -+ public <T> boolean removeTicketAtLevel(TicketType<T> ticketType, ChunkCoordIntPair chunkcoordintpair, int level, T identifier) {
85 -+ Ticket<T> ticket = new Ticket<>(ticketType, level, identifier);
86 90 +
87 -+ return this.removeTicket(chunkcoordintpair.toLong(), ticket);
91 ++ public <T> boolean removeRegionTicketAtDistance(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
88 92 + // CraftBukkit end
93 + Ticket<T> ticket = new Ticket<>(tickettype, 33 - i, t0);
94 + long j = chunkcoordintpair.toLong();
95 +
96 +- this.removeTicket(j, ticket);
97 ++ boolean removed = this.removeTicket(j, ticket); // CraftBukkit
98 + this.tickingTicketsTracker.removeTicket(j, ticket);
99 ++ return removed; // CraftBukkit
89 100 }
90 101
91 - public <T> void addRegionTicket(TicketType<T> tickettype, ChunkCoordIntPair chunkcoordintpair, int i, T t0) {
92 -@@ -252,6 +282,7 @@
102 + private ArraySetSorted<Ticket<?>> getTickets(long i) {
103 +@@ -252,6 +284,7 @@
93 104 ChunkCoordIntPair chunkcoordintpair = sectionposition.chunk();
94 105 long i = chunkcoordintpair.toLong();
95 106 ObjectSet<EntityPlayer> objectset = (ObjectSet) this.playersPerChunk.get(i);
96 107 + if (objectset == null) return; // CraftBukkit - SPIGOT-6208
97 108
98 109 objectset.remove(entityplayer);
99 110 if (objectset.isEmpty()) {
100 -@@ -347,6 +378,26 @@
111 +@@ -347,6 +380,26 @@
101 112 return this.tickingTicketsTracker;
102 113 }
103 114
104 115 + // CraftBukkit start
105 116 + public <T> void removeAllTicketsFor(TicketType<T> ticketType, int ticketLevel, T ticketIdentifier) {
106 117 + Ticket<T> target = new Ticket<>(ticketType, ticketLevel, ticketIdentifier);
107 118 +
108 119 + for (java.util.Iterator<Entry<ArraySetSorted<Ticket<?>>>> iterator = this.tickets.long2ObjectEntrySet().fastIterator(); iterator.hasNext();) {
109 120 + Entry<ArraySetSorted<Ticket<?>>> entry = iterator.next();
110 121 + ArraySetSorted<Ticket<?>> tickets = entry.getValue();

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut