3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-26 08:10:11 +01:00

Feature: 1.21.50 support (#5180)

* Drop pre-1.21.40 support, start adapting to 1.21.50 changes

* fix camera definitions

* remove more old workarounds, make it compile

* Add 1.21.50 data files

* Add item tags, update block registry populator

* finishing touches

* Don't add items to the creative inventory that we don't have a Java mapping for

* fix readme typo
Dieser Commit ist enthalten in:
chris 2024-12-03 20:37:05 +08:00 committet von GitHub
Ursprung d956354b7f
Commit 9e276c1077
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
42 geänderte Dateien mit 2563 neuen und 43132 gelöschten Zeilen

Datei anzeigen

@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
## Supported Versions
Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.44 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/).
Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.50 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/).
## Setting Up
Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser.

Datei anzeigen

@ -39,7 +39,6 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket;
import org.geysermc.geyser.entity.attribute.GeyserAttributeType;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.level.BedrockDimension;
import org.geysermc.geyser.network.GameProtocol;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.util.AttributeUtils;
import org.geysermc.geyser.util.DimensionUtils;
@ -235,12 +234,7 @@ public class SessionPlayerEntity extends PlayerEntity {
// the bubbles visually pop
setFlag(EntityFlag.BREATHING, amount >= this.lastAirSupply);
this.lastAirSupply = amount;
if (amount == getMaxAir() && GameProtocol.isPre1_21_0(session)) {
super.setAirSupply(0); // Hide the bubble counter from the UI for the player
} else {
super.setAirSupply(amount);
}
super.setAirSupply(amount);
}
@Override

Datei anzeigen

@ -36,14 +36,14 @@ import java.util.UUID;
public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksEvent {
private final Map<String, ResourcePack> packs;
private final Map<UUID, ResourcePack> packs;
public SessionLoadResourcePacksEventImpl(GeyserSession session, Map<String, ResourcePack> packMap) {
public SessionLoadResourcePacksEventImpl(GeyserSession session, Map<UUID, ResourcePack> packMap) {
super(session);
this.packs = packMap;
}
public @NonNull Map<String, ResourcePack> getPacks() {
public @NonNull Map<UUID, ResourcePack> getPacks() {
return packs;
}
@ -54,16 +54,16 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE
@Override
public boolean register(@NonNull ResourcePack resourcePack) {
String packID = resourcePack.manifest().header().uuid().toString();
UUID packID = resourcePack.manifest().header().uuid();
if (packs.containsValue(resourcePack) || packs.containsKey(packID)) {
return false;
}
packs.put(resourcePack.manifest().header().uuid().toString(), resourcePack);
packs.put(resourcePack.manifest().header().uuid(), resourcePack);
return true;
}
@Override
public boolean unregister(@NonNull UUID uuid) {
return packs.remove(uuid.toString()) != null;
return packs.remove(uuid) != null;
}
}

Datei anzeigen

@ -43,13 +43,14 @@ public class CameraDefinitions {
static {
CAMERA_PRESETS = List.of(
new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()));
CameraPreset.builder().identifier(CameraPerspective.FIRST_PERSON.id()).build(),
CameraPreset.builder().identifier(CameraPerspective.FREE.id()).build(),
CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON.id()).build(),
CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON_FRONT.id()).build(),
CameraPreset.builder().identifier("geyser:free_audio").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(false)).build(),
CameraPreset.builder().identifier("geyser:free_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.CAMERA).playEffect(OptionalBoolean.of(true)).build(),
CameraPreset.builder().identifier("geyser:free_audio_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(true)).build()
);
SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder();
for (int i = 0; i < CAMERA_PRESETS.size(); i++) {

Datei anzeigen

@ -416,40 +416,6 @@ public class CollisionManager {
return BlockUtils.getCollision(blockId);
}
public boolean isOnGround() {
// Temporary until pre-1.21.30 support is dropped.
Vector3d bottomCenter = playerBoundingBox.getBottomCenter();
Vector3i groundPos = Vector3i.from(bottomCenter.getX(), bottomCenter.getY() - 1, bottomCenter.getZ());
BlockCollision collision = BlockUtils.getCollisionAt(session, groundPos);
if (collision == null) {
return false; // Probably air.
}
// Hack to not check below the player
playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001);
playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002);
boolean intersected = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox);
playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001);
playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002);
boolean result;
if (intersected) {
result = true;
} else {
// Hack to check slightly below the player
playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001);
playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002);
result = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox);
playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001);
playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002);
}
return result;
}
/**
* @return if the player is currently in a water block
*/

Datei anzeigen

