DamageReceivedSystem class

Пакет: com.hypixel.hytale.server.npc.systems

Файл: com/hypixel/hytale/server/npc/systems/NPCDamageSystems.java

extends: DamageEventSystem

Поля (3)

МодификаторыТипИмя
private final Query<EntityStore> query
NPCEntity var6
DamageData var7

Методы (3)

МодификаторыВозвратСигнатура
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public void handlepublic void handle(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.systems;

class="kw">import com.hypixel.hytale.component.AddReason;
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.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemGroup;
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.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.DeathConfig;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageEventSystem;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeferredCorpseRemoval;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.blackboard.Blackboard;
class="kw">import com.hypixel.hytale.server.npc.blackboard.view.event.entity.EntityEventType;
class="kw">import com.hypixel.hytale.server.npc.blackboard.view.event.entity.EntityEventView;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.util.DamageData;
class="kw">import com.hypixel.hytale.server.npc.util.EntityDetectionUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class NPCDamageSystems {
   class="kw">public NPCDamageSystems() {
   }

   class="kw">public class="kw">static class DamageDealtSystem class="kw">extends DamageEventSystem {
      class="kw">public DamageDealtSystem() {
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

      @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.getSource() class="kw">instanceof Damage.EntitySource var6) {
            Ref var9 = var6.getRef();
            if (var9.isValid()) {
               NPCEntity var8 = var4.getComponent(var9, NPCEntity.getComponentType());
               if (var8 != null) {
                  var8.getDamageData().onInflictedDamage(var2.getReferenceTo(var1), var5.getAmount());
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class DamageReceivedEventViewSystem class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType = Player.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType = TransformComponent.getComponentType();
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, Blackboard> blackboardResourceType = Blackboard.getResourceType();
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = Query.and(Query.or(NPCEntity.getComponentType(), this.playerComponentType), this.transformComponentType);

      class="kw">public DamageReceivedEventViewSystem() {
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         TransformComponent var6 = var2.getComponent(var1, this.transformComponentType);
         assert var6 != null;
         Blackboard var7 = var4.getResource(this.blackboardResourceType);
         EntityEventView var8 = var7.getView(
            EntityEventView.class, ChunkUtil.chunkCoordinate(var6.getPosition().x), ChunkUtil.chunkCoordinate(var6.getPosition().z)
         );
         if (var5.getSource() class="kw">instanceof Damage.EntitySource var9) {
            Ref var11 = var9.getRef();
            if (var11.isValid()) {
               if (EntityDetectionUtil.isDetectableByNPCs(var11, var4)) {
                  var8.processAttackedEvent(var2.getReferenceTo(var1), var11, var4, EntityEventType.DAMAGE);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class DamageReceivedSystem class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = NPCEntity.getComponentType();

      class="kw">public DamageReceivedSystem() {
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getInspectDamageGroup();
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         NPCEntity var6 = var2.getComponent(var1, NPCEntity.getComponentType());
         assert var6 != null;
         DamageData var7 = var6.getDamageData();
         var7.onSufferedDamage(var4, var5);
      }
   }

   class="kw">public class="kw">static class DropDeathItems class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         NPCEntity.getComponentType(),
         TransformComponent.getComponentType(),
         HeadRotation.getComponentType(),
         Query.not(Player.getComponentType()),
         DeathComponent.getComponentType()
      );
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemDependency<>(Order.AFTER, DeathSystems.TickCorpseRemoval.class), new SystemDependency<>(Order.BEFORE, DeathSystems.CorpseRemoval.class)
      );

      class="kw">public DropDeathItems() {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return QUERY;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         DeathComponent var6 = var3.getComponent(var2, DeathComponent.getComponentType());
         assert var6 != null;
         if (var6.getItemsLossMode() == DeathConfig.ItemsLossMode.ALL) {
            NPCEntity var7 = var3.getComponent(var2, NPCEntity.getComponentType());
            assert var7 != null;
            Role var8 = var7.getRole();
            if (var8 != null) {
               if (!var8.hasDroppedDeathItems()) {
                  if (!var8.isDropDeathItemsInstantly()) {
                     DeferredCorpseRemoval var9 = var3.getComponent(var2, DeferredCorpseRemoval.getComponentType());
                     if (var9 != null && !var9.shouldRemove()) {
                        class="kw">return;
                     }
                  }

                  var8.setDeathItemsDropped();
                  List var17 = new ObjectArrayList();
                  if (var8.isPickupDropOnDeath()) {
                     InventoryComponent.Storage var10 = var3.getComponent(var2, InventoryComponent.Storage.getComponentType());
                     if (var10 != null) {
                        ItemContainer var11 = var10.getInventory();
                        var17.addAll(var11.dropAllItemStacks());
                     }
                  }

                  String var18 = var8.getDropListId();
                  if (var18 != null) {
                     ItemModule var19 = ItemModule.get();
                     if (var19.isEnabled()) {
                        List var12 = var19.getRandomItemDrops(var18);
                        var17.addAll(var12);
                     }
                  }

                  if (!var17.isEmpty()) {
                     TransformComponent var20 = var3.getComponent(var2, TransformComponent.getComponentType());
                     assert var20 != null;
                     Vector3d var21 = var20.getPosition();
                     HeadRotation var13 = var3.getComponent(var2, HeadRotation.getComponentType());
                     assert var13 != null;
                     Rotation3f var14 = var13.getRotation();
                     Vector3d var15 = new Vector3d(var21).add(0.0, 1.0, 0.0);
                     Holder[] var16 = ItemComponent.generateItemDrops(var4, var17, var15, new Rotation3f(var14));
                     var5.addEntities(var16, AddReason.SPAWN);
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class FilterDamageSystem class="kw">extends DamageEventSystem {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query = NPCEntity.getComponentType();

      class="kw">public FilterDamageSystem() {
      }

      @Nullable
      @Override
      class="kw">public SystemGroup<EntityStore> getGroup() {
         class="kw">return DamageModule.get().getFilterDamageGroup();
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      class="kw">public void handle(
         int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5
      ) {
         NPCEntity var6 = var2.getComponent(var1, NPCEntity.getComponentType());
         assert var6 != null;
         if (var5.getSource() class="kw">instanceof Damage.EntitySource var7) {
            Ref var9 = var7.getRef();
            if (var9.isValid()) {
               if (!var6.getCanCauseDamage(var9, var4)) {
                  var5.setCancelled(true);
               }
            }
         }
      }
   }
}