From 3302ab14b8941435dd9346fbc2b01f3e367c22c9 Mon Sep 17 00:00:00 2001 From: zontreck Date: Thu, 11 Apr 2024 00:47:31 -0700 Subject: [PATCH] Start to add in a block queue system to allow my other mods to have separate queues for different things. --- .../memory/world/BlockRestoreQueue.java | 44 +++++++++++++++++++ .../memory/world/PrimitiveBlock.java | 28 +++++++----- .../libzontreck/memory/world/SavedBlock.java | 13 +----- 3 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 src/main/java/dev/zontreck/libzontreck/memory/world/BlockRestoreQueue.java diff --git a/src/main/java/dev/zontreck/libzontreck/memory/world/BlockRestoreQueue.java b/src/main/java/dev/zontreck/libzontreck/memory/world/BlockRestoreQueue.java new file mode 100644 index 0000000..53ede6b --- /dev/null +++ b/src/main/java/dev/zontreck/libzontreck/memory/world/BlockRestoreQueue.java @@ -0,0 +1,44 @@ +package dev.zontreck.libzontreck.memory.world; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; + +import java.util.ArrayList; +import java.util.List; + +public abstract class BlockRestoreQueue +{ + private List BLOCK_QUEUE = new ArrayList<>(); + + /** + * Returns the restore queue name + * @return Name of the restore queue + */ + public abstract String getRestoreQueueName(); + + /** + * @return The number of blocks remaining in this queue + */ + public int getQueuedBlocks() + { + return BLOCK_QUEUE.size(); + } + + /** + * Queues a block to be restored + * @param block + */ + public void enqueueBlock(SavedBlock block) + { + BLOCK_QUEUE.add(block.getBlockPrimitive()); + } + + /** + * Queues a block to be restored + * @param block + */ + public void enqueueBlock(PrimitiveBlock block) + { + BLOCK_QUEUE.add(block); + } +} diff --git a/src/main/java/dev/zontreck/libzontreck/memory/world/PrimitiveBlock.java b/src/main/java/dev/zontreck/libzontreck/memory/world/PrimitiveBlock.java index dff455f..7d11970 100644 --- a/src/main/java/dev/zontreck/libzontreck/memory/world/PrimitiveBlock.java +++ b/src/main/java/dev/zontreck/libzontreck/memory/world/PrimitiveBlock.java @@ -9,13 +9,22 @@ import net.minecraft.world.level.block.state.BlockState; public class PrimitiveBlock { - public SavedBlock block; - public Block blockType; - public BlockState blockState; - public CompoundTag blockEntity; - public BlockPos position; - public ServerLevel level; + public final SavedBlock savedBlock; + public final Block blockType; + public final BlockState blockState; + public final CompoundTag blockEntity; + public final BlockPos position; + public final ServerLevel level; + public PrimitiveBlock(SavedBlock savedBlock, Block blockType, BlockState blockState, CompoundTag blockEntity, BlockPos position, ServerLevel level) + { + this.savedBlock = savedBlock; + this.blockType = blockType; + this.blockEntity = blockEntity; + this.position = position; + this.level = level; + this.blockState = blockState; + } /** * Alias method * @see SavedBlock#serialize() @@ -23,7 +32,7 @@ public class PrimitiveBlock */ public CompoundTag serialize() { - return block.serialize(); + return savedBlock.serialize(); } /** @@ -40,14 +49,13 @@ public class PrimitiveBlock /** * Compare a block with this primitive block - * @param block The block type to compare * @param state The block state to compare * @param entity The block entity to compare * @return True if identical */ - public boolean is(Block block, BlockState state, BlockEntity entity) + public boolean is(BlockState state, BlockEntity entity) { - if(block == this.blockType) + if(state.getBlock() == this.blockType) { // Check the block state if(this.blockState.equals(state)) diff --git a/src/main/java/dev/zontreck/libzontreck/memory/world/SavedBlock.java b/src/main/java/dev/zontreck/libzontreck/memory/world/SavedBlock.java index 7c9e928..652e2a1 100644 --- a/src/main/java/dev/zontreck/libzontreck/memory/world/SavedBlock.java +++ b/src/main/java/dev/zontreck/libzontreck/memory/world/SavedBlock.java @@ -2,19 +2,15 @@ package dev.zontreck.libzontreck.memory.world; import dev.zontreck.libzontreck.api.Vector3; import dev.zontreck.libzontreck.exceptions.InvalidDeserialization; -import dev.zontreck.libzontreck.vectors.Vector3i; import dev.zontreck.libzontreck.vectors.WorldPosition; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.server.ServerLifecycleHooks; public class SavedBlock { @@ -90,18 +86,11 @@ public class SavedBlock public PrimitiveBlock getBlockPrimitive() { - PrimitiveBlock prim = new PrimitiveBlock(); ServerLevel level = position.getActualDimension(); BlockState state = NbtUtils.readBlockState(level.holderLookup(Registries.BLOCK), blockState); - prim.blockState = state; - prim.block = this; - prim.blockType = state.getBlock(); - prim.blockEntity = blockEntity; - prim.position = position.Position.asBlockPos(); - prim.level = level; - return prim; + return new PrimitiveBlock(this, state.getBlock(), state, blockEntity, position.Position.asBlockPos(), level); } }