From 86f7fa7e27004fc3328353358f1366cc34a255af Mon Sep 17 00:00:00 2001 From: TheMode Date: Mon, 24 May 2021 21:39:30 +0200 Subject: [PATCH] Fix more errors --- .../server/collision/CollisionUtils.java | 3 +- .../event/player/PlayerBlockPlaceEvent.java | 102 ++---------------- .../instance/batch/ChunkGenerationBatch.java | 7 +- .../minestom/server/instance/block/Block.java | 2 + .../server/instance/block/BlockHandler.java | 4 + .../server/instance/block/BlockImpl.java | 7 +- .../block/rule/vanilla/WallPlacementRule.java | 3 +- .../net/minestom/server/utils/NBTUtils.java | 4 +- .../server/utils/block/BlockUtils.java | 2 +- .../server/utils/entity/EntityUtils.java | 3 +- 10 files changed, 31 insertions(+), 106 deletions(-) create mode 100644 src/main/java/net/minestom/server/instance/block/BlockHandler.java diff --git a/src/main/java/net/minestom/server/collision/CollisionUtils.java b/src/main/java/net/minestom/server/collision/CollisionUtils.java index 852b704e9..476e09b4e 100644 --- a/src/main/java/net/minestom/server/collision/CollisionUtils.java +++ b/src/main/java/net/minestom/server/collision/CollisionUtils.java @@ -161,8 +161,7 @@ public class CollisionUtils { } } - final short blockStateId = chunk.getBlockStateId(blockPos.getX(), blockPos.getY(), blockPos.getZ()); - final Block block = Block.fromStateId(blockStateId); + final Block block = chunk.getBlock(blockPos.getX(), blockPos.getY(), blockPos.getZ()); // TODO: block collision boxes // TODO: for the moment, always consider a full block diff --git a/src/main/java/net/minestom/server/event/player/PlayerBlockPlaceEvent.java b/src/main/java/net/minestom/server/event/player/PlayerBlockPlaceEvent.java index 2651b92d5..be5923ad6 100644 --- a/src/main/java/net/minestom/server/event/player/PlayerBlockPlaceEvent.java +++ b/src/main/java/net/minestom/server/event/player/PlayerBlockPlaceEvent.java @@ -1,28 +1,18 @@ package net.minestom.server.event.player; -import net.minestom.server.MinecraftServer; -import net.minestom.server.data.Data; import net.minestom.server.entity.Player; import net.minestom.server.event.CancellableEvent; import net.minestom.server.event.PlayerEvent; import net.minestom.server.instance.block.Block; -import net.minestom.server.instance.block.BlockManager; -import net.minestom.server.instance.block.CustomBlock; import net.minestom.server.utils.BlockPosition; -import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * Called when a player tries placing a block. */ public class PlayerBlockPlaceEvent extends PlayerEvent implements CancellableEvent { - private static final BlockManager BLOCK_MANAGER = MinecraftServer.getBlockManager(); - - private short blockStateId; - private short customBlockId; - private Data blockData; + private Block block; private final BlockPosition blockPosition; private final Player.Hand hand; @@ -33,100 +23,28 @@ public class PlayerBlockPlaceEvent extends PlayerEvent implements CancellableEve public PlayerBlockPlaceEvent(@NotNull Player player, @NotNull Block block, @NotNull BlockPosition blockPosition, @NotNull Player.Hand hand) { super(player); - this.blockStateId = block.getBlockId(); + this.block = block; this.blockPosition = blockPosition; this.hand = hand; this.consumeBlock = true; } /** - * Sets both the blockId and customBlockId. + * Gets the block which will be placed. * - * @param customBlock the custom block to place + * @return the block to place */ - public void setCustomBlock(@NotNull CustomBlock customBlock) { - setBlockStateId(customBlock.getDefaultBlockStateId()); - setCustomBlockId(customBlock.getCustomBlockId()); + public @NotNull Block getBlock() { + return block; } /** - * Sets both the blockStateId and customBlockId. + * Changes the block to be placed. * - * @param customBlockId the custom block id to place + * @param block the new block */ - public void setCustomBlock(short customBlockId) { - final CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId); - Check.notNull(customBlock, "The custom block with the id '" + customBlockId + "' does not exist"); - setCustomBlock(customBlock); - } - - /** - * Sets both the blockId and customBlockId. - * - * @param customBlockId the custom block id to place - */ - public void setCustomBlock(@NotNull String customBlockId) { - final CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId); - Check.notNull(customBlock, "The custom block with the identifier '" + customBlockId + "' does not exist"); - setCustomBlock(customBlock); - } - - /** - * Gets the custom block id. - * - * @return the custom block id - */ - public short getCustomBlockId() { - return customBlockId; - } - - /** - * Sets the custom block id to place. - *

