mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-12-22 14:34:59 +01:00
Merge remote-tracking branch 'refs/remotes/upstream/master' into feature/1.21.4
# Conflicts: # gradle.properties
This commit is contained in:
commit
5162aeb9b3
44 changed files with 2668 additions and 43132 deletions
|
@ -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!
|
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
|
## 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
|
## Setting Up
|
||||||
Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser.
|
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.entity.attribute.GeyserAttributeType;
|
||||||
import org.geysermc.geyser.item.Items;
|
import org.geysermc.geyser.item.Items;
|
||||||
import org.geysermc.geyser.level.BedrockDimension;
|
import org.geysermc.geyser.level.BedrockDimension;
|
||||||
import org.geysermc.geyser.network.GameProtocol;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.util.AttributeUtils;
|
import org.geysermc.geyser.util.AttributeUtils;
|
||||||
import org.geysermc.geyser.util.DimensionUtils;
|
import org.geysermc.geyser.util.DimensionUtils;
|
||||||
|
@ -235,12 +234,7 @@ public class SessionPlayerEntity extends PlayerEntity {
|
||||||
// the bubbles visually pop
|
// the bubbles visually pop
|
||||||
setFlag(EntityFlag.BREATHING, amount >= this.lastAirSupply);
|
setFlag(EntityFlag.BREATHING, amount >= this.lastAirSupply);
|
||||||
this.lastAirSupply = amount;
|
this.lastAirSupply = amount;
|
||||||
|
super.setAirSupply(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -36,14 +36,14 @@ import java.util.UUID;
|
||||||
|
|
||||||
public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksEvent {
|
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);
|
super(session);
|
||||||
this.packs = packMap;
|
this.packs = packMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NonNull Map<String, ResourcePack> getPacks() {
|
public @NonNull Map<UUID, ResourcePack> getPacks() {
|
||||||
return packs;
|
return packs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,16 +54,16 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean register(@NonNull ResourcePack resourcePack) {
|
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)) {
|
if (packs.containsValue(resourcePack) || packs.containsKey(packID)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
packs.put(resourcePack.manifest().header().uuid().toString(), resourcePack);
|
packs.put(resourcePack.manifest().header().uuid(), resourcePack);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean unregister(@NonNull UUID uuid) {
|
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 {
|
static {
|
||||||
CAMERA_PRESETS = List.of(
|
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()),
|
CameraPreset.builder().identifier(CameraPerspective.FIRST_PERSON.id()).build(),
|
||||||
new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
CameraPreset.builder().identifier(CameraPerspective.FREE.id()).build(),
|
||||||
new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON.id()).build(),
|
||||||
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()),
|
CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON_FRONT.id()).build(),
|
||||||
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()),
|
CameraPreset.builder().identifier("geyser:free_audio").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(false)).build(),
|
||||||
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()),
|
CameraPreset.builder().identifier("geyser:free_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.CAMERA).playEffect(OptionalBoolean.of(true)).build(),
|
||||||
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("geyser:free_audio_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(true)).build()
|
||||||
|
);
|
||||||
|
|
||||||
SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder();
|
SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder();
|
||||||
for (int i = 0; i < CAMERA_PRESETS.size(); i++) {
|
for (int i = 0; i < CAMERA_PRESETS.size(); i++) {
|
||||||
|
|
|
@ -34,7 +34,9 @@ import org.geysermc.geyser.inventory.item.Potion;
|
||||||
import org.geysermc.geyser.registry.type.ItemMapping;
|
import org.geysermc.geyser.registry.type.ItemMapping;
|
||||||
import org.geysermc.geyser.registry.type.ItemMappings;
|
import org.geysermc.geyser.registry.type.ItemMappings;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.translator.item.BedrockItemBuilder;
|
||||||
import org.geysermc.geyser.translator.item.CustomItemTranslator;
|
import org.geysermc.geyser.translator.item.CustomItemTranslator;
|
||||||
|
import org.geysermc.geyser.translator.item.ItemTranslator;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents;
|
||||||
|
@ -68,6 +70,17 @@ public class PotionItem extends Item {
|
||||||
return super.translateToBedrock(session, count, components, mapping, mappings);
|
return super.translateToBedrock(session, count, components, mapping, mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) {
|
||||||
|
// Make custom effect information visible
|
||||||
|
PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS);
|
||||||
|
if (potionContents != null) {
|
||||||
|
ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale());
|
||||||
|
}
|
||||||
|
|
||||||
|
super.translateComponentsToBedrock(session, components, builder);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) {
|
public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) {
|
||||||
Potion potion = Potion.getByBedrockId(itemData.getDamage());
|
Potion potion = Potion.getByBedrockId(itemData.getDamage());
|
||||||
|
|
|
@ -25,12 +25,15 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.item.type;
|
package org.geysermc.geyser.item.type;
|
||||||
|
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.inventory.item.Potion;
|
import org.geysermc.geyser.inventory.item.Potion;
|
||||||
import org.geysermc.geyser.registry.type.ItemMapping;
|
import org.geysermc.geyser.registry.type.ItemMapping;
|
||||||
import org.geysermc.geyser.registry.type.ItemMappings;
|
import org.geysermc.geyser.registry.type.ItemMappings;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.translator.item.BedrockItemBuilder;
|
||||||
|
import org.geysermc.geyser.translator.item.ItemTranslator;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents;
|
||||||
|
@ -57,4 +60,15 @@ public class TippedArrowItem extends ArrowItem {
|
||||||
}
|
}
|
||||||
return super.translateToBedrock(session, count, components, mapping, mappings);
|
return super.translateToBedrock(session, count, components, mapping, mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) {
|
||||||
|
// Make custom effect information visible
|
||||||
|
PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS);
|
||||||
|
if (potionContents != null) {
|
||||||
|
ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale());
|
||||||
|
}
|
||||||
|
|
||||||
|
super.translateComponentsToBedrock(session, components, builder);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,40 +416,6 @@ public class CollisionManager {
|
||||||
return BlockUtils.getCollision(blockId);
|
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
|
* @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.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
|
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.v748.Bedrock_v748;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
|
||||||
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
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.MinecraftCodec;
|
||||||
import org.geysermc.mcprotocollib.protocol.codec.PacketCodec;
|
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
|
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
||||||
* release of the game that Geyser supports.
|
* release of the game that Geyser supports.
|
||||||
*/
|
*/
|
||||||
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder()
|
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v765.CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.44")
|
.minecraftVersion("1.21.50")
|
||||||
|
.protocolVersion(766)
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,24 +63,10 @@ public final class GameProtocol {
|
||||||
private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC;
|
private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v671.CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v748.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()
|
|
||||||
.minecraftVersion("1.21.40 - 1.21.44")
|
.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 */
|
/* 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.
|
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
|
||||||
*
|
*
|
||||||
|
|
|
@ -77,11 +77,12 @@ import java.util.ArrayDeque;
|
||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class UpstreamPacketHandler extends LoggingPacketHandler {
|
public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
|
|
||||||
private boolean networkSettingsRequested = false;
|
private boolean networkSettingsRequested = false;
|
||||||
private final Deque<String> packsToSent = new ArrayDeque<>();
|
private final Deque<String> packsToSend = new ArrayDeque<>();
|
||||||
private final CompressionStrategy compressionStrategy;
|
private final CompressionStrategy compressionStrategy;
|
||||||
|
|
||||||
private SessionLoadResourcePacksEventImpl resourcePackLoadEvent;
|
private SessionLoadResourcePacksEventImpl resourcePackLoadEvent;
|
||||||
|
@ -133,8 +134,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
session.getUpstream().getSession().setCodec(packetCodec);
|
session.getUpstream().getSession().setCodec(packetCodec);
|
||||||
// FIXME temporary until 1.20.80 is dropped
|
|
||||||
session.getPlayerEntity().resetAir();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,10 +208,12 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
PackCodec codec = pack.codec();
|
PackCodec codec = pack.codec();
|
||||||
ResourcePackManifest.Header header = pack.manifest().header();
|
ResourcePackManifest.Header header = pack.manifest().header();
|
||||||
resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry(
|
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, ""));
|
"", header.uuid().toString(), false, false, false, ""));
|
||||||
}
|
}
|
||||||
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
||||||
|
resourcePacksInfo.setWorldTemplateId(UUID.randomUUID());
|
||||||
|
resourcePacksInfo.setWorldTemplateVersion("*");
|
||||||
session.sendUpstreamPacket(resourcePacksInfo);
|
session.sendUpstreamPacket(resourcePacksInfo);
|
||||||
|
|
||||||
GeyserLocale.loadGeyserLocale(session.locale());
|
GeyserLocale.loadGeyserLocale(session.locale());
|
||||||
|
@ -233,8 +234,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SEND_PACKS:
|
case SEND_PACKS:
|
||||||
packsToSent.addAll(packet.getPackIds());
|
packsToSend.addAll(packet.getPackIds());
|
||||||
sendPackDataInfo(packsToSent.pop());
|
sendPackDataInfo(packsToSend.pop());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HAVE_ALL_PACKS:
|
case HAVE_ALL_PACKS:
|
||||||
|
@ -311,7 +312,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
@Override
|
@Override
|
||||||
public PacketSignal handle(ResourcePackChunkRequestPacket packet) {
|
public PacketSignal handle(ResourcePackChunkRequestPacket packet) {
|
||||||
ResourcePackChunkDataPacket data = new ResourcePackChunkDataPacket();
|
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();
|
PackCodec codec = pack.codec();
|
||||||
|
|
||||||
data.setChunkIndex(packet.getChunkIndex());
|
data.setChunkIndex(packet.getChunkIndex());
|
||||||
|
@ -335,8 +336,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
session.sendUpstreamPacket(data);
|
session.sendUpstreamPacket(data);
|
||||||
|
|
||||||
// Check if it is the last chunk and send next pack in queue when available.
|
// Check if it is the last chunk and send next pack in queue when available.
|
||||||
if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSent.isEmpty()) {
|
if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSend.isEmpty()) {
|
||||||
sendPackDataInfo(packsToSent.pop());
|
sendPackDataInfo(packsToSend.pop());
|
||||||
}
|
}
|
||||||
|
|
||||||
return PacketSignal.HANDLED;
|
return PacketSignal.HANDLED;
|
||||||
|
@ -345,7 +346,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
private void sendPackDataInfo(String id) {
|
private void sendPackDataInfo(String id) {
|
||||||
ResourcePackDataInfoPacket data = new ResourcePackDataInfoPacket();
|
ResourcePackDataInfoPacket data = new ResourcePackDataInfoPacket();
|
||||||
String[] packID = id.split("_");
|
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();
|
PackCodec codec = pack.codec();
|
||||||
ResourcePackManifest.Header header = pack.manifest().header();
|
ResourcePackManifest.Header header = pack.manifest().header();
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ import java.util.HashSet;
|
||||||
import java.util.IdentityHashMap;
|
import java.util.IdentityHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds all the common registries in Geyser.
|
* 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.
|
* 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.
|
* 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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
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}.
|
* 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}");
|
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
|
* Loop through the packs directory and locate valid resource pack files
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ResourcePack> load(Path directory) {
|
public Map<UUID, ResourcePack> load(Path directory) {
|
||||||
Map<String, ResourcePack> packMap = new HashMap<>();
|
Map<UUID, ResourcePack> packMap = new HashMap<>();
|
||||||
|
|
||||||
if (!Files.exists(directory)) {
|
if (!Files.exists(directory)) {
|
||||||
try {
|
try {
|
||||||
|
@ -100,7 +101,7 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso
|
||||||
for (Path path : event.resourcePacks()) {
|
for (Path path : event.resourcePacks()) {
|
||||||
try {
|
try {
|
||||||
GeyserResourcePack pack = readPack(path);
|
GeyserResourcePack pack = readPack(path);
|
||||||
packMap.put(pack.manifest().header().uuid().toString(), pack);
|
packMap.put(pack.manifest().header().uuid(), pack);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,11 +44,8 @@ import org.cloudburstmc.nbt.NbtMap;
|
||||||
import org.cloudburstmc.nbt.NbtMapBuilder;
|
import org.cloudburstmc.nbt.NbtMapBuilder;
|
||||||
import org.cloudburstmc.nbt.NbtType;
|
import org.cloudburstmc.nbt.NbtType;
|
||||||
import org.cloudburstmc.nbt.NbtUtils;
|
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.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.BlockPropertyData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
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.registry.type.GeyserBedrockBlock;
|
||||||
import org.geysermc.geyser.util.BlockUtils;
|
import org.geysermc.geyser.util.BlockUtils;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
@ -127,20 +125,8 @@ public final class BlockRegistryPopulator {
|
||||||
|
|
||||||
private static void registerBedrockBlocks() {
|
private static void registerBedrockBlocks() {
|
||||||
var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder()
|
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_40", Bedrock_v748.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper())
|
||||||
.put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock)
|
.put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper())
|
||||||
.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;
|
|
||||||
})
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// We can keep this strong as nothing should be garbage collected
|
// 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() {
|
private static void registerJavaBlocks() {
|
||||||
List<NbtMap> blocksNbt;
|
List<NbtMap> blocksNbt;
|
||||||
try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/blocks.nbt")) {
|
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.BlockRegistries;
|
||||||
import org.geysermc.geyser.registry.type.BlockMappings;
|
import org.geysermc.geyser.registry.type.BlockMappings;
|
||||||
import org.geysermc.geyser.registry.type.GeyserBedrockBlock;
|
import org.geysermc.geyser.registry.type.GeyserBedrockBlock;
|
||||||
|
import org.geysermc.geyser.registry.type.GeyserMappingItem;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -50,12 +51,10 @@ import java.util.function.Consumer;
|
||||||
public class CreativeItemRegistryPopulator {
|
public class CreativeItemRegistryPopulator {
|
||||||
private static final List<BiPredicate<String, Integer>> JAVA_ONLY_ITEM_FILTER = List.of(
|
private static final List<BiPredicate<String, Integer>> JAVA_ONLY_ITEM_FILTER = List.of(
|
||||||
// Bedrock-only as its own item
|
// Bedrock-only as its own item
|
||||||
(identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2,
|
(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")
|
|
||||||
);
|
);
|
||||||
|
|
||||||
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();
|
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||||
|
|
||||||
// Load creative items
|
// Load creative items
|
||||||
|
@ -68,7 +67,7 @@ public class CreativeItemRegistryPopulator {
|
||||||
|
|
||||||
BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.protocolVersion());
|
BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.protocolVersion());
|
||||||
for (JsonNode itemNode : creativeItemEntries) {
|
for (JsonNode itemNode : creativeItemEntries) {
|
||||||
ItemData.Builder itemBuilder = createItemData(itemNode, blockMappings, definitions);
|
ItemData.Builder itemBuilder = createItemData(itemNode, items, blockMappings, definitions);
|
||||||
if (itemBuilder == null) {
|
if (itemBuilder == null) {
|
||||||
continue;
|
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 count = 1;
|
||||||
int damage = 0;
|
int damage = 0;
|
||||||
NbtMap tag = null;
|
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");
|
JsonNode damageNode = itemNode.get("damage");
|
||||||
if (damageNode != null) {
|
if (damageNode != null) {
|
||||||
damage = damageNode.asInt();
|
damage = damageNode.asInt();
|
||||||
|
|
|
@ -45,11 +45,8 @@ import org.cloudburstmc.nbt.NbtMap;
|
||||||
import org.cloudburstmc.nbt.NbtMapBuilder;
|
import org.cloudburstmc.nbt.NbtMapBuilder;
|
||||||
import org.cloudburstmc.nbt.NbtType;
|
import org.cloudburstmc.nbt.NbtType;
|
||||||
import org.cloudburstmc.nbt.NbtUtils;
|
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.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.BlockDefinition;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
|
||||||
|
@ -85,7 +82,6 @@ import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -111,18 +107,9 @@ public class ItemRegistryPopulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void populate() {
|
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,
|
List<PaletteVersion> paletteVersions = new ArrayList<>(2);
|
||||||
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));
|
|
||||||
paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()));
|
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();
|
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||||
|
|
||||||
|
@ -207,7 +194,7 @@ public class ItemRegistryPopulator {
|
||||||
noBlockDefinitions.add("minecraft:structure_void");
|
noBlockDefinitions.add("minecraft:structure_void");
|
||||||
|
|
||||||
AtomicInteger creativeNetId = new AtomicInteger();
|
AtomicInteger creativeNetId = new AtomicInteger();
|
||||||
CreativeItemRegistryPopulator.populate(palette, definitions, itemBuilder -> {
|
CreativeItemRegistryPopulator.populate(palette, definitions, items, itemBuilder -> {
|
||||||
ItemData item = itemBuilder.netId(creativeNetId.incrementAndGet()).build();
|
ItemData item = itemBuilder.netId(creativeNetId.incrementAndGet()).build();
|
||||||
creativeItems.add(item);
|
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.ints.IntList;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
|
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.v748.Bedrock_v748;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765;
|
||||||
import org.geysermc.geyser.GeyserBootstrap;
|
import org.geysermc.geyser.GeyserBootstrap;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.item.type.Item;
|
import org.geysermc.geyser.item.type.Item;
|
||||||
|
@ -70,11 +67,8 @@ public final class TagRegistryPopulator {
|
||||||
};
|
};
|
||||||
|
|
||||||
List<ObjectIntPair<String>> paletteVersions = List.of(
|
List<ObjectIntPair<String>> paletteVersions = List.of(
|
||||||
ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()),
|
ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()),
|
||||||
ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()),
|
ObjectIntPair.of("1_21_50", Bedrock_v765.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())
|
|
||||||
);
|
);
|
||||||
Type type = new TypeToken<Map<String, List<String>>>() {}.getType();
|
Type type = new TypeToken<Map<String, List<String>>>() {}.getType();
|
||||||
|
|
||||||
|
|
|
@ -2246,9 +2246,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void closeForm() {
|
public void closeForm() {
|
||||||
if (!GameProtocol.isPre1_21_2(this)) {
|
sendUpstreamPacket(new ClientboundCloseFormPacket());
|
||||||
sendUpstreamPacket(new ClientboundCloseFormPacket());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addCommandEnum(String name, String enums) {
|
public void addCommandEnum(String name, String enums) {
|
||||||
|
|
|
@ -260,9 +260,9 @@ public abstract class InventoryTranslator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainer(),
|
if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainerName().getContainer(),
|
||||||
isSourceCursor ? -1 : sourceSlot,
|
isSourceCursor ? -1 : sourceSlot,
|
||||||
transferAction.getDestination().getContainer(), isDestCursor ? -1 : destSlot)) {
|
transferAction.getDestination().getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) {
|
||||||
// This item would not be here in Java
|
// This item would not be here in Java
|
||||||
return rejectRequest(request, false);
|
return rejectRequest(request, false);
|
||||||
}
|
}
|
||||||
|
@ -410,14 +410,14 @@ public abstract class InventoryTranslator {
|
||||||
boolean isSourceCursor = isCursor(source);
|
boolean isSourceCursor = isCursor(source);
|
||||||
boolean isDestCursor = isCursor(destination);
|
boolean isDestCursor = isCursor(destination);
|
||||||
|
|
||||||
if (shouldRejectItemPlace(session, inventory, source.getContainer(),
|
if (shouldRejectItemPlace(session, inventory, source.getContainerName().getContainer(),
|
||||||
isSourceCursor ? -1 : sourceSlot,
|
isSourceCursor ? -1 : sourceSlot,
|
||||||
destination.getContainer(), isDestCursor ? -1 : destSlot)) {
|
destination.getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) {
|
||||||
// This item would not be here in Java
|
// This item would not be here in Java
|
||||||
return rejectRequest(request, false);
|
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
|
// Tell the server we're pressing one of the hotbar keys to save clicks
|
||||||
Click click = InventoryUtils.getClickForHotbarSwap(destination.getSlot());
|
Click click = InventoryUtils.getClickForHotbarSwap(destination.getSlot());
|
||||||
if (click != null) {
|
if (click != null) {
|
||||||
|
@ -586,7 +586,7 @@ public abstract class InventoryTranslator {
|
||||||
}
|
}
|
||||||
craftState = CraftState.TRANSFER;
|
craftState = CraftState.TRANSFER;
|
||||||
|
|
||||||
if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
|
if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
|
||||||
return rejectRequest(request);
|
return rejectRequest(request);
|
||||||
}
|
}
|
||||||
if (transferAction.getCount() <= 0) {
|
if (transferAction.getCount() <= 0) {
|
||||||
|
@ -779,7 +779,7 @@ public abstract class InventoryTranslator {
|
||||||
}
|
}
|
||||||
craftState = CraftState.TRANSFER;
|
craftState = CraftState.TRANSFER;
|
||||||
|
|
||||||
if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
|
if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) {
|
||||||
return rejectRequest(request);
|
return rejectRequest(request);
|
||||||
}
|
}
|
||||||
if (transferAction.getCount() <= 0) {
|
if (transferAction.getCount() <= 0) {
|
||||||
|
@ -1024,15 +1024,15 @@ public abstract class InventoryTranslator {
|
||||||
durability = ItemUtils.getCorrectBedrockDurability(itemStack.asItem(), damage);
|
durability = ItemUtils.getCorrectBedrockDurability(itemStack.asItem(), damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
} 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;
|
return itemEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static boolean isCursor(ItemStackRequestSlotData slotInfoData) {
|
protected static boolean isCursor(ItemStackRequestSlotData slotInfoData) {
|
||||||
return slotInfoData.getContainer() == ContainerSlotType.CURSOR;
|
return slotInfoData.getContainerName().getContainer() == ContainerSlotType.CURSOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
package org.geysermc.geyser.translator.item;
|
package org.geysermc.geyser.translator.item;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.TranslatableComponent;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
@ -54,6 +55,7 @@ import org.geysermc.geyser.util.InventoryUtils;
|
||||||
import org.geysermc.mcprotocollib.auth.GameProfile;
|
import org.geysermc.mcprotocollib.auth.GameProfile;
|
||||||
import org.geysermc.mcprotocollib.auth.GameProfile.Texture;
|
import org.geysermc.mcprotocollib.auth.GameProfile.Texture;
|
||||||
import org.geysermc.mcprotocollib.auth.GameProfile.TextureType;
|
import org.geysermc.mcprotocollib.auth.GameProfile.TextureType;
|
||||||
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.ModifierOperation;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.ModifierOperation;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
||||||
|
@ -62,12 +64,16 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponen
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttributeModifiers;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttributeModifiers;
|
||||||
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectDetails;
|
||||||
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectInstance;
|
||||||
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class ItemTranslator {
|
public final class ItemTranslator {
|
||||||
|
@ -303,6 +309,65 @@ public final class ItemTranslator {
|
||||||
return MessageTranslator.convertMessage(attributeComponent, language);
|
return MessageTranslator.convertMessage(attributeComponent, language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final List<Effect> negativeEffectList = List.of(
|
||||||
|
Effect.SLOWNESS,
|
||||||
|
Effect.MINING_FATIGUE,
|
||||||
|
Effect.INSTANT_DAMAGE,
|
||||||
|
Effect.NAUSEA,
|
||||||
|
Effect.BLINDNESS,
|
||||||
|
Effect.HUNGER,
|
||||||
|
Effect.WEAKNESS,
|
||||||
|
Effect.POISON,
|
||||||
|
Effect.WITHER,
|
||||||
|
Effect.LEVITATION,
|
||||||
|
Effect.UNLUCK,
|
||||||
|
Effect.DARKNESS,
|
||||||
|
Effect.WIND_CHARGED,
|
||||||
|
Effect.WEAVING,
|
||||||
|
Effect.OOZING,
|
||||||
|
Effect.INFESTED
|
||||||
|
);
|
||||||
|
|
||||||
|
public static void addPotionEffectLore(PotionContents contents, BedrockItemBuilder builder, String language) {
|
||||||
|
List<MobEffectInstance> effectInstanceList = contents.getCustomEffects();
|
||||||
|
for (MobEffectInstance effectInstance : effectInstanceList) {
|
||||||
|
Effect effect = effectInstance.getEffect();
|
||||||
|
MobEffectDetails details = effectInstance.getDetails();
|
||||||
|
int amplifier = details.getAmplifier();
|
||||||
|
int durations = details.getDuration();
|
||||||
|
TranslatableComponent appendTranslatable = Component.translatable("effect.minecraft." + effect.toString().toLowerCase(Locale.ROOT));
|
||||||
|
if (amplifier != 0) {
|
||||||
|
appendTranslatable = Component.translatable("potion.withAmplifier",
|
||||||
|
appendTranslatable,
|
||||||
|
Component.translatable("potion.potency." + amplifier));
|
||||||
|
}
|
||||||
|
if (durations > 20) {
|
||||||
|
int seconds = durations / 20;
|
||||||
|
int secondsFormat = seconds % 60;
|
||||||
|
int minutes = seconds / 60;
|
||||||
|
int minutesFormat = minutes % 60;
|
||||||
|
int hours = minutes / 60;
|
||||||
|
String text = ((minutesFormat > 9) ? "" : "0") + minutesFormat + ":" + ((secondsFormat > 9) ? "" : "0") + secondsFormat;
|
||||||
|
if (minutes >= 60) {
|
||||||
|
text = ((hours > 9) ? "" : "0") + hours + ":" + text;
|
||||||
|
}
|
||||||
|
appendTranslatable = Component.translatable("potion.withDuration",
|
||||||
|
appendTranslatable,
|
||||||
|
Component.text(text));
|
||||||
|
} else if (durations == -1) {
|
||||||
|
appendTranslatable = Component.translatable("potion.withDuration",
|
||||||
|
appendTranslatable,
|
||||||
|
Component.translatable("effect.duration.infinite"));
|
||||||
|
}
|
||||||
|
Component component = Component.text()
|
||||||
|
.resetStyle()
|
||||||
|
.color((negativeEffectList.contains(effect)) ? NamedTextColor.RED : NamedTextColor.BLUE)
|
||||||
|
.append(appendTranslatable)
|
||||||
|
.build();
|
||||||
|
builder.getOrCreateLore().add(MessageTranslator.convertMessage(component, language));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void addAdvancedTooltips(@Nullable DataComponents components, BedrockItemBuilder builder, Item item, String language) {
|
private static void addAdvancedTooltips(@Nullable DataComponents components, BedrockItemBuilder builder, Item item, String language) {
|
||||||
int maxDurability = item.defaultMaxDamage();
|
int maxDurability = item.defaultMaxDamage();
|
||||||
|
|
||||||
|
@ -427,6 +492,19 @@ public final class ItemTranslator {
|
||||||
if (customName != null) {
|
if (customName != null) {
|
||||||
return MessageTranslator.convertMessage(customName, session.locale());
|
return MessageTranslator.convertMessage(customName, session.locale());
|
||||||
}
|
}
|
||||||
|
PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS);
|
||||||
|
if (potionContents != null) {
|
||||||
|
// "custom_name" tag in "potion_contents" component
|
||||||
|
String customPotionName = potionContents.getCustomName();
|
||||||
|
if (customPotionName != null) {
|
||||||
|
Component component = Component.text()
|
||||||
|
.resetStyle()
|
||||||
|
.color(NamedTextColor.WHITE)
|
||||||
|
.append(Component.translatable(mapping.getJavaItem().translationKey() + ".effect." + customPotionName))
|
||||||
|
.build();
|
||||||
|
return MessageTranslator.convertMessage(component, session.locale());
|
||||||
|
}
|
||||||
|
}
|
||||||
customName = components.get(DataComponentType.ITEM_NAME);
|
customName = components.get(DataComponentType.ITEM_NAME);
|
||||||
if (customName != null) {
|
if (customName != null) {
|
||||||
// Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition
|
// Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition
|
||||||
|
|
|
@ -35,8 +35,6 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.level.block.property.Properties;
|
import org.geysermc.geyser.level.block.property.Properties;
|
||||||
import org.geysermc.geyser.level.block.type.BlockState;
|
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.GeyserSession;
|
||||||
import org.geysermc.geyser.session.cache.SkullCache;
|
import org.geysermc.geyser.session.cache.SkullCache;
|
||||||
import org.geysermc.geyser.skin.SkinProvider;
|
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
|
// Could be a wall skull block otherwise, which has rotation in its Bedrock state
|
||||||
bedrockNbt.putFloat("Rotation", rotation * 22.5f);
|
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)) {
|
if (blockState.getValue(Properties.POWERED)) {
|
||||||
bedrockNbt.putBoolean("MouthMoving", true);
|
bedrockNbt.putBoolean("MouthMoving", true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input;
|
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.Vector3d;
|
||||||
import org.cloudburstmc.math.vector.Vector3f;
|
import org.cloudburstmc.math.vector.Vector3f;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData;
|
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.EntityDefinitions;
|
||||||
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
|
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
|
||||||
import org.geysermc.geyser.level.physics.CollisionResult;
|
import org.geysermc.geyser.level.physics.CollisionResult;
|
||||||
import org.geysermc.geyser.network.GameProtocol;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.text.ChatColor;
|
import org.geysermc.geyser.text.ChatColor;
|
||||||
import org.geysermc.mcprotocollib.network.packet.Packet;
|
import org.geysermc.mcprotocollib.network.packet.Packet;
|
||||||
|
@ -88,14 +86,8 @@ final class BedrockMovePlayer {
|
||||||
session.setLookBackScheduledFuture(null);
|
session.setLookBackScheduledFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
TriState maybeOnGround;
|
// Client is telling us it wants to move down, but something is blocking it from doing so.
|
||||||
if (GameProtocol.isPre1_21_30(session)) {
|
boolean isOnGround = packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0;
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
// This takes into account no movement sent from the client, but the player is trying to move anyway.
|
// 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)
|
// (Press into a wall in a corner - you're trying to move but nothing actually happens)
|
||||||
boolean horizontalCollision = packet.getInputData().contains(PlayerAuthInputData.HORIZONTAL_COLLISION);
|
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
|
// 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
|
// It also means you can't "lag back" while only looking, in theory
|
||||||
if (!positionChanged && rotationChanged) {
|
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.setYaw(yaw);
|
||||||
entity.setPitch(pitch);
|
entity.setPitch(pitch);
|
||||||
|
@ -113,10 +105,9 @@ final class BedrockMovePlayer {
|
||||||
session.sendDownstreamGamePacket(playerRotationPacket);
|
session.sendDownstreamGamePacket(playerRotationPacket);
|
||||||
} else if (positionChanged) {
|
} else if (positionChanged) {
|
||||||
if (isValidMove(session, entity.getPosition(), packet.getPosition())) {
|
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
|
if (result != null) { // A null return value cancels the packet
|
||||||
Vector3d position = result.correctedMovement();
|
Vector3d position = result.correctedMovement();
|
||||||
boolean onGround = maybeOnGround.toBooleanOrElseGet(() -> session.getCollisionManager().isOnGround());
|
|
||||||
boolean isBelowVoid = entity.isVoidPositionDesynched();
|
boolean isBelowVoid = entity.isVoidPositionDesynched();
|
||||||
|
|
||||||
boolean teleportThroughVoidFloor, mustResyncPosition;
|
boolean teleportThroughVoidFloor, mustResyncPosition;
|
||||||
|
@ -131,7 +122,7 @@ final class BedrockMovePlayer {
|
||||||
|
|
||||||
if (teleportThroughVoidFloor || isBelowVoid) {
|
if (teleportThroughVoidFloor || isBelowVoid) {
|
||||||
// https://github.com/GeyserMC/Geyser/issues/3521 - no void floor in Java so we cannot be on the ground.
|
// 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) {
|
if (isBelowVoid) {
|
||||||
|
@ -151,7 +142,7 @@ final class BedrockMovePlayer {
|
||||||
if (rotationChanged) {
|
if (rotationChanged) {
|
||||||
// Send rotation updates as well
|
// Send rotation updates as well
|
||||||
movePacket = new ServerboundMovePlayerPosRotPacket(
|
movePacket = new ServerboundMovePlayerPosRotPacket(
|
||||||
onGround,
|
isOnGround,
|
||||||
horizontalCollision,
|
horizontalCollision,
|
||||||
position.getX(), yPosition, position.getZ(),
|
position.getX(), yPosition, position.getZ(),
|
||||||
yaw, pitch
|
yaw, pitch
|
||||||
|
@ -161,7 +152,7 @@ final class BedrockMovePlayer {
|
||||||
entity.setHeadYaw(headYaw);
|
entity.setHeadYaw(headYaw);
|
||||||
} else {
|
} else {
|
||||||
// Rotation did not change; don't send an update with rotation
|
// 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());
|
entity.setPositionManual(packet.getPosition());
|
||||||
|
@ -183,12 +174,12 @@ final class BedrockMovePlayer {
|
||||||
session.getGeyser().getLogger().debug("Recalculating position...");
|
session.getGeyser().getLogger().debug("Recalculating position...");
|
||||||
session.getCollisionManager().recalculatePosition();
|
session.getCollisionManager().recalculatePosition();
|
||||||
}
|
}
|
||||||
} else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || maybeOnGround.toBooleanOrElse(entity.isOnGround()) != entity.isOnGround()) {
|
} else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || isOnGround != entity.isOnGround()) {
|
||||||
session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(maybeOnGround.toBooleanOrElse(false), horizontalCollision));
|
session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(isOnGround, horizontalCollision));
|
||||||
}
|
}
|
||||||
|
|
||||||
session.getInputCache().setLastHorizontalCollision(horizontalCollision);
|
session.getInputCache().setLastHorizontalCollision(horizontalCollision);
|
||||||
entity.setOnGround(maybeOnGround.toBooleanOrElse(entity.isOnGround()));
|
entity.setOnGround(isOnGround);
|
||||||
|
|
||||||
// Move parrots to match if applicable
|
// Move parrots to match if applicable
|
||||||
if (entity.getLeftParrot() != null) {
|
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.LivingEntity;
|
||||||
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
||||||
import org.geysermc.geyser.item.Items;
|
import org.geysermc.geyser.item.Items;
|
||||||
import org.geysermc.geyser.network.GameProtocol;
|
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.skin.FakeHeadProvider;
|
import org.geysermc.geyser.skin.FakeHeadProvider;
|
||||||
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||||
|
@ -79,11 +78,8 @@ public class JavaSetEquipmentTranslator extends PacketTranslator<ClientboundSetE
|
||||||
}
|
}
|
||||||
case BODY -> {
|
case BODY -> {
|
||||||
// BODY is sent for llamas with a carpet equipped, as of 1.20.5
|
// BODY is sent for llamas with a carpet equipped, as of 1.20.5
|
||||||
if (GameProtocol.isPre1_21_2(session)) {
|
// and for wolves
|
||||||
livingEntity.setChestplate(stack);
|
livingEntity.setBody(stack);
|
||||||
} else {
|
|
||||||
livingEntity.setBody(stack);
|
|
||||||
}
|
|
||||||
armorUpdated = true;
|
armorUpdated = true;
|
||||||
}
|
}
|
||||||
case LEGGINGS -> {
|
case LEGGINGS -> {
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
core/src/main/resources/bedrock/block_palette.1_21_50.nbt
Normal file
BIN
core/src/main/resources/bedrock/block_palette.1_21_50.nbt
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -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:stripped_crimson_hyphae"
|
||||||
],
|
],
|
||||||
"minecraft:decorated_pot_sherds": [
|
"minecraft:decorated_pot_sherds": [
|
||||||
"minecraft:angler_pottery_sherd",
|
|
||||||
"minecraft:skull_pottery_sherd",
|
"minecraft:skull_pottery_sherd",
|
||||||
"minecraft:prize_pottery_sherd",
|
|
||||||
"minecraft:mourner_pottery_sherd",
|
"minecraft:mourner_pottery_sherd",
|
||||||
|
"minecraft:angler_pottery_sherd",
|
||||||
|
"minecraft:prize_pottery_sherd",
|
||||||
"minecraft:arms_up_pottery_sherd",
|
"minecraft:arms_up_pottery_sherd",
|
||||||
"minecraft:burn_pottery_sherd",
|
"minecraft:burn_pottery_sherd",
|
||||||
"minecraft:snort_pottery_sherd",
|
"minecraft:snort_pottery_sherd",
|
||||||
|
@ -106,13 +106,13 @@
|
||||||
"minecraft:diamond_boots"
|
"minecraft:diamond_boots"
|
||||||
],
|
],
|
||||||
"minecraft:digger": [
|
"minecraft:digger": [
|
||||||
"minecraft:iron_pickaxe",
|
|
||||||
"minecraft:wooden_pickaxe",
|
|
||||||
"minecraft:wooden_shovel",
|
|
||||||
"minecraft:iron_axe",
|
|
||||||
"minecraft:iron_shovel",
|
"minecraft:iron_shovel",
|
||||||
"minecraft:stone_shovel",
|
"minecraft:wooden_pickaxe",
|
||||||
|
"minecraft:iron_pickaxe",
|
||||||
|
"minecraft:iron_axe",
|
||||||
|
"minecraft:wooden_shovel",
|
||||||
"minecraft:wooden_axe",
|
"minecraft:wooden_axe",
|
||||||
|
"minecraft:stone_shovel",
|
||||||
"minecraft:stone_pickaxe",
|
"minecraft:stone_pickaxe",
|
||||||
"minecraft:stone_axe",
|
"minecraft:stone_axe",
|
||||||
"minecraft:diamond_shovel",
|
"minecraft:diamond_shovel",
|
||||||
|
@ -132,15 +132,15 @@
|
||||||
"minecraft:netherite_hoe"
|
"minecraft:netherite_hoe"
|
||||||
],
|
],
|
||||||
"minecraft:door": [
|
"minecraft:door": [
|
||||||
|
"minecraft:weathered_copper_door",
|
||||||
"minecraft:warped_door",
|
"minecraft:warped_door",
|
||||||
"minecraft:waxed_weathered_copper_door",
|
|
||||||
"minecraft:wooden_door",
|
"minecraft:wooden_door",
|
||||||
|
"minecraft:jungle_door",
|
||||||
|
"minecraft:waxed_weathered_copper_door",
|
||||||
"minecraft:iron_door",
|
"minecraft:iron_door",
|
||||||
"minecraft:mangrove_door",
|
"minecraft:mangrove_door",
|
||||||
"minecraft:exposed_copper_door",
|
"minecraft:exposed_copper_door",
|
||||||
"minecraft:bamboo_door",
|
"minecraft:bamboo_door",
|
||||||
"minecraft:weathered_copper_door",
|
|
||||||
"minecraft:jungle_door",
|
|
||||||
"minecraft:spruce_door",
|
"minecraft:spruce_door",
|
||||||
"minecraft:birch_door",
|
"minecraft:birch_door",
|
||||||
"minecraft:acacia_door",
|
"minecraft:acacia_door",
|
||||||
|
@ -181,23 +181,24 @@
|
||||||
"minecraft:warped_hanging_sign"
|
"minecraft:warped_hanging_sign"
|
||||||
],
|
],
|
||||||
"minecraft:horse_armor": [
|
"minecraft:horse_armor": [
|
||||||
|
"minecraft:iron_horse_armor",
|
||||||
"minecraft:golden_horse_armor",
|
"minecraft:golden_horse_armor",
|
||||||
"minecraft:leather_horse_armor",
|
"minecraft:leather_horse_armor",
|
||||||
"minecraft:iron_horse_armor",
|
|
||||||
"minecraft:diamond_horse_armor"
|
"minecraft:diamond_horse_armor"
|
||||||
],
|
],
|
||||||
"minecraft:iron_tier": [
|
"minecraft:iron_tier": [
|
||||||
|
"minecraft:iron_chestplate",
|
||||||
|
"minecraft:iron_shovel",
|
||||||
"minecraft:iron_sword",
|
"minecraft:iron_sword",
|
||||||
"minecraft:iron_pickaxe",
|
"minecraft:iron_pickaxe",
|
||||||
"minecraft:iron_axe",
|
"minecraft:iron_axe",
|
||||||
"minecraft:iron_shovel",
|
|
||||||
"minecraft:iron_hoe",
|
"minecraft:iron_hoe",
|
||||||
"minecraft:iron_helmet",
|
"minecraft:iron_helmet",
|
||||||
"minecraft:iron_chestplate",
|
|
||||||
"minecraft:iron_leggings",
|
"minecraft:iron_leggings",
|
||||||
"minecraft:iron_boots"
|
"minecraft:iron_boots"
|
||||||
],
|
],
|
||||||
"minecraft:is_armor": [
|
"minecraft:is_armor": [
|
||||||
|
"minecraft:iron_chestplate",
|
||||||
"minecraft:netherite_boots",
|
"minecraft:netherite_boots",
|
||||||
"minecraft:chainmail_helmet",
|
"minecraft:chainmail_helmet",
|
||||||
"minecraft:elytra",
|
"minecraft:elytra",
|
||||||
|
@ -209,7 +210,6 @@
|
||||||
"minecraft:chainmail_leggings",
|
"minecraft:chainmail_leggings",
|
||||||
"minecraft:chainmail_boots",
|
"minecraft:chainmail_boots",
|
||||||
"minecraft:iron_helmet",
|
"minecraft:iron_helmet",
|
||||||
"minecraft:iron_chestplate",
|
|
||||||
"minecraft:iron_leggings",
|
"minecraft:iron_leggings",
|
||||||
"minecraft:iron_boots",
|
"minecraft:iron_boots",
|
||||||
"minecraft:diamond_helmet",
|
"minecraft:diamond_helmet",
|
||||||
|
@ -236,8 +236,8 @@
|
||||||
"minecraft:is_cooked": [
|
"minecraft:is_cooked": [
|
||||||
"minecraft:cooked_cod",
|
"minecraft:cooked_cod",
|
||||||
"minecraft:cooked_porkchop",
|
"minecraft:cooked_porkchop",
|
||||||
"minecraft:cooked_rabbit",
|
|
||||||
"minecraft:cooked_salmon",
|
"minecraft:cooked_salmon",
|
||||||
|
"minecraft:cooked_rabbit",
|
||||||
"minecraft:cooked_beef",
|
"minecraft:cooked_beef",
|
||||||
"minecraft:cooked_chicken",
|
"minecraft:cooked_chicken",
|
||||||
"minecraft:rabbit_stew",
|
"minecraft:rabbit_stew",
|
||||||
|
@ -245,25 +245,25 @@
|
||||||
],
|
],
|
||||||
"minecraft:is_fish": [
|
"minecraft:is_fish": [
|
||||||
"minecraft:cooked_cod",
|
"minecraft:cooked_cod",
|
||||||
|
"minecraft:cooked_salmon",
|
||||||
"minecraft:cod",
|
"minecraft:cod",
|
||||||
"minecraft:salmon",
|
"minecraft:salmon",
|
||||||
"minecraft:tropical_fish",
|
"minecraft:tropical_fish",
|
||||||
"minecraft:pufferfish",
|
"minecraft:pufferfish"
|
||||||
"minecraft:cooked_salmon"
|
|
||||||
],
|
],
|
||||||
"minecraft:is_food": [
|
"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:rabbit",
|
||||||
"minecraft:cooked_porkchop",
|
"minecraft:cooked_porkchop",
|
||||||
"minecraft:mushroom_stew",
|
"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:bread",
|
||||||
"minecraft:porkchop",
|
"minecraft:porkchop",
|
||||||
"minecraft:cookie",
|
"minecraft:cookie",
|
||||||
|
@ -290,9 +290,9 @@
|
||||||
"minecraft:netherite_hoe"
|
"minecraft:netherite_hoe"
|
||||||
],
|
],
|
||||||
"minecraft:is_meat": [
|
"minecraft:is_meat": [
|
||||||
"minecraft:chicken",
|
|
||||||
"minecraft:rabbit",
|
"minecraft:rabbit",
|
||||||
"minecraft:cooked_porkchop",
|
"minecraft:cooked_porkchop",
|
||||||
|
"minecraft:chicken",
|
||||||
"minecraft:porkchop",
|
"minecraft:porkchop",
|
||||||
"minecraft:cooked_rabbit",
|
"minecraft:cooked_rabbit",
|
||||||
"minecraft:beef",
|
"minecraft:beef",
|
||||||
|
@ -311,41 +311,42 @@
|
||||||
"minecraft:hopper_minecart"
|
"minecraft:hopper_minecart"
|
||||||
],
|
],
|
||||||
"minecraft:is_pickaxe": [
|
"minecraft:is_pickaxe": [
|
||||||
"minecraft:iron_pickaxe",
|
|
||||||
"minecraft:wooden_pickaxe",
|
"minecraft:wooden_pickaxe",
|
||||||
|
"minecraft:iron_pickaxe",
|
||||||
"minecraft:stone_pickaxe",
|
"minecraft:stone_pickaxe",
|
||||||
"minecraft:diamond_pickaxe",
|
"minecraft:diamond_pickaxe",
|
||||||
"minecraft:golden_pickaxe",
|
"minecraft:golden_pickaxe",
|
||||||
"minecraft:netherite_pickaxe"
|
"minecraft:netherite_pickaxe"
|
||||||
],
|
],
|
||||||
"minecraft:is_shovel": [
|
"minecraft:is_shovel": [
|
||||||
"minecraft:wooden_shovel",
|
|
||||||
"minecraft:iron_shovel",
|
"minecraft:iron_shovel",
|
||||||
|
"minecraft:wooden_shovel",
|
||||||
"minecraft:stone_shovel",
|
"minecraft:stone_shovel",
|
||||||
"minecraft:diamond_shovel",
|
"minecraft:diamond_shovel",
|
||||||
"minecraft:golden_shovel",
|
"minecraft:golden_shovel",
|
||||||
"minecraft:netherite_shovel"
|
"minecraft:netherite_shovel"
|
||||||
],
|
],
|
||||||
"minecraft:is_sword": [
|
"minecraft:is_sword": [
|
||||||
|
"minecraft:netherite_sword",
|
||||||
"minecraft:iron_sword",
|
"minecraft:iron_sword",
|
||||||
"minecraft:stone_sword",
|
|
||||||
"minecraft:wooden_sword",
|
"minecraft:wooden_sword",
|
||||||
|
"minecraft:stone_sword",
|
||||||
"minecraft:diamond_sword",
|
"minecraft:diamond_sword",
|
||||||
"minecraft:mace",
|
"minecraft:mace",
|
||||||
"minecraft:golden_sword",
|
"minecraft:golden_sword"
|
||||||
"minecraft:netherite_sword"
|
|
||||||
],
|
],
|
||||||
"minecraft:is_tool": [
|
"minecraft:is_tool": [
|
||||||
"minecraft:iron_sword",
|
"minecraft:netherite_sword",
|
||||||
"minecraft:iron_pickaxe",
|
|
||||||
"minecraft:wooden_pickaxe",
|
|
||||||
"minecraft:wooden_shovel",
|
|
||||||
"minecraft:stone_sword",
|
|
||||||
"minecraft:iron_axe",
|
|
||||||
"minecraft:iron_shovel",
|
"minecraft:iron_shovel",
|
||||||
"minecraft:stone_shovel",
|
"minecraft:iron_sword",
|
||||||
|
"minecraft:wooden_pickaxe",
|
||||||
|
"minecraft:iron_pickaxe",
|
||||||
|
"minecraft:iron_axe",
|
||||||
"minecraft:wooden_sword",
|
"minecraft:wooden_sword",
|
||||||
|
"minecraft:wooden_shovel",
|
||||||
"minecraft:wooden_axe",
|
"minecraft:wooden_axe",
|
||||||
|
"minecraft:stone_sword",
|
||||||
|
"minecraft:stone_shovel",
|
||||||
"minecraft:stone_pickaxe",
|
"minecraft:stone_pickaxe",
|
||||||
"minecraft:stone_axe",
|
"minecraft:stone_axe",
|
||||||
"minecraft:diamond_sword",
|
"minecraft:diamond_sword",
|
||||||
|
@ -362,7 +363,6 @@
|
||||||
"minecraft:iron_hoe",
|
"minecraft:iron_hoe",
|
||||||
"minecraft:diamond_hoe",
|
"minecraft:diamond_hoe",
|
||||||
"minecraft:golden_hoe",
|
"minecraft:golden_hoe",
|
||||||
"minecraft:netherite_sword",
|
|
||||||
"minecraft:netherite_pickaxe",
|
"minecraft:netherite_pickaxe",
|
||||||
"minecraft:netherite_shovel",
|
"minecraft:netherite_shovel",
|
||||||
"minecraft:netherite_axe",
|
"minecraft:netherite_axe",
|
||||||
|
@ -465,16 +465,16 @@
|
||||||
],
|
],
|
||||||
"minecraft:music_disc": [
|
"minecraft:music_disc": [
|
||||||
"minecraft:music_disc_ward",
|
"minecraft:music_disc_ward",
|
||||||
|
"minecraft:music_disc_stal",
|
||||||
|
"minecraft:music_disc_wait",
|
||||||
|
"minecraft:music_disc_cat",
|
||||||
"minecraft:music_disc_strad",
|
"minecraft:music_disc_strad",
|
||||||
"minecraft:music_disc_chirp",
|
"minecraft:music_disc_chirp",
|
||||||
"minecraft:music_disc_creator_music_box",
|
|
||||||
"minecraft:music_disc_mall",
|
"minecraft:music_disc_mall",
|
||||||
|
"minecraft:music_disc_creator_music_box",
|
||||||
"minecraft:music_disc_pigstep",
|
"minecraft:music_disc_pigstep",
|
||||||
"minecraft:music_disc_wait",
|
|
||||||
"minecraft:music_disc_11",
|
"minecraft:music_disc_11",
|
||||||
"minecraft:music_disc_stal",
|
|
||||||
"minecraft:music_disc_13",
|
"minecraft:music_disc_13",
|
||||||
"minecraft:music_disc_cat",
|
|
||||||
"minecraft:music_disc_blocks",
|
"minecraft:music_disc_blocks",
|
||||||
"minecraft:music_disc_far",
|
"minecraft:music_disc_far",
|
||||||
"minecraft:music_disc_mellohi",
|
"minecraft:music_disc_mellohi",
|
||||||
|
@ -485,8 +485,8 @@
|
||||||
"minecraft:music_disc_precipice"
|
"minecraft:music_disc_precipice"
|
||||||
],
|
],
|
||||||
"minecraft:netherite_tier": [
|
"minecraft:netherite_tier": [
|
||||||
"minecraft:netherite_boots",
|
|
||||||
"minecraft:netherite_sword",
|
"minecraft:netherite_sword",
|
||||||
|
"minecraft:netherite_boots",
|
||||||
"minecraft:netherite_chestplate",
|
"minecraft:netherite_chestplate",
|
||||||
"minecraft:netherite_pickaxe",
|
"minecraft:netherite_pickaxe",
|
||||||
"minecraft:netherite_leggings",
|
"minecraft:netherite_leggings",
|
||||||
|
@ -513,6 +513,7 @@
|
||||||
"minecraft:red_sand"
|
"minecraft:red_sand"
|
||||||
],
|
],
|
||||||
"minecraft:sign": [
|
"minecraft:sign": [
|
||||||
|
"minecraft:jungle_sign",
|
||||||
"minecraft:bamboo_sign",
|
"minecraft:bamboo_sign",
|
||||||
"minecraft:mangrove_hanging_sign",
|
"minecraft:mangrove_hanging_sign",
|
||||||
"minecraft:cherry_sign",
|
"minecraft:cherry_sign",
|
||||||
|
@ -524,7 +525,6 @@
|
||||||
"minecraft:acacia_sign",
|
"minecraft:acacia_sign",
|
||||||
"minecraft:birch_hanging_sign",
|
"minecraft:birch_hanging_sign",
|
||||||
"minecraft:birch_sign",
|
"minecraft:birch_sign",
|
||||||
"minecraft:jungle_sign",
|
|
||||||
"minecraft:dark_oak_sign",
|
"minecraft:dark_oak_sign",
|
||||||
"minecraft:mangrove_sign",
|
"minecraft:mangrove_sign",
|
||||||
"minecraft:crimson_sign",
|
"minecraft:crimson_sign",
|
||||||
|
@ -542,16 +542,19 @@
|
||||||
],
|
],
|
||||||
"minecraft:spawn_egg": [
|
"minecraft:spawn_egg": [
|
||||||
"minecraft:enderman_spawn_egg",
|
"minecraft:enderman_spawn_egg",
|
||||||
"minecraft:strider_spawn_egg",
|
"minecraft:endermite_spawn_egg",
|
||||||
|
"minecraft:tropical_fish_spawn_egg",
|
||||||
"minecraft:ravager_spawn_egg",
|
"minecraft:ravager_spawn_egg",
|
||||||
|
"minecraft:pufferfish_spawn_egg",
|
||||||
|
"minecraft:zoglin_spawn_egg",
|
||||||
|
"minecraft:strider_spawn_egg",
|
||||||
"minecraft:slime_spawn_egg",
|
"minecraft:slime_spawn_egg",
|
||||||
"minecraft:glow_squid_spawn_egg",
|
"minecraft:glow_squid_spawn_egg",
|
||||||
"minecraft:pillager_spawn_egg",
|
|
||||||
"minecraft:blaze_spawn_egg",
|
"minecraft:blaze_spawn_egg",
|
||||||
"minecraft:witch_spawn_egg",
|
"minecraft:witch_spawn_egg",
|
||||||
"minecraft:horse_spawn_egg",
|
"minecraft:horse_spawn_egg",
|
||||||
"minecraft:polar_bear_spawn_egg",
|
"minecraft:polar_bear_spawn_egg",
|
||||||
"minecraft:zoglin_spawn_egg",
|
"minecraft:pillager_spawn_egg",
|
||||||
"minecraft:stray_spawn_egg",
|
"minecraft:stray_spawn_egg",
|
||||||
"minecraft:zombie_pigman_spawn_egg",
|
"minecraft:zombie_pigman_spawn_egg",
|
||||||
"minecraft:snow_golem_spawn_egg",
|
"minecraft:snow_golem_spawn_egg",
|
||||||
|
@ -588,7 +591,6 @@
|
||||||
"minecraft:ghast_spawn_egg",
|
"minecraft:ghast_spawn_egg",
|
||||||
"minecraft:magma_cube_spawn_egg",
|
"minecraft:magma_cube_spawn_egg",
|
||||||
"minecraft:cave_spider_spawn_egg",
|
"minecraft:cave_spider_spawn_egg",
|
||||||
"minecraft:endermite_spawn_egg",
|
|
||||||
"minecraft:guardian_spawn_egg",
|
"minecraft:guardian_spawn_egg",
|
||||||
"minecraft:husk_spawn_egg",
|
"minecraft:husk_spawn_egg",
|
||||||
"minecraft:piglin_spawn_egg",
|
"minecraft:piglin_spawn_egg",
|
||||||
|
@ -603,9 +605,7 @@
|
||||||
"minecraft:vex_spawn_egg",
|
"minecraft:vex_spawn_egg",
|
||||||
"minecraft:warden_spawn_egg",
|
"minecraft:warden_spawn_egg",
|
||||||
"minecraft:zombie_villager_spawn_egg",
|
"minecraft:zombie_villager_spawn_egg",
|
||||||
"minecraft:tropical_fish_spawn_egg",
|
|
||||||
"minecraft:cod_spawn_egg",
|
"minecraft:cod_spawn_egg",
|
||||||
"minecraft:pufferfish_spawn_egg",
|
|
||||||
"minecraft:salmon_spawn_egg",
|
"minecraft:salmon_spawn_egg",
|
||||||
"minecraft:dolphin_spawn_egg",
|
"minecraft:dolphin_spawn_egg",
|
||||||
"minecraft:turtle_spawn_egg",
|
"minecraft:turtle_spawn_egg",
|
||||||
|
@ -667,9 +667,9 @@
|
||||||
"minecraft:golden_boots"
|
"minecraft:golden_boots"
|
||||||
],
|
],
|
||||||
"minecraft:trim_materials": [
|
"minecraft:trim_materials": [
|
||||||
"minecraft:gold_ingot",
|
|
||||||
"minecraft:iron_ingot",
|
|
||||||
"minecraft:diamond",
|
"minecraft:diamond",
|
||||||
|
"minecraft:iron_ingot",
|
||||||
|
"minecraft:gold_ingot",
|
||||||
"minecraft:redstone",
|
"minecraft:redstone",
|
||||||
"minecraft:netherite_ingot",
|
"minecraft:netherite_ingot",
|
||||||
"minecraft:lapis_lazuli",
|
"minecraft:lapis_lazuli",
|
||||||
|
@ -679,26 +679,27 @@
|
||||||
"minecraft:amethyst_shard"
|
"minecraft:amethyst_shard"
|
||||||
],
|
],
|
||||||
"minecraft:trim_templates": [
|
"minecraft:trim_templates": [
|
||||||
|
"minecraft:coast_armor_trim_smithing_template",
|
||||||
"minecraft:vex_armor_trim_smithing_template",
|
"minecraft:vex_armor_trim_smithing_template",
|
||||||
"minecraft:wild_armor_trim_smithing_template",
|
"minecraft:wild_armor_trim_smithing_template",
|
||||||
"minecraft:flow_armor_trim_smithing_template",
|
"minecraft:flow_armor_trim_smithing_template",
|
||||||
"minecraft:raiser_armor_trim_smithing_template",
|
|
||||||
"minecraft:silence_armor_trim_smithing_template",
|
"minecraft:silence_armor_trim_smithing_template",
|
||||||
"minecraft:coast_armor_trim_smithing_template",
|
|
||||||
"minecraft:snout_armor_trim_smithing_template",
|
"minecraft:snout_armor_trim_smithing_template",
|
||||||
"minecraft:dune_armor_trim_smithing_template",
|
"minecraft:dune_armor_trim_smithing_template",
|
||||||
"minecraft:rib_armor_trim_smithing_template",
|
"minecraft:rib_armor_trim_smithing_template",
|
||||||
"minecraft:host_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:eye_armor_trim_smithing_template",
|
||||||
"minecraft:spire_armor_trim_smithing_template",
|
"minecraft:spire_armor_trim_smithing_template",
|
||||||
"minecraft:sentry_armor_trim_smithing_template",
|
"minecraft:sentry_armor_trim_smithing_template",
|
||||||
"minecraft:ward_armor_trim_smithing_template",
|
"minecraft:ward_armor_trim_smithing_template",
|
||||||
"minecraft:tide_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:trimmable_armors": [
|
||||||
|
"minecraft:iron_chestplate",
|
||||||
"minecraft:netherite_boots",
|
"minecraft:netherite_boots",
|
||||||
"minecraft:chainmail_helmet",
|
"minecraft:chainmail_helmet",
|
||||||
"minecraft:leather_helmet",
|
"minecraft:leather_helmet",
|
||||||
|
@ -709,7 +710,6 @@
|
||||||
"minecraft:chainmail_leggings",
|
"minecraft:chainmail_leggings",
|
||||||
"minecraft:chainmail_boots",
|
"minecraft:chainmail_boots",
|
||||||
"minecraft:iron_helmet",
|
"minecraft:iron_helmet",
|
||||||
"minecraft:iron_chestplate",
|
|
||||||
"minecraft:iron_leggings",
|
"minecraft:iron_leggings",
|
||||||
"minecraft:iron_boots",
|
"minecraft:iron_boots",
|
||||||
"minecraft:diamond_helmet",
|
"minecraft:diamond_helmet",
|
||||||
|
@ -727,9 +727,9 @@
|
||||||
],
|
],
|
||||||
"minecraft:vibration_damper": [
|
"minecraft:vibration_damper": [
|
||||||
"minecraft:black_carpet",
|
"minecraft:black_carpet",
|
||||||
"minecraft:blue_carpet",
|
|
||||||
"minecraft:pink_carpet",
|
"minecraft:pink_carpet",
|
||||||
"minecraft:lime_carpet",
|
"minecraft:lime_carpet",
|
||||||
|
"minecraft:blue_carpet",
|
||||||
"minecraft:green_wool",
|
"minecraft:green_wool",
|
||||||
"minecraft:cyan_carpet",
|
"minecraft:cyan_carpet",
|
||||||
"minecraft:orange_wool",
|
"minecraft:orange_wool",
|
||||||
|
@ -780,8 +780,8 @@
|
||||||
],
|
],
|
||||||
"minecraft:wooden_tier": [
|
"minecraft:wooden_tier": [
|
||||||
"minecraft:wooden_pickaxe",
|
"minecraft:wooden_pickaxe",
|
||||||
"minecraft:wooden_shovel",
|
|
||||||
"minecraft:wooden_sword",
|
"minecraft:wooden_sword",
|
||||||
|
"minecraft:wooden_shovel",
|
||||||
"minecraft:wooden_axe",
|
"minecraft:wooden_axe",
|
||||||
"minecraft:wooden_hoe"
|
"minecraft:wooden_hoe"
|
||||||
],
|
],
|
||||||
|
@ -803,4 +803,4 @@
|
||||||
"minecraft:red_wool",
|
"minecraft:red_wool",
|
||||||
"minecraft:black_wool"
|
"minecraft:black_wool"
|
||||||
]
|
]
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT"
|
||||||
guava = "29.0-jre"
|
guava = "29.0-jre"
|
||||||
gson = "2.3.1" # Provided by Spigot 1.8.8
|
gson = "2.3.1" # Provided by Spigot 1.8.8
|
||||||
websocket = "1.5.1"
|
websocket = "1.5.1"
|
||||||
protocol-connection = "3.0.0.Beta5-20241022.154658-14"
|
protocol-connection = "3.0.0.Beta5-20241121.192504-18"
|
||||||
protocol-common = "3.0.0.Beta5-20241022.154658-14"
|
protocol-common = "3.0.0.Beta5-20241121.192504-18"
|
||||||
protocol-codec = "3.0.0.Beta5-20241022.154658-14"
|
protocol-codec = "3.0.0.Beta5-20241121.192504-18"
|
||||||
raknet = "1.0.0.CR3-20240416.144209-1"
|
raknet = "1.0.0.CR3-20240416.144209-1"
|
||||||
minecraftauth = "4.1.1"
|
minecraftauth = "4.1.1"
|
||||||
mcprotocollib = "1.21.4-SNAPSHOT"
|
mcprotocollib = "1.21.4-SNAPSHOT"
|
||||||
|
@ -28,7 +28,7 @@ viaversion = "4.9.2"
|
||||||
adapters = "1.15-SNAPSHOT"
|
adapters = "1.15-SNAPSHOT"
|
||||||
cloud = "2.0.0-rc.2"
|
cloud = "2.0.0-rc.2"
|
||||||
cloud-minecraft = "2.0.0-beta.9"
|
cloud-minecraft = "2.0.0-beta.9"
|
||||||
cloud-minecraft-modded = "2.0.0-beta.9"
|
cloud-minecraft-modded = "2.0.0-beta.10"
|
||||||
commodore = "2.2"
|
commodore = "2.2"
|
||||||
bungeecord = "a7c6ede"
|
bungeecord = "a7c6ede"
|
||||||
velocity = "3.3.0-SNAPSHOT"
|
velocity = "3.3.0-SNAPSHOT"
|
||||||
|
|
Loading…
Reference in a new issue