diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index 67ed59680..7b57540f9 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.inventory.holder; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; @@ -58,13 +59,19 @@ public class BlockInventoryHolder extends InventoryHolder { private final BlockState defaultJavaBlockState; private final ContainerType containerType; private final Set validBlocks; + private final @Nullable Class validBlockClass; public BlockInventoryHolder(Block defaultJavaBlock, ContainerType containerType, Block... validBlocks) { - this(defaultJavaBlock.defaultBlockState(), containerType, validBlocks); + this(defaultJavaBlock.defaultBlockState(), null, containerType, validBlocks); } public BlockInventoryHolder(BlockState defaultJavaBlockState, ContainerType containerType, Block... validBlocks) { + this(defaultJavaBlockState, null, containerType, validBlocks); + } + + public BlockInventoryHolder(BlockState defaultJavaBlockState, @Nullable Class validBlockClass, ContainerType containerType, Block... validBlocks) { this.defaultJavaBlockState = defaultJavaBlockState; + this.validBlockClass = validBlockClass; this.containerType = containerType; if (validBlocks != null) { Set validBlocksTemp = new HashSet<>(validBlocks.length + 1); @@ -162,6 +169,9 @@ public class BlockInventoryHolder extends InventoryHolder { * @return true if this Java block ID can be used for player inventory. */ protected boolean isValidBlock(GeyserSession session, Vector3i position, BlockState blockState) { + if (this.validBlockClass != null && this.validBlockClass.isInstance(blockState.block())) { + return true; + } return this.validBlocks.contains(blockState.block()); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index 6d2780e37..0b8f13b1c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.property.ChestType; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.level.block.type.ChestBlock; import org.geysermc.geyser.level.physics.Direction; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; @@ -204,8 +205,7 @@ public class DoubleChestInventoryTranslator extends ChestInventoryTranslator