Start to add in a block queue system to allow my other mods to have separate queues for different things.
This commit is contained in:
parent
99e38893ca
commit
3302ab14b8
3 changed files with 63 additions and 22 deletions
|
@ -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<PrimitiveBlock> 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);
|
||||
}
|
||||
}
|
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Reference in a new issue