--- 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 extends Long2ObjectOpenHashMap { @@ -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 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 lf) { + this.b.put(l, SystemUtils.b()); + return super.computeIfAbsent(l, lf); + } + + @Override + public ObjectCollection values() { + cleanup(); + return super.values(); + } + // CraftBukkit end }