Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-25 15:50:14 +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:
Ursprung
d956354b7f
Commit
9e276c1077
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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++) {
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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.
|
||||
*
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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")) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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.
Binäre Datei nicht angezeigt.
Binäre Datei nicht angezeigt.
Binäre Datei nicht angezeigt.
Binäre Datei nicht angezeigt.
BIN
core/src/main/resources/bedrock/block_palette.1_21_50.nbt
Normale Datei
BIN
core/src/main/resources/bedrock/block_palette.1_21_50.nbt
Normale Datei
Binäre Datei nicht angezeigt.
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Binäre Datei nicht angezeigt.
@ -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"
|
||||
]
|
||||
}
|
@ -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"
|
||||
]
|
||||
}
|
@ -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"
|
||||
]
|
||||
}
|
@ -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-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -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.
|
||||
|
@ -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"
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren