OnReplacedHolder class

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

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

extends: EntityHolderEventSystem<ChunkStore, BlockReplaceEvent>

Поля (3)

МодификаторыТипИмя
private final ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType
ItemContainerBlock var5
ItemContainerBlock var6

Методы (4)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public void handlepublic void handle(@Nonnull Holder<ChunkStore> var1, @Nonnull Store<ChunkStore> var2, @Nonnull CommandBuffer<ChunkStore> var3, @Nonnull BlockReplaceEvent var4)
if if(var5 != null)
abstract super super(BlockReplaceEvent.class)

Исходный код

Показать/скрыть
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;
      }
   }
}