PlayerItemEntityPickupSystem class

Пакет: com.hypixel.hytale.server.core.modules.entity.player

Файл: com/hypixel/hytale/server/core/modules/entity/player/PlayerItemEntityPickupSystem.java

extends: EntityTickingSystem<EntityStore>

Поля (30)

МодификаторыТипИмя
break
return
SpatialStructure var10
TransformComponent var11
Vector3d var12
DespawnComponent var13
float var14
ItemStack var15
var15
Item var16
String var17
List var18
Archetype var21
Player var22
ItemStackTransaction var23
ItemStack var24
int var25
float var26
Holder var27
List var28
Archetype var31
InteractionManager var32
Ref var33
Holder var34
Ref var6
InteractionContext var6
ItemComponent var7
InteractionChain var7
TimeResource var8
SpatialResource var9

Методы (6)

МодификаторыВозвратСигнатура
for for(Ref var30 : var28)
for for(Ref var20 : var18)
if if(var17 != null)
if if(var34 != null)
if if(var27 != null)
if if(var25 > 0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.player;

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.RemoveReason;
class="kw">import com.hypixel.hytale.component.ResourceType;
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.OrderPriority;
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.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.spatial.SpatialStructure;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction;
class="kw">import com.hypixel.hytale.server.core.modules.entity.DespawnComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PropComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.PickupItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.PreventPickup;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.PlayerSpatialSystem;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class PlayerItemEntityPickupSystem class="kw">extends EntityTickingSystem<EntityStore> {
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, ItemComponent> itemComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
   @Nonnull
   class="kw">private class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> playerSpatialComponent;
   @Nonnull
   class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;
   @Nonnull
   class="kw">private class="kw">final Query<EntityStore> query;

   class="kw">public PlayerItemEntityPickupSystem(
      @Nonnull ComponentType<EntityStore, ItemComponent> var1,
      @Nonnull ComponentType<EntityStore, Player> var2,
      @Nonnull ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> var3
   ) {
      this.itemComponentType = var1;
      this.playerComponentType = var2;
      this.playerSpatialComponent = var3;
      this.dependencies = Set.of(new SystemDependency<>(Order.AFTER, PlayerSpatialSystem.class, OrderPriority.CLOSEST));
      this.query = Query.and(
         var1,
         TransformComponent.getComponentType(),
         Query.not(Interactable.getComponentType()),
         Query.not(PickupItemComponent.getComponentType()),
         Query.not(PreventPickup.getComponentType()),
         Query.not(PropComponent.getComponentType())
      );
   }

   @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 this.query;
   }

   @Override
   class="kw">public boolean isParallel(int var1, int var2) {
      class="kw">return false;
   }

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) {
      Ref var6 = var3.getReferenceTo(var2);
      ItemComponent var7 = var3.getComponent(var2, this.itemComponentType);
      assert var7 != null;
      if (var7.pollPickupDelay(var1)) {
         if (var7.pollPickupThrottle(var1)) {
            TimeResource var8 = var5.getResource(TimeResource.getResourceType());
            SpatialResource var9 = var4.getResource(this.playerSpatialComponent);
            SpatialStructure var10 = var9.getSpatialStructure();
            TransformComponent var11 = var3.getComponent(var2, TransformComponent.getComponentType());
            assert var11 != null;
            Vector3d var12 = var11.getPosition();
            DespawnComponent var13 = var3.getComponent(var2, DespawnComponent.getComponentType());
            float var14 = var7.getPickupRadius(var5);
            ItemStack var15 = var7.getItemStack();
            Item var16 = var15.getItem();
            String var17 = var16.getInteractions().get(InteractionType.Pickup);
            if (var17 != null) {
               List var28 = SpatialResource.getThreadLocalReferenceList();
               var10.ordered(var12, var14, var28);

               for (Ref var30 : var28) {
                  Archetype var31 = var4.getArchetype(var30);
                  if (!var31.contains(DeathComponent.getComponentType()) && !var31.contains(Spectating.getComponentType())) {
                     InteractionManager var32 = var4.getComponent(var30, InteractionModule.get().getInteractionManagerComponent());
                     assert var32 != null;
                     Ref var33 = var3.getReferenceTo(var2);
                     var5.run(var5x -> {
                        InteractionContext var6 = InteractionContext.forInteraction(var32, var30, InteractionType.Pickup, var5);
                        InteractionChain var7 = var32.initChain(InteractionType.Pickup, var6, RootInteraction.getRootInteractionOrUnknown(var17), false);
                        var6.getMetaStore().putMetaObject(Interaction.TARGET_ENTITY, var33);
                        var32.executeChain(var33, var5, var7);
                        var5x.removeEntity(var33, RemoveReason.REMOVE);
                     });
                     class="kw">return;
                  }
               }
            } else {
               List var18 = SpatialResource.getThreadLocalReferenceList();
               var10.ordered(var12, var14, var18);

               for (Ref var20 : var18) {
                  Archetype var21 = var4.getArchetype(var20);
                  if (!var21.contains(DeathComponent.getComponentType()) && !var21.contains(Spectating.getComponentType())) {
                     Player var22 = var4.getComponent(var20, this.playerComponentType);
                     assert var22 != null;
                     ItemStackTransaction var23 = Player.giveItem(var15, var20, var5);
                     ItemStack var24 = var23.getRemainder();
                     if (ItemStack.isEmpty(var24)) {
                        var7.setRemovedByPlayerPickup(true);
                        var5.removeEntity(var6, RemoveReason.REMOVE);
                        Player.notifyPickupItem(var20, var15, var12, var5);
                        Holder var34 = ItemComponent.generatePickedUpItem(var6, var5, var20, var12);
                        if (var34 != null) {
                           var5.addEntity(var34, AddReason.SPAWN);
                        }
                        break;
                     }

                     if (!var24.equals(var15)) {
                        int var25 = var15.getQuantity() - var24.getQuantity();
                        var15 = var24;
                        var7.setItemStack(var24);
                        float var26 = var7.computeLifetimeSeconds(var5);
                        DespawnComponent.trySetDespawn(var5, var8, var6, var13, var26);
                        Holder var27 = ItemComponent.generatePickedUpItem(var6, var5, var20, var12);
                        if (var27 != null) {
                           var5.addEntity(var27, AddReason.SPAWN);
                        }

                        if (var25 > 0) {
                           Player.notifyPickupItem(var20, var15.withQuantity(var25), var12, var5);
                        }
                     }
                  }
               }
            }
         }
      }
   }
}