BlockModule class

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

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

extends: JavaPlugin

Поля (44)

МодификаторыТипИмя
public static final ThreadLocal<BlockModule.BlockEntityPreprocessor> LOCAL
final PluginManifest MANIFEST
public final BiIntConsumer blockCollector
public final Int2ObjectMap<Holder<ChunkStore>> blockEntities
public final IntList blockIds
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
break
break
public final IntList ids
private final int index
public final IntList indices
instance
private boolean needRebuild
private static final Query<ChunkStore> query
private final Ref<ChunkStore> sectionRef
public final IntConsumer typeCollector
ComponentRegistryProxy var1
Holder var1
int var10
Holder var11
ChunkColumn var2
BlockType var2
BlockComponentSection var2
Holder[] var3
ChunkSection var3
BlockModule.BlockEntityPreprocessor var4
ChunkStore var4
UnknownComponents var4
Ref var5
BlockComponentSection var5
ChunkSection var5
Store var5
BlockModule.BlockStateInfo var5
BlockModule.BlockStateInfo var5
ItemContainerBlock var5
BlockSection var6
Ref var6
Ref var6
Ref var6
Ref var6
BlockComponentSection var7
BlockComponentSection var7
BlockComponentSection var7
int var9

Методы (61)

МодификаторыВозвратСигнатура
public BlockEntityPreprocessorpublic BlockEntityPreprocessor()
public BlockStateInfopublic BlockStateInfo(int var1, @Nonnull Ref<ChunkStore> var2)
public BlockStateInfoNeedRebuildpublic BlockStateInfoNeedRebuild()
public BlockStateInfoNeedRebuildpublic BlockStateInfoNeedRebuild(boolean var1)
public BlockStateInfoRefSystempublic BlockStateInfoRefSystem(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1)
public ItemContainerStateRefSystempublic ItemContainerStateRefSystem()
public MigrateItemContainerpublic MigrateItemContainer()
public MigrationSystempublic MigrationSystem()
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException()
public void clearpublic void clear()
public Component<ChunkStore> clonepublic Component<ChunkStore> clone()
public Resource<ChunkStore> clonepublic Resource<ChunkStore> clone()
private void collectBlockprivate void collectBlock(int var1, int var2)
private void collectTypeprivate void collectType(int var1)
static boolean coordsInSectionboolean coordsInSection(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4)
public boolean fillWorldPospublic boolean fillWorldPos(@Nonnull Vector3i var1)
public boolean fillWorldPospublic boolean fillWorldPos(@Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull Vector3i var2)
for for(int var5 = 0; var5 < 10; var5++)
abstract for for(int var8 = 0; var8 < var4.indices.size()
static BlockModule getBlockModule get()
public ComponentType<ChunkStore, BlockMapMarker> getBlockMapMarkerComponentTypeComponentType<ChunkStore, BlockMapMarker> getBlockMapMarkerComponentType()
public ResourceType<ChunkStore, BlockMapMarkersResource> getBlockMapMarkersResourceTypeResourceType<ChunkStore, BlockMapMarkersResource> getBlockMapMarkersResourceType()
public ComponentType<ChunkStore, BlockModule.BlockStateInfo> getBlockStateInfoComponentTypeComponentType<ChunkStore, BlockModule.BlockStateInfo> getBlockStateInfoComponentType()
public ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getBlockStateInfoNeedRebuildResourceTypeResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getBlockStateInfoNeedRebuildResourceType()
public static ComponentType<ChunkStore, BlockModule.BlockStateInfo> getComponentTypepublic static ComponentType<ChunkStore, BlockModule.BlockStateInfo> getComponentType()
public int getIndexpublic int getIndex()
public ComponentType<ChunkStore, ItemContainerBlock> getItemContainerBlockComponentTypeComponentType<ChunkStore, ItemContainerBlock> getItemContainerBlockComponentType()
public ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getItemContainerSpatialResourceTypeResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getItemContainerSpatialResourceType()
public ComponentType<ChunkStore, LaunchPad> getLaunchPadComponentTypeComponentType<ChunkStore, LaunchPad> getLaunchPadComponentType()
public SystemType<ChunkStore, BlockModule.MigrationSystem> getMigrationSystemTypeSystemType<ChunkStore, BlockModule.MigrationSystem> getMigrationSystemType()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public static ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getResourceTypepublic static ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getResourceType()
public ComponentType<ChunkStore, RespawnBlock> getRespawnBlockComponentTypeComponentType<ChunkStore, RespawnBlock> getRespawnBlockComponentType()
public Ref<ChunkStore> getSectionRefpublic Ref<ChunkStore> getSectionRef()
if if(var2 != null)
if if(var3 != null)
if if(var5 == null)
if if(var2 != null)
if if(var3 == null)
if if(this.needRebuild)
if if(var7 != null)
if if(var7 != null)
if if(var5 != null)
public boolean invalidateAndReturnIfNeedRebuildpublic boolean invalidateAndReturnIfNeedRebuild()
public void markAsNeedRebuildpublic void markAsNeedRebuild()
public void markNeedsSavingpublic void markNeedsSaving()
public void markNeedsSavingpublic void markNeedsSaving(ComponentAccessor<ChunkStore> var1)
static void onChunkPreLoadProcessEnsureBlockEntityvoid onChunkPreLoadProcessEnsureBlockEntity(@Nonnull ChunkPreLoadProcessEvent var0)
public void onEntityAddpublic void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
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)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3)
abstract super super(var1)
switch switch(var2)
switch switch(var2)
public String toStringpublic String toString()
public String toStringpublic String toString()

