ItemMergeSystem class

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

Файл: com/hypixel/hytale/server/core/modules/entity/item/ItemMergeSystem.java

extends: EntityTickingSystem<EntityStore>

Поля (22)

МодификаторыТипИмя
final float RADIUS
break
SpatialResource var10
TimeResource var11
TransformComponent var12
Vector3d var13
List var14
Ref var15
ItemComponent var18
ItemStack var19
int var20
int var21
float var22
ColorLight var23
DynamicLight var24
float var25
ItemComponent var6
ItemStack var7
var7
var7
Item var8
int var9

Методы (6)

МодификаторыВозвратСигнатура
for for(Ref var17 : var14)
if if(var7 != null)
if if(var20 < var9)
if if(var21 <= var9)
if if(var23 != null)
if if(var24 != null)

Исходный код

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

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.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.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.protocol.ColorLight;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.DespawnComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.DynamicLight;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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 javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class ItemMergeSystem class="kw">extends EntityTickingSystem<EntityStore> {
   class="kw">public class="kw">static class="kw">final float RADIUS = 2.0F;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, ItemComponent> itemComponentComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, Interactable> interactableComponentType;
   @Nonnull
   class="kw">private class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> itemSpatialComponent;
   @Nonnull
   class="kw">private class="kw">final Query<EntityStore> query;

   class="kw">public ItemMergeSystem(
      @Nonnull ComponentType<EntityStore, ItemComponent> var1,
      @Nonnull ComponentType<EntityStore, Interactable> var2,
      @Nonnull ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> var3
   ) {
      this.itemComponentComponentType = var1;
      this.itemSpatialComponent = var3;
      this.interactableComponentType = var2;
      this.query = Query.and(var1, TransformComponent.getComponentType(), Query.not(var2), Query.not(PreventItemMerging.getComponentType()));
   }

   @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) {
      ItemComponent var6 = var3.getComponent(var2, this.itemComponentComponentType);
      assert var6 != null;
      ItemStack var7 = var6.getItemStack();
      if (var7 != null) {
         Item var8 = var7.getItem();
         int var9 = var8.getMaxStack();
         if (var9 > 1 && var7.getQuantity() < var9) {
            if (var6.pollMergeDelay(var1)) {
               SpatialResource var10 = var4.getResource(this.itemSpatialComponent);
               TimeResource var11 = var4.getResource(TimeResource.getResourceType());
               TransformComponent var12 = var3.getComponent(var2, TransformComponent.getComponentType());
               assert var12 != null;
               Vector3d var13 = var12.getPosition();
               List var14 = SpatialResource.getThreadLocalReferenceList();
               var10.getSpatialStructure().ordered(var13, 2.0, var14);
               Ref var15 = var3.getReferenceTo(var2);

               for (Ref var17 : var14) {
                  if (var17.isValid() && !var17.equals(var15)) {
                     ItemComponent var18 = var4.getComponent(var17, this.itemComponentComponentType);
                     assert var18 != null;
                     ItemStack var19 = var18.getItemStack();
                     if (var19 != null && !var5.getArchetype(var17).contains(this.interactableComponentType) && var7.isStackableWith(var19)) {
                        int var20 = var19.getQuantity();
                        if (var20 < var9) {
                           int var21 = var7.getQuantity() + var20;
                           if (var21 <= var9) {
                              var5.removeEntity(var17, RemoveReason.REMOVE);
                              var18.setItemStack(null);
                              var7 = var7.withQuantity(var21);
                           } else {
                              var18.setItemStack(var7.withQuantity(var21 - var9));
                              float var22 = var18.computeLifetimeSeconds(var5);
                              DespawnComponent.trySetDespawn(var5, var11, var17, var5.getComponent(var17, DespawnComponent.getComponentType()), var22);
                              ColorLight var23 = var18.computeDynamicLight();
                              if (var23 != null) {
                                 DynamicLight var24 = var5.getComponent(var17, DynamicLight.getComponentType());
                                 if (var24 != null) {
                                    var24.setColorLight(var23);
                                 } else {
                                    var5.putComponent(var17, DynamicLight.getComponentType(), new DynamicLight(var23));
                                 }
                              }

                              var7 = var7.withQuantity(var9);
                           }

                           var6.setItemStack(var7);
                           float var25 = var6.computeLifetimeSeconds(var5);
                           DespawnComponent.trySetDespawn(var5, var11, var15, var3.getComponent(var2, DespawnComponent.getComponentType()), var25);
                           if (var7.getQuantity() >= var9) {
                              break;
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}