- * WARNING: this does not change the visual block id, see {@link #setBlockStateId(short)} - * or {@link #setCustomBlock(short)}. - * - * @param customBlockId the custom block id - */ - public void setCustomBlockId(short customBlockId) { - this.customBlockId = customBlockId; - } - - /** - * Gets the block state id. - * - * @return the block state id - */ - public short getBlockStateId() { - return blockStateId; - } - - /** - * Changes the visual block id. - * - * @param blockStateId the new block state id - */ - public void setBlockStateId(short blockStateId) { - this.blockStateId = blockStateId; - } - - /** - * Gets the data that the (not placed yet) block should have - * - * @return the block data, null if not any - */ - @Nullable - public Data getBlockData() { - return blockData; - } - - /** - * Sets the data of the block to place. - * - * @param blockData the block data, null if not any - */ - public void setBlockData(@Nullable Data blockData) { - this.blockData = blockData; + public void setBlock(@NotNull Block block) { + this.block = block; } /** diff --git a/src/main/java/net/minestom/server/instance/batch/ChunkGenerationBatch.java b/src/main/java/net/minestom/server/instance/batch/ChunkGenerationBatch.java index 737b0a90e..8137ac3b4 100644 --- a/src/main/java/net/minestom/server/instance/batch/ChunkGenerationBatch.java +++ b/src/main/java/net/minestom/server/instance/batch/ChunkGenerationBatch.java @@ -1,8 +1,7 @@ package net.minestom.server.instance.batch; -import net.minestom.server.data.Data; import net.minestom.server.instance.*; -import net.minestom.server.utils.block.CustomBlockUtils; +import net.minestom.server.instance.block.Block; import net.minestom.server.utils.chunk.ChunkCallback; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -21,8 +20,8 @@ public class ChunkGenerationBatch extends ChunkBatch { } @Override - public void setSeparateBlocks(int x, int y, int z, short blockStateId, short customBlockId, @Nullable Data data) { - chunk.UNSAFE_setBlock(x, y, z, blockStateId, customBlockId, data, CustomBlockUtils.hasUpdate(customBlockId)); + public void setBlock(int x, int y, int z, @NotNull Block block) { + chunk.UNSAFE_setBlock(x, y, z, block); } public void generate(@NotNull ChunkGenerator chunkGenerator, @Nullable ChunkCallback callback) { diff --git a/src/main/java/net/minestom/server/instance/block/Block.java b/src/main/java/net/minestom/server/instance/block/Block.java index 7dd547172..c8d1a2ea0 100644 --- a/src/main/java/net/minestom/server/instance/block/Block.java +++ b/src/main/java/net/minestom/server/instance/block/Block.java @@ -38,6 +38,8 @@ public interface Block extends Keyed, TagReadable, BlockConstants { @NotNull BlockData getData(); + @Nullable BlockHandler getHandler(); + default boolean compare(@NotNull Block block, @NotNull Comparator comparator) { return comparator.equals(this, block); } diff --git a/src/main/java/net/minestom/server/instance/block/BlockHandler.java b/src/main/java/net/minestom/server/instance/block/BlockHandler.java new file mode 100644 index 000000000..f62fc9ff1 --- /dev/null +++ b/src/main/java/net/minestom/server/instance/block/BlockHandler.java @@ -0,0 +1,4 @@ +package net.minestom.server.instance.block; + +public interface BlockHandler { +} diff --git a/src/main/java/net/minestom/server/instance/block/BlockImpl.java b/src/main/java/net/minestom/server/instance/block/BlockImpl.java index 778bd58b7..06d6d0074 100644 --- a/src/main/java/net/minestom/server/instance/block/BlockImpl.java +++ b/src/main/java/net/minestom/server/instance/block/BlockImpl.java @@ -151,11 +151,16 @@ class BlockImpl implements Block { return blockData.get(stateId); } + @Override + public @Nullable BlockHandler getHandler() { + return null; + } + protected static BlockImpl create(NamespaceID namespaceID, short blockId, short minStateId, short maxStateId, short defaultStateId, List> properties) { var block = new BlockImpl(namespaceID, blockId, minStateId, defaultStateId, properties, computeMap(defaultStateId, properties)); block.original = block; - Block.REGISTRY.register(namespaceID, block, + Block.register(namespaceID, block, new IntRange((int) minStateId, (int) maxStateId), requestedStateId -> { var requestedBlock = new BlockImpl(namespaceID, blockId, minStateId, requestedStateId, properties, computeMap(requestedStateId, properties)); requestedBlock.original = block; diff --git a/src/main/java/net/minestom/server/instance/block/rule/vanilla/WallPlacementRule.java b/src/main/java/net/minestom/server/instance/block/rule/vanilla/WallPlacementRule.java index f03f5d7d0..218e96163 100644 --- a/src/main/java/net/minestom/server/instance/block/rule/vanilla/WallPlacementRule.java +++ b/src/main/java/net/minestom/server/instance/block/rule/vanilla/WallPlacementRule.java @@ -60,7 +60,6 @@ public class WallPlacementRule extends BlockPlacementRule { } private boolean isBlock(Instance instance, int x, int y, int z) { - final short blockStateId = instance.getBlockStateId(x, y, z); - return Block.fromStateId(blockStateId).getData().isSolid(); + return instance.getBlock(x, y, z).isSolid(); } } diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java index a69922ee3..39553e393 100644 --- a/src/main/java/net/minestom/server/utils/NBTUtils.java +++ b/src/main/java/net/minestom/server/utils/NBTUtils.java @@ -227,7 +227,7 @@ public final class NBTUtils { NBTList canPlaceOn = nbt.getList("CanPlaceOn"); Set blocks = new HashSet<>(); for (NBTString blockNamespace : canPlaceOn) { - Block block = Registries.getBlock(blockNamespace.getValue()); + Block block = Block.fromNamespaceId(blockNamespace.getValue()); blocks.add(block); } metaBuilder.canPlaceOn(blocks); @@ -239,7 +239,7 @@ public final class NBTUtils { NBTList canDestroy = nbt.getList("CanDestroy"); Set blocks = new HashSet<>(); for (NBTString blockNamespace : canDestroy) { - Block block = Registries.getBlock(blockNamespace.getValue()); + Block block = Block.fromNamespaceId(blockNamespace.getValue()); blocks.add(block); } metaBuilder.canDestroy(blocks); diff --git a/src/main/java/net/minestom/server/utils/block/BlockUtils.java b/src/main/java/net/minestom/server/utils/block/BlockUtils.java index 5814c46cb..db1e9ca12 100644 --- a/src/main/java/net/minestom/server/utils/block/BlockUtils.java +++ b/src/main/java/net/minestom/server/utils/block/BlockUtils.java @@ -44,7 +44,7 @@ public class BlockUtils { } public Block getBlock() { - return Block.fromStateId(instance.getBlockStateId(position)); + return instance.getBlock(position); } public boolean equals(Block block) { diff --git a/src/main/java/net/minestom/server/utils/entity/EntityUtils.java b/src/main/java/net/minestom/server/utils/entity/EntityUtils.java index a1d8da7ca..413fcf007 100644 --- a/src/main/java/net/minestom/server/utils/entity/EntityUtils.java +++ b/src/main/java/net/minestom/server/utils/entity/EntityUtils.java @@ -62,10 +62,9 @@ public final class EntityUtils { // TODO: check entire bounding box final BlockPosition blockPosition = entityPosition.toBlockPosition().subtract(0, 1, 0); try { - final short blockStateId = chunk.getBlockStateId(blockPosition.getX(), + final Block block = chunk.getBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ()); - final Block block = Block.fromStateId(blockStateId); return block.isSolid(); } catch (NullPointerException e) { // Probably an entity at the border of an unloaded chunk