@ -27,14 +27,9 @@ package org.geysermc.geyser.network;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686;
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec;
import org.geysermc.mcprotocollib.protocol.codec.PacketCodec;
@ -51,8 +46,9 @@ public final class GameProtocol {
* Default Bedrock codec that should act as a fallback. Should represent the latest available
* release of the game that Geyser supports.
*/
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder()
.minecraftVersion("1.21.44")
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v765.CODEC.toBuilder()
.minecraftVersion("1.21.50")
.protocolVersion(766)
.build());
/**
@ -67,24 +63,10 @@ public final class GameProtocol {
private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC;
static {
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v671.CODEC.toBuilder()
.minecraftVersion("1.20.80/1.20.81")
.build()));
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v685.CODEC.toBuilder()
.minecraftVersion("1.21.0/1.21.1")
.build()));
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v686.CODEC.toBuilder()
.minecraftVersion("1.21.2/1.21.3")
.build()));
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder()
.minecraftVersion("1.21.20 - 1.21.23")
.build()));
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder()
.minecraftVersion("1.21.30/1.21.31")
.build()));
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder()
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder()
.minecraftVersion("1.21.40 - 1.21.44")
.build());
.build()));
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
}
/**
@ -103,22 +85,6 @@ public final class GameProtocol {
/* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */
public static boolean isPre1_21_0(GeyserSession session) {
return session.getUpstream().getProtocolVersion() < Bedrock_v685.CODEC.getProtocolVersion();
}
public static boolean isPre1_21_2(GeyserSession session) {
return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion();
}
public static boolean isPre1_21_30(GeyserSession session) {
return session.getUpstream().getProtocolVersion() < Bedrock_v729.CODEC.getProtocolVersion();
}
public static boolean isPre1_21_40(GeyserSession session) {
return session.getUpstream().getProtocolVersion() < Bedrock_v748.CODEC.getProtocolVersion();
}
/**
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
*

Datei anzeigen

@ -77,11 +77,12 @@ import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.OptionalInt;
import java.util.UUID;
public class UpstreamPacketHandler extends LoggingPacketHandler {
private boolean networkSettingsRequested = false;
private final Deque<String> packsToSent = new ArrayDeque<>();
private final Deque<String> packsToSend = new ArrayDeque<>();
private final CompressionStrategy compressionStrategy;
private SessionLoadResourcePacksEventImpl resourcePackLoadEvent;
@ -133,8 +134,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
}
session.getUpstream().getSession().setCodec(packetCodec);
// FIXME temporary until 1.20.80 is dropped
session.getPlayerEntity().resetAir();
return true;
}
@ -209,10 +208,12 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
PackCodec codec = pack.codec();
ResourcePackManifest.Header header = pack.manifest().header();
resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry(
header.uuid().toString(), header.version().toString(), codec.size(), pack.contentKey(),
header.uuid(), header.version().toString(), codec.size(), pack.contentKey(),
"", header.uuid().toString(), false, false, false, ""));
}
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
resourcePacksInfo.setWorldTemplateId(UUID.randomUUID());
resourcePacksInfo.setWorldTemplateVersion("*");
session.sendUpstreamPacket(resourcePacksInfo);
GeyserLocale.loadGeyserLocale(session.locale());
@ -233,8 +234,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
break;
case SEND_PACKS:
packsToSent.addAll(packet.getPackIds());
sendPackDataInfo(packsToSent.pop());
packsToSend.addAll(packet.getPackIds());
sendPackDataInfo(packsToSend.pop());
break;
case HAVE_ALL_PACKS:
@ -311,7 +312,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
@Override
public PacketSignal handle(ResourcePackChunkRequestPacket packet) {
ResourcePackChunkDataPacket data = new ResourcePackChunkDataPacket();
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId().toString());
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId());
PackCodec codec = pack.codec();
data.setChunkIndex(packet.getChunkIndex());
@ -335,8 +336,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
session.sendUpstreamPacket(data);
// Check if it is the last chunk and send next pack in queue when available.
if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSent.isEmpty()) {
sendPackDataInfo(packsToSent.pop());
if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSend.isEmpty()) {
sendPackDataInfo(packsToSend.pop());
}
return PacketSignal.HANDLED;
@ -345,7 +346,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
private void sendPackDataInfo(String id) {
ResourcePackDataInfoPacket data = new ResourcePackDataInfoPacket();
String[] packID = id.split("_");
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packID[0]);
UUID uuid = UUID.fromString(packID[0]);
ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(uuid);
PackCodec codec = pack.codec();
ResourcePackManifest.Header header = pack.manifest().header();

Datei anzeigen

@ -70,6 +70,7 @@ import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
/**
* Holds all the common registries in Geyser.
@ -163,7 +164,7 @@ public final class Registries {
/**
* A mapped registry holding {@link ResourcePack}'s with the pack uuid as keys.
*/
public static final SimpleMappedDeferredRegistry<String, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS);
public static final SimpleMappedDeferredRegistry<UUID, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS);
/**
* A versioned registry holding most Bedrock tags, with the Java item list (sorted) being the key, and the tag name as the value.

Datei anzeigen

@ -45,6 +45,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -54,7 +55,7 @@ import java.util.zip.ZipFile;
/**
* Loads {@link ResourcePack}s within a {@link Path} directory, firing the {@link GeyserLoadResourcePacksEvent}.
*/
public class ResourcePackLoader implements RegistryLoader<Path, Map<String, ResourcePack>> {
public class ResourcePackLoader implements RegistryLoader<Path, Map<UUID, ResourcePack>> {
static final PathMatcher PACK_MATCHER = FileSystems.getDefault().getPathMatcher("glob:**.{zip,mcpack}");
@ -64,8 +65,8 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso
* Loop through the packs directory and locate valid resource pack files
*/
@Override
public Map<String, ResourcePack> load(Path directory) {
Map<String, ResourcePack> packMap = new HashMap<>();
public Map<UUID, ResourcePack> load(Path directory) {
Map<UUID, ResourcePack> packMap = new HashMap<>();
if (!Files.exists(directory)) {
try {
@ -100,7 +101,7 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso
for (Path path : event.resourcePacks()) {
try {
GeyserResourcePack pack = readPack(path);
packMap.put(pack.manifest().header().uuid().toString(), pack);
packMap.put(pack.manifest().header().uuid(), pack);
} catch (Exception e) {
e.printStackTrace();
}

Datei anzeigen

@ -44,11 +44,8 @@ import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.nbt.NbtMapBuilder;
import org.cloudburstmc.nbt.NbtType;
import org.cloudburstmc.nbt.NbtUtils;
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData;
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
import org.geysermc.geyser.GeyserImpl;
@ -69,6 +66,7 @@ import org.geysermc.geyser.registry.type.BlockMappings;
import org.geysermc.geyser.registry.type.GeyserBedrockBlock;
import org.geysermc.geyser.util.BlockUtils;
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.io.DataInputStream;
import java.io.InputStream;
@ -127,20 +125,8 @@ public final class BlockRegistryPopulator {
private static void registerBedrockBlocks() {
var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder()
.put(ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), Conversion685_671::remapBlock)
.put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock)
.put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock)
.put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> tag)
.put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), tag -> {
final String name = tag.getString("name");
if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) {
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
builder.remove("stripped_bit");
NbtMap states = builder.build();
return tag.toBuilder().putCompound("states", states).build();
}
return tag;
})
.put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper())
.put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper())
.build();
// We can keep this strong as nothing should be garbage collected
@ -427,6 +413,19 @@ public final class BlockRegistryPopulator {
}
}
private static @NotNull Remapper faultyStrippedWoodRemapper() {
return tag -> {
final String name = tag.getString("name");
if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) {
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
builder.remove("stripped_bit");
NbtMap states = builder.build();
return tag.toBuilder().putCompound("states", states).build();
}
return tag;
};
}
private static void registerJavaBlocks() {
List<NbtMap> blocksNbt;
try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/blocks.nbt")) {

Datei anzeigen

@ -1,220 +0,0 @@
/*
* Copyright (c) 2019-2024 GeyserMC. http://geysermc.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @author GeyserMC
* @link https://github.com/GeyserMC/Geyser
*/
package org.geysermc.geyser.registry.populator;
import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.nbt.NbtMapBuilder;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.item.type.Item;
import org.geysermc.geyser.registry.type.GeyserMappingItem;
import java.util.List;
import java.util.stream.Stream;
public class Conversion685_671 {
private static final List<String> NEW_CORAL_BLOCKS = List.of("minecraft:tube_coral_block", "minecraft:brain_coral_block", "minecraft:bubble_coral_block", "minecraft:fire_coral_block", "minecraft:horn_coral_block", "minecraft:dead_tube_coral_block", "minecraft:dead_brain_coral_block", "minecraft:dead_bubble_coral_block", "minecraft:dead_fire_coral_block", "minecraft:dead_horn_coral_block");
private static final List<String> NEW_DOUBLE_PLANTS = List.of("minecraft:sunflower", "minecraft:lilac", "minecraft:tall_grass", "minecraft:large_fern", "minecraft:rose_bush", "minecraft:peony");
private static final List<String> NEW_STONE_BLOCK_SLABS = List.of("minecraft:smooth_stone_slab", "minecraft:sandstone_slab", "minecraft:petrified_oak_slab", "minecraft:cobblestone_slab", "minecraft:brick_slab", "minecraft:stone_brick_slab", "minecraft:quartz_slab", "minecraft:nether_brick_slab");
private static final List<String> NEW_TALLGRASSES = List.of("minecraft:fern", "minecraft:short_grass");
private static final List<String> OMINOUS_BLOCKS = List.of("minecraft:trial_spawner", "minecraft:vault");
private static final List<String> NEW_BLOCKS = Stream.of(NEW_CORAL_BLOCKS, NEW_DOUBLE_PLANTS, NEW_STONE_BLOCK_SLABS, NEW_TALLGRASSES).flatMap(List::stream).toList();
private static final List<String> MODIFIED_BLOCKS = Stream.of(NEW_BLOCKS, OMINOUS_BLOCKS).flatMap(List::stream).toList();
private static final List<Item> NEW_MUSIC_DISCS = List.of(Items.MUSIC_DISC_CREATOR, Items.MUSIC_DISC_CREATOR_MUSIC_BOX, Items.MUSIC_DISC_PRECIPICE);
static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) {
mapping = Conversion712_685.remapItem(item, mapping);
String identifier = mapping.getBedrockIdentifier();
if (NEW_MUSIC_DISCS.contains(item)) {
return mapping.withBedrockIdentifier("minecraft:music_disc_otherside");
}
if (item == Items.OMINOUS_TRIAL_KEY) {
return mapping.withBedrockIdentifier("minecraft:trial_key");
}
if (item == Items.OMINOUS_BOTTLE) {
return mapping.withBedrockIdentifier("minecraft:glass_bottle");
}
if (!NEW_BLOCKS.contains(identifier)) {
return mapping;
}
if (NEW_CORAL_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:tube_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(0); }
case "minecraft:brain_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(1); }
case "minecraft:bubble_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(2); }
case "minecraft:fire_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(3); }
case "minecraft:horn_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(4); }
case "minecraft:dead_tube_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(8); }
case "minecraft:dead_brain_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(9); }
case "minecraft:dead_bubble_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(10); }
case "minecraft:dead_fire_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(11); }
case "minecraft:dead_horn_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(12); }
}
}
if (NEW_DOUBLE_PLANTS.contains(identifier)) {
switch (identifier) {
case "minecraft:sunflower" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(0); }
case "minecraft:lilac" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(1); }
case "minecraft:tall_grass" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(2); }
case "minecraft:large_fern" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(3); }
case "minecraft:rose_bush" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(4); }
case "minecraft:peony" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(5); }
}
}
if (NEW_STONE_BLOCK_SLABS.contains(identifier)) {
switch (identifier) {
case "minecraft:smooth_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(0); }
case "minecraft:sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(1); }
case "minecraft:petrified_oak_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(2); }
case "minecraft:cobblestone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(3); }
case "minecraft:brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(4); }
case "minecraft:stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(5); }
case "minecraft:quartz_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(6); }
case "minecraft:nether_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(7); }
}
}
if (NEW_TALLGRASSES.contains(identifier)) {
switch (identifier) {
case "minecraft:short_grass" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(1); }
case "minecraft:fern" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(2); }
}
}
return mapping;
}
static NbtMap remapBlock(NbtMap tag) {
tag = Conversion712_685.remapBlock(tag);
final String name = tag.getString("name");
if (!MODIFIED_BLOCKS.contains(name)) {
return tag;
}
if (OMINOUS_BLOCKS.contains(name)) {
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
builder.remove("ominous");
return tag.toBuilder().putCompound("states", builder.build()).build();
}
String replacement;
if (NEW_CORAL_BLOCKS.contains(name)) {
replacement = "minecraft:coral_block";
String coralColor;
boolean deadBit = name.startsWith("minecraft:dead_");
switch (name) {
case "minecraft:tube_coral_block", "minecraft:dead_tube_coral_block" -> coralColor = "blue";
case "minecraft:brain_coral_block", "minecraft:dead_brain_coral_block" -> coralColor = "pink";
case "minecraft:bubble_coral_block", "minecraft:dead_bubble_coral_block" -> coralColor = "purple";
case "minecraft:fire_coral_block", "minecraft:dead_fire_coral_block" -> coralColor = "yellow";
case "minecraft:horn_coral_block", "minecraft:dead_horn_coral_block" -> coralColor = "red";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("coral_color", coralColor)
.putBoolean("dead_bit", deadBit)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_DOUBLE_PLANTS.contains(name)) {
replacement = "minecraft:double_plant";
String doublePlantType;
switch (name) {
case "minecraft:sunflower" -> doublePlantType = "sunflower";
case "minecraft:lilac" -> doublePlantType = "syringa";
case "minecraft:tall_grass" -> doublePlantType = "grass";
case "minecraft:large_fern" -> doublePlantType = "fern";
case "minecraft:rose_bush" -> doublePlantType = "rose";
case "minecraft:peony" -> doublePlantType = "paeonia";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("double_plant_type", doublePlantType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_STONE_BLOCK_SLABS.contains(name)) {
replacement = "minecraft:stone_block_slab";
String stoneSlabType;
switch (name) {
case "minecraft:smooth_stone_slab" -> stoneSlabType = "smooth_stone";
case "minecraft:sandstone_slab" -> stoneSlabType = "sandstone";
case "minecraft:petrified_oak_slab" -> stoneSlabType = "wood";
case "minecraft:cobblestone_slab" -> stoneSlabType = "cobblestone";
case "minecraft:brick_slab" -> stoneSlabType = "brick";
case "minecraft:stone_brick_slab" -> stoneSlabType = "stone_brick";
case "minecraft:quartz_slab" -> stoneSlabType = "quartz";
case "minecraft:nether_brick_slab" -> stoneSlabType = "nether_brick";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_slab_type", stoneSlabType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_TALLGRASSES.contains(name)) {
replacement = "minecraft:tallgrass";
String tallGrassType;
switch (name) {
case "minecraft:short_grass" -> tallGrassType = "tall";
case "minecraft:fern" -> tallGrassType = "fern";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("tall_grass_type", tallGrassType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
return tag;
}
}

Datei anzeigen

@ -1,439 +0,0 @@
package org.geysermc.geyser.registry.populator;
import org.cloudburstmc.nbt.NbtMap;
import org.geysermc.geyser.item.type.Item;
import org.geysermc.geyser.registry.type.GeyserMappingItem;
import java.util.List;
import java.util.stream.Stream;
public class Conversion712_685 {
private static final List<String> NEW_STONE_BLOCK_SLABS_2 = List.of("minecraft:prismarine_slab", "minecraft:dark_prismarine_slab", "minecraft:smooth_sandstone_slab", "minecraft:purpur_slab", "minecraft:red_nether_brick_slab", "minecraft:prismarine_brick_slab", "minecraft:mossy_cobblestone_slab", "minecraft:red_sandstone_slab");
private static final List<String> NEW_STONE_BLOCK_SLABS_3 = List.of("minecraft:smooth_red_sandstone_slab", "minecraft:polished_granite_slab", "minecraft:granite_slab", "minecraft:polished_diorite_slab", "minecraft:andesite_slab", "minecraft:polished_andesite_slab", "minecraft:diorite_slab", "minecraft:end_stone_brick_slab");
private static final List<String> NEW_STONE_BLOCK_SLABS_4 = List.of("minecraft:smooth_quartz_slab", "minecraft:cut_sandstone_slab", "minecraft:cut_red_sandstone_slab", "minecraft:normal_stone_slab", "minecraft:mossy_stone_brick_slab");
private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS = List.of("minecraft:quartz_double_slab", "minecraft:petrified_oak_double_slab", "minecraft:stone_brick_double_slab", "minecraft:brick_double_slab", "minecraft:sandstone_double_slab", "minecraft:nether_brick_double_slab", "minecraft:cobblestone_double_slab", "minecraft:smooth_stone_double_slab");
private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_2 = List.of("minecraft:prismarine_double_slab", "minecraft:dark_prismarine_double_slab", "minecraft:smooth_sandstone_double_slab", "minecraft:purpur_double_slab", "minecraft:red_nether_brick_double_slab", "minecraft:prismarine_brick_double_slab", "minecraft:mossy_cobblestone_double_slab", "minecraft:red_sandstone_double_slab");
private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_3 = List.of("minecraft:smooth_red_sandstone_double_slab", "minecraft:polished_granite_double_slab", "minecraft:granite_double_slab", "minecraft:polished_diorite_double_slab", "minecraft:andesite_double_slab", "minecraft:polished_andesite_double_slab", "minecraft:diorite_double_slab", "minecraft:end_stone_brick_double_slab");
private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_4 = List.of("minecraft:smooth_quartz_double_slab", "minecraft:cut_sandstone_double_slab", "minecraft:cut_red_sandstone_double_slab", "minecraft:normal_stone_double_slab", "minecraft:mossy_stone_brick_double_slab");
private static final List<String> NEW_PRISMARINE_BLOCKS = List.of("minecraft:prismarine_bricks", "minecraft:dark_prismarine", "minecraft:prismarine");
private static final List<String> NEW_CORAL_FAN_HANGS = List.of("minecraft:tube_coral_wall_fan", "minecraft:brain_coral_wall_fan", "minecraft:dead_tube_coral_wall_fan", "minecraft:dead_brain_coral_wall_fan");
private static final List<String> NEW_CORAL_FAN_HANGS_2 = List.of("minecraft:bubble_coral_wall_fan", "minecraft:fire_coral_wall_fan", "minecraft:dead_bubble_coral_wall_fan", "minecraft:dead_fire_coral_wall_fan");
private static final List<String> NEW_CORAL_FAN_HANGS_3 = List.of("minecraft:horn_coral_wall_fan", "minecraft:dead_horn_coral_wall_fan");
private static final List<String> NEW_MONSTER_EGGS = List.of("minecraft:infested_cobblestone", "minecraft:infested_stone_bricks", "minecraft:infested_mossy_stone_bricks", "minecraft:infested_cracked_stone_bricks", "minecraft:infested_chiseled_stone_bricks", "minecraft:infested_stone");
private static final List<String> NEW_STONEBRICK_BLOCKS = List.of("minecraft:mossy_stone_bricks", "minecraft:cracked_stone_bricks", "minecraft:chiseled_stone_bricks", "minecraft:smooth_stone_bricks", "minecraft:stone_bricks");
private static final List<String> NEW_LIGHT_BLOCKS = List.of("minecraft:light_block_0", "minecraft:light_block_1", "minecraft:light_block_2", "minecraft:light_block_3", "minecraft:light_block_4", "minecraft:light_block_5", "minecraft:light_block_6", "minecraft:light_block_7", "minecraft:light_block_8", "minecraft:light_block_9", "minecraft:light_block_10", "minecraft:light_block_11", "minecraft:light_block_12", "minecraft:light_block_13", "minecraft:light_block_14", "minecraft:light_block_15");
private static final List<String> NEW_SANDSTONE_BLOCKS = List.of("minecraft:cut_sandstone", "minecraft:chiseled_sandstone", "minecraft:smooth_sandstone", "minecraft:sandstone");
private static final List<String> NEW_QUARTZ_BLOCKS = List.of("minecraft:chiseled_quartz_block", "minecraft:quartz_pillar", "minecraft:smooth_quartz", "minecraft:quartz_block");
private static final List<String> NEW_RED_SANDSTONE_BLOCKS = List.of("minecraft:cut_red_sandstone", "minecraft:chiseled_red_sandstone", "minecraft:smooth_red_sandstone", "minecraft:red_sandstone");
private static final List<String> NEW_SAND_BLOCKS = List.of("minecraft:red_sand", "minecraft:sand");
private static final List<String> NEW_DIRT_BLOCKS = List.of("minecraft:coarse_dirt", "minecraft:dirt");
private static final List<String> NEW_ANVILS = List.of("minecraft:damaged_anvil", "minecraft:chipped_anvil", "minecraft:deprecated_anvil", "minecraft:anvil");
private static final List<String> NEW_YELLOW_FLOWERS = List.of("minecraft:dandelion");
private static final List<String> NEW_BLOCKS = Stream.of(NEW_STONE_BLOCK_SLABS_2, NEW_STONE_BLOCK_SLABS_3, NEW_STONE_BLOCK_SLABS_4, NEW_DOUBLE_STONE_BLOCK_SLABS, NEW_DOUBLE_STONE_BLOCK_SLABS_2, NEW_DOUBLE_STONE_BLOCK_SLABS_3, NEW_DOUBLE_STONE_BLOCK_SLABS_4, NEW_PRISMARINE_BLOCKS, NEW_CORAL_FAN_HANGS, NEW_CORAL_FAN_HANGS_2, NEW_CORAL_FAN_HANGS_3, NEW_MONSTER_EGGS, NEW_STONEBRICK_BLOCKS, NEW_LIGHT_BLOCKS, NEW_SANDSTONE_BLOCKS, NEW_QUARTZ_BLOCKS, NEW_RED_SANDSTONE_BLOCKS, NEW_SAND_BLOCKS, NEW_DIRT_BLOCKS, NEW_ANVILS, NEW_YELLOW_FLOWERS).flatMap(List::stream).toList();
static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) {
mapping = Conversion729_712.remapItem(item, mapping);
String identifier = mapping.getBedrockIdentifier();
if (!NEW_BLOCKS.contains(identifier)) {
return mapping;
}
if (identifier.equals("minecraft:coarse_dirt")) {
return mapping.withBedrockIdentifier("minecraft:dirt").withBedrockData(1);
}
if (identifier.equals("minecraft:dandelion")) {
return mapping.withBedrockIdentifier("minecraft:yellow_flower").withBedrockData(0);
}
if (identifier.equals("minecraft:red_sand")) {
return mapping.withBedrockIdentifier("minecraft:sand").withBedrockData(1);
}
if (NEW_PRISMARINE_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(0); }
case "minecraft:dark_prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(1); }
case "minecraft:prismarine_bricks" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(2); }
}
}
if (NEW_SANDSTONE_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(0); }
case "minecraft:chiseled_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(1); }
case "minecraft:cut_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(2); }
case "minecraft:smooth_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(3); }
}
}
if (NEW_RED_SANDSTONE_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(0); }
case "minecraft:chiseled_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(1); }
case "minecraft:cut_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(2); }
case "minecraft:smooth_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(3); }
}
}
if (NEW_QUARTZ_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(0); }
case "minecraft:chiseled_quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(1); }
case "minecraft:quartz_pillar" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(2); }
case "minecraft:smooth_quartz" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(3); }
}
}
if (NEW_STONE_BLOCK_SLABS_2.contains(identifier)) {
switch (identifier) {
case "minecraft:red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(0); }
case "minecraft:purpur_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(1); }
case "minecraft:prismarine_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(2); }
case "minecraft:dark_prismarine_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(3); }
case "minecraft:prismarine_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(4); }
case "minecraft:mossy_cobblestone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(5); }
case "minecraft:smooth_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(6); }
case "minecraft:red_nether_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(7); }
}
}
if (NEW_STONE_BLOCK_SLABS_3.contains(identifier)) {
switch (identifier) {
case "minecraft:end_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(0); }
case "minecraft:smooth_red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(1); }
case "minecraft:polished_andesite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(2); }
case "minecraft:andesite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(3); }
case "minecraft:diorite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(4); }
case "minecraft:polished_diorite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(5); }
case "minecraft:granite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(6); }
case "minecraft:polished_granite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(7); }
}
}
if (NEW_STONE_BLOCK_SLABS_4.contains(identifier)) {
switch (identifier) {
case "minecraft:mossy_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(0); }
case "minecraft:smooth_quartz_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(1); }
case "minecraft:normal_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(2); }
case "minecraft:cut_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(3); }
case "minecraft:cut_red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(4); }
}
}
if (NEW_MONSTER_EGGS.contains(identifier)) {
switch (identifier) {
case "minecraft:infested_stone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(0); }
case "minecraft:infested_cobblestone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(1); }
case "minecraft:infested_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(2); }
case "minecraft:infested_mossy_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(3); }
case "minecraft:infested_cracked_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(4); }
case "minecraft:infested_chiseled_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(5); }
}
}
if (NEW_STONEBRICK_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(0); }
case "minecraft:mossy_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(1); }
case "minecraft:cracked_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(2); }
case "minecraft:chiseled_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(3); }
}
}
if (NEW_ANVILS.contains(identifier)) {
switch (identifier) {
case "minecraft:anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(0); }
case "minecraft:chipped_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(4); }
case "minecraft:damaged_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(8); }
}
}
return mapping;
}
static NbtMap remapBlock(NbtMap tag) {
tag = Conversion729_712.remapBlock(tag);
final String name = tag.getString("name");
if (!NEW_BLOCKS.contains(name)) {
return tag;
}
String replacement;
if (NEW_DOUBLE_STONE_BLOCK_SLABS.contains(name)) {
replacement = "minecraft:double_stone_block_slab";
String stoneSlabType;
switch (name) {
case "minecraft:quartz_double_slab" -> stoneSlabType = "quartz";
case "minecraft:petrified_oak_double_slab" -> stoneSlabType = "wood";
case "minecraft:stone_brick_double_slab" -> stoneSlabType = "stone_brick";
case "minecraft:brick_double_slab" -> stoneSlabType = "brick";
case "minecraft:sandstone_double_slab" -> stoneSlabType = "sandstone";
case "minecraft:nether_brick_double_slab" -> stoneSlabType = "nether_brick";
case "minecraft:cobblestone_double_slab" -> stoneSlabType = "cobblestone";
case "minecraft:smooth_stone_double_slab" -> stoneSlabType = "smooth_stone";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_slab_type", stoneSlabType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_STONE_BLOCK_SLABS_2.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_2.contains(name)) {
replacement = NEW_STONE_BLOCK_SLABS_2.contains(name) ? "minecraft:stone_block_slab2" : "minecraft:double_stone_block_slab2";
String stoneSlabType2;
switch (name) {
case "minecraft:prismarine_slab", "minecraft:prismarine_double_slab" -> stoneSlabType2 = "prismarine_rough";
case "minecraft:dark_prismarine_slab", "minecraft:dark_prismarine_double_slab" -> stoneSlabType2 = "prismarine_dark";
case "minecraft:smooth_sandstone_slab", "minecraft:smooth_sandstone_double_slab" -> stoneSlabType2 = "smooth_sandstone";
case "minecraft:purpur_slab", "minecraft:purpur_double_slab" -> stoneSlabType2 = "purpur";
case "minecraft:red_nether_brick_slab", "minecraft:red_nether_brick_double_slab" -> stoneSlabType2 = "red_nether_brick";
case "minecraft:prismarine_brick_slab", "minecraft:prismarine_brick_double_slab" -> stoneSlabType2 = "prismarine_brick";
case "minecraft:mossy_cobblestone_slab", "minecraft:mossy_cobblestone_double_slab" -> stoneSlabType2 = "mossy_cobblestone";
case "minecraft:red_sandstone_slab", "minecraft:red_sandstone_double_slab" -> stoneSlabType2 = "red_sandstone";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_slab_type_2", stoneSlabType2)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_STONE_BLOCK_SLABS_3.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_3.contains(name)) {
replacement = NEW_STONE_BLOCK_SLABS_3.contains(name) ? "minecraft:stone_block_slab3" : "minecraft:double_stone_block_slab3";
String stoneSlabType3;
switch (name) {
case "minecraft:smooth_red_sandstone_slab", "minecraft:smooth_red_sandstone_double_slab" -> stoneSlabType3 = "smooth_red_sandstone";
case "minecraft:polished_granite_slab", "minecraft:polished_granite_double_slab" -> stoneSlabType3 = "polished_granite";
case "minecraft:granite_slab", "minecraft:granite_double_slab" -> stoneSlabType3 = "granite";
case "minecraft:polished_diorite_slab", "minecraft:polished_diorite_double_slab" -> stoneSlabType3 = "polished_diorite";
case "minecraft:andesite_slab", "minecraft:andesite_double_slab" -> stoneSlabType3 = "andesite";
case "minecraft:polished_andesite_slab", "minecraft:polished_andesite_double_slab" -> stoneSlabType3 = "polished_andesite";
case "minecraft:diorite_slab", "minecraft:diorite_double_slab" -> stoneSlabType3 = "diorite";
case "minecraft:end_stone_brick_slab", "minecraft:end_stone_brick_double_slab" -> stoneSlabType3 = "end_stone_brick";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_slab_type_3", stoneSlabType3)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_STONE_BLOCK_SLABS_4.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_4.contains(name)) {
replacement = NEW_STONE_BLOCK_SLABS_4.contains(name) ? "minecraft:stone_block_slab4" : "minecraft:double_stone_block_slab4";
String stoneSlabType4;
switch (name) {
case "minecraft:smooth_quartz_slab", "minecraft:smooth_quartz_double_slab" -> stoneSlabType4 = "smooth_quartz";
case "minecraft:cut_sandstone_slab", "minecraft:cut_sandstone_double_slab" -> stoneSlabType4 = "cut_sandstone";
case "minecraft:cut_red_sandstone_slab", "minecraft:cut_red_sandstone_double_slab" -> stoneSlabType4 = "cut_red_sandstone";
case "minecraft:normal_stone_slab", "minecraft:normal_stone_double_slab" -> stoneSlabType4 = "stone";
case "minecraft:mossy_stone_brick_slab", "minecraft:mossy_stone_brick_double_slab" -> stoneSlabType4 = "mossy_stone_brick";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_slab_type_4", stoneSlabType4)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_PRISMARINE_BLOCKS.contains(name)) {
replacement = "minecraft:prismarine";
String prismarineBlockType;
switch (name) {
case "minecraft:prismarine_bricks" -> prismarineBlockType = "bricks";
case "minecraft:dark_prismarine" -> prismarineBlockType = "dark";
case "minecraft:prismarine" -> prismarineBlockType = "default";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("prismarine_block_type", prismarineBlockType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_CORAL_FAN_HANGS.contains(name) || NEW_CORAL_FAN_HANGS_2.contains(name) || NEW_CORAL_FAN_HANGS_3.contains(name)) {
replacement = NEW_CORAL_FAN_HANGS.contains(name) ? "minecraft:coral_fan_hang" : NEW_CORAL_FAN_HANGS_2.contains(name) ? "minecraft:coral_fan_hang2" : "minecraft:coral_fan_hang3";
boolean deadBit = name.startsWith("minecraft:dead_");
boolean coralHangTypeBit = name.contains("brain") || name.contains("fire");
NbtMap states = tag.getCompound("states")
.toBuilder()
.putBoolean("coral_hang_type_bit", coralHangTypeBit)
.putBoolean("dead_bit", deadBit)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_MONSTER_EGGS.contains(name)) {
replacement = "minecraft:monster_egg";
String monsterEggStoneType;
switch (name) {
case "minecraft:infested_cobblestone" -> monsterEggStoneType = "cobblestone";
case "minecraft:infested_stone_bricks" -> monsterEggStoneType = "stone_brick";
case "minecraft:infested_mossy_stone_bricks" -> monsterEggStoneType = "mossy_stone_brick";
case "minecraft:infested_cracked_stone_bricks" -> monsterEggStoneType = "cracked_stone_brick";
case "minecraft:infested_chiseled_stone_bricks" -> monsterEggStoneType = "chiseled_stone_brick";
case "minecraft:infested_stone" -> monsterEggStoneType = "stone";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("monster_egg_stone_type", monsterEggStoneType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_STONEBRICK_BLOCKS.contains(name)) {
replacement = "minecraft:stonebrick";
String stoneBrickType;
switch (name) {
case "minecraft:mossy_stone_bricks" -> stoneBrickType = "mossy";
case "minecraft:cracked_stone_bricks" -> stoneBrickType = "cracked";
case "minecraft:chiseled_stone_bricks" -> stoneBrickType = "chiseled";
case "minecraft:smooth_stone_bricks" -> stoneBrickType = "smooth";
case "minecraft:stone_bricks" -> stoneBrickType = "default";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("stone_brick_type", stoneBrickType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_LIGHT_BLOCKS.contains(name)) {
replacement = "minecraft:light_block";
int blockLightLevel = Integer.parseInt(name.split("_")[2]);
NbtMap states = tag.getCompound("states")
.toBuilder()
.putInt("block_light_level", blockLightLevel)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_SANDSTONE_BLOCKS.contains(name) || NEW_RED_SANDSTONE_BLOCKS.contains(name)) {
replacement = NEW_SANDSTONE_BLOCKS.contains(name) ? "minecraft:sandstone" : "minecraft:red_sandstone";
String sandStoneType;
switch (name) {
case "minecraft:cut_sandstone", "minecraft:cut_red_sandstone" -> sandStoneType = "cut";
case "minecraft:chiseled_sandstone", "minecraft:chiseled_red_sandstone" -> sandStoneType = "heiroglyphs";
case "minecraft:smooth_sandstone", "minecraft:smooth_red_sandstone" -> sandStoneType = "smooth";
case "minecraft:sandstone", "minecraft:red_sandstone" -> sandStoneType = "default";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("sand_stone_type", sandStoneType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_QUARTZ_BLOCKS.contains(name)) {
replacement = "minecraft:quartz_block";
String chiselType;
switch (name) {
case "minecraft:chiseled_quartz_block" -> chiselType = "chiseled";
case "minecraft:quartz_pillar" -> chiselType = "lines";
case "minecraft:smooth_quartz" -> chiselType = "smooth";
case "minecraft:quartz_block" -> chiselType = "default";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("chisel_type", chiselType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_SAND_BLOCKS.contains(name)) {
replacement = "minecraft:sand";
String sandType = name.equals("minecraft:red_sand") ? "red" : "normal";
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("sand_type", sandType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_DIRT_BLOCKS.contains(name)) {
replacement = "minecraft:dirt";
String dirtType = name.equals("minecraft:coarse_dirt") ? "coarse" : "normal";
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("dirt_type", dirtType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_ANVILS.contains(name)) {
replacement = "minecraft:anvil";
String damage;
switch (name) {
case "minecraft:damaged_anvil" -> damage = "broken";
case "minecraft:chipped_anvil" -> damage = "slightly_damaged";
case "minecraft:deprecated_anvil" -> damage = "very_damaged";
case "minecraft:anvil" -> damage = "undamaged";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("damage", damage)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_YELLOW_FLOWERS.contains(name)) {
replacement = "minecraft:yellow_flower";
return tag.toBuilder().putString("name", replacement).build();
}
return tag;
}
}

Datei anzeigen

@ -1,152 +0,0 @@
package org.geysermc.geyser.registry.populator;
import org.cloudburstmc.nbt.NbtMap;
import org.geysermc.geyser.item.type.Item;
import org.geysermc.geyser.registry.type.GeyserMappingItem;
import java.util.List;
import java.util.stream.Stream;
public class Conversion729_712 {
private static final List<String> NEW_PURPUR_BLOCKS = List.of("minecraft:purpur_block", "minecraft:purpur_pillar");
private static final List<String> NEW_WALL_BLOCKS = List.of("minecraft:cobblestone_wall", "minecraft:mossy_cobblestone_wall", "minecraft:granite_wall", "minecraft:diorite_wall", "minecraft:andesite_wall", "minecraft:sandstone_wall", "minecraft:brick_wall", "minecraft:stone_brick_wall", "minecraft:mossy_stone_brick_wall", "minecraft:nether_brick_wall", "minecraft:end_stone_brick_wall", "minecraft:prismarine_wall", "minecraft:red_sandstone_wall", "minecraft:red_nether_brick_wall");
private static final List<String> NEW_SPONGE_BLOCKS = List.of("minecraft:sponge", "minecraft:wet_sponge");
private static final List<String> NEW_TNT_BLOCKS = List.of("minecraft:tnt", "minecraft:underwater_tnt");
private static final List<String> STRUCTURE_VOID = List.of("minecraft:structure_void");
private static final List<String> NEW_BLOCKS = Stream.of(NEW_PURPUR_BLOCKS, NEW_WALL_BLOCKS, NEW_SPONGE_BLOCKS, NEW_TNT_BLOCKS, STRUCTURE_VOID).flatMap(List::stream).toList();
static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) {
mapping = Conversion748_729.remapItem(item, mapping);
String identifier = mapping.getBedrockIdentifier();
if (!NEW_BLOCKS.contains(identifier)) {
return mapping;
}
if (identifier.equals("minecraft:underwater_tnt")) {
return mapping.withBedrockIdentifier("minecraft:tnt").withBedrockData(1);
}
if (NEW_PURPUR_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:purpur_block" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(0); }
case "minecraft:purpur_pillar" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(1); }
}
}
if (NEW_WALL_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(0); }
case "minecraft:mossy_cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(1); }
case "minecraft:granite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(2); }
case "minecraft:diorite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(3); }
case "minecraft:andesite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(4); }
case "minecraft:sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(5); }
case "minecraft:brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(6); }
case "minecraft:stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(7); }
case "minecraft:mossy_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(8); }
case "minecraft:nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(9); }
case "minecraft:end_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(10); }
case "minecraft:prismarine_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(11); }
case "minecraft:red_sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(12); }
case "minecraft:red_nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(13); }
}
}
if (NEW_SPONGE_BLOCKS.contains(identifier)) {
switch (identifier) {
case "minecraft:sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(0); }
case "minecraft:wet_sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(1); }
}
}
return mapping;
}
static NbtMap remapBlock(NbtMap tag) {
final String name = tag.getString("name");
if (!NEW_BLOCKS.contains(name)) {
return tag;
}
String replacement;
if (NEW_PURPUR_BLOCKS.contains(name)) {
replacement = "minecraft:purpur_block";
String purpurType = name.equals("minecraft:purpur_pillar") ? "lines" : "default";
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("chisel_type", purpurType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_WALL_BLOCKS.contains(name)) {
replacement = "minecraft:cobblestone_wall";
String wallType;
switch (name) {
case "minecraft:cobblestone_wall" -> wallType = "cobblestone";
case "minecraft:mossy_cobblestone_wall" -> wallType = "mossy_cobblestone";
case "minecraft:granite_wall" -> wallType = "granite";
case "minecraft:diorite_wall" -> wallType = "diorite";
case "minecraft:andesite_wall" -> wallType = "andesite";
case "minecraft:sandstone_wall" -> wallType = "sandstone";
case "minecraft:brick_wall" -> wallType = "brick";
case "minecraft:stone_brick_wall" -> wallType = "stone_brick";
case "minecraft:mossy_stone_brick_wall" -> wallType = "mossy_stone_brick";
case "minecraft:nether_brick_wall" -> wallType = "nether_brick";
case "minecraft:end_stone_brick_wall" -> wallType = "end_brick";
case "minecraft:prismarine_wall" -> wallType = "prismarine";
case "minecraft:red_sandstone_wall" -> wallType = "red_sandstone";
case "minecraft:red_nether_brick_wall" -> wallType = "red_nether_brick";
default -> throw new IllegalStateException("Unexpected value: " + name);
}
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("wall_block_type", wallType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_SPONGE_BLOCKS.contains(name)) {
replacement = "minecraft:sponge";
String spongeType = name.equals("minecraft:wet_sponge") ? "wet" : "dry";
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("sponge_type", spongeType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (NEW_TNT_BLOCKS.contains(name)) {
replacement = "minecraft:tnt";
byte tntType = (byte) (name.equals("minecraft:underwater_tnt") ? 1 : 0);
NbtMap states = tag.getCompound("states")
.toBuilder()
.putByte("allow_underwater_bit", tntType)
.build();
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
}
if (STRUCTURE_VOID.contains(name)) {
NbtMap states = tag.getCompound("states")
.toBuilder()
.putString("structure_void_type", "air")
.build();
return tag.toBuilder().putCompound("states", states).build();
}
return tag;
}
}

Datei anzeigen

@ -37,6 +37,7 @@ import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.registry.BlockRegistries;
import org.geysermc.geyser.registry.type.BlockMappings;
import org.geysermc.geyser.registry.type.GeyserBedrockBlock;
import org.geysermc.geyser.registry.type.GeyserMappingItem;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@ -50,12 +51,10 @@ import java.util.function.Consumer;
public class CreativeItemRegistryPopulator {
private static final List<BiPredicate<String, Integer>> JAVA_ONLY_ITEM_FILTER = List.of(
// Bedrock-only as its own item
(identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2,
// Bedrock-only banner patterns
(identifier, data) -> identifier.equals("minecraft:bordure_indented_banner_pattern") || identifier.equals("minecraft:field_masoned_banner_pattern")
(identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2
);
static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Consumer<ItemData.Builder> itemConsumer) {
static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Map<String, GeyserMappingItem> items, Consumer<ItemData.Builder> itemConsumer) {
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
// Load creative items
@ -68,7 +67,7 @@ public class CreativeItemRegistryPopulator {
BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.protocolVersion());
for (JsonNode itemNode : creativeItemEntries) {
ItemData.Builder itemBuilder = createItemData(itemNode, blockMappings, definitions);
ItemData.Builder itemBuilder = createItemData(itemNode, items, blockMappings, definitions);
if (itemBuilder == null) {
continue;
}
@ -77,7 +76,7 @@ public class CreativeItemRegistryPopulator {
}
}
private static ItemData.@Nullable Builder createItemData(JsonNode itemNode, BlockMappings blockMappings, Map<String, ItemDefinition> definitions) {
private static ItemData.@Nullable Builder createItemData(JsonNode itemNode, Map<String, GeyserMappingItem> items, BlockMappings blockMappings, Map<String, ItemDefinition> definitions) {
int count = 1;
int damage = 0;
NbtMap tag = null;
@ -89,6 +88,23 @@ public class CreativeItemRegistryPopulator {
}
}
// Attempt to remove items that do not exist in Java (1.21.50 has 1.21.4 items, that don't exist on 1.21.2)
// we still add the lodestone compass - we're going to translate it.
if (!items.containsKey(identifier) && !identifier.equals("minecraft:lodestone_compass")) {
// bedrock identifier not found, let's make sure it's not just different
boolean found = false;
for (var mapping : items.values()) {
if (mapping.getBedrockIdentifier().equals(identifier)) {
found = true;
break;
}
}
if (!found) {
return null;
}
}
JsonNode damageNode = itemNode.get("damage");
if (damageNode != null) {
damage = damageNode.asInt();

Datei anzeigen

@ -45,11 +45,8 @@ import org.cloudburstmc.nbt.NbtMap;
import org.cloudburstmc.nbt.NbtMapBuilder;
import org.cloudburstmc.nbt.NbtType;
import org.cloudburstmc.nbt.NbtUtils;
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
@ -85,7 +82,6 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -111,18 +107,9 @@ public class ItemRegistryPopulator {
}
public static void populate() {
List<Item> bundles = List.of(Items.BUNDLE, Items.BLACK_BUNDLE, Items.BLUE_BUNDLE, Items.BROWN_BUNDLE, Items.CYAN_BUNDLE, Items.GRAY_BUNDLE,
Items.GREEN_BUNDLE, Items.LIGHT_BLUE_BUNDLE, Items.LIGHT_GRAY_BUNDLE, Items.LIME_BUNDLE, Items.MAGENTA_BUNDLE, Items.ORANGE_BUNDLE, Items.RED_BUNDLE,
Items.PINK_BUNDLE, Items.PURPLE_BUNDLE, Items.WHITE_BUNDLE, Items.YELLOW_BUNDLE);
Map<Item, Item> pre1_21_2Items = new HashMap<>();
bundles.forEach(bundle -> pre1_21_2Items.put(bundle, Items.SHULKER_SHELL));
List<PaletteVersion> paletteVersions = new ArrayList<>(3);
paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion685_671::remapItem));
paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion712_685::remapItem));
paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion729_712::remapItem));
paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion748_729::remapItem));
List<PaletteVersion> paletteVersions = new ArrayList<>(2);
paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()));
paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()));
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
@ -207,7 +194,7 @@ public class ItemRegistryPopulator {
noBlockDefinitions.add("minecraft:structure_void");
AtomicInteger creativeNetId = new AtomicInteger();
CreativeItemRegistryPopulator.populate(palette, definitions, itemBuilder -> {
CreativeItemRegistryPopulator.populate(palette, definitions, items, itemBuilder -> {
ItemData item = itemBuilder.netId(creativeNetId.incrementAndGet()).build();
creativeItems.add(item);

Datei anzeigen

@ -33,11 +33,8 @@ import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
import org.geysermc.geyser.GeyserBootstrap;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.item.type.Item;
@ -70,11 +67,8 @@ public final class TagRegistryPopulator {
};
List<ObjectIntPair<String>> paletteVersions = List.of(
ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()),
ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()),
ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()),
ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()),
ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())
ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()),
ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion())
);
Type type = new TypeToken<Map<String, List<String>>>() {}.getType();

Datei anzeigen

@ -2241,9 +2241,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
@Override
public void closeForm() {
if (!GameProtocol.isPre1_21_2(this)) {
sendUpstreamPacket(new ClientboundCloseFormPacket());
}
sendUpstreamPacket(new ClientboundCloseFormPacket());
}
public void addCommandEnum(String name, String enums) {

Datei anzeigen

@ -261,9 +261,9 @@ public abstract class InventoryTranslator {
}
}
if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainer(),
if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainerName().getContainer(),
isSourceCursor ? -1 : sourceSlot,
transferAction.getDestination().getContainer(), isDestCursor ? -1 : destSlot)) {
transferAction.getDestination().getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) {
// This item would not be here in Java
return rejectRequest(request, false);
}
@ -411,14 +411,14 @@ public abstract class InventoryTranslator {
boolean isSourceCursor = isCursor(source);
boolean isDestCursor = isCursor(destination);
if (shouldRejectItemPlace(session, inventory, source.getContainer(),
if (shouldRejectItemPlace(session, inventory, source.getContainerName().getContainer(),
isSourceCursor ? -1 : sourceSlot,
destination.getContainer(), isDestCursor ? -1 : destSlot)) {
destination.getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) {
// This item would not be here in Java
return rejectRequest(request, false);
}
if (!isSourceCursor && destination.getContainer() == ContainerSlotType.HOTBAR || destination.getContainer() == ContainerSlotType.HOTBAR_AND_INVENTORY) {
if (!isSourceCursor && destination.getContainerName().getContainer() == ContainerSlotType.HOTBAR || destination.getContainerName().getContainer() == ContainerSlotType.HOTBAR_AND_INVENTORY) {
// Tell the server we're pressing one of the hotbar keys to save clicks
Click click = InventoryUtils.getClickForHotbarSwap(destination.getSlot());
if (click != null) {
@ -587,7 +587,7 @@ public abstract class InventoryTranslator {
}
craftState = CraftState.TRANSFER;
if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
return rejectRequest(request);
}
if (transferAction.getCount() <= 0) {
@ -780,7 +780,7 @@ public abstract class InventoryTranslator {
}
craftState = CraftState.TRANSFER;
if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
return rejectRequest(request);
}
if (transferAction.getCount() <= 0) {
@ -1028,15 +1028,15 @@ public abstract class InventoryTranslator {
}
}
itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) itemStack.getAmount(), itemStack.getNetId(), "", durability);
itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) itemStack.getAmount(), itemStack.getNetId(), "", durability, "");
} else {
itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) 0, 0, "", 0);
itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) 0, 0, "", 0, "");
}
return itemEntry;
}
protected static boolean isCursor(ItemStackRequestSlotData slotInfoData) {
return slotInfoData.getContainer() == ContainerSlotType.CURSOR;
return slotInfoData.getContainerName().getContainer() == ContainerSlotType.CURSOR;
}
/**

Datei anzeigen

@ -35,8 +35,6 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.level.block.property.Properties;
import org.geysermc.geyser.level.block.type.BlockState;
import org.geysermc.geyser.level.block.type.SkullBlock;
import org.geysermc.geyser.network.GameProtocol;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.SkullCache;
import org.geysermc.geyser.skin.SkinProvider;
@ -58,9 +56,6 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements
// Could be a wall skull block otherwise, which has rotation in its Bedrock state
bedrockNbt.putFloat("Rotation", rotation * 22.5f);
}
if (GameProtocol.isPre1_21_40(session)) {
bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0));
}
if (blockState.getValue(Properties.POWERED)) {
bedrockNbt.putBoolean("MouthMoving", true);
}

Datei anzeigen

@ -25,7 +25,6 @@
package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input;
import net.kyori.adventure.util.TriState;
import org.cloudburstmc.math.vector.Vector3d;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData;
@ -33,7 +32,6 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket;
import org.geysermc.geyser.entity.EntityDefinitions;
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
import org.geysermc.geyser.level.physics.CollisionResult;
import org.geysermc.geyser.network.GameProtocol;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.text.ChatColor;
import org.geysermc.mcprotocollib.network.packet.Packet;
@ -88,14 +86,8 @@ final class BedrockMovePlayer {
session.setLookBackScheduledFuture(null);
}
TriState maybeOnGround;
if (GameProtocol.isPre1_21_30(session)) {
// VERTICAL_COLLISION input data does not exist.
maybeOnGround = TriState.NOT_SET;
} else {
// Client is telling us it wants to move down, but something is blocking it from doing so.
maybeOnGround = TriState.byBoolean(packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0);
}
// Client is telling us it wants to move down, but something is blocking it from doing so.
boolean isOnGround = packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0;
// This takes into account no movement sent from the client, but the player is trying to move anyway.
// (Press into a wall in a corner - you're trying to move but nothing actually happens)
boolean horizontalCollision = packet.getInputData().contains(PlayerAuthInputData.HORIZONTAL_COLLISION);
@ -104,7 +96,7 @@ final class BedrockMovePlayer {
// This isn't needed, but it makes the packets closer to vanilla
// It also means you can't "lag back" while only looking, in theory
if (!positionChanged && rotationChanged) {
ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(maybeOnGround.toBooleanOrElse(entity.isOnGround()), horizontalCollision, yaw, pitch);
ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(isOnGround, horizontalCollision, yaw, pitch);
entity.setYaw(yaw);
entity.setPitch(pitch);
@ -113,10 +105,9 @@ final class BedrockMovePlayer {
session.sendDownstreamGamePacket(playerRotationPacket);
} else if (positionChanged) {
if (isValidMove(session, entity.getPosition(), packet.getPosition())) {
CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), maybeOnGround.toBooleanOrElse(false), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT));
CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), isOnGround, packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT));
if (result != null) { // A null return value cancels the packet
Vector3d position = result.correctedMovement();
boolean onGround = maybeOnGround.toBooleanOrElseGet(() -> session.getCollisionManager().isOnGround());
boolean isBelowVoid = entity.isVoidPositionDesynched();
boolean teleportThroughVoidFloor, mustResyncPosition;
@ -131,7 +122,7 @@ final class BedrockMovePlayer {
if (teleportThroughVoidFloor || isBelowVoid) {
// https://github.com/GeyserMC/Geyser/issues/3521 - no void floor in Java so we cannot be on the ground.
onGround = false;
isOnGround = false;
}
if (isBelowVoid) {
@ -151,7 +142,7 @@ final class BedrockMovePlayer {
if (rotationChanged) {
// Send rotation updates as well
movePacket = new ServerboundMovePlayerPosRotPacket(
onGround,
isOnGround,
horizontalCollision,
position.getX(), yPosition, position.getZ(),
yaw, pitch
@ -161,7 +152,7 @@ final class BedrockMovePlayer {
entity.setHeadYaw(headYaw);
} else {
// Rotation did not change; don't send an update with rotation
movePacket = new ServerboundMovePlayerPosPacket(onGround, horizontalCollision, position.getX(), yPosition, position.getZ());
movePacket = new ServerboundMovePlayerPosPacket(isOnGround, horizontalCollision, position.getX(), yPosition, position.getZ());
}
entity.setPositionManual(packet.getPosition());
@ -183,12 +174,12 @@ final class BedrockMovePlayer {
session.getGeyser().getLogger().debug("Recalculating position...");
session.getCollisionManager().recalculatePosition();
}
} else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || maybeOnGround.toBooleanOrElse(entity.isOnGround()) != entity.isOnGround()) {
session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(maybeOnGround.toBooleanOrElse(false), horizontalCollision));
} else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || isOnGround != entity.isOnGround()) {
session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(isOnGround, horizontalCollision));
}
session.getInputCache().setLastHorizontalCollision(horizontalCollision);
entity.setOnGround(maybeOnGround.toBooleanOrElse(entity.isOnGround()));
entity.setOnGround(isOnGround);
// Move parrots to match if applicable
if (entity.getLeftParrot() != null) {

Datei anzeigen

@ -29,7 +29,6 @@ import org.geysermc.geyser.entity.type.Entity;
import org.geysermc.geyser.entity.type.LivingEntity;
import org.geysermc.geyser.entity.type.player.PlayerEntity;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.network.GameProtocol;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.skin.FakeHeadProvider;
import org.geysermc.geyser.translator.protocol.PacketTranslator;
@ -79,11 +78,8 @@ public class JavaSetEquipmentTranslator extends PacketTranslator<ClientboundSetE
}
case BODY -> {
// BODY is sent for llamas with a carpet equipped, as of 1.20.5
if (GameProtocol.isPre1_21_2(session)) {
livingEntity.setChestplate(stack);
} else {
livingEntity.setBody(stack);
}
// and for wolves
livingEntity.setBody(stack);
armorUpdated = true;
}
case LEGGINGS -> {

Binäre Datei nicht angezeigt.

Datei anzeigen

@ -1,784 +0,0 @@
{
"minecraft:arrow": [
"minecraft:arrow"
],
"minecraft:banner": [
"minecraft:banner"
],
"minecraft:boat": [
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:mangrove_boat",
"minecraft:acacia_boat",
"minecraft:oak_chest_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:cherry_chest_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:boats": [
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:mangrove_boat",
"minecraft:acacia_boat",
"minecraft:oak_chest_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:cherry_chest_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:bookshelf_books": [
"minecraft:book",
"minecraft:writable_book",
"minecraft:enchanted_book",
"minecraft:written_book"
],
"minecraft:chainmail_tier": [
"minecraft:chainmail_helmet",
"minecraft:chainmail_leggings",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_boots"
],
"minecraft:chest_boat": [],
"minecraft:coals": [
"minecraft:coal",
"minecraft:charcoal"
],
"minecraft:crimson_stems": [
"minecraft:crimson_hyphae",
"minecraft:stripped_crimson_hyphae",
"minecraft:crimson_stem",
"minecraft:stripped_crimson_stem"
],
"minecraft:decorated_pot_sherds": [
"minecraft:blade_pottery_sherd",
"minecraft:brick",
"minecraft:angler_pottery_sherd",
"minecraft:burn_pottery_sherd",
"minecraft:archer_pottery_sherd",
"minecraft:arms_up_pottery_sherd",
"minecraft:heartbreak_pottery_sherd",
"minecraft:brewer_pottery_sherd",
"minecraft:danger_pottery_sherd",
"minecraft:explorer_pottery_sherd",
"minecraft:friend_pottery_sherd",
"minecraft:heart_pottery_sherd",
"minecraft:howl_pottery_sherd",
"minecraft:miner_pottery_sherd",
"minecraft:mourner_pottery_sherd",
"minecraft:plenty_pottery_sherd",
"minecraft:skull_pottery_sherd",
"minecraft:prize_pottery_sherd",
"minecraft:sheaf_pottery_sherd",
"minecraft:shelter_pottery_sherd",
"minecraft:snort_pottery_sherd"
],
"minecraft:diamond_tier": [
"minecraft:diamond_axe",
"minecraft:diamond_sword",
"minecraft:diamond_pickaxe",
"minecraft:diamond_shovel",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots"
],
"minecraft:digger": [
"minecraft:stone_pickaxe",
"minecraft:iron_pickaxe",
"minecraft:iron_shovel",
"minecraft:iron_axe",
"minecraft:wooden_shovel",
"minecraft:wooden_pickaxe",
"minecraft:stone_shovel",
"minecraft:wooden_axe",
"minecraft:stone_axe",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_shovel",
"minecraft:netherite_pickaxe",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:door": [
"minecraft:wooden_door",
"minecraft:iron_door",
"minecraft:spruce_door",
"minecraft:birch_door",
"minecraft:crimson_door",
"minecraft:jungle_door",
"minecraft:dark_oak_door",
"minecraft:acacia_door",
"minecraft:mangrove_door",
"minecraft:warped_door",
"minecraft:cherry_door",
"minecraft:bamboo_door"
],
"minecraft:golden_tier": [
"minecraft:golden_sword",
"minecraft:golden_hoe",
"minecraft:golden_shovel",
"minecraft:golden_chestplate",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:golden_leggings",
"minecraft:golden_helmet",
"minecraft:golden_boots"
],
"minecraft:hanging_actor": [
"minecraft:painting"
],
"minecraft:hanging_sign": [
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:crimson_hanging_sign",
"minecraft:acacia_hanging_sign",
"minecraft:spruce_hanging_sign",
"minecraft:birch_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:warped_hanging_sign",
"minecraft:mangrove_hanging_sign",
"minecraft:bamboo_hanging_sign"
],
"minecraft:horse_armor": [
"minecraft:leather_horse_armor",
"minecraft:iron_horse_armor",
"minecraft:golden_horse_armor",
"minecraft:diamond_horse_armor"
],
"minecraft:iron_tier": [
"minecraft:iron_pickaxe",
"minecraft:iron_shovel",
"minecraft:iron_sword",
"minecraft:iron_axe",
"minecraft:iron_hoe",
"minecraft:iron_chestplate",
"minecraft:iron_helmet",
"minecraft:iron_leggings",
"minecraft:iron_boots"
],
"minecraft:is_armor": [
"minecraft:leather_boots",
"minecraft:leather_leggings",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:chainmail_leggings",
"minecraft:elytra",
"minecraft:chainmail_helmet",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_boots"
],
"minecraft:is_axe": [
"minecraft:iron_axe",
"minecraft:wooden_axe",
"minecraft:diamond_axe",
"minecraft:netherite_axe",
"minecraft:stone_axe",
"minecraft:golden_axe"
],
"minecraft:is_cooked": [
"minecraft:cooked_porkchop",
"minecraft:cooked_cod",
"minecraft:rabbit_stew",
"minecraft:cooked_salmon",
"minecraft:cooked_beef",
"minecraft:cooked_chicken",
"minecraft:cooked_rabbit",
"minecraft:cooked_mutton"
],
"minecraft:is_fish": [
"minecraft:cod",
"minecraft:salmon",
"minecraft:tropical_fish",
"minecraft:pufferfish",
"minecraft:cooked_salmon",
"minecraft:cooked_cod"
],
"minecraft:is_food": [
"minecraft:porkchop",
"minecraft:cooked_mutton",
"minecraft:apple",
"minecraft:golden_apple",
"minecraft:dried_kelp",
"minecraft:cooked_porkchop",
"minecraft:mushroom_stew",
"minecraft:enchanted_golden_apple",
"minecraft:bread",
"minecraft:cookie",
"minecraft:melon_slice",
"minecraft:beef",
"minecraft:cooked_beef",
"minecraft:chicken",
"minecraft:cooked_chicken",
"minecraft:rotten_flesh",
"minecraft:carrot",
"minecraft:potato",
"minecraft:baked_potato",
"minecraft:golden_carrot",
"minecraft:pumpkin_pie",
"minecraft:beetroot",
"minecraft:beetroot_soup",
"minecraft:sweet_berries",
"minecraft:rabbit",
"minecraft:cooked_rabbit",
"minecraft:rabbit_stew",
"minecraft:mutton"
],
"minecraft:is_hoe": [
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:netherite_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe"
],
"minecraft:is_meat": [
"minecraft:rotten_flesh",
"minecraft:porkchop",
"minecraft:cooked_mutton",
"minecraft:cooked_porkchop",
"minecraft:cooked_chicken",
"minecraft:beef",
"minecraft:rabbit",
"minecraft:cooked_beef",
"minecraft:chicken",
"minecraft:cooked_rabbit",
"minecraft:rabbit_stew",
"minecraft:mutton"
],
"minecraft:is_minecart": [
"minecraft:minecart",
"minecraft:tnt_minecart",
"minecraft:chest_minecart",
"minecraft:hopper_minecart",
"minecraft:command_block_minecart"
],
"minecraft:is_pickaxe": [
"minecraft:iron_pickaxe",
"minecraft:stone_pickaxe",
"minecraft:netherite_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:diamond_pickaxe",
"minecraft:golden_pickaxe"
],
"minecraft:is_shovel": [
"minecraft:iron_shovel",
"minecraft:golden_shovel",
"minecraft:wooden_shovel",
"minecraft:stone_shovel",
"minecraft:diamond_shovel",
"minecraft:netherite_shovel"
],
"minecraft:is_sword": [
"minecraft:iron_sword",
"minecraft:wooden_sword",
"minecraft:stone_sword",
"minecraft:golden_sword",
"minecraft:diamond_sword",
"minecraft:netherite_sword"
],
"minecraft:is_tool": [
"minecraft:iron_pickaxe",
"minecraft:iron_shovel",
"minecraft:iron_sword",
"minecraft:stone_hoe",
"minecraft:iron_axe",
"minecraft:wooden_sword",
"minecraft:diamond_hoe",
"minecraft:wooden_shovel",
"minecraft:golden_sword",
"minecraft:wooden_pickaxe",
"minecraft:wooden_axe",
"minecraft:stone_sword",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_sword",
"minecraft:diamond_axe",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:netherite_sword",
"minecraft:iron_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_shovel",
"minecraft:netherite_pickaxe",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:is_trident": [
"minecraft:trident"
],
"minecraft:leather_tier": [
"minecraft:leather_helmet",
"minecraft:leather_leggings",
"minecraft:leather_boots",
"minecraft:leather_chestplate"
],
"minecraft:lectern_books": [
"minecraft:writable_book",
"minecraft:written_book"
],
"minecraft:logs": [
"minecraft:oak_log",
"minecraft:stripped_oak_wood",
"minecraft:spruce_log",
"minecraft:crimson_stem",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_wood",
"minecraft:oak_wood",
"minecraft:dark_oak_log",
"minecraft:acacia_log",
"minecraft:spruce_wood",
"minecraft:stripped_spruce_wood",
"minecraft:birch_wood",
"minecraft:stripped_birch_wood",
"minecraft:warped_hyphae",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:stripped_warped_stem",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:mangrove_log",
"minecraft:stripped_spruce_log",
"minecraft:stripped_dark_oak_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_crimson_stem",
"minecraft:mangrove_wood",
"minecraft:stripped_mangrove_wood",
"minecraft:crimson_hyphae",
"minecraft:stripped_cherry_log",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_acacia_log",
"minecraft:stripped_warped_hyphae",
"minecraft:stripped_birch_log",
"minecraft:warped_stem",
"minecraft:stripped_crimson_hyphae",
"minecraft:cherry_wood",
"minecraft:stripped_oak_log",
"minecraft:cherry_log",
"minecraft:stripped_mangrove_log"
],
"minecraft:logs_that_burn": [
"minecraft:oak_log",
"minecraft:stripped_oak_wood",
"minecraft:spruce_log",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_wood",
"minecraft:oak_wood",
"minecraft:dark_oak_log",
"minecraft:acacia_log",
"minecraft:spruce_wood",
"minecraft:stripped_spruce_wood",
"minecraft:birch_wood",
"minecraft:stripped_birch_wood",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:mangrove_log",
"minecraft:stripped_spruce_log",
"minecraft:stripped_dark_oak_log",
"minecraft:stripped_jungle_log",
"minecraft:mangrove_wood",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_cherry_log",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_acacia_log",
"minecraft:stripped_birch_log",
"minecraft:cherry_wood",
"minecraft:stripped_oak_log",
"minecraft:cherry_log",
"minecraft:stripped_mangrove_log"
],
"minecraft:mangrove_logs": [
"minecraft:mangrove_log",
"minecraft:mangrove_wood",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_mangrove_log"
],
"minecraft:music_disc": [
"minecraft:music_disc_stal",
"minecraft:music_disc_13",
"minecraft:music_disc_cat",
"minecraft:music_disc_11",
"minecraft:music_disc_blocks",
"minecraft:music_disc_mellohi",
"minecraft:music_disc_chirp",
"minecraft:music_disc_ward",
"minecraft:music_disc_far",
"minecraft:music_disc_mall",
"minecraft:music_disc_strad",
"minecraft:music_disc_wait",
"minecraft:music_disc_otherside",
"minecraft:music_disc_pigstep",
"minecraft:music_disc_5",
"minecraft:music_disc_relic"
],
"minecraft:netherite_tier": [
"minecraft:netherite_chestplate",
"minecraft:netherite_axe",
"minecraft:netherite_sword",
"minecraft:netherite_hoe",
"minecraft:netherite_shovel",
"minecraft:netherite_pickaxe",
"minecraft:netherite_helmet",
"minecraft:netherite_leggings",
"minecraft:netherite_boots"
],
"minecraft:piglin_loved": [],
"minecraft:piglin_repellents": [],
"minecraft:planks": [
"minecraft:dark_oak_planks",
"minecraft:oak_planks",
"minecraft:warped_planks",
"minecraft:spruce_planks",
"minecraft:birch_planks",
"minecraft:jungle_planks",
"minecraft:mangrove_planks",
"minecraft:acacia_planks",
"minecraft:crimson_planks",
"minecraft:bamboo_planks",
"minecraft:cherry_planks"
],
"minecraft:sand": [
"minecraft:sand"
],
"minecraft:sign": [
"minecraft:dark_oak_sign",
"minecraft:oak_sign",
"minecraft:spruce_sign",
"minecraft:crimson_sign",
"minecraft:birch_sign",
"minecraft:jungle_sign",
"minecraft:warped_sign",
"minecraft:bamboo_sign",
"minecraft:acacia_sign",
"minecraft:mangrove_sign",
"minecraft:crimson_hanging_sign",
"minecraft:cherry_sign",
"minecraft:acacia_hanging_sign",
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:spruce_hanging_sign",
"minecraft:birch_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:warped_hanging_sign",
"minecraft:mangrove_hanging_sign",
"minecraft:bamboo_hanging_sign"
],
"minecraft:soul_fire_base_blocks": [
"minecraft:soul_soil",
"minecraft:soul_sand"
],
"minecraft:spawn_egg": [
"minecraft:zombie_villager_spawn_egg",
"minecraft:ender_dragon_spawn_egg",
"minecraft:zombie_horse_spawn_egg",
"minecraft:creeper_spawn_egg",
"minecraft:chicken_spawn_egg",
"minecraft:skeleton_spawn_egg",
"minecraft:cow_spawn_egg",
"minecraft:pig_spawn_egg",
"minecraft:dolphin_spawn_egg",
"minecraft:sheep_spawn_egg",
"minecraft:slime_spawn_egg",
"minecraft:wolf_spawn_egg",
"minecraft:phantom_spawn_egg",
"minecraft:mooshroom_spawn_egg",
"minecraft:agent_spawn_egg",
"minecraft:enderman_spawn_egg",
"minecraft:silverfish_spawn_egg",
"minecraft:zoglin_spawn_egg",
"minecraft:fox_spawn_egg",
"minecraft:spider_spawn_egg",
"minecraft:zombie_spawn_egg",
"minecraft:bat_spawn_egg",
"minecraft:zombie_pigman_spawn_egg",
"minecraft:villager_spawn_egg",
"minecraft:vex_spawn_egg",
"minecraft:llama_spawn_egg",
"minecraft:squid_spawn_egg",
"minecraft:cat_spawn_egg",
"minecraft:ocelot_spawn_egg",
"minecraft:witch_spawn_egg",
"minecraft:ghast_spawn_egg",
"minecraft:allay_spawn_egg",
"minecraft:strider_spawn_egg",
"minecraft:magma_cube_spawn_egg",
"minecraft:blaze_spawn_egg",
"minecraft:cave_spider_spawn_egg",
"minecraft:guardian_spawn_egg",
"minecraft:horse_spawn_egg",
"minecraft:husk_spawn_egg",
"minecraft:rabbit_spawn_egg",
"minecraft:endermite_spawn_egg",
"minecraft:mule_spawn_egg",
"minecraft:stray_spawn_egg",
"minecraft:wither_skeleton_spawn_egg",
"minecraft:donkey_spawn_egg",
"minecraft:skeleton_horse_spawn_egg",
"minecraft:shulker_spawn_egg",
"minecraft:npc_spawn_egg",
"minecraft:elder_guardian_spawn_egg",
"minecraft:polar_bear_spawn_egg",
"minecraft:cod_spawn_egg",
"minecraft:vindicator_spawn_egg",
"minecraft:evoker_spawn_egg",
"minecraft:parrot_spawn_egg",
"minecraft:tropical_fish_spawn_egg",
"minecraft:pufferfish_spawn_egg",
"minecraft:salmon_spawn_egg",
"minecraft:drowned_spawn_egg",
"minecraft:turtle_spawn_egg",
"minecraft:piglin_spawn_egg",
"minecraft:panda_spawn_egg",
"minecraft:pillager_spawn_egg",
"minecraft:wandering_trader_spawn_egg",
"minecraft:ravager_spawn_egg",
"minecraft:bee_spawn_egg",
"minecraft:hoglin_spawn_egg",
"minecraft:piglin_brute_spawn_egg",
"minecraft:sniffer_spawn_egg",
"minecraft:axolotl_spawn_egg",
"minecraft:goat_spawn_egg",
"minecraft:glow_squid_spawn_egg",
"minecraft:iron_golem_spawn_egg",
"minecraft:snow_golem_spawn_egg",
"minecraft:wither_spawn_egg",
"minecraft:frog_spawn_egg",
"minecraft:tadpole_spawn_egg",
"minecraft:warden_spawn_egg",
"minecraft:trader_llama_spawn_egg",
"minecraft:camel_spawn_egg",
"minecraft:armadillo_spawn_egg",
"minecraft:spawn_egg"
],
"minecraft:stone_bricks": [
"minecraft:stonebrick"
],
"minecraft:stone_crafting_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:stone_tier": [
"minecraft:stone_sword",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:stone_hoe"
],
"minecraft:stone_tool_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:transform_materials": [
"minecraft:netherite_ingot"
],
"minecraft:transform_templates": [
"minecraft:netherite_upgrade_smithing_template"
],
"minecraft:transformable_items": [
"minecraft:diamond_axe",
"minecraft:diamond_sword",
"minecraft:diamond_pickaxe",
"minecraft:diamond_shovel",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_boots"
],
"minecraft:trim_materials": [
"minecraft:diamond",
"minecraft:emerald",
"minecraft:iron_ingot",
"minecraft:quartz",
"minecraft:lapis_lazuli",
"minecraft:gold_ingot",
"minecraft:redstone",
"minecraft:copper_ingot",
"minecraft:netherite_ingot",
"minecraft:amethyst_shard"
],
"minecraft:trim_templates": [
"minecraft:tide_armor_trim_smithing_template",
"minecraft:sentry_armor_trim_smithing_template",
"minecraft:coast_armor_trim_smithing_template",
"minecraft:dune_armor_trim_smithing_template",
"minecraft:wild_armor_trim_smithing_template",
"minecraft:ward_armor_trim_smithing_template",
"minecraft:eye_armor_trim_smithing_template",
"minecraft:vex_armor_trim_smithing_template",
"minecraft:snout_armor_trim_smithing_template",
"minecraft:rib_armor_trim_smithing_template",
"minecraft:spire_armor_trim_smithing_template",
"minecraft:silence_armor_trim_smithing_template",
"minecraft:wayfinder_armor_trim_smithing_template",
"minecraft:raiser_armor_trim_smithing_template",
"minecraft:shaper_armor_trim_smithing_template",
"minecraft:host_armor_trim_smithing_template"
],
"minecraft:trimmable_armors": [
"minecraft:leather_boots",
"minecraft:leather_leggings",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_helmet",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_boots"
],
"minecraft:vibration_damper": [
"minecraft:pink_wool",
"minecraft:lime_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:red_wool",
"minecraft:orange_wool",
"minecraft:yellow_carpet",
"minecraft:light_blue_wool",
"minecraft:yellow_wool",
"minecraft:gray_wool",
"minecraft:light_gray_wool",
"minecraft:cyan_wool",
"minecraft:purple_wool",
"minecraft:purple_carpet",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:green_wool",
"minecraft:black_wool",
"minecraft:white_carpet",
"minecraft:orange_carpet",
"minecraft:magenta_carpet",
"minecraft:light_blue_carpet",
"minecraft:lime_carpet",
"minecraft:pink_carpet",
"minecraft:gray_carpet",
"minecraft:light_gray_carpet",
"minecraft:cyan_carpet",
"minecraft:blue_carpet",
"minecraft:brown_carpet",
"minecraft:green_carpet",
"minecraft:red_carpet",
"minecraft:black_carpet"
],
"minecraft:warped_stems": [
"minecraft:stripped_warped_hyphae",
"minecraft:warped_hyphae",
"minecraft:stripped_warped_stem",
"minecraft:warped_stem"
],
"minecraft:wooden_slabs": [
"minecraft:mangrove_slab",
"minecraft:birch_slab",
"minecraft:cherry_slab",
"minecraft:jungle_slab",
"minecraft:spruce_slab",
"minecraft:bamboo_slab",
"minecraft:oak_slab",
"minecraft:acacia_slab",
"minecraft:dark_oak_slab",
"minecraft:crimson_slab",
"minecraft:warped_slab"
],
"minecraft:wooden_tier": [
"minecraft:wooden_sword",
"minecraft:wooden_shovel",
"minecraft:wooden_pickaxe",
"minecraft:wooden_axe",
"minecraft:wooden_hoe"
],
"minecraft:wool": [
"minecraft:pink_wool",
"minecraft:lime_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:red_wool",
"minecraft:orange_wool",
"minecraft:light_blue_wool",
"minecraft:yellow_wool",
"minecraft:gray_wool",
"minecraft:light_gray_wool",
"minecraft:cyan_wool",
"minecraft:purple_wool",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:green_wool",
"minecraft:black_wool"
]
}

Datei anzeigen

@ -1,802 +0,0 @@
{
"minecraft:arrow": [
"minecraft:arrow"
],
"minecraft:banner": [
"minecraft:banner"
],
"minecraft:boat": [
"minecraft:cherry_chest_boat",
"minecraft:oak_chest_boat",
"minecraft:mangrove_boat",
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:acacia_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:boats": [
"minecraft:cherry_chest_boat",
"minecraft:oak_chest_boat",
"minecraft:mangrove_boat",
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:acacia_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:bookshelf_books": [
"minecraft:written_book",
"minecraft:book",
"minecraft:writable_book",
"minecraft:enchanted_book"
],
"minecraft:chainmail_tier": [
"minecraft:chainmail_helmet",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots"
],
"minecraft:coals": [
"minecraft:coal",
"minecraft:charcoal"
],
"minecraft:crimson_stems": [
"minecraft:stripped_crimson_stem",
"minecraft:crimson_hyphae",
"minecraft:crimson_stem",
"minecraft:stripped_crimson_hyphae"
],
"minecraft:decorated_pot_sherds": [
"minecraft:skull_pottery_sherd",
"minecraft:angler_pottery_sherd",
"minecraft:prize_pottery_sherd",
"minecraft:mourner_pottery_sherd",
"minecraft:arms_up_pottery_sherd",
"minecraft:burn_pottery_sherd",
"minecraft:snort_pottery_sherd",
"minecraft:brick",
"minecraft:heartbreak_pottery_sherd",
"minecraft:miner_pottery_sherd",
"minecraft:brewer_pottery_sherd",
"minecraft:plenty_pottery_sherd",
"minecraft:scrape_pottery_sherd",
"minecraft:howl_pottery_sherd",
"minecraft:explorer_pottery_sherd",
"minecraft:archer_pottery_sherd",
"minecraft:blade_pottery_sherd",
"minecraft:danger_pottery_sherd",
"minecraft:flow_pottery_sherd",
"minecraft:friend_pottery_sherd",
"minecraft:guster_pottery_sherd",
"minecraft:heart_pottery_sherd",
"minecraft:sheaf_pottery_sherd",
"minecraft:shelter_pottery_sherd"
],
"minecraft:diamond_tier": [
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:mace",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots"
],
"minecraft:digger": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:wooden_axe",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_pickaxe",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:door": [
"minecraft:warped_door",
"minecraft:waxed_weathered_copper_door",
"minecraft:wooden_door",
"minecraft:iron_door",
"minecraft:mangrove_door",
"minecraft:exposed_copper_door",
"minecraft:bamboo_door",
"minecraft:weathered_copper_door",
"minecraft:jungle_door",
"minecraft:spruce_door",
"minecraft:birch_door",
"minecraft:acacia_door",
"minecraft:dark_oak_door",
"minecraft:crimson_door",
"minecraft:cherry_door",
"minecraft:copper_door",
"minecraft:oxidized_copper_door",
"minecraft:waxed_copper_door",
"minecraft:waxed_exposed_copper_door",
"minecraft:waxed_oxidized_copper_door"
],
"minecraft:golden_tier": [
"minecraft:golden_sword",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:golden_hoe",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots"
],
"minecraft:hanging_actor": [
"minecraft:painting"
],
"minecraft:hanging_sign": [
"minecraft:mangrove_hanging_sign",
"minecraft:bamboo_hanging_sign",
"minecraft:spruce_hanging_sign",
"minecraft:birch_hanging_sign",
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:acacia_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:crimson_hanging_sign",
"minecraft:warped_hanging_sign"
],
"minecraft:horse_armor": [
"minecraft:golden_horse_armor",
"minecraft:leather_horse_armor",
"minecraft:iron_horse_armor",
"minecraft:diamond_horse_armor"
],
"minecraft:iron_tier": [
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:iron_hoe",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots"
],
"minecraft:is_armor": [
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:elytra",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_helmet"
],
"minecraft:is_axe": [
"minecraft:iron_axe",
"minecraft:wooden_axe",
"minecraft:stone_axe",
"minecraft:diamond_axe",
"minecraft:golden_axe",
"minecraft:netherite_axe"
],
"minecraft:is_cooked": [
"minecraft:cooked_cod",
"minecraft:cooked_porkchop",
"minecraft:cooked_rabbit",
"minecraft:cooked_salmon",
"minecraft:cooked_beef",
"minecraft:cooked_chicken",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton"
],
"minecraft:is_fish": [
"minecraft:cooked_cod",
"minecraft:cod",
"minecraft:salmon",
"minecraft:tropical_fish",
"minecraft:pufferfish",
"minecraft:cooked_salmon"
],
"minecraft:is_food": [
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:mushroom_stew",
"minecraft:beetroot",
"minecraft:apple",
"minecraft:carrot",
"minecraft:chicken",
"minecraft:potato",
"minecraft:enchanted_golden_apple",
"minecraft:sweet_berries",
"minecraft:golden_apple",
"minecraft:bread",
"minecraft:porkchop",
"minecraft:cookie",
"minecraft:cooked_rabbit",
"minecraft:beef",
"minecraft:dried_kelp",
"minecraft:beetroot_soup",
"minecraft:melon_slice",
"minecraft:cooked_beef",
"minecraft:rotten_flesh",
"minecraft:cooked_chicken",
"minecraft:baked_potato",
"minecraft:golden_carrot",
"minecraft:pumpkin_pie",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton",
"minecraft:mutton"
],
"minecraft:is_hoe": [
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_hoe"
],
"minecraft:is_meat": [
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:chicken",
"minecraft:porkchop",
"minecraft:cooked_rabbit",
"minecraft:beef",
"minecraft:cooked_beef",
"minecraft:rotten_flesh",
"minecraft:cooked_chicken",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton",
"minecraft:mutton"
],
"minecraft:is_minecart": [
"minecraft:command_block_minecart",
"minecraft:minecart",
"minecraft:chest_minecart",
"minecraft:tnt_minecart",
"minecraft:hopper_minecart"
],
"minecraft:is_pickaxe": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:stone_pickaxe",
"minecraft:diamond_pickaxe",
"minecraft:golden_pickaxe",
"minecraft:netherite_pickaxe"
],
"minecraft:is_shovel": [
"minecraft:wooden_shovel",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:diamond_shovel",
"minecraft:golden_shovel",
"minecraft:netherite_shovel"
],
"minecraft:is_sword": [
"minecraft:iron_sword",
"minecraft:stone_sword",
"minecraft:wooden_sword",
"minecraft:diamond_sword",
"minecraft:mace",
"minecraft:golden_sword",
"minecraft:netherite_sword"
],
"minecraft:is_tool": [
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:stone_sword",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:wooden_sword",
"minecraft:wooden_axe",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:mace",
"minecraft:golden_sword",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_sword",
"minecraft:netherite_pickaxe",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:is_trident": [
"minecraft:trident"
],
"minecraft:leather_tier": [
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots"
],
"minecraft:lectern_books": [
"minecraft:written_book",
"minecraft:writable_book"
],
"minecraft:logs": [
"minecraft:stripped_oak_log",
"minecraft:mangrove_wood",
"minecraft:spruce_wood",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_crimson_stem",
"minecraft:stripped_spruce_wood",
"minecraft:spruce_log",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:stripped_warped_hyphae",
"minecraft:acacia_log",
"minecraft:oak_log",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_log",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:oak_wood",
"minecraft:stripped_oak_wood",
"minecraft:birch_wood",
"minecraft:stripped_birch_wood",
"minecraft:dark_oak_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:stripped_dark_oak_log",
"minecraft:mangrove_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_mangrove_wood",
"minecraft:crimson_hyphae",
"minecraft:stripped_cherry_log",
"minecraft:stripped_birch_log",
"minecraft:stripped_acacia_log",
"minecraft:crimson_stem",
"minecraft:warped_hyphae",
"minecraft:stripped_spruce_log",
"minecraft:warped_stem",
"minecraft:stripped_crimson_hyphae",
"minecraft:cherry_wood",
"minecraft:cherry_log",
"minecraft:stripped_warped_stem",
"minecraft:stripped_mangrove_log"
],
"minecraft:logs_that_burn": [
"minecraft:stripped_oak_log",
"minecraft:mangrove_wood",
"minecraft:spruce_wood",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_spruce_wood",
"minecraft:spruce_log",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:acacia_log",
"minecraft:oak_log",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_log",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:oak_wood",
"minecraft:stripped_oak_wood",
"minecraft:birch_wood",
"minecraft:stripped_birch_wood",
"minecraft:dark_oak_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:stripped_dark_oak_log",
"minecraft:mangrove_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_cherry_log",
"minecraft:stripped_birch_log",
"minecraft:stripped_acacia_log",
"minecraft:stripped_spruce_log",
"minecraft:cherry_wood",
"minecraft:cherry_log",
"minecraft:stripped_mangrove_log"
],
"minecraft:mangrove_logs": [
"minecraft:mangrove_wood",
"minecraft:mangrove_log",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_mangrove_log"
],
"minecraft:music_disc": [
"minecraft:music_disc_ward",
"minecraft:music_disc_strad",
"minecraft:music_disc_chirp",
"minecraft:music_disc_creator_music_box",
"minecraft:music_disc_mall",
"minecraft:music_disc_pigstep",
"minecraft:music_disc_wait",
"minecraft:music_disc_11",
"minecraft:music_disc_stal",
"minecraft:music_disc_13",
"minecraft:music_disc_cat",
"minecraft:music_disc_blocks",
"minecraft:music_disc_far",
"minecraft:music_disc_mellohi",
"minecraft:music_disc_otherside",
"minecraft:music_disc_5",
"minecraft:music_disc_relic",
"minecraft:music_disc_creator",
"minecraft:music_disc_precipice"
],
"minecraft:netherite_tier": [
"minecraft:netherite_boots",
"minecraft:netherite_sword",
"minecraft:netherite_chestplate",
"minecraft:netherite_pickaxe",
"minecraft:netherite_leggings",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe",
"minecraft:netherite_helmet"
],
"minecraft:planks": [
"minecraft:spruce_planks",
"minecraft:oak_planks",
"minecraft:mangrove_planks",
"minecraft:birch_planks",
"minecraft:jungle_planks",
"minecraft:acacia_planks",
"minecraft:dark_oak_planks",
"minecraft:bamboo_planks",
"minecraft:warped_planks",
"minecraft:crimson_planks",
"minecraft:cherry_planks"
],
"minecraft:sand": [
"minecraft:sand"
],
"minecraft:sign": [
"minecraft:bamboo_sign",
"minecraft:mangrove_hanging_sign",
"minecraft:cherry_sign",
"minecraft:oak_sign",
"minecraft:bamboo_hanging_sign",
"minecraft:warped_sign",
"minecraft:spruce_sign",
"minecraft:spruce_hanging_sign",
"minecraft:acacia_sign",
"minecraft:birch_hanging_sign",
"minecraft:birch_sign",
"minecraft:jungle_sign",
"minecraft:dark_oak_sign",
"minecraft:mangrove_sign",
"minecraft:crimson_sign",
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:acacia_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:crimson_hanging_sign",
"minecraft:warped_hanging_sign"
],
"minecraft:soul_fire_base_blocks": [
"minecraft:soul_sand",
"minecraft:soul_soil"
],
"minecraft:spawn_egg": [
"minecraft:enderman_spawn_egg",
"minecraft:ravager_spawn_egg",
"minecraft:strider_spawn_egg",
"minecraft:slime_spawn_egg",
"minecraft:glow_squid_spawn_egg",
"minecraft:pillager_spawn_egg",
"minecraft:blaze_spawn_egg",
"minecraft:witch_spawn_egg",
"minecraft:horse_spawn_egg",
"minecraft:polar_bear_spawn_egg",
"minecraft:zoglin_spawn_egg",
"minecraft:stray_spawn_egg",
"minecraft:zombie_pigman_spawn_egg",
"minecraft:snow_golem_spawn_egg",
"minecraft:panda_spawn_egg",
"minecraft:axolotl_spawn_egg",
"minecraft:agent_spawn_egg",
"minecraft:shulker_spawn_egg",
"minecraft:vindicator_spawn_egg",
"minecraft:evoker_spawn_egg",
"minecraft:parrot_spawn_egg",
"minecraft:wolf_spawn_egg",
"minecraft:elder_guardian_spawn_egg",
"minecraft:silverfish_spawn_egg",
"minecraft:tadpole_spawn_egg",
"minecraft:cow_spawn_egg",
"minecraft:bogged_spawn_egg",
"minecraft:ocelot_spawn_egg",
"minecraft:bee_spawn_egg",
"minecraft:piglin_brute_spawn_egg",
"minecraft:rabbit_spawn_egg",
"minecraft:camel_spawn_egg",
"minecraft:creeper_spawn_egg",
"minecraft:drowned_spawn_egg",
"minecraft:chicken_spawn_egg",
"minecraft:pig_spawn_egg",
"minecraft:sheep_spawn_egg",
"minecraft:mooshroom_spawn_egg",
"minecraft:skeleton_spawn_egg",
"minecraft:spider_spawn_egg",
"minecraft:zombie_spawn_egg",
"minecraft:villager_spawn_egg",
"minecraft:squid_spawn_egg",
"minecraft:bat_spawn_egg",
"minecraft:ghast_spawn_egg",
"minecraft:magma_cube_spawn_egg",
"minecraft:cave_spider_spawn_egg",
"minecraft:endermite_spawn_egg",
"minecraft:guardian_spawn_egg",
"minecraft:husk_spawn_egg",
"minecraft:piglin_spawn_egg",
"minecraft:wither_skeleton_spawn_egg",
"minecraft:donkey_spawn_egg",
"minecraft:mule_spawn_egg",
"minecraft:skeleton_horse_spawn_egg",
"minecraft:zombie_horse_spawn_egg",
"minecraft:npc_spawn_egg",
"minecraft:breeze_spawn_egg",
"minecraft:llama_spawn_egg",
"minecraft:vex_spawn_egg",
"minecraft:warden_spawn_egg",
"minecraft:zombie_villager_spawn_egg",
"minecraft:tropical_fish_spawn_egg",
"minecraft:cod_spawn_egg",
"minecraft:pufferfish_spawn_egg",
"minecraft:salmon_spawn_egg",
"minecraft:dolphin_spawn_egg",
"minecraft:turtle_spawn_egg",
"minecraft:phantom_spawn_egg",
"minecraft:cat_spawn_egg",
"minecraft:fox_spawn_egg",
"minecraft:wandering_trader_spawn_egg",
"minecraft:hoglin_spawn_egg",
"minecraft:sniffer_spawn_egg",
"minecraft:goat_spawn_egg",
"minecraft:iron_golem_spawn_egg",
"minecraft:ender_dragon_spawn_egg",
"minecraft:wither_spawn_egg",
"minecraft:frog_spawn_egg",
"minecraft:allay_spawn_egg",
"minecraft:trader_llama_spawn_egg",
"minecraft:armadillo_spawn_egg",
"minecraft:spawn_egg"
],
"minecraft:stone_bricks": [
"minecraft:stonebrick"
],
"minecraft:stone_crafting_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:stone_tier": [
"minecraft:stone_sword",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:stone_hoe"
],
"minecraft:stone_tool_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:transform_materials": [
"minecraft:netherite_ingot"
],
"minecraft:transform_templates": [
"minecraft:netherite_upgrade_smithing_template"
],
"minecraft:transformable_items": [
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_boots"
],
"minecraft:trim_materials": [
"minecraft:gold_ingot",
"minecraft:iron_ingot",
"minecraft:diamond",
"minecraft:redstone",
"minecraft:netherite_ingot",
"minecraft:lapis_lazuli",
"minecraft:quartz",
"minecraft:copper_ingot",
"minecraft:emerald",
"minecraft:amethyst_shard"
],
"minecraft:trim_templates": [
"minecraft:vex_armor_trim_smithing_template",
"minecraft:wild_armor_trim_smithing_template",
"minecraft:flow_armor_trim_smithing_template",
"minecraft:raiser_armor_trim_smithing_template",
"minecraft:silence_armor_trim_smithing_template",
"minecraft:coast_armor_trim_smithing_template",
"minecraft:snout_armor_trim_smithing_template",
"minecraft:dune_armor_trim_smithing_template",
"minecraft:rib_armor_trim_smithing_template",
"minecraft:host_armor_trim_smithing_template",
"minecraft:bolt_armor_trim_smithing_template",
"minecraft:shaper_armor_trim_smithing_template",
"minecraft:eye_armor_trim_smithing_template",
"minecraft:spire_armor_trim_smithing_template",
"minecraft:sentry_armor_trim_smithing_template",
"minecraft:ward_armor_trim_smithing_template",
"minecraft:tide_armor_trim_smithing_template",
"minecraft:wayfinder_armor_trim_smithing_template"
],
"minecraft:trimmable_armors": [
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_helmet"
],
"minecraft:vibration_damper": [
"minecraft:black_carpet",
"minecraft:blue_carpet",
"minecraft:pink_carpet",
"minecraft:lime_carpet",
"minecraft:green_wool",
"minecraft:cyan_carpet",
"minecraft:orange_wool",
"minecraft:white_carpet",
"minecraft:purple_carpet",
"minecraft:yellow_carpet",
"minecraft:light_gray_wool",
"minecraft:magenta_carpet",
"minecraft:purple_wool",
"minecraft:gray_wool",
"minecraft:red_carpet",
"minecraft:brown_carpet",
"minecraft:light_blue_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:yellow_wool",
"minecraft:lime_wool",
"minecraft:pink_wool",
"minecraft:cyan_wool",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:red_wool",
"minecraft:black_wool",
"minecraft:orange_carpet",
"minecraft:light_blue_carpet",
"minecraft:gray_carpet",
"minecraft:light_gray_carpet",
"minecraft:green_carpet"
],
"minecraft:warped_stems": [
"minecraft:stripped_warped_hyphae",
"minecraft:warped_hyphae",
"minecraft:warped_stem",
"minecraft:stripped_warped_stem"
],
"minecraft:wooden_slabs": [
"minecraft:birch_slab",
"minecraft:oak_slab",
"minecraft:spruce_slab",
"minecraft:bamboo_slab",
"minecraft:warped_slab",
"minecraft:mangrove_slab",
"minecraft:cherry_slab",
"minecraft:jungle_slab",
"minecraft:acacia_slab",
"minecraft:dark_oak_slab",
"minecraft:crimson_slab"
],
"minecraft:wooden_tier": [
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:wooden_sword",
"minecraft:wooden_axe",
"minecraft:wooden_hoe"
],
"minecraft:wool": [
"minecraft:green_wool",
"minecraft:orange_wool",
"minecraft:light_gray_wool",
"minecraft:purple_wool",
"minecraft:gray_wool",
"minecraft:light_blue_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:yellow_wool",
"minecraft:lime_wool",
"minecraft:pink_wool",
"minecraft:cyan_wool",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:red_wool",
"minecraft:black_wool"
]
}

Datei anzeigen

@ -1,806 +0,0 @@
{
"minecraft:arrow": [
"minecraft:arrow"
],
"minecraft:banner": [
"minecraft:banner"
],
"minecraft:boat": [
"minecraft:cherry_chest_boat",
"minecraft:oak_chest_boat",
"minecraft:mangrove_boat",
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:acacia_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:boats": [
"minecraft:cherry_chest_boat",
"minecraft:oak_chest_boat",
"minecraft:mangrove_boat",
"minecraft:oak_boat",
"minecraft:birch_boat",
"minecraft:jungle_boat",
"minecraft:spruce_boat",
"minecraft:acacia_boat",
"minecraft:dark_oak_boat",
"minecraft:birch_chest_boat",
"minecraft:jungle_chest_boat",
"minecraft:spruce_chest_boat",
"minecraft:acacia_chest_boat",
"minecraft:dark_oak_chest_boat",
"minecraft:mangrove_chest_boat",
"minecraft:cherry_boat",
"minecraft:bamboo_raft",
"minecraft:bamboo_chest_raft"
],
"minecraft:bookshelf_books": [
"minecraft:written_book",
"minecraft:book",
"minecraft:writable_book",
"minecraft:enchanted_book"
],
"minecraft:chainmail_tier": [
"minecraft:chainmail_helmet",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots"
],
"minecraft:coals": [
"minecraft:coal",
"minecraft:charcoal"
],
"minecraft:crimson_stems": [
"minecraft:stripped_crimson_stem",
"minecraft:crimson_hyphae",
"minecraft:crimson_stem",
"minecraft:stripped_crimson_hyphae"
],
"minecraft:decorated_pot_sherds": [
"minecraft:angler_pottery_sherd",
"minecraft:skull_pottery_sherd",
"minecraft:prize_pottery_sherd",
"minecraft:mourner_pottery_sherd",
"minecraft:arms_up_pottery_sherd",
"minecraft:burn_pottery_sherd",
"minecraft:snort_pottery_sherd",
"minecraft:brick",
"minecraft:heartbreak_pottery_sherd",
"minecraft:miner_pottery_sherd",
"minecraft:brewer_pottery_sherd",
"minecraft:plenty_pottery_sherd",
"minecraft:scrape_pottery_sherd",
"minecraft:howl_pottery_sherd",
"minecraft:explorer_pottery_sherd",
"minecraft:archer_pottery_sherd",
"minecraft:blade_pottery_sherd",
"minecraft:danger_pottery_sherd",
"minecraft:flow_pottery_sherd",
"minecraft:friend_pottery_sherd",
"minecraft:guster_pottery_sherd",
"minecraft:heart_pottery_sherd",
"minecraft:sheaf_pottery_sherd",
"minecraft:shelter_pottery_sherd"
],
"minecraft:diamond_tier": [
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:mace",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots"
],
"minecraft:digger": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:wooden_axe",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_pickaxe",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:door": [
"minecraft:warped_door",
"minecraft:waxed_weathered_copper_door",
"minecraft:wooden_door",
"minecraft:iron_door",
"minecraft:mangrove_door",
"minecraft:exposed_copper_door",
"minecraft:bamboo_door",
"minecraft:weathered_copper_door",
"minecraft:jungle_door",
"minecraft:spruce_door",
"minecraft:birch_door",
"minecraft:acacia_door",
"minecraft:dark_oak_door",
"minecraft:crimson_door",
"minecraft:cherry_door",
"minecraft:copper_door",
"minecraft:oxidized_copper_door",
"minecraft:waxed_copper_door",
"minecraft:waxed_exposed_copper_door",
"minecraft:waxed_oxidized_copper_door"
],
"minecraft:golden_tier": [
"minecraft:golden_sword",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:golden_hoe",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots"
],
"minecraft:hanging_actor": [
"minecraft:painting"
],
"minecraft:hanging_sign": [
"minecraft:mangrove_hanging_sign",
"minecraft:bamboo_hanging_sign",
"minecraft:spruce_hanging_sign",
"minecraft:birch_hanging_sign",
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:acacia_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:crimson_hanging_sign",
"minecraft:warped_hanging_sign"
],
"minecraft:horse_armor": [
"minecraft:golden_horse_armor",
"minecraft:leather_horse_armor",
"minecraft:iron_horse_armor",
"minecraft:diamond_horse_armor"
],
"minecraft:iron_tier": [
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:iron_hoe",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots"
],
"minecraft:is_armor": [
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:elytra",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_helmet"
],
"minecraft:is_axe": [
"minecraft:iron_axe",
"minecraft:wooden_axe",
"minecraft:stone_axe",
"minecraft:diamond_axe",
"minecraft:golden_axe",
"minecraft:netherite_axe"
],
"minecraft:is_cooked": [
"minecraft:cooked_cod",
"minecraft:cooked_porkchop",
"minecraft:cooked_rabbit",
"minecraft:cooked_salmon",
"minecraft:cooked_beef",
"minecraft:cooked_chicken",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton"
],
"minecraft:is_fish": [
"minecraft:cooked_cod",
"minecraft:cod",
"minecraft:salmon",
"minecraft:tropical_fish",
"minecraft:pufferfish",
"minecraft:cooked_salmon"
],
"minecraft:is_food": [
"minecraft:beetroot",
"minecraft:apple",
"minecraft:carrot",
"minecraft:chicken",
"minecraft:potato",
"minecraft:enchanted_golden_apple",
"minecraft:sweet_berries",
"minecraft:golden_carrot",
"minecraft:golden_apple",
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:mushroom_stew",
"minecraft:bread",
"minecraft:porkchop",
"minecraft:cookie",
"minecraft:cooked_rabbit",
"minecraft:beef",
"minecraft:dried_kelp",
"minecraft:beetroot_soup",
"minecraft:melon_slice",
"minecraft:cooked_beef",
"minecraft:rotten_flesh",
"minecraft:cooked_chicken",
"minecraft:baked_potato",
"minecraft:pumpkin_pie",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton",
"minecraft:mutton"
],
"minecraft:is_hoe": [
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_hoe"
],
"minecraft:is_meat": [
"minecraft:chicken",
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:porkchop",
"minecraft:cooked_rabbit",
"minecraft:beef",
"minecraft:cooked_beef",
"minecraft:rotten_flesh",
"minecraft:cooked_chicken",
"minecraft:rabbit_stew",
"minecraft:cooked_mutton",
"minecraft:mutton"
],
"minecraft:is_minecart": [
"minecraft:command_block_minecart",
"minecraft:minecart",
"minecraft:chest_minecart",
"minecraft:tnt_minecart",
"minecraft:hopper_minecart"
],
"minecraft:is_pickaxe": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:stone_pickaxe",
"minecraft:diamond_pickaxe",
"minecraft:golden_pickaxe",
"minecraft:netherite_pickaxe"
],
"minecraft:is_shovel": [
"minecraft:wooden_shovel",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:diamond_shovel",
"minecraft:golden_shovel",
"minecraft:netherite_shovel"
],
"minecraft:is_sword": [
"minecraft:iron_sword",
"minecraft:stone_sword",
"minecraft:wooden_sword",
"minecraft:diamond_sword",
"minecraft:mace",
"minecraft:golden_sword",
"minecraft:netherite_sword"
],
"minecraft:is_tool": [
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:stone_sword",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:wooden_sword",
"minecraft:wooden_axe",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:mace",
"minecraft:golden_sword",
"minecraft:golden_shovel",
"minecraft:golden_pickaxe",
"minecraft:golden_axe",
"minecraft:wooden_hoe",
"minecraft:stone_hoe",
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_sword",
"minecraft:netherite_pickaxe",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe"
],
"minecraft:is_trident": [
"minecraft:trident"
],
"minecraft:leather_tier": [
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots"
],
"minecraft:lectern_books": [
"minecraft:written_book",
"minecraft:writable_book"
],
"minecraft:logs": [
"minecraft:mangrove_wood",
"minecraft:spruce_wood",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_crimson_stem",
"minecraft:stripped_spruce_wood",
"minecraft:spruce_log",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:stripped_warped_hyphae",
"minecraft:acacia_log",
"minecraft:stripped_warped_stem",
"minecraft:oak_log",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_log",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:oak_wood",
"minecraft:birch_wood",
"minecraft:dark_oak_wood",
"minecraft:stripped_oak_wood",
"minecraft:stripped_birch_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:stripped_oak_log",
"minecraft:stripped_dark_oak_log",
"minecraft:mangrove_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_mangrove_wood",
"minecraft:crimson_hyphae",
"minecraft:stripped_cherry_log",
"minecraft:stripped_birch_log",
"minecraft:stripped_acacia_log",
"minecraft:crimson_stem",
"minecraft:warped_hyphae",
"minecraft:stripped_spruce_log",
"minecraft:warped_stem",
"minecraft:stripped_crimson_hyphae",
"minecraft:cherry_wood",
"minecraft:cherry_log",
"minecraft:stripped_mangrove_log"
],
"minecraft:logs_that_burn": [
"minecraft:mangrove_wood",
"minecraft:spruce_wood",
"minecraft:stripped_cherry_wood",
"minecraft:stripped_spruce_wood",
"minecraft:spruce_log",
"minecraft:acacia_wood",
"minecraft:stripped_acacia_wood",
"minecraft:acacia_log",
"minecraft:oak_log",
"minecraft:birch_log",
"minecraft:jungle_log",
"minecraft:dark_oak_log",
"minecraft:jungle_wood",
"minecraft:stripped_jungle_wood",
"minecraft:oak_wood",
"minecraft:birch_wood",
"minecraft:dark_oak_wood",
"minecraft:stripped_oak_wood",
"minecraft:stripped_birch_wood",
"minecraft:stripped_dark_oak_wood",
"minecraft:stripped_oak_log",
"minecraft:stripped_dark_oak_log",
"minecraft:mangrove_log",
"minecraft:stripped_jungle_log",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_cherry_log",
"minecraft:stripped_birch_log",
"minecraft:stripped_acacia_log",
"minecraft:stripped_spruce_log",
"minecraft:cherry_wood",
"minecraft:cherry_log",
"minecraft:stripped_mangrove_log"
],
"minecraft:mangrove_logs": [
"minecraft:mangrove_wood",
"minecraft:mangrove_log",
"minecraft:stripped_mangrove_wood",
"minecraft:stripped_mangrove_log"
],
"minecraft:music_disc": [
"minecraft:music_disc_ward",
"minecraft:music_disc_strad",
"minecraft:music_disc_chirp",
"minecraft:music_disc_creator_music_box",
"minecraft:music_disc_mall",
"minecraft:music_disc_pigstep",
"minecraft:music_disc_wait",
"minecraft:music_disc_11",
"minecraft:music_disc_stal",
"minecraft:music_disc_13",
"minecraft:music_disc_cat",
"minecraft:music_disc_blocks",
"minecraft:music_disc_far",
"minecraft:music_disc_mellohi",
"minecraft:music_disc_otherside",
"minecraft:music_disc_5",
"minecraft:music_disc_relic",
"minecraft:music_disc_creator",
"minecraft:music_disc_precipice"
],
"minecraft:netherite_tier": [
"minecraft:netherite_boots",
"minecraft:netherite_sword",
"minecraft:netherite_chestplate",
"minecraft:netherite_pickaxe",
"minecraft:netherite_leggings",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
"minecraft:netherite_hoe",
"minecraft:netherite_helmet"
],
"minecraft:planks": [
"minecraft:spruce_planks",
"minecraft:oak_planks",
"minecraft:mangrove_planks",
"minecraft:dark_oak_planks",
"minecraft:birch_planks",
"minecraft:jungle_planks",
"minecraft:acacia_planks",
"minecraft:bamboo_planks",
"minecraft:warped_planks",
"minecraft:crimson_planks",
"minecraft:cherry_planks"
],
"minecraft:sand": [
"minecraft:sand",
"minecraft:red_sand"
],
"minecraft:sign": [
"minecraft:bamboo_sign",
"minecraft:mangrove_hanging_sign",
"minecraft:cherry_sign",
"minecraft:oak_sign",
"minecraft:bamboo_hanging_sign",
"minecraft:warped_sign",
"minecraft:spruce_sign",
"minecraft:spruce_hanging_sign",
"minecraft:acacia_sign",
"minecraft:birch_hanging_sign",
"minecraft:birch_sign",
"minecraft:jungle_sign",
"minecraft:dark_oak_sign",
"minecraft:mangrove_sign",
"minecraft:crimson_sign",
"minecraft:cherry_hanging_sign",
"minecraft:oak_hanging_sign",
"minecraft:jungle_hanging_sign",
"minecraft:acacia_hanging_sign",
"minecraft:dark_oak_hanging_sign",
"minecraft:crimson_hanging_sign",
"minecraft:warped_hanging_sign"
],
"minecraft:soul_fire_base_blocks": [
"minecraft:soul_soil",
"minecraft:soul_sand"
],
"minecraft:spawn_egg": [
"minecraft:enderman_spawn_egg",
"minecraft:strider_spawn_egg",
"minecraft:ravager_spawn_egg",
"minecraft:slime_spawn_egg",
"minecraft:glow_squid_spawn_egg",
"minecraft:pillager_spawn_egg",
"minecraft:blaze_spawn_egg",
"minecraft:witch_spawn_egg",
"minecraft:horse_spawn_egg",
"minecraft:polar_bear_spawn_egg",
"minecraft:zoglin_spawn_egg",
"minecraft:stray_spawn_egg",
"minecraft:zombie_pigman_spawn_egg",
"minecraft:snow_golem_spawn_egg",
"minecraft:panda_spawn_egg",
"minecraft:axolotl_spawn_egg",
"minecraft:agent_spawn_egg",
"minecraft:shulker_spawn_egg",
"minecraft:vindicator_spawn_egg",
"minecraft:evoker_spawn_egg",
"minecraft:parrot_spawn_egg",
"minecraft:wolf_spawn_egg",
"minecraft:elder_guardian_spawn_egg",
"minecraft:silverfish_spawn_egg",
"minecraft:tadpole_spawn_egg",
"minecraft:cow_spawn_egg",
"minecraft:bogged_spawn_egg",
"minecraft:ocelot_spawn_egg",
"minecraft:bee_spawn_egg",
"minecraft:piglin_brute_spawn_egg",
"minecraft:rabbit_spawn_egg",
"minecraft:camel_spawn_egg",
"minecraft:creeper_spawn_egg",
"minecraft:drowned_spawn_egg",
"minecraft:chicken_spawn_egg",
"minecraft:pig_spawn_egg",
"minecraft:sheep_spawn_egg",
"minecraft:mooshroom_spawn_egg",
"minecraft:skeleton_spawn_egg",
"minecraft:spider_spawn_egg",
"minecraft:zombie_spawn_egg",
"minecraft:villager_spawn_egg",
"minecraft:squid_spawn_egg",
"minecraft:bat_spawn_egg",
"minecraft:ghast_spawn_egg",
"minecraft:magma_cube_spawn_egg",
"minecraft:cave_spider_spawn_egg",
"minecraft:endermite_spawn_egg",
"minecraft:guardian_spawn_egg",
"minecraft:husk_spawn_egg",
"minecraft:piglin_spawn_egg",
"minecraft:wither_skeleton_spawn_egg",
"minecraft:donkey_spawn_egg",
"minecraft:mule_spawn_egg",
"minecraft:skeleton_horse_spawn_egg",
"minecraft:zombie_horse_spawn_egg",
"minecraft:npc_spawn_egg",
"minecraft:breeze_spawn_egg",
"minecraft:llama_spawn_egg",
"minecraft:vex_spawn_egg",
"minecraft:warden_spawn_egg",
"minecraft:zombie_villager_spawn_egg",
"minecraft:tropical_fish_spawn_egg",
"minecraft:cod_spawn_egg",
"minecraft:pufferfish_spawn_egg",
"minecraft:salmon_spawn_egg",
"minecraft:dolphin_spawn_egg",
"minecraft:turtle_spawn_egg",
"minecraft:phantom_spawn_egg",
"minecraft:cat_spawn_egg",
"minecraft:fox_spawn_egg",
"minecraft:wandering_trader_spawn_egg",
"minecraft:hoglin_spawn_egg",
"minecraft:sniffer_spawn_egg",
"minecraft:goat_spawn_egg",
"minecraft:iron_golem_spawn_egg",
"minecraft:ender_dragon_spawn_egg",
"minecraft:wither_spawn_egg",
"minecraft:frog_spawn_egg",
"minecraft:allay_spawn_egg",
"minecraft:trader_llama_spawn_egg",
"minecraft:armadillo_spawn_egg",
"minecraft:spawn_egg"
],
"minecraft:stone_bricks": [
"minecraft:mossy_stone_bricks",
"minecraft:stone_bricks",
"minecraft:cracked_stone_bricks",
"minecraft:chiseled_stone_bricks"
],
"minecraft:stone_crafting_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:stone_tier": [
"minecraft:stone_sword",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:stone_hoe"
],
"minecraft:stone_tool_materials": [
"minecraft:cobblestone",
"minecraft:cobbled_deepslate",
"minecraft:blackstone"
],
"minecraft:transform_materials": [
"minecraft:netherite_ingot"
],
"minecraft:transform_templates": [
"minecraft:netherite_upgrade_smithing_template"
],
"minecraft:transformable_items": [
"minecraft:diamond_sword",
"minecraft:diamond_shovel",
"minecraft:diamond_pickaxe",
"minecraft:diamond_axe",
"minecraft:diamond_hoe",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_boots"
],
"minecraft:trim_materials": [
"minecraft:gold_ingot",
"minecraft:iron_ingot",
"minecraft:diamond",
"minecraft:redstone",
"minecraft:netherite_ingot",
"minecraft:lapis_lazuli",
"minecraft:quartz",
"minecraft:copper_ingot",
"minecraft:emerald",
"minecraft:amethyst_shard"
],
"minecraft:trim_templates": [
"minecraft:vex_armor_trim_smithing_template",
"minecraft:wild_armor_trim_smithing_template",
"minecraft:flow_armor_trim_smithing_template",
"minecraft:raiser_armor_trim_smithing_template",
"minecraft:silence_armor_trim_smithing_template",
"minecraft:coast_armor_trim_smithing_template",
"minecraft:snout_armor_trim_smithing_template",
"minecraft:dune_armor_trim_smithing_template",
"minecraft:rib_armor_trim_smithing_template",
"minecraft:host_armor_trim_smithing_template",
"minecraft:bolt_armor_trim_smithing_template",
"minecraft:shaper_armor_trim_smithing_template",
"minecraft:eye_armor_trim_smithing_template",
"minecraft:spire_armor_trim_smithing_template",
"minecraft:sentry_armor_trim_smithing_template",
"minecraft:ward_armor_trim_smithing_template",
"minecraft:tide_armor_trim_smithing_template",
"minecraft:wayfinder_armor_trim_smithing_template"
],
"minecraft:trimmable_armors": [
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:leather_helmet",
"minecraft:leather_chestplate",
"minecraft:leather_leggings",
"minecraft:leather_boots",
"minecraft:chainmail_chestplate",
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
"minecraft:diamond_chestplate",
"minecraft:diamond_leggings",
"minecraft:diamond_boots",
"minecraft:golden_helmet",
"minecraft:golden_chestplate",
"minecraft:golden_leggings",
"minecraft:golden_boots",
"minecraft:turtle_helmet",
"minecraft:netherite_chestplate",
"minecraft:netherite_leggings",
"minecraft:netherite_helmet"
],
"minecraft:vibration_damper": [
"minecraft:black_carpet",
"minecraft:blue_carpet",
"minecraft:pink_carpet",
"minecraft:lime_carpet",
"minecraft:green_wool",
"minecraft:cyan_carpet",
"minecraft:orange_wool",
"minecraft:white_carpet",
"minecraft:purple_carpet",
"minecraft:yellow_carpet",
"minecraft:light_gray_wool",
"minecraft:magenta_carpet",
"minecraft:purple_wool",
"minecraft:gray_wool",
"minecraft:red_carpet",
"minecraft:brown_carpet",
"minecraft:light_blue_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:yellow_wool",
"minecraft:lime_wool",
"minecraft:pink_wool",
"minecraft:cyan_wool",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:red_wool",
"minecraft:black_wool",
"minecraft:orange_carpet",
"minecraft:light_blue_carpet",
"minecraft:gray_carpet",
"minecraft:light_gray_carpet",
"minecraft:green_carpet"
],
"minecraft:warped_stems": [
"minecraft:stripped_warped_hyphae",
"minecraft:stripped_warped_stem",
"minecraft:warped_hyphae",
"minecraft:warped_stem"
],
"minecraft:wooden_slabs": [
"minecraft:birch_slab",
"minecraft:oak_slab",
"minecraft:spruce_slab",
"minecraft:bamboo_slab",
"minecraft:warped_slab",
"minecraft:mangrove_slab",
"minecraft:cherry_slab",
"minecraft:jungle_slab",
"minecraft:acacia_slab",
"minecraft:dark_oak_slab",
"minecraft:crimson_slab"
],
"minecraft:wooden_tier": [
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:wooden_sword",
"minecraft:wooden_axe",
"minecraft:wooden_hoe"
],
"minecraft:wool": [
"minecraft:green_wool",
"minecraft:orange_wool",
"minecraft:light_gray_wool",
"minecraft:purple_wool",
"minecraft:gray_wool",
"minecraft:light_blue_wool",
"minecraft:white_wool",
"minecraft:magenta_wool",
"minecraft:yellow_wool",
"minecraft:lime_wool",
"minecraft:pink_wool",
"minecraft:cyan_wool",
"minecraft:blue_wool",
"minecraft:brown_wool",
"minecraft:red_wool",
"minecraft:black_wool"
]
}

Datei anzeigen

@ -68,10 +68,10 @@
"minecraft:stripped_crimson_hyphae"
],
"minecraft:decorated_pot_sherds": [
"minecraft:angler_pottery_sherd",
"minecraft:skull_pottery_sherd",
"minecraft:prize_pottery_sherd",
"minecraft:mourner_pottery_sherd",
"minecraft:angler_pottery_sherd",
"minecraft:prize_pottery_sherd",
"minecraft:arms_up_pottery_sherd",
"minecraft:burn_pottery_sherd",
"minecraft:snort_pottery_sherd",
@ -106,13 +106,13 @@
"minecraft:diamond_boots"
],
"minecraft:digger": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:wooden_pickaxe",
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:wooden_shovel",
"minecraft:wooden_axe",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_shovel",
@ -132,15 +132,15 @@
"minecraft:netherite_hoe"
],
"minecraft:door": [
"minecraft:weathered_copper_door",
"minecraft:warped_door",
"minecraft:waxed_weathered_copper_door",
"minecraft:wooden_door",
"minecraft:jungle_door",
"minecraft:waxed_weathered_copper_door",
"minecraft:iron_door",
"minecraft:mangrove_door",
"minecraft:exposed_copper_door",
"minecraft:bamboo_door",
"minecraft:weathered_copper_door",
"minecraft:jungle_door",
"minecraft:spruce_door",
"minecraft:birch_door",
"minecraft:acacia_door",
@ -181,23 +181,24 @@
"minecraft:warped_hanging_sign"
],
"minecraft:horse_armor": [
"minecraft:iron_horse_armor",
"minecraft:golden_horse_armor",
"minecraft:leather_horse_armor",
"minecraft:iron_horse_armor",
"minecraft:diamond_horse_armor"
],
"minecraft:iron_tier": [
"minecraft:iron_chestplate",
"minecraft:iron_shovel",
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:iron_shovel",
"minecraft:iron_hoe",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots"
],
"minecraft:is_armor": [
"minecraft:iron_chestplate",
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:elytra",
@ -209,7 +210,6 @@
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
@ -236,8 +236,8 @@
"minecraft:is_cooked": [
"minecraft:cooked_cod",
"minecraft:cooked_porkchop",
"minecraft:cooked_rabbit",
"minecraft:cooked_salmon",
"minecraft:cooked_rabbit",
"minecraft:cooked_beef",
"minecraft:cooked_chicken",
"minecraft:rabbit_stew",
@ -245,25 +245,25 @@
],
"minecraft:is_fish": [
"minecraft:cooked_cod",
"minecraft:cooked_salmon",
"minecraft:cod",
"minecraft:salmon",
"minecraft:tropical_fish",
"minecraft:pufferfish",
"minecraft:cooked_salmon"
"minecraft:pufferfish"
],
"minecraft:is_food": [
"minecraft:golden_carrot",
"minecraft:carrot",
"minecraft:chicken",
"minecraft:apple",
"minecraft:beetroot",
"minecraft:potato",
"minecraft:enchanted_golden_apple",
"minecraft:sweet_berries",
"minecraft:golden_apple",
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:mushroom_stew",
"minecraft:potato",
"minecraft:enchanted_golden_apple",
"minecraft:golden_carrot",
"minecraft:carrot",
"minecraft:chicken",
"minecraft:beetroot",
"minecraft:sweet_berries",
"minecraft:apple",
"minecraft:golden_apple",
"minecraft:bread",
"minecraft:porkchop",
"minecraft:cookie",
@ -290,9 +290,9 @@
"minecraft:netherite_hoe"
],
"minecraft:is_meat": [
"minecraft:chicken",
"minecraft:rabbit",
"minecraft:cooked_porkchop",
"minecraft:chicken",
"minecraft:porkchop",
"minecraft:cooked_rabbit",
"minecraft:beef",
@ -311,41 +311,42 @@
"minecraft:hopper_minecart"
],
"minecraft:is_pickaxe": [
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:iron_pickaxe",
"minecraft:stone_pickaxe",
"minecraft:diamond_pickaxe",
"minecraft:golden_pickaxe",
"minecraft:netherite_pickaxe"
],
"minecraft:is_shovel": [
"minecraft:wooden_shovel",
"minecraft:iron_shovel",
"minecraft:wooden_shovel",
"minecraft:stone_shovel",
"minecraft:diamond_shovel",
"minecraft:golden_shovel",
"minecraft:netherite_shovel"
],
"minecraft:is_sword": [
"minecraft:netherite_sword",
"minecraft:iron_sword",
"minecraft:stone_sword",
"minecraft:wooden_sword",
"minecraft:stone_sword",
"minecraft:diamond_sword",
"minecraft:mace",
"minecraft:golden_sword",
"minecraft:netherite_sword"
"minecraft:golden_sword"
],
"minecraft:is_tool": [
"minecraft:iron_sword",
"minecraft:iron_pickaxe",
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:stone_sword",
"minecraft:iron_axe",
"minecraft:netherite_sword",
"minecraft:iron_shovel",
"minecraft:stone_shovel",
"minecraft:iron_sword",
"minecraft:wooden_pickaxe",
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:wooden_sword",
"minecraft:wooden_shovel",
"minecraft:wooden_axe",
"minecraft:stone_sword",
"minecraft:stone_shovel",
"minecraft:stone_pickaxe",
"minecraft:stone_axe",
"minecraft:diamond_sword",
@ -362,7 +363,6 @@
"minecraft:iron_hoe",
"minecraft:diamond_hoe",
"minecraft:golden_hoe",
"minecraft:netherite_sword",
"minecraft:netherite_pickaxe",
"minecraft:netherite_shovel",
"minecraft:netherite_axe",
@ -465,16 +465,16 @@
],
"minecraft:music_disc": [
"minecraft:music_disc_ward",
"minecraft:music_disc_stal",
"minecraft:music_disc_wait",
"minecraft:music_disc_cat",
"minecraft:music_disc_strad",
"minecraft:music_disc_chirp",
"minecraft:music_disc_creator_music_box",
"minecraft:music_disc_mall",
"minecraft:music_disc_creator_music_box",
"minecraft:music_disc_pigstep",
"minecraft:music_disc_wait",
"minecraft:music_disc_11",
"minecraft:music_disc_stal",
"minecraft:music_disc_13",
"minecraft:music_disc_cat",
"minecraft:music_disc_blocks",
"minecraft:music_disc_far",
"minecraft:music_disc_mellohi",
@ -485,8 +485,8 @@
"minecraft:music_disc_precipice"
],
"minecraft:netherite_tier": [
"minecraft:netherite_boots",
"minecraft:netherite_sword",
"minecraft:netherite_boots",
"minecraft:netherite_chestplate",
"minecraft:netherite_pickaxe",
"minecraft:netherite_leggings",
@ -513,6 +513,7 @@
"minecraft:red_sand"
],
"minecraft:sign": [
"minecraft:jungle_sign",
"minecraft:bamboo_sign",
"minecraft:mangrove_hanging_sign",
"minecraft:cherry_sign",
@ -524,7 +525,6 @@
"minecraft:acacia_sign",
"minecraft:birch_hanging_sign",
"minecraft:birch_sign",
"minecraft:jungle_sign",
"minecraft:dark_oak_sign",
"minecraft:mangrove_sign",
"minecraft:crimson_sign",
@ -542,16 +542,19 @@
],
"minecraft:spawn_egg": [
"minecraft:enderman_spawn_egg",
"minecraft:strider_spawn_egg",
"minecraft:endermite_spawn_egg",
"minecraft:tropical_fish_spawn_egg",
"minecraft:ravager_spawn_egg",
"minecraft:pufferfish_spawn_egg",
"minecraft:zoglin_spawn_egg",
"minecraft:strider_spawn_egg",
"minecraft:slime_spawn_egg",
"minecraft:glow_squid_spawn_egg",
"minecraft:pillager_spawn_egg",
"minecraft:blaze_spawn_egg",
"minecraft:witch_spawn_egg",
"minecraft:horse_spawn_egg",
"minecraft:polar_bear_spawn_egg",
"minecraft:zoglin_spawn_egg",
"minecraft:pillager_spawn_egg",
"minecraft:stray_spawn_egg",
"minecraft:zombie_pigman_spawn_egg",
"minecraft:snow_golem_spawn_egg",
@ -588,7 +591,6 @@
"minecraft:ghast_spawn_egg",
"minecraft:magma_cube_spawn_egg",
"minecraft:cave_spider_spawn_egg",
"minecraft:endermite_spawn_egg",
"minecraft:guardian_spawn_egg",
"minecraft:husk_spawn_egg",
"minecraft:piglin_spawn_egg",
@ -603,9 +605,7 @@
"minecraft:vex_spawn_egg",
"minecraft:warden_spawn_egg",
"minecraft:zombie_villager_spawn_egg",
"minecraft:tropical_fish_spawn_egg",
"minecraft:cod_spawn_egg",
"minecraft:pufferfish_spawn_egg",
"minecraft:salmon_spawn_egg",
"minecraft:dolphin_spawn_egg",
"minecraft:turtle_spawn_egg",
@ -667,9 +667,9 @@
"minecraft:golden_boots"
],
"minecraft:trim_materials": [
"minecraft:gold_ingot",
"minecraft:iron_ingot",
"minecraft:diamond",
"minecraft:iron_ingot",
"minecraft:gold_ingot",
"minecraft:redstone",
"minecraft:netherite_ingot",
"minecraft:lapis_lazuli",
@ -679,26 +679,27 @@
"minecraft:amethyst_shard"
],
"minecraft:trim_templates": [
"minecraft:coast_armor_trim_smithing_template",
"minecraft:vex_armor_trim_smithing_template",
"minecraft:wild_armor_trim_smithing_template",
"minecraft:flow_armor_trim_smithing_template",
"minecraft:raiser_armor_trim_smithing_template",
"minecraft:silence_armor_trim_smithing_template",
"minecraft:coast_armor_trim_smithing_template",
"minecraft:snout_armor_trim_smithing_template",
"minecraft:dune_armor_trim_smithing_template",
"minecraft:rib_armor_trim_smithing_template",
"minecraft:host_armor_trim_smithing_template",
"minecraft:bolt_armor_trim_smithing_template",
"minecraft:shaper_armor_trim_smithing_template",
"minecraft:eye_armor_trim_smithing_template",
"minecraft:spire_armor_trim_smithing_template",
"minecraft:sentry_armor_trim_smithing_template",
"minecraft:ward_armor_trim_smithing_template",
"minecraft:tide_armor_trim_smithing_template",
"minecraft:wayfinder_armor_trim_smithing_template"
"minecraft:wayfinder_armor_trim_smithing_template",
"minecraft:raiser_armor_trim_smithing_template",
"minecraft:shaper_armor_trim_smithing_template",
"minecraft:bolt_armor_trim_smithing_template"
],
"minecraft:trimmable_armors": [
"minecraft:iron_chestplate",
"minecraft:netherite_boots",
"minecraft:chainmail_helmet",
"minecraft:leather_helmet",
@ -709,7 +710,6 @@
"minecraft:chainmail_leggings",
"minecraft:chainmail_boots",
"minecraft:iron_helmet",
"minecraft:iron_chestplate",
"minecraft:iron_leggings",
"minecraft:iron_boots",
"minecraft:diamond_helmet",
@ -727,9 +727,9 @@
],
"minecraft:vibration_damper": [
"minecraft:black_carpet",
"minecraft:blue_carpet",
"minecraft:pink_carpet",
"minecraft:lime_carpet",
"minecraft:blue_carpet",
"minecraft:green_wool",
"minecraft:cyan_carpet",
"minecraft:orange_wool",
@ -780,8 +780,8 @@
],
"minecraft:wooden_tier": [
"minecraft:wooden_pickaxe",
"minecraft:wooden_shovel",
"minecraft:wooden_sword",
"minecraft:wooden_shovel",
"minecraft:wooden_axe",
"minecraft:wooden_hoe"
],
@ -803,4 +803,4 @@
"minecraft:red_wool",
"minecraft:black_wool"
]
}
}

Datei anzeigen

@ -11,5 +11,5 @@ loom.ignoreDependencyLoomVersionValidation=true
group=org.geysermc
id=geyser
version=2.5.0-SNAPSHOT
version=2.5.1-SNAPSHOT
description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers.

Datei anzeigen

@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT"
guava = "29.0-jre"
gson = "2.3.1" # Provided by Spigot 1.8.8
websocket = "1.5.1"
protocol-connection = "3.0.0.Beta5-20241022.154658-14"
protocol-common = "3.0.0.Beta5-20241022.154658-14"
protocol-codec = "3.0.0.Beta5-20241022.154658-14"
protocol-connection = "3.0.0.Beta5-20241121.192504-18"
protocol-common = "3.0.0.Beta5-20241121.192504-18"
protocol-codec = "3.0.0.Beta5-20241121.192504-18"
raknet = "1.0.0.CR3-20240416.144209-1"
minecraftauth = "4.1.1"
mcprotocollib = "1.21.2-20241107.110329-3"