Исходный код

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

class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
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.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.SystemType;
class="kw">import com.hypixel.hytale.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.KDTree;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.event.EventPriority;
class="kw">import com.hypixel.hytale.function.consumer.BiIntConsumer;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.LegacyModule;
class="kw">import com.hypixel.hytale.server.core.modules.block.components.ItemContainerBlock;
class="kw">import com.hypixel.hytale.server.core.modules.block.system.ItemContainerBlockSpatialSystem;
class="kw">import com.hypixel.hytale.server.core.modules.block.system.ItemContainerSystems;
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.ChunkColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
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.events.AddWorldEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.ChunkPreLoadProcessEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.BlockMapMarker;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.BlockMapMarkersResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.LaunchPad;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.RespawnBlock;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntConsumer;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class BlockModule class="kw">extends JavaPlugin {
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(BlockModule.class).depends(LegacyModule.class).build();
   class="kw">private class="kw">static BlockModule instance;
   class="kw">private SystemType<ChunkStore, BlockModule.MigrationSystem> migrationSystemType;
   class="kw">private ComponentType<ChunkStore, LaunchPad> launchPadComponentType;
   class="kw">private ComponentType<ChunkStore, RespawnBlock> respawnBlockComponentType;
   class="kw">private ComponentType<ChunkStore, BlockMapMarker> blockMapMarkerComponentType;
   class="kw">private ResourceType<ChunkStore, BlockMapMarkersResource> blockMapMarkersResourceType;
   class="kw">private ComponentType<ChunkStore, ItemContainerBlock> itemContainerBlockComponentType;
   class="kw">private ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType;
   class="kw">private ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> blockStateInfoNeedRebuildResourceType;
   class="kw">private ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> itemContainerSpatialResourceType;

   class="kw">public class="kw">static BlockModule get() {
      class="kw">return instance;
   }

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

   @Override
   class="kw">protected void setup() {
      ComponentRegistryProxy var1 = this.getChunkStoreRegistry();
      this.migrationSystemType = var1.registerSystemType(BlockModule.MigrationSystem.class);
      this.blockStateInfoComponentType = var1.registerComponent(BlockModule.BlockStateInfo.class, () -> {
         throw new UnsupportedOperationException();
      });
      var1.registerSystem(new BlockModule.BlockStateInfoRefSystem(this.blockStateInfoComponentType));
      this.launchPadComponentType = var1.registerComponent(LaunchPad.class, "LaunchPad", LaunchPad.CODEC);
      this.respawnBlockComponentType = var1.registerComponent(RespawnBlock.class, "RespawnBlock", RespawnBlock.CODEC);
      var1.registerSystem(new RespawnBlock.OnRemove());
      this.itemContainerBlockComponentType = var1.registerComponent(ItemContainerBlock.class, "ItemContainerBlock", ItemContainerBlock.CODEC);
      var1.registerSystem(new BlockModule.MigrateItemContainer());
      var1.registerSystem(new ItemContainerSystems.OnAddedOrRemoved());
      var1.registerSystem(new ItemContainerSystems.OnReplaced());
      var1.registerSystem(new ItemContainerSystems.OnReplacedHolder());
      this.blockMapMarkerComponentType = var1.registerComponent(BlockMapMarker.class, "BlockMapMarker", BlockMapMarker.CODEC);
      this.blockMapMarkersResourceType = var1.registerResource(BlockMapMarkersResource.class, "BlockMapMarkers", BlockMapMarkersResource.CODEC);
      var1.registerSystem(new BlockMapMarker.OnAddRemove());
      this.getEventRegistry()
         .registerGlobal(
            AddWorldEvent.class,
            var0 -> var0.getWorld().getWorldMapManager().getMarkerProviders().put("blockMapMarkers", BlockMapMarker.MarkerProvider.INSTANCE)
         );
      this.blockStateInfoNeedRebuildResourceType = var1.registerResource(
         BlockModule.BlockStateInfoNeedRebuild.class, BlockModule.BlockStateInfoNeedRebuild::new
      );
      this.itemContainerSpatialResourceType = this.getChunkStoreRegistry().registerSpatialResource(() -> new KDTree<>(Ref::isValid));
      this.getChunkStoreRegistry().registerSystem(new ItemContainerBlockSpatialSystem(this.itemContainerSpatialResourceType));
      this.getChunkStoreRegistry().registerSystem(new BlockModule.ItemContainerStateRefSystem());
      this.getEventRegistry().registerGlobal(EventPriority.EARLY, ChunkPreLoadProcessEvent.class, BlockModule::onChunkPreLoadProcessEnsureBlockEntity);
   }

   class="kw">private class="kw">static void onChunkPreLoadProcessEnsureBlockEntity(@Nonnull ChunkPreLoadProcessEvent var0) {
      if (var0.isNewlyGenerated()) {
         Holder var1 = var0.getHolder();
         ChunkColumn var2 = var1.getComponent(ChunkColumn.getComponentType());
         if (var2 != null) {
            Holder[] var3 = var2.getSectionHolders();
            if (var3 != null) {
               BlockModule.BlockEntityPreprocessor var4 = BlockModule.BlockEntityPreprocessor.LOCAL.get();

               for (int var5 = 0; var5 < 10; var5++) {
                  BlockSection var6 = var3[var5].ensureAndGetComponent(BlockSection.getComponentType());
                  if (!var6.isSolidAir()) {
                     BlockComponentSection var7 = var3[var5].ensureAndGetComponent(BlockComponentSection.getComponentType());
                     var4.clear();
                     var6.forEachValue(var4.typeCollector);
                     if (!var4.ids.isEmpty()) {
                        var6.find(var4.ids, var4.blockCollector);
                        assert var4.indices.size() == var4.blockIds.size();

                        for (int var8 = 0; var8 < var4.indices.size(); var8++) {
                           int var9 = var4.indices.getInt(var8);
                           int var10 = var4.blockIds.getInt(var8);
                           Holder var11 = (Holder<ChunkStore>)var4.blockEntities.get(var10);
                           if (var11 != null && var6.getFiller(var9) == 0 && var7.getBlockHolder(var9) == null) {
                              var7.addBlockHolder(var9, var11.clone());
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public SystemType<ChunkStore, BlockModule.MigrationSystem> getMigrationSystemType() {
      class="kw">return this.migrationSystemType;
   }

   class="kw">public ComponentType<ChunkStore, BlockModule.BlockStateInfo> getBlockStateInfoComponentType() {
      class="kw">return this.blockStateInfoComponentType;
   }

   class="kw">public ComponentType<ChunkStore, LaunchPad> getLaunchPadComponentType() {
      class="kw">return this.launchPadComponentType;
   }

   class="kw">public ComponentType<ChunkStore, RespawnBlock> getRespawnBlockComponentType() {
      class="kw">return this.respawnBlockComponentType;
   }

   class="kw">public ComponentType<ChunkStore, BlockMapMarker> getBlockMapMarkerComponentType() {
      class="kw">return this.blockMapMarkerComponentType;
   }

   class="kw">public ResourceType<ChunkStore, BlockMapMarkersResource> getBlockMapMarkersResourceType() {
      class="kw">return this.blockMapMarkersResourceType;
   }

   class="kw">public ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getBlockStateInfoNeedRebuildResourceType() {
      class="kw">return this.blockStateInfoNeedRebuildResourceType;
   }

   class="kw">public ComponentType<ChunkStore, ItemContainerBlock> getItemContainerBlockComponentType() {
      class="kw">return this.itemContainerBlockComponentType;
   }

   class="kw">public ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getItemContainerSpatialResourceType() {
      class="kw">return this.itemContainerSpatialResourceType;
   }

   @Nullable
   class="kw">public class="kw">static Ref<ChunkStore> getBlockEntity(@Nonnull World var0, int var1, int var2, int var3) {
      ChunkStore var4 = var0.getChunkStore();
      Ref var5 = var4.getChunkSectionReferenceAtBlock(var1, var2, var3);
      class="kw">return var5 == null ? null : getBlockEntity(var4.getStore(), var5, var1, var2, var3);
   }

   @Nullable
   class="kw">public class="kw">static Ref<ChunkStore> getBlockEntity(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4) {
      assert coordsInSection(var0, var1, var2, var3, var4) : "block (" + var2 + ", " + var3 + ", " + var4 + ") is outside the given section";
      BlockComponentSection var5 = var0.getComponent(var1, BlockComponentSection.getComponentType());
      if (var5 == null) {
         class="kw">return null;
      }

      Ref var6 = var5.getBlockReference(ChunkUtil.indexBlock(var2, var3, var4));
      class="kw">return var6 != null && var6.isValid() ? var6 : null;
   }

   class="kw">private class="kw">static boolean coordsInSection(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4) {
      ChunkSection var5 = var0.getComponent(var1, ChunkSection.getComponentType());
      class="kw">return var5 == null
         || var5.getX() == ChunkUtil.chunkCoordinate(var2) && var5.getY() == ChunkUtil.chunkCoordinate(var3) && var5.getZ() == ChunkUtil.chunkCoordinate(var4);
   }

   @Nullable
   class="kw">public class="kw">static <T class="kw">extends Component<ChunkStore>> T getComponent(ComponentType<ChunkStore, T> var0, World var1, int var2, int var3, int var4) {
      Store var5 = var1.getChunkStore().getStore();
      Ref var6 = getBlockEntity(var1, var2, var3, var4);
      class="kw">return var6 == null ? null : var5.getComponent(var6, var0);
   }

   class="kw">public class="kw">static class="kw">final class BlockEntityPreprocessor {
      class="kw">public class="kw">static class="kw">final ThreadLocal<BlockModule.BlockEntityPreprocessor> LOCAL = ThreadLocal.withInitial(BlockModule.BlockEntityPreprocessor::new);
      class="kw">public class="kw">final IntList ids = new IntArrayList();
      class="kw">public class="kw">final Int2ObjectMap<Holder<ChunkStore>> blockEntities = new Int2ObjectOpenHashMap();
      class="kw">public class="kw">final IntList indices = new IntArrayList();
      class="kw">public class="kw">final IntList blockIds = new IntArrayList();
      class="kw">public class="kw">final IntConsumer typeCollector = this::collectType;
      class="kw">public class="kw">final BiIntConsumer blockCollector = this::collectBlock;

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

      class="kw">public void clear() {
         this.ids.clear();
         this.blockEntities.clear();
         this.indices.clear();
         this.blockIds.clear();
      }

      class="kw">private void collectType(int var1) {
         BlockType var2 = BlockType.getAssetMap().getAsset(var1);
         if (var2 != null && !var2.isUnknown() && var2.getBlockEntity() != null) {
            this.ids.add(var1);
            this.blockEntities.put(var1, var2.getBlockEntity());
         }
      }

      class="kw">private void collectBlock(int var1, int var2) {
         this.indices.add(var1);
         this.blockIds.add(var2);
      }
   }

   class="kw">public class="kw">static class BlockStateInfo class="kw">implements Component<ChunkStore> {
      class="kw">private class="kw">final int index;
      @Nonnull
      class="kw">private class="kw">final Ref<ChunkStore> sectionRef;

      class="kw">public class="kw">static ComponentType<ChunkStore, BlockModule.BlockStateInfo> getComponentType() {
         class="kw">return BlockModule.get().getBlockStateInfoComponentType();
      }

      class="kw">public BlockStateInfo(int var1, @Nonnull Ref<ChunkStore> var2) {
         Objects.requireNonNull(var2);
         this.index = var1;
         this.sectionRef = var2;
      }

      class="kw">public int getIndex() {
         class="kw">return this.index;
      }

      @Nonnull
      class="kw">public Ref<ChunkStore> getSectionRef() {
         class="kw">return this.sectionRef;
      }

      class="kw">public void markNeedsSaving() {
         if (this.sectionRef.isValid()) {
            this.markNeedsSaving(this.sectionRef.getStore());
         }
      }

      class="kw">public void markNeedsSaving(ComponentAccessor<ChunkStore> var1) {
         if (this.sectionRef.isValid()) {
            BlockComponentSection var2 = var1.getComponent(this.sectionRef, BlockComponentSection.getComponentType());
            if (var2 != null) {
               var2.markBlockNeedsSaving(this.index);
            }
         }
      }

      class="kw">public boolean fillWorldPos(@Nonnull Vector3i var1) {
         class="kw">return !this.sectionRef.isValid() ? false : this.fillWorldPos(this.sectionRef.getStore(), var1);
      }

      class="kw">public boolean fillWorldPos(@Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull Vector3i var2) {
         if (!this.sectionRef.isValid()) {
            class="kw">return false;
         }

         ChunkSection var3 = var1.getComponent(this.sectionRef, ChunkSection.getComponentType());
         if (var3 == null) {
            class="kw">return false;
         }

         var2.set(
            ChunkUtil.worldCoordFromLocalCoord(var3.getX(), ChunkUtil.xFromIndex(this.index)),
            ChunkUtil.worldCoordFromLocalCoord(var3.getY(), ChunkUtil.yFromIndex(this.index)),
            ChunkUtil.worldCoordFromLocalCoord(var3.getZ(), ChunkUtil.zFromIndex(this.index))
         );
         class="kw">return true;
      }

      @Nonnull
      @Override
      class="kw">public Component<ChunkStore> clone() {
         class="kw">return new BlockModule.BlockStateInfo(this.index, this.sectionRef);
      }
   }

   class="kw">public class="kw">static class BlockStateInfoNeedRebuild class="kw">implements Resource<ChunkStore> {
      class="kw">private boolean needRebuild;

      class="kw">public class="kw">static ResourceType<ChunkStore, BlockModule.BlockStateInfoNeedRebuild> getResourceType() {
         class="kw">return BlockModule.get().getBlockStateInfoNeedRebuildResourceType();
      }

      class="kw">public BlockStateInfoNeedRebuild() {
         this.needRebuild = false;
      }

      class="kw">public BlockStateInfoNeedRebuild(boolean var1) {
         this.needRebuild = var1;
      }

      class="kw">public boolean invalidateAndReturnIfNeedRebuild() {
         if (this.needRebuild) {
            this.needRebuild = false;
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }

      class="kw">public void markAsNeedRebuild() {
         this.needRebuild = true;
      }

      @Override
      class="kw">public Resource<ChunkStore> clone() {
         class="kw">return new BlockModule.BlockStateInfoNeedRebuild(this.needRebuild);
      }
   }

   class="kw">public class="kw">static class BlockStateInfoRefSystem class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType;

      class="kw">public BlockStateInfoRefSystem(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1) {
         this.blockStateInfoComponentType = var1;
      }

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

      @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;
         Ref var6 = var5.sectionRef;
         if (var6.isValid()) {
            BlockComponentSection var7 = var4.getComponent(var6, BlockComponentSection.getComponentType());
            if (var7 != null) {
               class="kw">switch (var2) {
                  case SPAWN:
                     var7.addBlockReference(var5.getIndex(), var1);
                     break;
                  case LOAD:
                     var7.loadBlockReference(var5.getIndex(), var1);
               }
            }
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var5 != null;
         Ref var6 = var5.sectionRef;
         if (var6.isValid()) {
            BlockComponentSection var7 = var4.getComponent(var6, BlockComponentSection.getComponentType());
            if (var7 != null) {
               class="kw">switch (var2) {
                  case REMOVE:
                  case BUILDER_TOOLS_UNDO:
                     var7.removeBlockReference(var5.getIndex(), var1);
                     break;
                  case UNLOAD:
                     var7.unloadBlockReference(var5.getIndex(), var1);
               }
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "BlockStateInfoRefSystem{componentType=" + this.blockStateInfoComponentType + "}";
      }
   }

   class="kw">public class="kw">static class ItemContainerStateRefSystem class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">static class="kw">final Query<ChunkStore> query = ItemContainerBlock.getComponentType();

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

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         var4.getExternalData().getWorld().getChunkStore().getStore().getResource(BlockModule.BlockStateInfoNeedRebuild.getResourceType()).markAsNeedRebuild();
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         var4.getExternalData().getWorld().getChunkStore().getStore().getResource(BlockModule.BlockStateInfoNeedRebuild.getResourceType()).markAsNeedRebuild();
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "ItemContainerStateRefSystem{}";
      }
   }

   class="kw">public class="kw">static class MigrateItemContainer class="kw">extends BlockModule.MigrationSystem {
      class="kw">public MigrateItemContainer() {
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3) {
         UnknownComponents var4 = var1.getComponent(ChunkStore.REGISTRY.getUnknownComponentType());
         assert var4 != null;
         ItemContainerBlock var5 = var4.removeComponent("container", ItemContainerBlock.CODEC);
         if (var5 != null) {
            var1.putComponent(ItemContainerBlock.getComponentType(), var5);
         }
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3) {
      }

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

   class="kw">public class="kw">abstract class="kw">static class MigrationSystem class="kw">extends HolderSystem<ChunkStore> {
      class="kw">public MigrationSystem() {
      }
   }
}