NPCDamageSystems class

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

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

Поля (35)

МодификаторыТипИмя
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private static final Query<EntityStore> QUERY
private final ResourceType<EntityStore, Blackboard> blackboardResourceType
private final ComponentType<EntityStore, Player> playerComponentType
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
return
private final ComponentType<EntityStore, TransformComponent> transformComponentType
InventoryComponent.Storage var10
Ref var11
ItemContainer var11
List var12
HeadRotation var13
Rotation3f var14
Vector3d var15
Holder[] var16
List var17
String var18
ItemModule var19
TransformComponent var20
Vector3d var21
TransformComponent var6
NPCEntity var6
DeathComponent var6
NPCEntity var6
Blackboard var7
DamageData var7
NPCEntity var7
NPCEntity var8
EntityEventView var8
Role var8
Ref var9
DeferredCorpseRemoval var9
Ref var9

Методы (24)

МодификаторыВозвратСигнатура
public DamageDealtSystempublic DamageDealtSystem()
public DamageReceivedEventViewSystempublic DamageReceivedEventViewSystem()
public DamageReceivedSystempublic DamageReceivedSystem()
public DropDeathItemspublic DropDeathItems()
public FilterDamageSystempublic FilterDamageSystem()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public SystemGroup<EntityStore> getGrouppublic SystemGroup<EntityStore> getGroup()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
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)
public void handlepublic void handle(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5)
public void handlepublic void handle(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5)
public void handlepublic void handle(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4, @Nonnull Damage var5)
if if(var8 != null)
if if(var8 != null)
if if(var10 != null)
if if(var18 != null)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> 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);
               }
            }
         }
      }
   }
}