Tweak equipmentPacketCache
- Key by hashCode Integer, rather than full ItemStack which should save a notable amount of memory. - Also switch cache to expireAfterAccess. These things shouldn't ever change when largely used, so to expire them 15m after first write almost guarantees they'll just be re-cached the same, again
This commit is contained in:
@@ -59,7 +59,7 @@ index e3e0f306ebed31ce4742e7d2f15ab102b93a9dff..4f4ea6dcef4e1960ac69271fbd771dd3
|
|||||||
|
|
||||||
if (!this.entity.getPassengers().isEmpty()) {
|
if (!this.entity.getPassengers().isEmpty()) {
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||||
index e9bb7feb591032904516d1b9374f486d8a7d066c..86e173f1d916ca5545d012e4c86919f402253f1c 100644
|
index e9bb7feb591032904516d1b9374f486d8a7d066c..0a33397271c053f20cd49be452993e24815b07db 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||||
@@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
|
@@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
|
||||||
@@ -75,7 +75,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..86e173f1d916ca5545d012e4c86919f4
|
|||||||
public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API
|
public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API
|
||||||
|
|
||||||
+ // Slice start
|
+ // Slice start
|
||||||
+ private static final java.util.Map<String, com.google.common.cache.Cache<ItemStack, ItemStack>> equipmentPacketCache = new java.util.HashMap<>();
|
+ private static final java.util.Map<String, com.google.common.cache.Cache<Integer, ItemStack>> equipmentPacketCache = new java.util.HashMap<>();
|
||||||
+ protected final java.util.Map<String, net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket> cachedEquipmentPacket = new java.util.HashMap<>();
|
+ protected final java.util.Map<String, net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket> cachedEquipmentPacket = new java.util.HashMap<>();
|
||||||
+ // Slice end
|
+ // Slice end
|
||||||
+
|
+
|
||||||
@@ -124,9 +124,9 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..86e173f1d916ca5545d012e4c86919f4
|
|||||||
+
|
+
|
||||||
+ // Slice start
|
+ // Slice start
|
||||||
+ public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) {
|
+ public ItemStack getOrCreateCachedEquipmentItem(String tag, EquipmentSlot slot, ItemStack itemStack) {
|
||||||
+ return equipmentPacketCache.computeIfAbsent(tag, s -> com.google.common.cache.CacheBuilder.newBuilder().expireAfterWrite(15, java.util.concurrent.TimeUnit.MINUTES).build())
|
+ return equipmentPacketCache.computeIfAbsent(tag, s -> com.google.common.cache.CacheBuilder.newBuilder().expireAfterAccess(10, java.util.concurrent.TimeUnit.MINUTES).build())
|
||||||
+ .asMap()
|
+ .asMap()
|
||||||
+ .computeIfAbsent(itemStack, i -> {
|
+ .computeIfAbsent(itemStack.hashCode(), i -> {
|
||||||
+ String name = slot.name();
|
+ String name = slot.name();
|
||||||
+
|
+
|
||||||
+ //How neat is this.
|
+ //How neat is this.
|
||||||
@@ -136,7 +136,7 @@ index e9bb7feb591032904516d1b9374f486d8a7d066c..86e173f1d916ca5545d012e4c86919f4
|
|||||||
+ name = "OFF_HAND";
|
+ name = "OFF_HAND";
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ org.bukkit.event.entity.EntityEquipmentItemLookup event = new org.bukkit.event.entity.EntityEquipmentItemLookup(getBukkitEntity(), tag, org.bukkit.inventory.EquipmentSlot.valueOf(name), CraftItemStack.asBukkitCopy(i));
|
+ org.bukkit.event.entity.EntityEquipmentItemLookup event = new org.bukkit.event.entity.EntityEquipmentItemLookup(getBukkitEntity(), tag, org.bukkit.inventory.EquipmentSlot.valueOf(name), CraftItemStack.asBukkitCopy(itemStack));
|
||||||
+ this.level().getCraftServer().getPluginManager().callEvent(event);
|
+ this.level().getCraftServer().getPluginManager().callEvent(event);
|
||||||
+ org.bukkit.inventory.ItemStack eventItem = event.getItemStack();
|
+ org.bukkit.inventory.ItemStack eventItem = event.getItemStack();
|
||||||
+ return CraftItemStack.asNMSCopy(eventItem);
|
+ return CraftItemStack.asNMSCopy(eventItem);
|
||||||
|
|||||||
Reference in New Issue
Block a user