StashSystem class

Пакет: com.hypixel.hytale.builtin.adventure.stash

Файл: com/hypixel/hytale/builtin/adventure/stash/StashPlugin.java

extends: RefSystem<ChunkStore>

Поля (8)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, ItemContainerBlock> itemContainerStateComponentType
private final Query<ChunkStore> query
World var5
ItemContainerBlock var6
BlockModule.BlockStateInfo var7
StashGameplayConfig var8
boolean var9

Методы (3)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
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.builtin.adventure.stash;

class="kw">import com.hypixel.hytale.component.AddReason;
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.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ListTransaction;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortArrayList;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortLists;
class="kw">import java.util.List;
class="kw">import java.util.Random;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StashPlugin class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

   class="kw">public StashPlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
   }

   @Override
   class="kw">protected void setup() {
      this.getChunkStoreRegistry().registerSystem(new StashPlugin.StashSystem(ItemContainerBlock.getComponentType()));
      this.getCodecRegistry(GameplayConfig.PLUGIN_CODEC).register(StashGameplayConfig.class, "Stash", StashGameplayConfig.CODEC);
   }

   @Nullable
   class="kw">public class="kw">static ListTransaction<ItemStackTransaction> stash(@Nonnull BlockModule.BlockStateInfo var0, @Nonnull ItemContainerBlock var1, boolean var2) {
      String var3 = var1.getDroplist();
      if (var3 == null) {
         class="kw">return null;
      }

      List var4 = ItemModule.get().getRandomItemDrops(var3);
      if (var4.isEmpty()) {
         class="kw">return ListTransaction.getEmptyTransaction(true);
      }

      SimpleItemContainer var5 = var1.getItemContainer();
      short var6 = var5.getCapacity();
      ShortArrayList var7 = new ShortArrayList(var6);

      for (short var8 = 0; var8 < var6; var8++) {
         var7.add(var8);
      }

      ChunkSection var22 = var0.getSectionRef().getStore().getComponent(var0.getSectionRef(), ChunkSection.getComponentType());
      int var9 = ChunkUtil.xFromIndex(var0.getIndex());
      int var10 = ChunkUtil.yFromIndex(var0.getIndex());
      int var11 = ChunkUtil.zFromIndex(var0.getIndex());
      int var12 = ChunkUtil.worldCoordFromLocalCoord(var22.getX(), var9);
      int var13 = ChunkUtil.worldCoordFromLocalCoord(var22.getY(), var10);
      int var14 = ChunkUtil.worldCoordFromLocalCoord(var22.getZ(), var11);
      long var15 = HashUtil.hash(var12, var13, var14);
      Random var17 = new Random(var15);
      ShortLists.shuffle(var7, var17);
      boolean var18 = false;

      for (int var19 = 0; var19 < var4.size() && var19 < var7.size(); var19++) {
         short var20 = var7.getShort(var19);
         ItemStackSlotTransaction var21 = var5.addItemStackToSlot(var20, var4.get(var19));
         if (var21.getRemainder() != null && !var21.getRemainder().isEmpty()) {
            LOGGER.at(Level.WARNING).log("Could not add Item to Stash at %d, %d, %d: %s", var12, var10, var14, var21.getRemainder());
         } else {
            var18 = true;
         }
      }

      if (var2 && var18) {
         var1.setDroplist(null);
         var0.markNeedsSaving();
      }

      class="kw">return new ListTransaction<>(var18, new ObjectArrayList());
   }

   class="kw">private class="kw">static class StashSystem class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, ItemContainerBlock> itemContainerStateComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public StashSystem(@Nonnull ComponentType<ChunkStore, ItemContainerBlock> var1) {
         this.itemContainerStateComponentType = var1;
         this.query = Query.and(var1, this.blockStateInfoComponentType);
      }

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         World var5 = var3.getExternalData().getWorld();
         if (var5.getWorldConfig().isBlockSpawnersResolved()) {
            ItemContainerBlock var6 = var3.getComponent(var1, this.itemContainerStateComponentType);
            assert var6 != null;
            BlockModule.BlockStateInfo var7 = var3.getComponent(var1, this.blockStateInfoComponentType);
            assert var7 != null;
            StashGameplayConfig var8 = StashGameplayConfig.getOrDefault(var5.getGameplayConfig());
            boolean var9 = var8.isClearContainerDropList();
            StashPlugin.stash(var7, var6, var9);
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
      }
   }
}