DamageCalculatorSystems class
Пакет: com.hypixel.hytale.server.core.modules.entity.damage
Файл: com/hypixel/hytale/server/core/modules/entity/damage/DamageCalculatorSystems.java
Поля (20)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<DamageCalculatorSystems.Sequence> |
CODEC |
|
private final DamageCalculator |
damageCalculator |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private DamageEntityInteraction.EntityStatOnHit[] |
entityStatOnHit |
|
private int |
hits |
|
|
return |
|
private final DamageCalculatorSystems.Sequence |
sequence |
|
float |
var10 |
|
BrokenPenalties |
var11 |
|
EntityStatMap |
var11 |
|
Damage |
var12 |
|
DamageEntityInteraction.EntityStatOnHit[] |
var16 |
|
Ref |
var17 |
|
Damage[] |
var6 |
|
DamageCalculatorSystems.DamageSequence |
var6 |
|
int |
var7 |
|
DamageCalculator |
var7 |
|
ObjectIterator |
var8 |
|
float |
var8 |
|
DamageCause |
var9 |
Методы (17)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
DamageSequencepublic DamageSequence(@Nonnull DamageCalculatorSystems.Sequence var1, @Nonnull DamageCalculator var2) |
|
public |
Sequencepublic Sequence() |
|
public |
Sequencepublic Sequence(int var1) |
|
public |
SequenceModifierpublic SequenceModifier() |
|
public void |
addSequentialHitpublic void addSequentialHit() |
|
|
for for(DamageEntityInteraction.EntityStatOnHit var15 : var16) |
|
public DamageCalculator |
getDamageCalculatorpublic DamageCalculator getDamageCalculator() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public DamageEntityInteraction.EntityStatOnHit[] |
getEntityStatOnHitpublic DamageEntityInteraction.EntityStatOnHit[] getEntityStatOnHit() |
|
public int |
getHitspublic int getHits() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public int |
getSequentialHitspublic int getSequentialHits() |
|
public void |
handlepublic void handle(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5) |
|
|
if if(var6 != null) |
|
|
if if(var11 == null) |
|
public void |
setEntityStatOnHitpublic void setEntityStatOnHit(@Nullable DamageEntityInteraction.EntityStatOnHit[] var1) |
|
public String |
toStringpublic String toString() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.damage;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.dependency.SystemGroupDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.BrokenPenalties;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.meta.MetaKey;
class="kw">import com.hypixel.hytale.server.core.modules.entitystats.EntityStatMap;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.DamageEntityInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.combat.DamageCalculator;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.Object2FloatMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class DamageCalculatorSystems {
@Nonnull
class="kw">public class="kw">static class="kw">final MetaKey<DamageCalculatorSystems.DamageSequence> DAMAGE_SEQUENCE = Damage.META_REGISTRY.registerMetaObject();
class="kw">public DamageCalculatorSystems() {
}
@Nonnull
class="kw">public class="kw">static Damage[] queueDamageCalculator(
@Nonnull World var0,
@Nonnull Object2FloatMap<DamageCause> var1,
@Nonnull Ref<EntityStore> var2,
@Nonnull CommandBuffer<EntityStore> var3,
@Nonnull Damage.Source var4,
@Nullable ItemStack var5
) {
Damage[] var6 = new Damage[var1.size()];
int var7 = 0;
ObjectIterator var8 = var1.keySet().iterator();
while (var8.hasNext()) {
DamageCause var9 = (DamageCause)var8.next();
float var10 = var1.getFloat(var9);
if (var9 == DamageCause.PHYSICAL && var5 != null && var5.isBroken()) {
BrokenPenalties var11 = var0.getGameplayConfig().getItemDurabilityConfig().getBrokenPenalties();
var10 *= (float)(1.0 - var11.getWeapon(0.0));
}
Damage var12 = new Damage(var4, var9, var10);
var12.getMetaStore().putMetaObject(Damage.CAN_BE_PREDICTED, Boolean.TRUE);
var6[var7++] = var12;
}
class="kw">return var6;
}
class="kw">public class="kw">static class DamageSequence {
@Nonnull
class="kw">private class="kw">final DamageCalculatorSystems.Sequence sequence;
@Nonnull
class="kw">private class="kw">final DamageCalculator damageCalculator;
@Nullable
class="kw">private DamageEntityInteraction.EntityStatOnHit[] entityStatOnHit;
class="kw">public DamageSequence(@Nonnull DamageCalculatorSystems.Sequence var1, @Nonnull DamageCalculator var2) {
this.sequence = var1;
this.damageCalculator = var2;
}
class="kw">public int getSequentialHits() {
class="kw">return this.sequence.hits;
}
class="kw">public void addSequentialHit() {
this.sequence.hits++;
}
@Nonnull
class="kw">public DamageCalculator getDamageCalculator() {
class="kw">return this.damageCalculator;
}
@Nullable
class="kw">public DamageEntityInteraction.EntityStatOnHit[] getEntityStatOnHit() {
class="kw">return this.entityStatOnHit;
}
class="kw">public void setEntityStatOnHit(@Nullable DamageEntityInteraction.EntityStatOnHit[] var1) {
this.entityStatOnHit = var1;
}
}
class="kw">public class="kw">static class Sequence {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<DamageCalculatorSystems.Sequence> CODEC = BuilderCodec.builder(
DamageCalculatorSystems.Sequence.class, DamageCalculatorSystems.Sequence::new
)
.append(new KeyedCodec<>("Hits", Codec.INTEGER), (var0, var1) -> var0.hits = var1, var0 -> var0.hits)
.add()
.build();
class="kw">private int hits;
class="kw">public Sequence() {
}
class="kw">public Sequence(int var1) {
this.hits = var1;
}
class="kw">public int getHits() {
class="kw">return this.hits;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "Sequence{hits=" + this.hits + "}";
}
}
class="kw">public class="kw">static class SequenceModifier class="kw">extends DamageEventSystem {
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getGatherDamageGroup()),
new SystemGroupDependency<>(Order.AFTER, DamageModule.get().getFilterDamageGroup()),
new SystemDependency<EntityStore, DamageSystems.ApplyDamage>(Order.BEFORE, DamageSystems.ApplyDamage.class)
);
class="kw">public SequenceModifier() {
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return Archetype.empty();
}
class="kw">public void handle(
int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
) {
if (!(var5.getAmount() <= 0.0F)) {
DamageCalculatorSystems.DamageSequence var6 = var5.getIfPresentMetaObject(DamageCalculatorSystems.DAMAGE_SEQUENCE);
if (var6 != null) {
DamageCalculator var7 = var6.getDamageCalculator();
if (var6.getSequentialHits() > 0) {
float var8 = Math.max(1.0F - var7.getSequentialModifierStep() * var6.getSequentialHits(), var7.getSequentialModifierMinimum());
var5.setAmount(var5.getAmount() * var8);
}
var6.addSequentialHit();
DamageEntityInteraction.EntityStatOnHit[] var16 = var6.getEntityStatOnHit();
if (var16 != null && var5.getSource() class="kw">instanceof Damage.EntitySource var9) {
Ref var17 = var9.getRef();
EntityStatMap var11 = var4.getComponent(var17, EntityStatMap.getComponentType());
if (var11 == null) {
class="kw">return;
}
for (DamageEntityInteraction.EntityStatOnHit var15 : var16) {
var15.processEntityStatsOnHit(var6.getSequentialHits(), var11);
}
}
}
}
}
}
}