FilterDamageSystem 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 |
|
Ref |
var9 |
Методы (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);
}
}
}
}
}
}