mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-29 11:59:24 +00:00
Originally vanilla logic is to use stream, and Mojang switched it to Guava's Collections2 since 1.21.4. It is much faster than using stream or manually adding to a new ArrayList. Manually adding to a new ArrayList requires allocating a new object array. However, the Collections2 lazy handles filter condition on iteration, so much better.
42 lines
2.8 KiB
Diff
42 lines
2.8 KiB
Diff
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 8bac55cda0114f1ae27a9a03860a7b3fb6002e4a..f30d24136e5f47c9be79e2c0b4b98d0e796d868b 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<Holder<MobEffect>, MobEffectInstance> activeEffects = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(0); // Leaf - Replace Entity active effects map with optimized collection
|
|
public final Map<Holder<MobEffect>, MobEffectInstance> activeEffects = Maps.newHashMap();
|
|
private final Map<EquipmentSlot, ItemStack> 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<ParticleOptions> list = new java.util.ArrayList<>();
|
|
+ final Collection<MobEffectInstance> 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() {
|