diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java index 61b868cc3..c1950f965 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java @@ -59,7 +59,9 @@ public interface JavaBlockState { * Gets the pick item of the block state * * @return the pick item of the block state + * @deprecated the pick item is sent by the Java server */ + @Deprecated @Nullable String pickItem(); /** @@ -103,6 +105,7 @@ public interface JavaBlockState { Builder canBreakWithHand(boolean canBreakWithHand); + @Deprecated Builder pickItem(@Nullable String pickItem); Builder pistonBehavior(@Nullable String pistonBehavior); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java index 782f664fc..5848d0a76 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java @@ -14,7 +14,6 @@ public class GeyserJavaBlockState implements JavaBlockState { boolean waterlogged; JavaBoundingBox[] collision; boolean canBreakWithHand; - String pickItem; String pistonBehavior; private GeyserJavaBlockState(Builder builder) { @@ -25,7 +24,6 @@ public class GeyserJavaBlockState implements JavaBlockState { this.waterlogged = builder.waterlogged; this.collision = builder.collision; this.canBreakWithHand = builder.canBreakWithHand; - this.pickItem = builder.pickItem; this.pistonBehavior = builder.pistonBehavior; } @@ -66,7 +64,7 @@ public class GeyserJavaBlockState implements JavaBlockState { @Override public @Nullable String pickItem() { - return pickItem; + return null; } @Override @@ -88,7 +86,6 @@ public class GeyserJavaBlockState implements JavaBlockState { private boolean waterlogged; private JavaBoundingBox[] collision; private boolean canBreakWithHand; - private String pickItem; private String pistonBehavior; @Override @@ -134,8 +131,8 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override + @Deprecated public Builder pickItem(@Nullable String pickItem) { - this.pickItem = pickItem; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java index 1f45c516b..bc0efdc12 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java @@ -43,12 +43,15 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.tags.Tag; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; import org.intellij.lang.annotations.Subst; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; import java.util.stream.Stream; @@ -63,11 +66,6 @@ public class Block { private final @Nullable BlockEntityType blockEntityType; private final float destroyTime; private final @NonNull PistonBehavior pushReaction; - /** - * Used for classes we don't have implemented yet that override Mojmap getCloneItemStack with their own item. - * A supplier prevents any issues arising where the Items class finishes before the Blocks class. - */ - private final Supplier pickItem; protected Item item = null; private int javaId = -1; @@ -83,7 +81,6 @@ public class Block { this.blockEntityType = builder.blockEntityType; this.destroyTime = builder.destroyTime; this.pushReaction = builder.pushReaction; - this.pickItem = builder.pickItem; BlockState firstState = builder.build(this).get(0); this.propertyKeys = builder.propertyKeys; // Ensure this is not null before iterating over states @@ -161,13 +158,6 @@ public class Block { return this.item; } - public ItemStack pickItem(BlockState state) { - if (this.pickItem != null) { - return new ItemStack(this.pickItem.get().javaId()); - } - return new ItemStack(this.asItem().javaId()); - } - /** * Should only be ran on block creation. Can be overridden. * @param firstState the first state created from this block @@ -248,7 +238,6 @@ public class Block { private BlockEntityType blockEntityType = null; private PistonBehavior pushReaction = PistonBehavior.NORMAL; private float destroyTime; - private Supplier pickItem; // We'll use this field after building private Property[] propertyKeys = null; @@ -306,7 +295,6 @@ public class Block { } public Builder pickItem(Supplier pickItem) { - this.pickItem = pickItem; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java index 5107616af..28cddb2c8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/FlowerPotBlock.java @@ -34,7 +34,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.level.block.entity.BedrockChunkWantsBlockEntityTag; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; import org.geysermc.geyser.util.BlockEntityUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; public class FlowerPotBlock extends Block implements BedrockChunkWantsBlockEntityTag { private final Block flower; @@ -78,14 +77,6 @@ public class FlowerPotBlock extends Block implements BedrockChunkWantsBlockEntit return tagBuilder.build(); } - @Override - public ItemStack pickItem(BlockState state) { - if (this.flower != Blocks.AIR) { - return new ItemStack(this.flower.asItem().javaId()); - } - return super.pickItem(state); - } - public Block flower() { return flower; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java index 8a6b4f41c..dcbfa1d47 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/PistonHeadBlock.java @@ -25,18 +25,8 @@ package org.geysermc.geyser.level.block.type; -import org.geysermc.geyser.level.block.Blocks; -import org.geysermc.geyser.level.block.property.Properties; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; - public class PistonHeadBlock extends Block { public PistonHeadBlock(String javaIdentifier, Builder builder) { super(javaIdentifier, builder); } - - @Override - public ItemStack pickItem(BlockState state) { - Block block = state.getValue(Properties.PISTON_TYPE).equals("sticky") ? Blocks.STICKY_PISTON : Blocks.PISTON; - return new ItemStack(block.asItem().javaId()); - } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java index e8645f856..76b532919 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java @@ -25,22 +25,10 @@ package org.geysermc.geyser.level.block.type; -import org.geysermc.mcprotocollib.auth.GameProfile; import org.cloudburstmc.math.vector.Vector3i; -import org.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; -import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.TypedEntityData; -import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; - -import java.util.Collections; -import java.util.UUID; public class SkullBlock extends Block { private final Type type; @@ -67,31 +55,6 @@ public class SkullBlock extends Block { // It's not an empty skull. } - public ItemStack pickItem(GeyserSession session, BlockState state, Vector3i position) { - SkullCache.Skull skull = session.getSkullCache().getSkulls().get(position); - if (skull == null) { - return new ItemStack(pickItem(state).getId()); - } - - GeyserItemStack itemStack = GeyserItemStack.of(pickItem(state).getId(), 1); - // This is a universal block entity behavior, but hardcode how it works for now. - NbtMapBuilder builder = NbtMap.builder() - .putInt("x", position.getX()) - .putInt("y", position.getY()) - .putInt("z", position.getZ()); - DataComponents components = itemStack.getOrCreateComponents(); - components.put(DataComponentTypes.BLOCK_ENTITY_DATA, new TypedEntityData<>(BlockEntityType.SKULL, builder.build())); - - UUID uuid = skull.getUuid(); - String texturesProperty = skull.getTexturesProperty(); - GameProfile profile = new GameProfile(uuid, null); - if (texturesProperty != null) { - profile.setProperties(Collections.singletonList(new GameProfile.Property("textures", texturesProperty))); - } - // components.put(DataComponentTypes.PROFILE, profile); TODO 1.21.9 - return itemStack.getItemStack(); - } - public Type skullType() { return type; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 66bcabf1d..284c89f03 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -35,7 +35,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; -import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -51,7 +50,6 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.api.util.CreativeCategory; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; @@ -59,18 +57,15 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserGeometryComponent; import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.level.block.type.Block; -import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.translator.collision.OtherCollision; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import java.util.ArrayList; import java.util.Arrays; @@ -286,21 +281,7 @@ public class CustomBlockRegistryPopulator { builder.requiresCorrectToolForDrops(); } String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); - String pickItem = javaBlockState.pickItem(); - Block block = new Block(cleanJavaIdentifier, builder) { - @Override - public ItemStack pickItem(BlockState state) { - if (this.item == null) { - this.item = Registries.JAVA_ITEM_IDENTIFIERS.get(pickItem); - if (this.item == null) { - GeyserImpl.getInstance().getLogger().warning("We could not find item " + pickItem - + " for getting the item for block " + javaBlockState.identifier()); - this.item = Items.AIR; - } - } - return new ItemStack(this.item.javaId()); - } - }; + Block block = new Block(cleanJavaIdentifier, builder); block.setJavaId(javaBlockState.stateGroupId()); BlockRegistries.JAVA_BLOCKS.registerWithAnyIndex(javaBlockState.stateGroupId(), block, Blocks.AIR);