OnAddedOrRemoved class

Пакет: com.hypixel.hytale.server.core.modules.block.system

Файл: com/hypixel/hytale/server/core/modules/block/system/ItemContainerSystems.java

extends: RefSystem<ChunkStore>

Поля (37)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType
private final Query<ChunkStore> query
int var10
int var10
int var11
int var11
int var12
int var12
BlockSection var13
World var13
int var14
Store var14
BlockType var15
Vector3d var15
SimpleItemContainer var16
var16
List var16
ItemContainerBlock var17
Vector3d var17
short var18
Holder[] var18
ObjectArrayList var19
Store var20
Vector3d var21
Holder[] var22
World var3
BlockModule.BlockStateInfo var5
BlockModule.BlockStateInfo var5
ItemContainerBlock var6
ItemContainerBlock var6
Ref var7
Ref var7
ChunkSection var8
ChunkSection var8
int var9
int var9

Методы (6)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var17 != null)
if if(var2 != RemoveReason.UNLOAD)
if if(var18.length > 0)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
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.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.EntityEventSystem;
class="kw">import com.hypixel.hytale.component.system.EntityHolderEventSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.event.EventPriority;
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.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.windows.WindowManager;
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.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockReplaceEvent;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

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

   class="kw">public class="kw">static class OnAddedOrRemoved class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
      class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();
      class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.itemContainerBlockComponentType, this.blockStateInfoComponentType);

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var5 != null;
         ItemContainerBlock var6 = var4.getComponent(var1, this.itemContainerBlockComponentType);
         assert var6 != null;
         Ref var7 = var5.getSectionRef();
         if (var7.isValid()) {
            ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
            assert var8 != null;
            int var9 = var5.getIndex();
            int var10 = ChunkUtil.xFromIndex(var9);
            int var11 = ChunkUtil.yFromIndex(var9);
            int var12 = ChunkUtil.zFromIndex(var9);
            BlockSection var13 = var4.getComponent(var7, BlockSection.getComponentType());
            assert var13 != null;
            int var14 = var13.get(var10, var11, var12);
            BlockType var15 = BlockType.getAssetMap().getAsset(var14);
            if (var15 != null && var15.getBlockEntity() != null) {
               SimpleItemContainer var16 = var6.getItemContainer();
               ItemContainerBlock var17 = var15.getBlockEntity().getComponent(this.itemContainerBlockComponentType);
               if (var17 != null) {
                  short var18 = var17.getCapacity();
                  ObjectArrayList var19 = new ObjectArrayList();
                  var16 = ItemContainer.ensureContainerCapacity(var16, var18, SimpleItemContainer::new, var19);
                  var6.setItemContainer(var16);
                  if (!var19.isEmpty()) {
                     Store var20 = var3.getExternalData().getWorld().getEntityStore().getStore();
                     Vector3d var21 = new Vector3d(
                        ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
                        ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
                        ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
                     );
                     Holder[] var22 = ItemComponent.generateItemDrops(var20, var19, var21, Rotation3f.IDENTITY);
                     var20.addEntities(var22, AddReason.SPAWN);
                  }
               }

               var16.registerChangeEvent(EventPriority.LAST, var2x -> {
                  World var3 = var1.getStore().getExternalData().getWorld();
                  if (var3.isInThread()) {
                     var5.markNeedsSaving();
                  } else {
                     var3.execute(var5::markNeedsSaving);
                  }
               });
            }
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         if (var2 != RemoveReason.UNLOAD) {
            BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
            assert var5 != null;
            ItemContainerBlock var6 = var4.getComponent(var1, this.itemContainerBlockComponentType);
            assert var6 != null;
            WindowManager.closeAndRemoveAll(var6.getWindows());
            Ref var7 = var5.getSectionRef();
            if (var7.isValid()) {
               ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
               assert var8 != null;
               int var9 = var5.getIndex();
               int var10 = ChunkUtil.xFromIndex(var9);
               int var11 = ChunkUtil.yFromIndex(var9);
               int var12 = ChunkUtil.zFromIndex(var9);
               World var13 = var3.getExternalData().getWorld();
               Store var14 = var13.getEntityStore().getStore();
               Vector3d var15 = new Vector3d(
                  ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
                  ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
                  ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
               );
               List var16 = var6.getItemContainer().dropAllItemStacks();
               Vector3d var17 = var15.add(0.5, 0.0, 0.5);
               Holder[] var18 = ItemComponent.generateItemDrops(var14, var16, var17, Rotation3f.IDENTITY);
               if (var18.length > 0) {
                  var13.execute(() -> var14.addEntities(var18, AddReason.SPAWN));
               }
            }
         }
      }

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

   class="kw">public class="kw">static class OnReplaced class="kw">extends EntityEventSystem<ChunkStore, BlockReplaceEvent> {
      class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();

      class="kw">public OnReplaced() {
         super(BlockReplaceEvent.class);
      }

      class="kw">public void handle(
         int var1,
         @Nonnull ArchetypeChunk<ChunkStore> var2,
         @Nonnull Store<ChunkStore> var3,
         @Nonnull CommandBuffer<ChunkStore> var4,
         @Nonnull BlockReplaceEvent var5
      ) {
         ItemContainerBlock var6 = var5.getNewEntity().getComponent(this.itemContainerBlockComponentType);
         if (var6 != null) {
            ItemContainerBlock var7 = var2.getComponent(var1, this.itemContainerBlockComponentType);
            assert var7 != null;
            var7.getItemContainer().moveAllItemStacksTo(var6.getItemContainer());
         }
      }

      @Nullable
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.itemContainerBlockComponentType;
      }
   }

   class="kw">public class="kw">static class OnReplacedHolder class="kw">extends EntityHolderEventSystem<ChunkStore, BlockReplaceEvent> {
      class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType = ItemContainerBlock.getComponentType();

      class="kw">public OnReplacedHolder() {
         super(BlockReplaceEvent.class);
      }

      class="kw">public void handle(
         @Nonnull Holder<ChunkStore> var1, @Nonnull Store<ChunkStore> var2, @Nonnull CommandBuffer<ChunkStore> var3, @Nonnull BlockReplaceEvent var4
      ) {
         ItemContainerBlock var5 = var4.getNewEntity().getComponent(this.itemContainerBlockComponentType);
         if (var5 != null) {
            ItemContainerBlock var6 = var1.getComponent(this.itemContainerBlockComponentType);
            assert var6 != null;
            var6.getItemContainer().moveAllItemStacksTo(var5.getItemContainer());
         }
      }

      @Nullable
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.itemContainerBlockComponentType;
      }
   }
}