Predictable enum
Пакет: com.hypixel.hytale.server.core.modules.entitystats
Файл: com/hypixel/hytale/server/core/modules/entitystats/EntityStatMap.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
NONE,
SELF, |
ALL |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entitystats;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.ChangeStatBehaviour;
class="kw">import com.hypixel.hytale.protocol.EntityStatOp;
class="kw">import com.hypixel.hytale.protocol.EntityStatUpdate;
class="kw">import com.hypixel.hytale.protocol.ValueType;
class="kw">import com.hypixel.hytale.server.core.entity.StatModifiersManager;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.asset.EntityStatType;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.Modifier;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.modifier.StaticModifier;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.floats.FloatArrayList;
class="kw">import it.unimi.dsi.fastutil.floats.FloatList;
class="kw">import it.unimi.dsi.fastutil.ints.Int2FloatMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collection;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class EntityStatMap class="kw">implements Component<EntityStore> {
class="kw">public class="kw">static class="kw">final int VERSION = 5;
class="kw">public class="kw">static class="kw">final BuilderCodec<EntityStatMap> CODEC = BuilderCodec.builder(EntityStatMap.class, EntityStatMap::new)
.legacyVersioned()
.codecVersion(5)
.addField(new KeyedCodec<>("Stats", new MapCodec<>(EntityStatValue.CODEC, HashMap::new, false)), (var0, var1) -> var0.unknown = var1, var0 -> {
HashMap var1 = new HashMap<>();
if (var0.unknown != null) {
var1.putAll(var0.unknown);
}
for (EntityStatValue var5 : var0.values) {
if (var5 != null) {
var1.putIfAbsent(var5.getId(), var5);
}
}
class="kw">return var1;
})
.afterDecode(var0 -> {
var0.values = EntityStatValue.EMPTY_ARRAY;
var0.update();
})
.build();
@Nonnull
class="kw">private class="kw">final StatModifiersManager statModifiersManager = new StatModifiersManager();
class="kw">private Map<String, EntityStatValue> unknown;
@Nonnull
class="kw">private EntityStatValue[] values = EntityStatValue.EMPTY_ARRAY;
float[] tempRegenerationValues = ArrayUtil.EMPTY_FLOAT_ARRAY;
@Nonnull
class="kw">public class="kw">final Int2ObjectMap<List<EntityStatUpdate>> selfUpdates = new Int2ObjectOpenHashMap();
@Nonnull
class="kw">public class="kw">final Int2ObjectMap<FloatList> selfStatValues = new Int2ObjectOpenHashMap();
@Nonnull
class="kw">public class="kw">final Int2ObjectMap<List<EntityStatUpdate>> otherUpdates = new Int2ObjectOpenHashMap();
class="kw">protected boolean isSelfNetworkOutdated;
class="kw">protected boolean isNetworkOutdated;
@Nullable
class="kw">private class="kw">transient Int2ObjectMap<StatChangeDirection> suppressedStatChanges;
class="kw">public class="kw">static ComponentType<EntityStore, EntityStatMap> getComponentType() {
class="kw">return EntityStatsModule.get().getEntityStatMapComponentType();
}
class="kw">public EntityStatMap() {
}
@Nonnull
class="kw">public StatModifiersManager getStatModifiersManager() {
class="kw">return this.statModifiersManager;
}
class="kw">public int size() {
class="kw">return this.values.length;
}
@Nullable
class="kw">public EntityStatValue get(int var1) {
class="kw">return var1 >= this.values.length ? null : this.values[var1];
}
@Deprecated
@Nullable
class="kw">public EntityStatValue get(String var1) {
class="kw">return this.get(EntityStatType.getAssetMap().getIndex(var1));
}
class="kw">public void update() {
IndexedLookupTableAssetMap var1 = EntityStatType.getAssetMap();
for (int var2 = 0; var2 < this.values.length; var2++) {
EntityStatType var3 = var1.getAsset(var2);
EntityStatValue var4 = this.values[var2];
if (var3 != null && var4 != null) {
if (var3.isUnknown()) {
if (this.unknown == null) {
this.unknown = new Object2ObjectOpenHashMap();
}
this.unknown.put(var3.getId(), var4);
this.values[var2] = new EntityStatValue(var2, var3);
} else if (var4.synchronizeAsset(var2, var3)) {
this.addInitChange(var2, var4);
}
}
}
int var7 = var1.getNextIndex();
int var8 = this.values.length;
if (var8 <= var7) {
this.values = Arrays.copyOf(this.values, var7);
for (int var9 = var8; var9 < var7; var9++) {
EntityStatType var5 = var1.getAsset(var9);
if (var5 != null) {
if (var5.isUnknown()) {
EntityStatValue var6 = this.values[var9] = new EntityStatValue(var9, var5);
this.addInitChange(var9, var6);
} else {
EntityStatValue var10 = this.unknown == null ? null : this.unknown.remove(var5.getId());
if (var10 != null) {
var10.synchronizeAsset(var9, var5);
this.values[var9] = var10;
this.addInitChange(var9, var10);
} else {
var10 = this.values[var9] = new EntityStatValue(var9, var5);
this.addInitChange(var9, var10);
}
}
}
}
}
}
@Nullable
class="kw">public Modifier getModifier(int var1, String var2) {
EntityStatValue var3 = this.get(var1);
if (var3 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var1);
class="kw">return null;
} else {
class="kw">return var3.getModifiers() != null ? var3.getModifiers().get(var2) : null;
}
}
@Nullable
class="kw">public Modifier putModifier(int var1, String var2, Modifier var3) {
class="kw">return this.putModifier(EntityStatMap.Predictable.NONE, var1, var2, var3);
}
@Nullable
class="kw">public Modifier putModifier(EntityStatMap.Predictable var1, int var2, String var3, Modifier var4) {
EntityStatValue var5 = this.get(var2);
if (var5 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return null;
} else {
float var6 = var5.get();
Modifier var7 = var5.putModifier(var3, var4);
this.addChange(var1, var2, EntityStatOp.PutModifier, var6, var3, var4);
class="kw">return var7;
}
}
@Nullable
class="kw">public Modifier removeModifier(int var1, String var2) {
class="kw">return this.removeModifier(EntityStatMap.Predictable.NONE, var1, var2);
}
@Nullable
class="kw">public Modifier removeModifier(EntityStatMap.Predictable var1, int var2, String var3) {
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return null;
}
float var5 = var4.get();
Modifier var6 = var4.removeModifier(var3);
if (var6 != null) {
this.addChange(var1, var2, EntityStatOp.RemoveModifier, var5, var3, null);
}
class="kw">return var6;
}
class="kw">public float setStatValue(int var1, float var2) {
class="kw">return this.setStatValue(EntityStatMap.Predictable.NONE, var1, var2);
}
class="kw">public float setStatValue(EntityStatMap.Predictable var1, int var2, float var3) {
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var5 = var4.get();
if (this.shouldSuppressChange(var2, var5, var3)) {
class="kw">return var5;
}
float var6 = var4.set(var3);
if (var1 != EntityStatMap.Predictable.NONE || var3 != var5) {
this.addChange(var1, var2, EntityStatOp.Set, var5, var3);
}
class="kw">return var6;
}
class="kw">public float addStatValue(int var1, float var2) {
class="kw">return this.addStatValue(EntityStatMap.Predictable.NONE, var1, var2);
}
class="kw">public float addStatValue(EntityStatMap.Predictable var1, int var2, float var3) {
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var5 = var4.get();
if (this.shouldSuppressChange(var2, var5, var5 + var3)) {
class="kw">return var5;
}
float var6 = var4.set(var5 + var3);
if (var1 != EntityStatMap.Predictable.NONE || var6 != var5) {
this.addChange(var1, var2, EntityStatOp.Add, var5, var3);
}
class="kw">return var6;
}
class="kw">public float subtractStatValue(int var1, float var2) {
class="kw">return this.addStatValue(var1, -var2);
}
class="kw">public float subtractStatValue(EntityStatMap.Predictable var1, int var2, float var3) {
class="kw">return this.addStatValue(var1, var2, -var3);
}
class="kw">public float minStatValue(int var1, float var2) {
class="kw">return this.minStatValue(EntityStatMap.Predictable.NONE, var1, var2);
}
class="kw">public float minStatValue(EntityStatMap.Predictable var1, int var2, float var3) {
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var5 = var4.get();
float var6 = Math.min(var5, var3);
if (this.shouldSuppressChange(var2, var5, var6)) {
class="kw">return var5;
}
float var7 = var4.set(var6);
if (var1 != EntityStatMap.Predictable.NONE || var7 != var5) {
this.addChange(var1, var2, EntityStatOp.Min, var5, var3);
}
class="kw">return var7;
}
class="kw">public float maxStatValue(int var1, float var2) {
class="kw">return this.maxStatValue(EntityStatMap.Predictable.NONE, var1, var2);
}
class="kw">public float maxStatValue(EntityStatMap.Predictable var1, int var2, float var3) {
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var5 = var4.get();
float var6 = Math.max(var5, var3);
if (this.shouldSuppressChange(var2, var5, var6)) {
class="kw">return var5;
}
float var7 = var4.set(var6);
if (var1 != EntityStatMap.Predictable.NONE || var7 != var5) {
this.addChange(var1, var2, EntityStatOp.Max, var5, var3);
}
class="kw">return var7;
}
class="kw">public float minimizeStatValue(int var1) {
class="kw">return this.minimizeStatValue(EntityStatMap.Predictable.NONE, var1);
}
class="kw">public float minimizeStatValue(EntityStatMap.Predictable var1, int var2) {
EntityStatValue var3 = this.get(var2);
if (var3 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var4 = var3.get();
if (this.shouldSuppressChange(var2, var4, var3.getMin())) {
class="kw">return var4;
}
float var5 = var3.set(var3.getMin());
if (var1 != EntityStatMap.Predictable.NONE || var5 != var4) {
this.addChange(var1, var2, EntityStatOp.Minimize, var4, 0.0F);
}
class="kw">return var5;
}
class="kw">public float maximizeStatValue(int var1) {
class="kw">return this.maximizeStatValue(EntityStatMap.Predictable.NONE, var1);
}
class="kw">public float maximizeStatValue(EntityStatMap.Predictable var1, int var2) {
EntityStatValue var3 = this.get(var2);
if (var3 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var4 = var3.get();
if (this.shouldSuppressChange(var2, var4, var3.getMax())) {
class="kw">return var4;
}
float var5 = var3.set(var3.getMax());
if (var1 != EntityStatMap.Predictable.NONE || var5 != var4) {
this.addChange(var1, var2, EntityStatOp.Maximize, var4, 0.0F);
}
class="kw">return var5;
}
class="kw">public float resetStatValue(int var1) {
class="kw">return this.resetStatValue(EntityStatMap.Predictable.NONE, var1);
}
class="kw">public float resetStatValue(EntityStatMap.Predictable var1, int var2) {
EntityStatType var3 = EntityStatType.getAssetMap().getAsset(var2);
if (var3 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatType found for index: %d", var2);
class="kw">return 0.0F;
}
EntityStatValue var4 = this.get(var2);
if (var4 == null) {
HytaleLogger.getLogger().at(Level.WARNING).log("No EntityStatValue found for index: %d", var2);
class="kw">return 0.0F;
}
float var5 = var4.get();
float var6;
class="kw">switch (var3.getResetBehavior()) {
case InitialValue:
if (this.shouldSuppressChange(var2, var5, var3.getInitialValue())) {
class="kw">return var5;
}
var6 = var4.set(var3.getInitialValue());
break;
case MaxValue:
if (this.shouldSuppressChange(var2, var5, var4.getMax())) {
class="kw">return var5;
}
var6 = var4.set(var4.getMax());
break;
class="kw">default:
var6 = 0.0F;
}
if (var1 != EntityStatMap.Predictable.NONE || var6 != var5) {
this.addChange(var1, var2, EntityStatOp.Reset, var5, 0.0F);
}
class="kw">return var6;
}
@Nonnull
class="kw">public Int2ObjectMap<List<EntityStatUpdate>> getSelfUpdates() {
class="kw">return this.selfUpdates;
}
@Nonnull
class="kw">public Int2ObjectMap<FloatList> getSelfStatValues() {
class="kw">return this.selfStatValues;
}
@Nonnull
class="kw">public Int2ObjectMap<EntityStatUpdate[]> consumeSelfUpdates() {
class="kw">return this.updatesToProtocol(this.selfUpdates);
}
class="kw">public void clearUpdates() {
this.selfUpdates.values().forEach(List::clear);
this.selfStatValues.values().forEach(List::clear);
this.otherUpdates.values().forEach(List::clear);
}
@Nonnull
class="kw">public Int2ObjectMap<EntityStatUpdate[]> consumeOtherUpdates() {
class="kw">return this.updatesToProtocol(this.otherUpdates);
}
@Nonnull
class="kw">private Int2ObjectOpenHashMap<EntityStatUpdate[]> updatesToProtocol(@Nonnull Int2ObjectMap<List<EntityStatUpdate>> var1) {
Int2ObjectOpenHashMap var2 = new Int2ObjectOpenHashMap(var1.size());
ObjectIterator var3 = Int2ObjectMaps.fastIterator(var1);
while (var3.hasNext()) {
Entry var4 = (Entry<List<EntityStatUpdate>>)var3.next();
if (!((List)var4.getValue()).isEmpty()) {
var2.put(var4.getIntKey(), ((List)var4.getValue()).toArray(EntityStatUpdate[]::new));
}
}
class="kw">return var2;
}
@Nonnull
class="kw">public Int2ObjectMap<EntityStatUpdate[]> createInitUpdate(boolean var1) {
Int2ObjectOpenHashMap var2 = new Int2ObjectOpenHashMap(this.size());
for (int var3 = 0; var3 < this.size(); var3++) {
EntityStatValue var4 = this.get(var3);
if (var4 != null && (EntityStatType.getAssetMap().getAsset(var3).isShared() || var1)) {
var2.put(var3, new EntityStatUpdate[]{makeInitChange(var4)});
}
}
class="kw">return var2;
}
class="kw">public boolean isStatChangeSuppressed(int var1, @Nonnull StatChangeDirection var2) {
if (this.suppressedStatChanges == null) {
class="kw">return false;
}
StatChangeDirection var3 = (StatChangeDirection)this.suppressedStatChanges.get(var1);
class="kw">return var3 != null && var3.covers(var2);
}
class="kw">public void setStatChangeSuppressed(int var1, @Nonnull StatChangeDirection var2, boolean var3) {
if (var3) {
if (this.suppressedStatChanges == null) {
this.suppressedStatChanges = new Int2ObjectOpenHashMap();
}
StatChangeDirection var4 = (StatChangeDirection)this.suppressedStatChanges.get(var1);
this.suppressedStatChanges.put(var1, var4 == null ? var2 : var4.union(var2));
} else if (this.suppressedStatChanges != null) {
StatChangeDirection var6 = (StatChangeDirection)this.suppressedStatChanges.get(var1);
if (var6 == null) {
class="kw">return;
}
StatChangeDirection var5 = var6.without(var2);
if (var5 == null) {
this.suppressedStatChanges.remove(var1);
} else {
this.suppressedStatChanges.put(var1, var5);
}
}
}
class="kw">public boolean consumeSelfNetworkOutdated() {
boolean var1 = this.isSelfNetworkOutdated;
this.isSelfNetworkOutdated = false;
class="kw">return var1;
}
class="kw">public boolean consumeNetworkOutdated() {
boolean var1 = this.isNetworkOutdated;
this.isNetworkOutdated = false;
class="kw">return var1;
}
class="kw">private boolean shouldSuppressChange(int var1, float var2, float var3) {
if (var3 > var2) {
class="kw">return this.isStatChangeSuppressed(var1, StatChangeDirection.RAISE);
} else {
class="kw">return var3 < var2 ? this.isStatChangeSuppressed(var1, StatChangeDirection.LOWER) : false;
}
}
class="kw">private void addInitChange(int var1, @Nonnull EntityStatValue var2) {
this.addChange(EntityStatMap.Predictable.NONE, var1, EntityStatOp.Init, var2.get(), var2.get(), var2.getModifiers());
}
class="kw">private void addChange(EntityStatMap.Predictable var1, int var2, @Nonnull EntityStatOp var3, float var4, float var5) {
this.addChange(var1, var2, var3, var4, var5, null);
}
class="kw">private void addChange(EntityStatMap.Predictable var1, int var2, @Nonnull EntityStatOp var3, float var4, float var5, Map<String, Modifier> var6) {
EntityStatType var7 = EntityStatType.getAssetMap().getAsset(var2);
if (var7.isShared()) {
boolean var8 = var1 == EntityStatMap.Predictable.ALL;
List var9 = (List<EntityStatUpdate>)this.otherUpdates.computeIfAbsent(var2, var0 -> new ObjectArrayList());
this.tryMergeUpdate(var9, var3, var5, var6, var8);
this.isNetworkOutdated = true;
}
boolean var11 = var1 != EntityStatMap.Predictable.NONE;
List var12 = (List<EntityStatUpdate>)this.selfUpdates.computeIfAbsent(var2, var0 -> new ObjectArrayList());
FloatList var10 = (FloatList)this.selfStatValues.computeIfAbsent(var2, var0 -> new FloatArrayList());
if (this.tryMergeUpdate(var12, var3, var5, var6, var11)) {
var10.set(var10.size() - 1, this.get(var2).get());
} else {
var10.add(var4);
var10.add(this.get(var2).get());
this.isSelfNetworkOutdated = true;
}
}
class="kw">private void addChange(EntityStatMap.Predictable var1, int var2, EntityStatOp var3, float var4, String var5, @Nullable Modifier var6) {
EntityStatType var7 = EntityStatType.getAssetMap().getAsset(var2);
com.hypixel.hytale.protocol.Modifier var8 = var6 != null ? var6.toPacket() : null;
if (var7.isShared()) {
boolean var9 = var1 == EntityStatMap.Predictable.ALL;
List var10 = (List<EntityStatUpdate>)this.otherUpdates.computeIfAbsent(var2, var0 -> new ObjectArrayList());
var10.add(new EntityStatUpdate(var3, var9, 0.0F, null, var5, var8));
this.isNetworkOutdated = true;
}
boolean var12 = var1 != EntityStatMap.Predictable.NONE;
List var13 = (List<EntityStatUpdate>)this.selfUpdates.computeIfAbsent(var2, var0 -> new ObjectArrayList());
var13.add(new EntityStatUpdate(var3, var12, 0.0F, null, var5, var8));
FloatList var11 = (FloatList)this.selfStatValues.computeIfAbsent(var2, var0 -> new FloatArrayList());
var11.add(var4);
var11.add(this.get(var2).get());
this.isSelfNetworkOutdated = true;
}
class="kw">private boolean tryMergeUpdate(
@Nonnull List<EntityStatUpdate> var1, @Nonnull EntityStatOp var2, float var3, @Nullable Map<String, Modifier> var4, boolean var5
) {
EntityStatUpdate var6 = var1.isEmpty() ? null : var1.getLast();
class="kw">switch (var2) {
case Init:
if (!var5 && var6 != null && !var6.predictable && var6.op == EntityStatOp.Init) {
var6.value = var3;
class="kw">return true;
}
Map var7 = null;
if (var4 != null) {
var7 = new Object2ObjectOpenHashMap();
for (java.util.Map.Entry var9 : var4.entrySet()) {
var7.put(var9.getKey(), var9.getValue().toPacket());
}
}
var1.add(new EntityStatUpdate(var2, var5, var3, var7, null, null));
class="kw">return false;
case Remove:
var1.add(new EntityStatUpdate(var2, var5, 0.0F, null, null, null));
case PutModifier:
case RemoveModifier:
class="kw">default:
class="kw">return false;
case Add:
if (var5 || var6 == null || var6.predictable || var6.op != EntityStatOp.Init && var6.op != EntityStatOp.Add && var6.op != EntityStatOp.Set) {
var1.add(new EntityStatUpdate(var2, var5, var3, null, null, null));
class="kw">return false;
}
var6.value += var3;
class="kw">return true;
case Min:
case Max:
var1.add(new EntityStatUpdate(var2, var5, var3, null, null, null));
class="kw">return false;
case Set:
case Minimize:
case Maximize:
case Reset:
if (!var5 && var6 != null && !var6.predictable && var6.op != EntityStatOp.Remove) {
if (var6.op != EntityStatOp.Init) {
var6.op = var2;
}
var6.value = var3;
class="kw">return true;
} else {
var1.add(new EntityStatUpdate(var2, var5, var3, null, null, null));
class="kw">return false;
}
}
}
class="kw">public void processStatChanges(EntityStatMap.Predictable var1, @Nonnull Int2FloatMap var2, ValueType var3, @Nonnull ChangeStatBehaviour var4) {
ObjectIterator var5 = var2.int2FloatEntrySet().iterator();
while (var5.hasNext()) {
it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry var6 = (it.unimi.dsi.fastutil.ints.Int2FloatMap.Entry)var5.next();
int var7 = var6.getIntKey();
float var8 = var6.getFloatValue();
if (var3 == ValueType.Percent) {
EntityStatValue var9 = this.get(var7);
if (var9 == null) {
class="kw">continue;
}
var8 = var8 * (var9.getMax() - var9.getMin()) / 100.0F;
}
class="kw">switch (var4) {
case Set:
this.setStatValue(var1, var7, var8);
break;
case Add:
this.addStatValue(var1, var7, var8);
break;
case Min:
this.minStatValue(var1, var7, var8);
break;
case Max:
this.maxStatValue(var1, var7, var8);
}
}
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "EntityStatMap{unknown=" + this.unknown + ", values=" + Arrays.toString(this.values) + "}";
}
@Nonnull
class="kw">public EntityStatMap clone() {
EntityStatMap var1 = new EntityStatMap();
var1.unknown = this.unknown;
var1.update();
for (int var2 = 0; var2 < this.values.length; var2++) {
if (this.values[var2] != null) {
EntityStatValue var3 = this.values[var2];
var1.values[var2].set(var3.get());
Map var4 = var3.getModifiers();
if (var4 != null) {
for (java.util.Map.Entry var6 : var4.entrySet()) {
var1.values[var2].putModifier(var6.getKey(), var6.getValue());
}
}
}
}
ObjectIterator var7 = this.selfUpdates.int2ObjectEntrySet().iterator();
while (var7.hasNext()) {
Entry var10 = (Entry<List<EntityStatUpdate>>)var7.next();
var1.selfUpdates.put(var10.getIntKey(), new ObjectArrayList((Collection)var10.getValue()));
}
var7 = this.selfStatValues.int2ObjectEntrySet().iterator();
while (var7.hasNext()) {
Entry var11 = (Entry<FloatList>)var7.next();
var1.selfStatValues.put(var11.getIntKey(), new FloatArrayList((FloatList)var11.getValue()));
}
var7 = this.otherUpdates.int2ObjectEntrySet().iterator();
while (var7.hasNext()) {
Entry var12 = (Entry<List<EntityStatUpdate>>)var7.next();
var1.otherUpdates.put(var12.getIntKey(), new ObjectArrayList((Collection)var12.getValue()));
}
class="kw">return var1;
}
@Nonnull
class="kw">private class="kw">static EntityStatUpdate makeInitChange(@Nonnull EntityStatValue var0) {
Map var1 = null;
if (var0.getModifiers() != null) {
var1 = new Object2ObjectOpenHashMap();
for (java.util.Map.Entry var3 : var0.getModifiers().entrySet()) {
var1.put(var3.getKey(), var3.getValue().toPacket());
}
}
class="kw">return new EntityStatUpdate(EntityStatOp.Init, false, var0.get(), var1, null, null);
}
@Nullable
class="kw">public class="kw">static Int2ObjectMap<com.hypixel.hytale.protocol.Modifier[]> toPacket(@Nullable Int2ObjectMap<StaticModifier[]> var0) {
if (var0 == null) {
class="kw">return null;
}
Int2ObjectOpenHashMap var1 = new Int2ObjectOpenHashMap(var0.size());
ObjectIterator var2 = var0.int2ObjectEntrySet().iterator();
while (var2.hasNext()) {
Entry var3 = (Entry<StaticModifier[]>)var2.next();
com.hypixel.hytale.protocol.Modifier[] var4 = new com.hypixel.hytale.protocol.Modifier[((StaticModifier[])var3.getValue()).length];
for (int var5 = 0; var5 < var4.length; var5++) {
var4[var5] = ((StaticModifier[])var3.getValue())[var5].toPacket();
}
var1.put(var3.getIntKey(), var4);
}
class="kw">return var1;
}
class="kw">public enum Predictable {
NONE,
SELF,
ALL;
Predictable() {
}
}
}