From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Tue, 17 Sep 2024 02:35:13 -0400 Subject: [PATCH] Replace Entity active effects map with optimized collection Dreeam TODO: check this diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java index 1d60ff59942680e9993d875505db0dfb8d7a5f96..6f5b160cae3a0f95f15a38d65a9f0515c00f87ba 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -208,6 +208,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin private static final Dynamic EMPTY_BRAIN = new Dynamic<>(JavaOps.INSTANCE, Map.of("memories", Map.of())); private final AttributeMap attributes; public CombatTracker combatTracker = new CombatTracker(this); + // Need to figure out the difference of mem access pattern between hash map and obj2obj hash map (separate chaining vs open addressing) + // Benchmark is needed for get calls for this active effects map. + // Also need to check whether call from out of main using bukkit api + //public final Map, MobEffectInstance> activeEffects = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(0); // Leaf - Replace Entity active effects map with optimized collection public final Map, MobEffectInstance> activeEffects = Maps.newHashMap(); private final Map lastEquipmentItems = Util.makeEnumMap(EquipmentSlot.class, slot -> ItemStack.EMPTY); public boolean swinging; @@ -1015,15 +1019,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin private void updateSynchronizedMobEffectParticles() { // Leaf start - Remove stream in entity visible effects filter List list = new java.util.ArrayList<>(); + final Collection effectsValues = this.activeEffects.values(); // Leaf - Replace Entity active effects map with optimized collection - for (MobEffectInstance effect : this.activeEffects.values()) { + for (MobEffectInstance effect : effectsValues) { // Leaf - Replace Entity active effects map with optimized collection if (effect.isVisible()) { list.add(effect.getParticleOptions()); } } // Leaf end - Remove stream in entity visible effects filter this.entityData.set(DATA_EFFECT_PARTICLES, list); - this.entityData.set(DATA_EFFECT_AMBIENCE_ID, areAllEffectsAmbient(this.activeEffects.values())); + this.entityData.set(DATA_EFFECT_AMBIENCE_ID, areAllEffectsAmbient(effectsValues)); // Leaf - Replace Entity active effects map with optimized collection } private void updateGlowingStatus() {