Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-15 12:30:06 +01:00
SPIGOT-4467: Improve ExpiringMap
Dieser Commit ist enthalten in:
Ursprung
f0398e444e
Commit
e693496c17
61
nms-patches/ExpiringMap.patch
Normale Datei
61
nms-patches/ExpiringMap.patch
Normale Datei
@ -0,0 +1,61 @@
|
|||||||
|
--- a/net/minecraft/server/ExpiringMap.java
|
||||||
|
+++ b/net/minecraft/server/ExpiringMap.java
|
||||||
|
@@ -4,8 +4,10 @@
|
||||||
|
import it.unimi.dsi.fastutil.longs.Long2LongMap;
|
||||||
|
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||||
|
import it.unimi.dsi.fastutil.longs.Long2LongMap.Entry;
|
||||||
|
+import it.unimi.dsi.fastutil.objects.ObjectCollection;
|
||||||
|
import it.unimi.dsi.fastutil.objects.ObjectIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
+import java.util.function.LongFunction;
|
||||||
|
|
||||||
|
public class ExpiringMap<T> extends Long2ObjectOpenHashMap<T> {
|
||||||
|
|
||||||
|
@@ -21,11 +23,17 @@
|
||||||
|
long j = SystemUtils.b();
|
||||||
|
|
||||||
|
this.b.put(i, j);
|
||||||
|
- ObjectIterator objectiterator = this.b.long2LongEntrySet().iterator();
|
||||||
|
+ cleanup();
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void cleanup() {
|
||||||
|
+ long j = SystemUtils.b();
|
||||||
|
+ ObjectIterator<Long2LongMap.Entry> objectiterator = this.b.long2LongEntrySet().iterator(); // CraftBukkit - decompile error
|
||||||
|
|
||||||
|
while (objectiterator.hasNext()) {
|
||||||
|
- Entry entry = (Entry) objectiterator.next();
|
||||||
|
- Object object = super.get(entry.getLongKey());
|
||||||
|
+ Long2LongMap.Entry entry = (Long2LongMap.Entry) objectiterator.next(); // CraftBukkit - decompile error
|
||||||
|
+ T object = super.get(entry.getLongKey()); // CraftBukkit - decompile error
|
||||||
|
|
||||||
|
if (j - entry.getLongValue() <= (long) this.a) {
|
||||||
|
break;
|
||||||
|
@@ -36,6 +44,7 @@
|
||||||
|
objectiterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ // CraftBukkit end
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -69,4 +78,18 @@
|
||||||
|
public T remove(Object object) {
|
||||||
|
throw new RuntimeException("Not implemented");
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ @Override
|
||||||
|
+ public T computeIfAbsent(long l, LongFunction<? extends T> lf) {
|
||||||
|
+ this.b.put(l, SystemUtils.b());
|
||||||
|
+ return super.computeIfAbsent(l, lf);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public ObjectCollection<T> values() {
|
||||||
|
+ cleanup();
|
||||||
|
+ return super.values();
|
||||||
|
+ }
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren