mirror of
https://github.com/GeyserMC/Geyser.git
synced 2025-12-19 14:59:27 +00:00
1.21.70 support (#5414)
* Initial work on 1.21.70 * Update mappings, fixup jitpack * Use LevelSoundEventPacket instead of LevelSoundEvent2Packet, ensure only temperate cow/pig/chicken/thrown egg entities spawn, update item components * Update cloudburst/protocol dependency, target master mappings branch
This commit is contained in:
@@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t
|
||||
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
|
||||
|
||||
## Supported Versions
|
||||
Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.62 and Minecraft Java 1.21.4. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/).
|
||||
Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.70 and Minecraft Java 1.21.4. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/).
|
||||
|
||||
## Setting Up
|
||||
Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser.
|
||||
|
||||
@@ -62,11 +62,12 @@ repositories {
|
||||
name = "viaversion"
|
||||
}
|
||||
|
||||
// For Adventure snapshots
|
||||
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
|
||||
|
||||
// Jitpack for e.g. MCPL
|
||||
maven("https://jitpack.io") {
|
||||
content { includeGroupByRegex("com\\.github\\..*") }
|
||||
}
|
||||
|
||||
// For Adventure snapshots
|
||||
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ package org.geysermc.geyser.entity;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.geysermc.geyser.entity.factory.EntityFactory;
|
||||
import org.geysermc.geyser.entity.properties.GeyserEntityProperties;
|
||||
import org.geysermc.geyser.entity.properties.VanillaEntityProperties;
|
||||
import org.geysermc.geyser.entity.type.AbstractArrowEntity;
|
||||
import org.geysermc.geyser.entity.type.AbstractWindChargeEntity;
|
||||
import org.geysermc.geyser.entity.type.AreaEffectCloudEntity;
|
||||
@@ -462,6 +462,7 @@ public final class EntityDefinitions {
|
||||
EGG = EntityDefinition.inherited(ThrowableItemEntity::new, throwableItemBase)
|
||||
.type(EntityType.EGG)
|
||||
.heightAndWidth(0.25f)
|
||||
.properties(VanillaEntityProperties.CLIMATE_VARIANT)
|
||||
.build();
|
||||
ENDER_PEARL = EntityDefinition.inherited(ThrowableItemEntity::new, throwableItemBase)
|
||||
.type(EntityType.ENDER_PEARL)
|
||||
@@ -685,15 +686,7 @@ public final class EntityDefinitions {
|
||||
.addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setActive)
|
||||
.addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setIsTearingDown)
|
||||
.addTranslator(MetadataTypes.OPTIONAL_POSITION, CreakingEntity::setHomePos)
|
||||
.properties(new GeyserEntityProperties.Builder()
|
||||
.addEnum(CreakingEntity.CREAKING_STATE,
|
||||
"neutral",
|
||||
"hostile_observed",
|
||||
"hostile_unobserved",
|
||||
"twitching",
|
||||
"crumbling")
|
||||
.addInt(CreakingEntity.CREAKING_SWAYING_TICKS, 0, 6)
|
||||
.build())
|
||||
.properties(VanillaEntityProperties.CREAKING)
|
||||
.build();
|
||||
CREEPER = EntityDefinition.inherited(CreeperEntity::new, mobEntityBase)
|
||||
.type(EntityType.CREEPER)
|
||||
@@ -946,15 +939,7 @@ public final class EntityDefinitions {
|
||||
ARMADILLO = EntityDefinition.inherited(ArmadilloEntity::new, ageableEntityBase)
|
||||
.type(EntityType.ARMADILLO)
|
||||
.height(0.65f).width(0.7f)
|
||||
.properties(new GeyserEntityProperties.Builder()
|
||||
.addEnum(
|
||||
"minecraft:armadillo_state",
|
||||
"unrolled",
|
||||
"rolled_up",
|
||||
"rolled_up_peeking",
|
||||
"rolled_up_relaxing",
|
||||
"rolled_up_unrolling")
|
||||
.build())
|
||||
.properties(VanillaEntityProperties.ARMADILLO)
|
||||
.addTranslator(MetadataTypes.ARMADILLO_STATE, ArmadilloEntity::setArmadilloState)
|
||||
.build();
|
||||
AXOLOTL = EntityDefinition.inherited(AxolotlEntity::new, ageableEntityBase)
|
||||
@@ -967,19 +952,19 @@ public final class EntityDefinitions {
|
||||
BEE = EntityDefinition.inherited(BeeEntity::new, ageableEntityBase)
|
||||
.type(EntityType.BEE)
|
||||
.heightAndWidth(0.6f)
|
||||
.properties(new GeyserEntityProperties.Builder()
|
||||
.addBoolean("minecraft:has_nectar")
|
||||
.build())
|
||||
.properties(VanillaEntityProperties.BEE)
|
||||
.addTranslator(MetadataTypes.BYTE, BeeEntity::setBeeFlags)
|
||||
.addTranslator(MetadataTypes.INT, BeeEntity::setAngerTime)
|
||||
.build();
|
||||
CHICKEN = EntityDefinition.inherited(ChickenEntity::new, ageableEntityBase)
|
||||
.type(EntityType.CHICKEN)
|
||||
.height(0.7f).width(0.4f)
|
||||
.properties(VanillaEntityProperties.CLIMATE_VARIANT)
|
||||
.build();
|
||||
COW = EntityDefinition.inherited(CowEntity::new, ageableEntityBase)
|
||||
.type(EntityType.COW)
|
||||
.height(1.4f).width(0.9f)
|
||||
.properties(VanillaEntityProperties.CLIMATE_VARIANT)
|
||||
.build();
|
||||
FOX = EntityDefinition.inherited(FoxEntity::new, ageableEntityBase)
|
||||
.type(EntityType.FOX)
|
||||
@@ -1030,6 +1015,7 @@ public final class EntityDefinitions {
|
||||
PIG = EntityDefinition.inherited(PigEntity::new, ageableEntityBase)
|
||||
.type(EntityType.PIG)
|
||||
.heightAndWidth(0.9f)
|
||||
.properties(VanillaEntityProperties.CLIMATE_VARIANT)
|
||||
.addTranslator(MetadataTypes.BOOLEAN, (pigEntity, entityMetadata) -> pigEntity.setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
|
||||
.addTranslator(MetadataTypes.INT, PigEntity::setBoost)
|
||||
.build();
|
||||
@@ -1176,6 +1162,7 @@ public final class EntityDefinitions {
|
||||
WOLF = EntityDefinition.inherited(WolfEntity::new, tameableEntityBase)
|
||||
.type(EntityType.WOLF)
|
||||
.height(0.85f).width(0.6f)
|
||||
.properties(VanillaEntityProperties.WOLF_SOUND_VARIANT)
|
||||
// "Begging" on wiki.vg, "Interested" in Nukkit - the tilt of the head
|
||||
.addTranslator(MetadataTypes.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
|
||||
.addTranslator(MetadataTypes.INT, WolfEntity::setCollarColor)
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2025 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.entity.properties;
|
||||
|
||||
import org.geysermc.geyser.entity.type.living.monster.CreakingEntity;
|
||||
|
||||
public class VanillaEntityProperties {
|
||||
|
||||
public static final String CLIMATE_VARIANT_ID = "minecraft:climate_variant";
|
||||
|
||||
public static final GeyserEntityProperties ARMADILLO = new GeyserEntityProperties.Builder()
|
||||
.addEnum("minecraft:armadillo_state",
|
||||
"unrolled",
|
||||
"rolled_up",
|
||||
"rolled_up_peeking",
|
||||
"rolled_up_relaxing",
|
||||
"rolled_up_unrolling")
|
||||
.build();
|
||||
|
||||
public static final GeyserEntityProperties BEE = new GeyserEntityProperties.Builder()
|
||||
.addBoolean("minecraft:has_nectar")
|
||||
.build();
|
||||
|
||||
public static final GeyserEntityProperties CLIMATE_VARIANT = new GeyserEntityProperties.Builder()
|
||||
.addEnum(CLIMATE_VARIANT_ID,
|
||||
"temperate",
|
||||
"warm",
|
||||
"cold")
|
||||
.build();
|
||||
|
||||
public static final GeyserEntityProperties CREAKING = new GeyserEntityProperties.Builder()
|
||||
.addEnum(CreakingEntity.CREAKING_STATE,
|
||||
"neutral",
|
||||
"hostile_observed",
|
||||
"hostile_unobserved",
|
||||
"twitching",
|
||||
"crumbling")
|
||||
.addInt(CreakingEntity.CREAKING_SWAYING_TICKS, 0, 6)
|
||||
.build();
|
||||
|
||||
public static final GeyserEntityProperties WOLF_SOUND_VARIANT = new GeyserEntityProperties.Builder()
|
||||
.addEnum("minecraft:sound_variant",
|
||||
"default",
|
||||
"big",
|
||||
"cute",
|
||||
"grumpy",
|
||||
"mad",
|
||||
"puglin",
|
||||
"sad")
|
||||
.build();
|
||||
}
|
||||
@@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type;
|
||||
import lombok.Getter;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
@@ -85,7 +86,14 @@ public class BoatEntity extends Entity implements Leashable, Tickable {
|
||||
|
||||
// Required to be able to move on land 1.16.200+ or apply gravity not in the water 1.16.100+
|
||||
dirtyMetadata.put(EntityDataTypes.IS_BUOYANT, true);
|
||||
dirtyMetadata.put(EntityDataTypes.BUOYANCY_DATA, BUOYANCY_DATA);
|
||||
dirtyMetadata.put(EntityDataTypes.BUOYANCY_DATA, BUOYANCY_DATA);;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeMetadata() {
|
||||
super.initializeMetadata();
|
||||
// Without this flag you cant stand on boats
|
||||
setFlag(EntityFlag.COLLIDABLE, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -200,6 +200,7 @@ public class Entity implements GeyserEntity {
|
||||
addAdditionalSpawnData(addEntityPacket);
|
||||
|
||||
valid = true;
|
||||
|
||||
session.sendUpstreamPacket(addEntityPacket);
|
||||
|
||||
flagsDirty = false;
|
||||
@@ -372,6 +373,10 @@ public class Entity implements GeyserEntity {
|
||||
flagsDirty = false;
|
||||
}
|
||||
dirtyMetadata.apply(entityDataPacket.getMetadata());
|
||||
if (propertyManager != null && propertyManager.hasProperties()) {
|
||||
propertyManager.applyIntProperties(entityDataPacket.getProperties().getIntProperties());
|
||||
propertyManager.applyFloatProperties(entityDataPacket.getProperties().getFloatProperties());
|
||||
}
|
||||
session.sendUpstreamPacket(entityDataPacket);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,10 +28,13 @@ package org.geysermc.geyser.entity.type;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.entity.EntityDefinitions;
|
||||
import org.geysermc.geyser.entity.properties.VanillaEntityProperties;
|
||||
import org.geysermc.geyser.session.GeyserSession;
|
||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata;
|
||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType;
|
||||
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
@@ -53,6 +56,14 @@ public class ThrowableItemEntity extends ThrowableEntity {
|
||||
age = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
if (definition.entityType() == EntityType.EGG) {
|
||||
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate");
|
||||
propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeMetadata() {
|
||||
super.initializeMetadata();
|
||||
|
||||
@@ -27,7 +27,9 @@ package org.geysermc.geyser.entity.type.living.animal;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.entity.properties.VanillaEntityProperties;
|
||||
import org.geysermc.geyser.item.type.Item;
|
||||
import org.geysermc.geyser.session.GeyserSession;
|
||||
import org.geysermc.geyser.session.cache.tags.ItemTag;
|
||||
@@ -41,6 +43,12 @@ public class ChickenEntity extends AnimalEntity {
|
||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate");
|
||||
propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Tag<Item> getFoodTag() {
|
||||
|
||||
@@ -30,7 +30,9 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.SoundEvent;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.entity.properties.VanillaEntityProperties;
|
||||
import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||
import org.geysermc.geyser.item.Items;
|
||||
import org.geysermc.geyser.item.type.Item;
|
||||
@@ -48,6 +50,12 @@ public class CowEntity extends AnimalEntity {
|
||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate");
|
||||
propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) {
|
||||
|
||||
@@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.animal;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||
import org.geysermc.geyser.item.Items;
|
||||
@@ -52,6 +53,11 @@ public class MooshroomEntity extends CowEntity {
|
||||
dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
// There are no variants for mooshroom cows, so far
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) {
|
||||
|
||||
@@ -31,7 +31,9 @@ import org.cloudburstmc.math.vector.Vector2f;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.entity.properties.VanillaEntityProperties;
|
||||
import org.geysermc.geyser.entity.type.Tickable;
|
||||
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
||||
import org.geysermc.geyser.entity.vehicle.BoostableVehicleComponent;
|
||||
@@ -58,6 +60,12 @@ public class PigEntity extends AnimalEntity implements Tickable, ClientVehicle {
|
||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, "temperate");
|
||||
propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Tag<Item> getFoodTag() {
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||
@@ -67,6 +68,12 @@ public class WolfEntity extends TameableEntity {
|
||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) {
|
||||
propertyManager.add("minecraft:sound_variant", "default");
|
||||
propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTameableFlags(ByteEntityMetadata entityMetadata) {
|
||||
super.setTameableFlags(entityMetadata);
|
||||
|
||||
@@ -30,7 +30,7 @@ import org.cloudburstmc.protocol.bedrock.data.SoundEvent;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket;
|
||||
import org.geysermc.geyser.entity.EntityDefinition;
|
||||
import org.geysermc.geyser.session.GeyserSession;
|
||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
||||
@@ -57,7 +57,7 @@ public class EndermanEntity extends MonsterEntity {
|
||||
//TODO see if Bedrock controls this differently
|
||||
// Java Edition this controls which ambient sound is used
|
||||
if (entityMetadata.getPrimitiveValue()) {
|
||||
LevelSoundEvent2Packet packet = new LevelSoundEvent2Packet();
|
||||
LevelSoundEventPacket packet = new LevelSoundEventPacket();
|
||||
packet.setSound(SoundEvent.STARE);
|
||||
packet.setPosition(this.position);
|
||||
packet.setExtraData(-1);
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786;
|
||||
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
||||
import org.geysermc.geyser.session.GeyserSession;
|
||||
import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec;
|
||||
@@ -48,8 +49,8 @@ public final class GameProtocol {
|
||||
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
||||
* release of the game that Geyser supports.
|
||||
*/
|
||||
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v776.CODEC.toBuilder()
|
||||
.minecraftVersion("1.21.60")
|
||||
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v786.CODEC.toBuilder()
|
||||
.minecraftVersion("1.21.70")
|
||||
.build());
|
||||
|
||||
/**
|
||||
@@ -70,6 +71,9 @@ public final class GameProtocol {
|
||||
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v766.CODEC.toBuilder()
|
||||
.minecraftVersion("1.21.50 - 1.21.51")
|
||||
.build()));
|
||||
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v776.CODEC.toBuilder()
|
||||
.minecraftVersion("1.21.60 - 1.21.62")
|
||||
.build()));
|
||||
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class InvalidPacketHandler extends ChannelInboundHandlerAdapter {
|
||||
|
||||
if (!(rootCause instanceof IllegalArgumentException)) {
|
||||
// Kick users that cause exceptions
|
||||
logger.warning("Exception caught in session of" + session.bedrockUsername() + ": " + rootCause.getMessage());
|
||||
logger.warning("Exception caught in session of " + session.bedrockUsername() + ": " + rootCause.getMessage());
|
||||
session.disconnect("An internal error occurred!");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -906,4 +906,14 @@ public class LoggingPacketHandler implements BedrockPacketHandler {
|
||||
public PacketSignal handle(ServerboundDiagnosticsPacket packet) {
|
||||
return defaultHandler(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketSignal handle(UpdateClientOptionsPacket packet) {
|
||||
return defaultHandler(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketSignal handle(PlayerUpdateEntityOverridesPacket packet) {
|
||||
return defaultHandler(packet);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ import org.cloudburstmc.nbt.NbtUtils;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786;
|
||||
import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||
import org.geysermc.geyser.GeyserImpl;
|
||||
@@ -117,41 +118,10 @@ public final class BlockRegistryPopulator {
|
||||
private static void registerBedrockBlocks() {
|
||||
var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder()
|
||||
.put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), Conversion766_748::remapBlock)
|
||||
.put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), tag -> tag) // TODO: Finish me
|
||||
.put(ObjectIntPair.of("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()), tag -> {
|
||||
final String name = tag.getString("name");
|
||||
if (name.equals("minecraft:creaking_heart") && tag.getCompound("states").containsKey("active")) {
|
||||
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||
builder.remove("active");
|
||||
builder.putString("creaking_heart_state", "awake");
|
||||
NbtMap states = builder.build();
|
||||
return tag.toBuilder().putCompound("states", states).build();
|
||||
}
|
||||
if ((name.endsWith("_door") || name.endsWith("fence_gate")) && tag.getCompound("states").containsKey("direction")) {
|
||||
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||
Integer directionCardinality = (Integer) builder.remove("direction");
|
||||
switch (directionCardinality) {
|
||||
case 0:
|
||||
builder.putString("minecraft:cardinal_direction", "south");
|
||||
break;
|
||||
case 1:
|
||||
builder.putString("minecraft:cardinal_direction", "west");
|
||||
break;
|
||||
case 2:
|
||||
builder.putString( "minecraft:cardinal_direction" , "north");
|
||||
break;
|
||||
case 3:
|
||||
builder.putString("minecraft:cardinal_direction", "east");
|
||||
break;
|
||||
default:
|
||||
throw new AssertionError("Invalid direction: " + directionCardinality);
|
||||
}
|
||||
NbtMap states = builder.build();
|
||||
return tag.toBuilder().putCompound("states", states).build();
|
||||
}
|
||||
return tag;
|
||||
})
|
||||
.build();
|
||||
.put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), Conversion776_766::remapBlock)
|
||||
.put(ObjectIntPair.of("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()), tag -> tag)
|
||||
.put(ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()), tag -> tag)
|
||||
.build();
|
||||
|
||||
// We can keep this strong as nothing should be garbage collected
|
||||
// Safe to intern since Cloudburst NBT is immutable
|
||||
|
||||
@@ -85,6 +85,10 @@ public class Conversion766_748 {
|
||||
}
|
||||
|
||||
static NbtMap remapBlock(NbtMap tag) {
|
||||
|
||||
// First: Downgrade from 1.21.60 -> 1.21.50
|
||||
tag = Conversion776_766.remapBlock(tag);
|
||||
|
||||
String name = tag.getString("name").replace("minecraft:", "");
|
||||
if (PALE_WOODEN_BLOCKS.contains(name)) {
|
||||
return withName(tag, name.replace("pale_oak", "birch"));
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2025 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;
|
||||
|
||||
public class Conversion776_766 {
|
||||
|
||||
public static NbtMap remapBlock(NbtMap tag) {
|
||||
final String name = tag.getString("name");
|
||||
|
||||
if (name.equals("minecraft:creaking_heart")) {
|
||||
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||
String value = (String) builder.remove("creaking_heart_state");
|
||||
builder.putBoolean("active", value.equals("awake"));
|
||||
|
||||
return tag.toBuilder().putCompound("states", builder.build()).build();
|
||||
}
|
||||
|
||||
if (name.endsWith("_door") || name.endsWith("fence_gate")) {
|
||||
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||
String cardinalDirection = (String) builder.remove("minecraft:cardinal_direction");
|
||||
switch (cardinalDirection) {
|
||||
case "south" -> builder.putInt("direction", 0);
|
||||
case "west" -> builder.putInt("direction", 1);
|
||||
case "east" -> builder.putInt("direction", 3);
|
||||
case "north" -> builder.putInt("direction", 2);
|
||||
default -> throw new AssertionError("Invalid direction: " + cardinalDirection);
|
||||
}
|
||||
NbtMap states = builder.build();
|
||||
return tag.toBuilder().putCompound("states", states).build();
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import org.cloudburstmc.nbt.NbtUtils;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776;
|
||||
import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
||||
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
|
||||
@@ -151,6 +152,7 @@ public class ItemRegistryPopulator {
|
||||
paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion(), itemFallbacks, (item, mapping) -> mapping));
|
||||
paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()));
|
||||
paletteVersions.add(new PaletteVersion("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()));
|
||||
paletteVersions.add(new PaletteVersion("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()));
|
||||
|
||||
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ import org.cloudburstmc.protocol.bedrock.packet.EmoteListPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.GameRulesChangedPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.ItemComponentPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.SetCommandsEnabledPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.SetTimePacket;
|
||||
@@ -1933,7 +1933,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||
}
|
||||
|
||||
public void playSoundEvent(SoundEvent sound, Vector3f position) {
|
||||
LevelSoundEvent2Packet packet = new LevelSoundEvent2Packet();
|
||||
LevelSoundEventPacket packet = new LevelSoundEventPacket();
|
||||
packet.setPosition(position);
|
||||
packet.setSound(sound);
|
||||
packet.setIdentifier(":");
|
||||
|
||||
@@ -33,7 +33,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket;
|
||||
import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket;
|
||||
@@ -143,7 +143,7 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
|
||||
entityEventPacket.setType(EntityEventType.TAME_SUCCEEDED);
|
||||
break;
|
||||
case ZOMBIE_VILLAGER_CURE: // Played when a zombie bites the golden apple
|
||||
LevelSoundEvent2Packet soundPacket = new LevelSoundEvent2Packet();
|
||||
LevelSoundEventPacket soundPacket = new LevelSoundEventPacket();
|
||||
soundPacket.setSound(SoundEvent.REMEDY);
|
||||
soundPacket.setPosition(entity.getPosition());
|
||||
soundPacket.setExtraData(-1);
|
||||
@@ -241,7 +241,7 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
|
||||
case LIVING_EQUIPMENT_BREAK_FEET:
|
||||
case LIVING_EQUIPMENT_BREAK_MAIN_HAND:
|
||||
case LIVING_EQUIPMENT_BREAK_OFF_HAND:
|
||||
LevelSoundEvent2Packet equipmentBreakPacket = new LevelSoundEvent2Packet();
|
||||
LevelSoundEventPacket equipmentBreakPacket = new LevelSoundEventPacket();
|
||||
equipmentBreakPacket.setSound(SoundEvent.BREAK);
|
||||
equipmentBreakPacket.setPosition(entity.getPosition());
|
||||
equipmentBreakPacket.setExtraData(-1);
|
||||
|
||||
Binary file not shown.
BIN
core/src/main/resources/bedrock/block_palette.1_21_70.nbt
Normal file
BIN
core/src/main/resources/bedrock/block_palette.1_21_70.nbt
Normal file
Binary file not shown.
8960
core/src/main/resources/bedrock/creative_items.1_21_70.json
Normal file
8960
core/src/main/resources/bedrock/creative_items.1_21_70.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
829
core/src/main/resources/bedrock/item_tags.1_21_70.json
Normal file
829
core/src/main/resources/bedrock/item_tags.1_21_70.json
Normal file
@@ -0,0 +1,829 @@
|
||||
{
|
||||
"minecraft:arrow": [
|
||||
"minecraft:arrow"
|
||||
],
|
||||
"minecraft:banner": [
|
||||
"minecraft:banner"
|
||||
],
|
||||
"minecraft:boat": [
|
||||
"minecraft:acacia_boat",
|
||||
"minecraft:acacia_chest_boat",
|
||||
"minecraft:bamboo_chest_raft",
|
||||
"minecraft:bamboo_raft",
|
||||
"minecraft:birch_boat",
|
||||
"minecraft:birch_chest_boat",
|
||||
"minecraft:cherry_boat",
|
||||
"minecraft:cherry_chest_boat",
|
||||
"minecraft:dark_oak_boat",
|
||||
"minecraft:dark_oak_chest_boat",
|
||||
"minecraft:jungle_boat",
|
||||
"minecraft:jungle_chest_boat",
|
||||
"minecraft:mangrove_boat",
|
||||
"minecraft:mangrove_chest_boat",
|
||||
"minecraft:oak_boat",
|
||||
"minecraft:oak_chest_boat",
|
||||
"minecraft:pale_oak_boat",
|
||||
"minecraft:pale_oak_chest_boat",
|
||||
"minecraft:spruce_boat",
|
||||
"minecraft:spruce_chest_boat"
|
||||
],
|
||||
"minecraft:boats": [
|
||||
"minecraft:acacia_boat",
|
||||
"minecraft:acacia_chest_boat",
|
||||
"minecraft:bamboo_chest_raft",
|
||||
"minecraft:bamboo_raft",
|
||||
"minecraft:birch_boat",
|
||||
"minecraft:birch_chest_boat",
|
||||
"minecraft:cherry_boat",
|
||||
"minecraft:cherry_chest_boat",
|
||||
"minecraft:dark_oak_boat",
|
||||
"minecraft:dark_oak_chest_boat",
|
||||
"minecraft:jungle_boat",
|
||||
"minecraft:jungle_chest_boat",
|
||||
"minecraft:mangrove_boat",
|
||||
"minecraft:mangrove_chest_boat",
|
||||
"minecraft:oak_boat",
|
||||
"minecraft:oak_chest_boat",
|
||||
"minecraft:pale_oak_boat",
|
||||
"minecraft:pale_oak_chest_boat",
|
||||
"minecraft:spruce_boat",
|
||||
"minecraft:spruce_chest_boat"
|
||||
],
|
||||
"minecraft:bookshelf_books": [
|
||||
"minecraft:book",
|
||||
"minecraft:enchanted_book",
|
||||
"minecraft:writable_book"
|
||||
],
|
||||
"minecraft:chainmail_tier": [
|
||||
"minecraft:chainmail_boots",
|
||||
"minecraft:chainmail_chestplate",
|
||||
"minecraft:chainmail_helmet",
|
||||
"minecraft:chainmail_leggings"
|
||||
],
|
||||
"minecraft:coals": [
|
||||
"minecraft:charcoal",
|
||||
"minecraft:coal"
|
||||
],
|
||||
"minecraft:crimson_stems": [
|
||||
"minecraft:crimson_hyphae",
|
||||
"minecraft:crimson_stem",
|
||||
"minecraft:stripped_crimson_hyphae",
|
||||
"minecraft:stripped_crimson_stem"
|
||||
],
|
||||
"minecraft:decorated_pot_sherds": [
|
||||
"minecraft:angler_pottery_sherd",
|
||||
"minecraft:archer_pottery_sherd",
|
||||
"minecraft:arms_up_pottery_sherd",
|
||||
"minecraft:blade_pottery_sherd",
|
||||
"minecraft:brewer_pottery_sherd",
|
||||
"minecraft:brick",
|
||||
"minecraft:burn_pottery_sherd",
|
||||
"minecraft:danger_pottery_sherd",
|
||||
"minecraft:explorer_pottery_sherd",
|
||||
"minecraft:flow_pottery_sherd",
|
||||
"minecraft:friend_pottery_sherd",
|
||||
"minecraft:guster_pottery_sherd",
|
||||
"minecraft:heart_pottery_sherd",
|
||||
"minecraft:heartbreak_pottery_sherd",
|
||||
"minecraft:howl_pottery_sherd",
|
||||
"minecraft:miner_pottery_sherd",
|
||||
"minecraft:mourner_pottery_sherd",
|
||||
"minecraft:plenty_pottery_sherd",
|
||||
"minecraft:prize_pottery_sherd",
|
||||
"minecraft:scrape_pottery_sherd",
|
||||
"minecraft:sheaf_pottery_sherd",
|
||||
"minecraft:shelter_pottery_sherd",
|
||||
"minecraft:skull_pottery_sherd",
|
||||
"minecraft:snort_pottery_sherd"
|
||||
],
|
||||
"minecraft:diamond_tier": [
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:diamond_boots",
|
||||
"minecraft:diamond_chestplate",
|
||||
"minecraft:diamond_helmet",
|
||||
"minecraft:diamond_hoe",
|
||||
"minecraft:diamond_leggings",
|
||||
"minecraft:diamond_pickaxe",
|
||||
"minecraft:diamond_shovel",
|
||||
"minecraft:diamond_sword",
|
||||
"minecraft:mace"
|
||||
],
|
||||
"minecraft:digger": [
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:diamond_hoe",
|
||||
"minecraft:diamond_pickaxe",
|
||||
"minecraft:diamond_shovel",
|
||||
"minecraft:golden_axe",
|
||||
"minecraft:golden_hoe",
|
||||
"minecraft:golden_pickaxe",
|
||||
"minecraft:golden_shovel",
|
||||
"minecraft:iron_axe",
|
||||
"minecraft:iron_hoe",
|
||||
"minecraft:iron_pickaxe",
|
||||
"minecraft:iron_shovel",
|
||||
"minecraft:netherite_axe",
|
||||
"minecraft:netherite_hoe",
|
||||
"minecraft:netherite_pickaxe",
|
||||
"minecraft:netherite_shovel",
|
||||
"minecraft:stone_axe",
|
||||
"minecraft:stone_hoe",
|
||||
"minecraft:stone_pickaxe",
|
||||
"minecraft:stone_shovel",
|
||||
"minecraft:wooden_axe",
|
||||
"minecraft:wooden_hoe",
|
||||
"minecraft:wooden_pickaxe",
|
||||
"minecraft:wooden_shovel"
|
||||
],
|
||||
"minecraft:door": [
|
||||
"minecraft:acacia_door",
|
||||
"minecraft:bamboo_door",
|
||||
"minecraft:birch_door",
|
||||
"minecraft:cherry_door",
|
||||
"minecraft:copper_door",
|
||||
"minecraft:crimson_door",
|
||||
"minecraft:dark_oak_door",
|
||||
"minecraft:exposed_copper_door",
|
||||
"minecraft:iron_door",
|
||||
"minecraft:jungle_door",
|
||||
"minecraft:mangrove_door",
|
||||
"minecraft:oxidized_copper_door",
|
||||
"minecraft:pale_oak_door",
|
||||
"minecraft:spruce_door",
|
||||
"minecraft:warped_door",
|
||||
"minecraft:waxed_copper_door",
|
||||
"minecraft:waxed_exposed_copper_door",
|
||||
"minecraft:waxed_oxidized_copper_door",
|
||||
"minecraft:waxed_weathered_copper_door",
|
||||
"minecraft:weathered_copper_door",
|
||||
"minecraft:wooden_door"
|
||||
],
|
||||
"minecraft:egg": [
|
||||
"minecraft:blue_egg",
|
||||
"minecraft:brown_egg",
|
||||
"minecraft:egg"
|
||||
],
|
||||
"minecraft:golden_tier": [
|
||||
"minecraft:golden_axe",
|
||||
"minecraft:golden_boots",
|
||||
"minecraft:golden_chestplate",
|
||||
"minecraft:golden_helmet",
|
||||
"minecraft:golden_hoe",
|
||||
"minecraft:golden_leggings",
|
||||
"minecraft:golden_pickaxe",
|
||||
"minecraft:golden_shovel",
|
||||
"minecraft:golden_sword"
|
||||
],
|
||||
"minecraft:hanging_actor": [
|
||||
"minecraft:painting"
|
||||
],
|
||||
"minecraft:hanging_sign": [
|
||||
"minecraft:acacia_hanging_sign",
|
||||
"minecraft:bamboo_hanging_sign",
|
||||
"minecraft:birch_hanging_sign",
|
||||
"minecraft:cherry_hanging_sign",
|
||||
"minecraft:crimson_hanging_sign",
|
||||
"minecraft:dark_oak_hanging_sign",
|
||||
"minecraft:jungle_hanging_sign",
|
||||
"minecraft:mangrove_hanging_sign",
|
||||
"minecraft:oak_hanging_sign",
|
||||
"minecraft:pale_oak_hanging_sign",
|
||||
"minecraft:spruce_hanging_sign",
|
||||
"minecraft:warped_hanging_sign"
|
||||
],
|
||||
"minecraft:horse_armor": [
|
||||
"minecraft:diamond_horse_armor",
|
||||
"minecraft:golden_horse_armor",
|
||||
"minecraft:iron_horse_armor",
|
||||
"minecraft:leather_horse_armor"
|
||||
],
|
||||
"minecraft:iron_tier": [
|
||||
"minecraft:iron_axe",
|
||||
"minecraft:iron_boots",
|
||||
"minecraft:iron_chestplate",
|
||||
"minecraft:iron_helmet",
|
||||
"minecraft:iron_hoe",
|
||||
"minecraft:iron_leggings",
|
||||
"minecraft:iron_pickaxe",
|
||||
"minecraft:iron_shovel",
|
||||
"minecraft:iron_sword"
|
||||
],
|
||||
"minecraft:is_armor": [
|
||||
"minecraft:chainmail_boots",
|
||||
"minecraft:chainmail_chestplate",
|
||||
"minecraft:chainmail_helmet",
|
||||
"minecraft:chainmail_leggings",
|
||||
"minecraft:diamond_boots",
|
||||
"minecraft:diamond_chestplate",
|
||||
"minecraft:diamond_helmet",
|
||||
"minecraft:diamond_leggings",
|
||||
"minecraft:elytra",
|
||||
"minecraft:golden_boots",
|
||||
"minecraft:golden_chestplate",
|
||||
"minecraft:golden_helmet",
|
||||
"minecraft:golden_leggings",
|
||||
"minecraft:iron_boots",
|
||||
"minecraft:iron_chestplate",
|
||||
"minecraft:iron_helmet",
|
||||
"minecraft:iron_leggings",
|
||||
"minecraft:leather_boots",
|
||||
"minecraft:leather_chestplate",
|
||||
"minecraft:leather_helmet",
|
||||
"minecraft:leather_leggings",
|
||||
"minecraft:netherite_boots",
|
||||
"minecraft:netherite_chestplate",
|
||||
"minecraft:netherite_helmet",
|
||||
"minecraft:netherite_leggings",
|
||||
"minecraft:turtle_helmet"
|
||||
],
|
||||
"minecraft:is_axe": [
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:golden_axe",
|
||||
"minecraft:iron_axe",
|
||||
"minecraft:netherite_axe",
|
||||
"minecraft:stone_axe",
|
||||
"minecraft:wooden_axe"
|
||||
],
|
||||
"minecraft:is_cooked": [
|
||||
"minecraft:cooked_beef",
|
||||
"minecraft:cooked_chicken",
|
||||
"minecraft:cooked_cod",
|
||||
"minecraft:cooked_mutton",
|
||||
"minecraft:cooked_porkchop",
|
||||
"minecraft:cooked_rabbit",
|
||||
"minecraft:cooked_salmon",
|
||||
"minecraft:rabbit_stew"
|
||||
],
|
||||
"minecraft:is_fish": [
|
||||
"minecraft:cod",
|
||||
"minecraft:cooked_cod",
|
||||
"minecraft:cooked_salmon",
|
||||
"minecraft:pufferfish",
|
||||
"minecraft:salmon",
|
||||
"minecraft:tropical_fish"
|
||||
],
|
||||
"minecraft:is_food": [
|
||||
"minecraft:apple",
|
||||
"minecraft:baked_potato",
|
||||
"minecraft:beef",
|
||||
"minecraft:beetroot",
|
||||
"minecraft:beetroot_soup",
|
||||
"minecraft:bread",
|
||||
"minecraft:carrot",
|
||||
"minecraft:chicken",
|
||||
"minecraft:cooked_beef",
|
||||
"minecraft:cooked_chicken",
|
||||
"minecraft:cooked_mutton",
|
||||
"minecraft:cooked_porkchop",
|
||||
"minecraft:cooked_rabbit",
|
||||
"minecraft:cookie",
|
||||
"minecraft:dried_kelp",
|
||||
"minecraft:enchanted_golden_apple",
|
||||
"minecraft:golden_apple",
|
||||
"minecraft:golden_carrot",
|
||||
"minecraft:melon_slice",
|
||||
"minecraft:mushroom_stew",
|
||||
"minecraft:mutton",
|
||||
"minecraft:porkchop",
|
||||
"minecraft:potato",
|
||||
"minecraft:pumpkin_pie",
|
||||
"minecraft:rabbit",
|
||||
"minecraft:rabbit_stew",
|
||||
"minecraft:rotten_flesh",
|
||||
"minecraft:sweet_berries"
|
||||
],
|
||||
"minecraft:is_hoe": [
|
||||
"minecraft:diamond_hoe",
|
||||
"minecraft:golden_hoe",
|
||||
"minecraft:iron_hoe",
|
||||
"minecraft:netherite_hoe",
|
||||
"minecraft:stone_hoe",
|
||||
"minecraft:wooden_hoe"
|
||||
],
|
||||
"minecraft:is_meat": [
|
||||
"minecraft:beef",
|
||||
"minecraft:chicken",
|
||||
"minecraft:cooked_beef",
|
||||
"minecraft:cooked_chicken",
|
||||
"minecraft:cooked_mutton",
|
||||
"minecraft:cooked_porkchop",
|
||||
"minecraft:cooked_rabbit",
|
||||
"minecraft:mutton",
|
||||
"minecraft:porkchop",
|
||||
"minecraft:rabbit",
|
||||
"minecraft:rabbit_stew",
|
||||
"minecraft:rotten_flesh"
|
||||
],
|
||||
"minecraft:is_minecart": [
|
||||
"minecraft:chest_minecart",
|
||||
"minecraft:command_block_minecart",
|
||||
"minecraft:hopper_minecart",
|
||||
"minecraft:minecart",
|
||||
"minecraft:tnt_minecart"
|
||||
],
|
||||
"minecraft:is_pickaxe": [
|
||||
"minecraft:diamond_pickaxe",
|
||||
"minecraft:golden_pickaxe",
|
||||
"minecraft:iron_pickaxe",
|
||||
"minecraft:netherite_pickaxe",
|
||||
"minecraft:stone_pickaxe",
|
||||
"minecraft:wooden_pickaxe"
|
||||
],
|
||||
"minecraft:is_shears": [
|
||||
"minecraft:shears"
|
||||
],
|
||||
"minecraft:is_shovel": [
|
||||
"minecraft:diamond_shovel",
|
||||
"minecraft:golden_shovel",
|
||||
"minecraft:iron_shovel",
|
||||
"minecraft:netherite_shovel",
|
||||
"minecraft:stone_shovel",
|
||||
"minecraft:wooden_shovel"
|
||||
],
|
||||
"minecraft:is_sword": [
|
||||
"minecraft:diamond_sword",
|
||||
"minecraft:golden_sword",
|
||||
"minecraft:iron_sword",
|
||||
"minecraft:mace",
|
||||
"minecraft:netherite_sword",
|
||||
"minecraft:stone_sword",
|
||||
"minecraft:wooden_sword"
|
||||
],
|
||||
"minecraft:is_tool": [
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:diamond_hoe",
|
||||
"minecraft:diamond_pickaxe",
|
||||
"minecraft:diamond_shovel",
|
||||
"minecraft:diamond_sword",
|
||||
"minecraft:golden_axe",
|
||||
"minecraft:golden_hoe",
|
||||
"minecraft:golden_pickaxe",
|
||||
"minecraft:golden_shovel",
|
||||
"minecraft:golden_sword",
|
||||
"minecraft:iron_axe",
|
||||
"minecraft:iron_hoe",
|
||||
"minecraft:iron_pickaxe",
|
||||
"minecraft:iron_shovel",
|
||||
"minecraft:iron_sword",
|
||||
"minecraft:mace",
|
||||
"minecraft:netherite_axe",
|
||||
"minecraft:netherite_hoe",
|
||||
"minecraft:netherite_pickaxe",
|
||||
"minecraft:netherite_shovel",
|
||||
"minecraft:netherite_sword",
|
||||
"minecraft:stone_axe",
|
||||
"minecraft:stone_hoe",
|
||||
"minecraft:stone_pickaxe",
|
||||
"minecraft:stone_shovel",
|
||||
"minecraft:stone_sword",
|
||||
"minecraft:wooden_axe",
|
||||
"minecraft:wooden_hoe",
|
||||
"minecraft:wooden_pickaxe",
|
||||
"minecraft:wooden_shovel",
|
||||
"minecraft:wooden_sword"
|
||||
],
|
||||
"minecraft:is_trident": [
|
||||
"minecraft:trident"
|
||||
],
|
||||
"minecraft:leather_tier": [
|
||||
"minecraft:leather_boots",
|
||||
"minecraft:leather_chestplate",
|
||||
"minecraft:leather_helmet",
|
||||
"minecraft:leather_leggings"
|
||||
],
|
||||
"minecraft:lectern_books": [
|
||||
"minecraft:writable_book"
|
||||
],
|
||||
"minecraft:logs": [
|
||||
"minecraft:acacia_log",
|
||||
"minecraft:acacia_wood",
|
||||
"minecraft:birch_log",
|
||||
"minecraft:birch_wood",
|
||||
"minecraft:cherry_log",
|
||||
"minecraft:cherry_wood",
|
||||
"minecraft:crimson_hyphae",
|
||||
"minecraft:crimson_stem",
|
||||
"minecraft:dark_oak_log",
|
||||
"minecraft:dark_oak_wood",
|
||||
"minecraft:jungle_log",
|
||||
"minecraft:jungle_wood",
|
||||
"minecraft:mangrove_log",
|
||||
"minecraft:mangrove_wood",
|
||||
"minecraft:oak_log",
|
||||
"minecraft:oak_wood",
|
||||
"minecraft:pale_oak_log",
|
||||
"minecraft:pale_oak_wood",
|
||||
"minecraft:spruce_log",
|
||||
"minecraft:spruce_wood",
|
||||
"minecraft:stripped_acacia_log",
|
||||
"minecraft:stripped_acacia_wood",
|
||||
"minecraft:stripped_birch_log",
|
||||
"minecraft:stripped_birch_wood",
|
||||
"minecraft:stripped_cherry_log",
|
||||
"minecraft:stripped_cherry_wood",
|
||||
"minecraft:stripped_crimson_hyphae",
|
||||
"minecraft:stripped_crimson_stem",
|
||||
"minecraft:stripped_dark_oak_log",
|
||||
"minecraft:stripped_dark_oak_wood",
|
||||
"minecraft:stripped_jungle_log",
|
||||
"minecraft:stripped_jungle_wood",
|
||||
"minecraft:stripped_mangrove_log",
|
||||
"minecraft:stripped_mangrove_wood",
|
||||
"minecraft:stripped_oak_log",
|
||||
"minecraft:stripped_oak_wood",
|
||||
"minecraft:stripped_pale_oak_log",
|
||||
"minecraft:stripped_pale_oak_wood",
|
||||
"minecraft:stripped_spruce_log",
|
||||
"minecraft:stripped_spruce_wood",
|
||||
"minecraft:stripped_warped_hyphae",
|
||||
"minecraft:stripped_warped_stem",
|
||||
"minecraft:warped_hyphae",
|
||||
"minecraft:warped_stem"
|
||||
],
|
||||
"minecraft:logs_that_burn": [
|
||||
"minecraft:acacia_log",
|
||||
"minecraft:acacia_wood",
|
||||
"minecraft:birch_log",
|
||||
"minecraft:birch_wood",
|
||||
"minecraft:cherry_log",
|
||||
"minecraft:cherry_wood",
|
||||
"minecraft:dark_oak_log",
|
||||
"minecraft:dark_oak_wood",
|
||||
"minecraft:jungle_log",
|
||||
"minecraft:jungle_wood",
|
||||
"minecraft:mangrove_log",
|
||||
"minecraft:mangrove_wood",
|
||||
"minecraft:oak_log",
|
||||
"minecraft:oak_wood",
|
||||
"minecraft:pale_oak_log",
|
||||
"minecraft:pale_oak_wood",
|
||||
"minecraft:spruce_log",
|
||||
"minecraft:spruce_wood",
|
||||
"minecraft:stripped_acacia_log",
|
||||
"minecraft:stripped_acacia_wood",
|
||||
"minecraft:stripped_birch_log",
|
||||
"minecraft:stripped_birch_wood",
|
||||
"minecraft:stripped_cherry_log",
|
||||
"minecraft:stripped_cherry_wood",
|
||||
"minecraft:stripped_dark_oak_log",
|
||||
"minecraft:stripped_dark_oak_wood",
|
||||
"minecraft:stripped_jungle_log",
|
||||
"minecraft:stripped_jungle_wood",
|
||||
"minecraft:stripped_mangrove_log",
|
||||
"minecraft:stripped_mangrove_wood",
|
||||
"minecraft:stripped_oak_log",
|
||||
"minecraft:stripped_oak_wood",
|
||||
"minecraft:stripped_pale_oak_log",
|
||||
"minecraft:stripped_pale_oak_wood",
|
||||
"minecraft:stripped_spruce_log",
|
||||
"minecraft:stripped_spruce_wood"
|
||||
],
|
||||
"minecraft:mangrove_logs": [
|
||||
"minecraft:mangrove_log",
|
||||
"minecraft:mangrove_wood",
|
||||
"minecraft:stripped_mangrove_log",
|
||||
"minecraft:stripped_mangrove_wood"
|
||||
],
|
||||
"minecraft:music_disc": [
|
||||
"minecraft:music_disc_11",
|
||||
"minecraft:music_disc_13",
|
||||
"minecraft:music_disc_5",
|
||||
"minecraft:music_disc_blocks",
|
||||
"minecraft:music_disc_cat",
|
||||
"minecraft:music_disc_chirp",
|
||||
"minecraft:music_disc_creator",
|
||||
"minecraft:music_disc_creator_music_box",
|
||||
"minecraft:music_disc_far",
|
||||
"minecraft:music_disc_mall",
|
||||
"minecraft:music_disc_mellohi",
|
||||
"minecraft:music_disc_otherside",
|
||||
"minecraft:music_disc_pigstep",
|
||||
"minecraft:music_disc_precipice",
|
||||
"minecraft:music_disc_relic",
|
||||
"minecraft:music_disc_stal",
|
||||
"minecraft:music_disc_strad",
|
||||
"minecraft:music_disc_wait",
|
||||
"minecraft:music_disc_ward"
|
||||
],
|
||||
"minecraft:netherite_tier": [
|
||||
"minecraft:netherite_axe",
|
||||
"minecraft:netherite_boots",
|
||||
"minecraft:netherite_chestplate",
|
||||
"minecraft:netherite_helmet",
|
||||
"minecraft:netherite_hoe",
|
||||
"minecraft:netherite_leggings",
|
||||
"minecraft:netherite_pickaxe",
|
||||
"minecraft:netherite_shovel",
|
||||
"minecraft:netherite_sword"
|
||||
],
|
||||
"minecraft:planks": [
|
||||
"minecraft:acacia_planks",
|
||||
"minecraft:bamboo_planks",
|
||||
"minecraft:birch_planks",
|
||||
"minecraft:cherry_planks",
|
||||
"minecraft:crimson_planks",
|
||||
"minecraft:dark_oak_planks",
|
||||
"minecraft:jungle_planks",
|
||||
"minecraft:mangrove_planks",
|
||||
"minecraft:oak_planks",
|
||||
"minecraft:pale_oak_planks",
|
||||
"minecraft:spruce_planks",
|
||||
"minecraft:warped_planks"
|
||||
],
|
||||
"minecraft:sand": [
|
||||
"minecraft:red_sand",
|
||||
"minecraft:sand"
|
||||
],
|
||||
"minecraft:sign": [
|
||||
"minecraft:acacia_hanging_sign",
|
||||
"minecraft:acacia_sign",
|
||||
"minecraft:bamboo_hanging_sign",
|
||||
"minecraft:bamboo_sign",
|
||||
"minecraft:birch_hanging_sign",
|
||||
"minecraft:birch_sign",
|
||||
"minecraft:cherry_hanging_sign",
|
||||
"minecraft:cherry_sign",
|
||||
"minecraft:crimson_hanging_sign",
|
||||
"minecraft:crimson_sign",
|
||||
"minecraft:dark_oak_hanging_sign",
|
||||
"minecraft:dark_oak_sign",
|
||||
"minecraft:jungle_hanging_sign",
|
||||
"minecraft:jungle_sign",
|
||||
"minecraft:mangrove_hanging_sign",
|
||||
"minecraft:mangrove_sign",
|
||||
"minecraft:oak_hanging_sign",
|
||||
"minecraft:oak_sign",
|
||||
"minecraft:pale_oak_hanging_sign",
|
||||
"minecraft:pale_oak_sign",
|
||||
"minecraft:spruce_hanging_sign",
|
||||
"minecraft:spruce_sign",
|
||||
"minecraft:warped_hanging_sign",
|
||||
"minecraft:warped_sign"
|
||||
],
|
||||
"minecraft:soul_fire_base_blocks": [
|
||||
"minecraft:soul_sand",
|
||||
"minecraft:soul_soil"
|
||||
],
|
||||
"minecraft:spawn_egg": [
|
||||
"minecraft:allay_spawn_egg",
|
||||
"minecraft:armadillo_spawn_egg",
|
||||
"minecraft:axolotl_spawn_egg",
|
||||
"minecraft:bat_spawn_egg",
|
||||
"minecraft:bee_spawn_egg",
|
||||
"minecraft:blaze_spawn_egg",
|
||||
"minecraft:bogged_spawn_egg",
|
||||
"minecraft:breeze_spawn_egg",
|
||||
"minecraft:camel_spawn_egg",
|
||||
"minecraft:cat_spawn_egg",
|
||||
"minecraft:cave_spider_spawn_egg",
|
||||
"minecraft:chicken_spawn_egg",
|
||||
"minecraft:cod_spawn_egg",
|
||||
"minecraft:cow_spawn_egg",
|
||||
"minecraft:creaking_spawn_egg",
|
||||
"minecraft:creeper_spawn_egg",
|
||||
"minecraft:dolphin_spawn_egg",
|
||||
"minecraft:donkey_spawn_egg",
|
||||
"minecraft:drowned_spawn_egg",
|
||||
"minecraft:elder_guardian_spawn_egg",
|
||||
"minecraft:ender_dragon_spawn_egg",
|
||||
"minecraft:enderman_spawn_egg",
|
||||
"minecraft:endermite_spawn_egg",
|
||||
"minecraft:evoker_spawn_egg",
|
||||
"minecraft:fox_spawn_egg",
|
||||
"minecraft:frog_spawn_egg",
|
||||
"minecraft:ghast_spawn_egg",
|
||||
"minecraft:glow_squid_spawn_egg",
|
||||
"minecraft:goat_spawn_egg",
|
||||
"minecraft:guardian_spawn_egg",
|
||||
"minecraft:hoglin_spawn_egg",
|
||||
"minecraft:horse_spawn_egg",
|
||||
"minecraft:husk_spawn_egg",
|
||||
"minecraft:iron_golem_spawn_egg",
|
||||
"minecraft:llama_spawn_egg",
|
||||
"minecraft:magma_cube_spawn_egg",
|
||||
"minecraft:mooshroom_spawn_egg",
|
||||
"minecraft:mule_spawn_egg",
|
||||
"minecraft:ocelot_spawn_egg",
|
||||
"minecraft:panda_spawn_egg",
|
||||
"minecraft:parrot_spawn_egg",
|
||||
"minecraft:phantom_spawn_egg",
|
||||
"minecraft:pig_spawn_egg",
|
||||
"minecraft:piglin_brute_spawn_egg",
|
||||
"minecraft:piglin_spawn_egg",
|
||||
"minecraft:pillager_spawn_egg",
|
||||
"minecraft:polar_bear_spawn_egg",
|
||||
"minecraft:pufferfish_spawn_egg",
|
||||
"minecraft:rabbit_spawn_egg",
|
||||
"minecraft:ravager_spawn_egg",
|
||||
"minecraft:salmon_spawn_egg",
|
||||
"minecraft:sheep_spawn_egg",
|
||||
"minecraft:shulker_spawn_egg",
|
||||
"minecraft:silverfish_spawn_egg",
|
||||
"minecraft:skeleton_horse_spawn_egg",
|
||||
"minecraft:skeleton_spawn_egg",
|
||||
"minecraft:slime_spawn_egg",
|
||||
"minecraft:sniffer_spawn_egg",
|
||||
"minecraft:snow_golem_spawn_egg",
|
||||
"minecraft:spider_spawn_egg",
|
||||
"minecraft:squid_spawn_egg",
|
||||
"minecraft:stray_spawn_egg",
|
||||
"minecraft:strider_spawn_egg",
|
||||
"minecraft:tadpole_spawn_egg",
|
||||
"minecraft:trader_llama_spawn_egg",
|
||||
"minecraft:tropical_fish_spawn_egg",
|
||||
"minecraft:turtle_spawn_egg",
|
||||
"minecraft:vex_spawn_egg",
|
||||
"minecraft:villager_spawn_egg",
|
||||
"minecraft:vindicator_spawn_egg",
|
||||
"minecraft:wandering_trader_spawn_egg",
|
||||
"minecraft:warden_spawn_egg",
|
||||
"minecraft:witch_spawn_egg",
|
||||
"minecraft:wither_skeleton_spawn_egg",
|
||||
"minecraft:wither_spawn_egg",
|
||||
"minecraft:wolf_spawn_egg",
|
||||
"minecraft:zoglin_spawn_egg",
|
||||
"minecraft:zombie_horse_spawn_egg",
|
||||
"minecraft:zombie_pigman_spawn_egg",
|
||||
"minecraft:zombie_spawn_egg",
|
||||
"minecraft:zombie_villager_spawn_egg"
|
||||
],
|
||||
"minecraft:stone_bricks": [
|
||||
"minecraft:chiseled_stone_bricks",
|
||||
"minecraft:cracked_stone_bricks",
|
||||
"minecraft:mossy_stone_bricks",
|
||||
"minecraft:stone_bricks"
|
||||
],
|
||||
"minecraft:stone_crafting_materials": [
|
||||
"minecraft:blackstone",
|
||||
"minecraft:cobbled_deepslate",
|
||||
"minecraft:cobblestone"
|
||||
],
|
||||
"minecraft:stone_tier": [
|
||||
"minecraft:stone_axe",
|
||||
"minecraft:stone_hoe",
|
||||
"minecraft:stone_pickaxe",
|
||||
"minecraft:stone_shovel",
|
||||
"minecraft:stone_sword"
|
||||
],
|
||||
"minecraft:stone_tool_materials": [
|
||||
"minecraft:blackstone",
|
||||
"minecraft:cobbled_deepslate",
|
||||
"minecraft:cobblestone"
|
||||
],
|
||||
"minecraft:transform_materials": [
|
||||
"minecraft:netherite_ingot"
|
||||
],
|
||||
"minecraft:transform_templates": [
|
||||
"minecraft:netherite_upgrade_smithing_template"
|
||||
],
|
||||
"minecraft:transformable_items": [
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:diamond_boots",
|
||||
"minecraft:diamond_chestplate",
|
||||
"minecraft:diamond_helmet",
|
||||
"minecraft:diamond_hoe",
|
||||
"minecraft:diamond_leggings",
|
||||
"minecraft:diamond_pickaxe",
|
||||
"minecraft:diamond_shovel",
|
||||
"minecraft:diamond_sword",
|
||||
"minecraft:golden_boots"
|
||||
],
|
||||
"minecraft:trim_materials": [
|
||||
"minecraft:amethyst_shard",
|
||||
"minecraft:copper_ingot",
|
||||
"minecraft:diamond",
|
||||
"minecraft:emerald",
|
||||
"minecraft:gold_ingot",
|
||||
"minecraft:iron_ingot",
|
||||
"minecraft:lapis_lazuli",
|
||||
"minecraft:netherite_ingot",
|
||||
"minecraft:quartz",
|
||||
"minecraft:redstone",
|
||||
"minecraft:resin_brick"
|
||||
],
|
||||
"minecraft:trim_templates": [
|
||||
"minecraft:bolt_armor_trim_smithing_template",
|
||||
"minecraft:coast_armor_trim_smithing_template",
|
||||
"minecraft:dune_armor_trim_smithing_template",
|
||||
"minecraft:eye_armor_trim_smithing_template",
|
||||
"minecraft:flow_armor_trim_smithing_template",
|
||||
"minecraft:host_armor_trim_smithing_template",
|
||||
"minecraft:raiser_armor_trim_smithing_template",
|
||||
"minecraft:rib_armor_trim_smithing_template",
|
||||
"minecraft:sentry_armor_trim_smithing_template",
|
||||
"minecraft:shaper_armor_trim_smithing_template",
|
||||
"minecraft:silence_armor_trim_smithing_template",
|
||||
"minecraft:snout_armor_trim_smithing_template",
|
||||
"minecraft:spire_armor_trim_smithing_template",
|
||||
"minecraft:tide_armor_trim_smithing_template",
|
||||
"minecraft:vex_armor_trim_smithing_template",
|
||||
"minecraft:ward_armor_trim_smithing_template",
|
||||
"minecraft:wayfinder_armor_trim_smithing_template",
|
||||
"minecraft:wild_armor_trim_smithing_template"
|
||||
],
|
||||
"minecraft:trimmable_armors": [
|
||||
"minecraft:chainmail_boots",
|
||||
"minecraft:chainmail_chestplate",
|
||||
"minecraft:chainmail_helmet",
|
||||
"minecraft:chainmail_leggings",
|
||||
"minecraft:diamond_boots",
|
||||
"minecraft:diamond_chestplate",
|
||||
"minecraft:diamond_helmet",
|
||||
"minecraft:diamond_leggings",
|
||||
"minecraft:golden_boots",
|
||||
"minecraft:golden_chestplate",
|
||||
"minecraft:golden_helmet",
|
||||
"minecraft:golden_leggings",
|
||||
"minecraft:iron_boots",
|
||||
"minecraft:iron_chestplate",
|
||||
"minecraft:iron_helmet",
|
||||
"minecraft:iron_leggings",
|
||||
"minecraft:leather_boots",
|
||||
"minecraft:leather_chestplate",
|
||||
"minecraft:leather_helmet",
|
||||
"minecraft:leather_leggings",
|
||||
"minecraft:netherite_boots",
|
||||
"minecraft:netherite_chestplate",
|
||||
"minecraft:netherite_helmet",
|
||||
"minecraft:netherite_leggings",
|
||||
"minecraft:turtle_helmet"
|
||||
],
|
||||
"minecraft:vibration_damper": [
|
||||
"minecraft:black_carpet",
|
||||
"minecraft:black_wool",
|
||||
"minecraft:blue_carpet",
|
||||
"minecraft:blue_wool",
|
||||
"minecraft:brown_carpet",
|
||||
"minecraft:brown_wool",
|
||||
"minecraft:cyan_carpet",
|
||||
"minecraft:cyan_wool",
|
||||
"minecraft:gray_carpet",
|
||||
"minecraft:gray_wool",
|
||||
"minecraft:green_carpet",
|
||||
"minecraft:green_wool",
|
||||
"minecraft:light_blue_carpet",
|
||||
"minecraft:light_blue_wool",
|
||||
"minecraft:light_gray_carpet",
|
||||
"minecraft:light_gray_wool",
|
||||
"minecraft:lime_carpet",
|
||||
"minecraft:lime_wool",
|
||||
"minecraft:magenta_carpet",
|
||||
"minecraft:magenta_wool",
|
||||
"minecraft:orange_carpet",
|
||||
"minecraft:orange_wool",
|
||||
"minecraft:pink_carpet",
|
||||
"minecraft:pink_wool",
|
||||
"minecraft:purple_carpet",
|
||||
"minecraft:purple_wool",
|
||||
"minecraft:red_carpet",
|
||||
"minecraft:red_wool",
|
||||
"minecraft:white_carpet",
|
||||
"minecraft:white_wool",
|
||||
"minecraft:yellow_carpet",
|
||||
"minecraft:yellow_wool"
|
||||
],
|
||||
"minecraft:warped_stems": [
|
||||
"minecraft:stripped_warped_hyphae",
|
||||
"minecraft:stripped_warped_stem",
|
||||
"minecraft:warped_hyphae",
|
||||
"minecraft:warped_stem"
|
||||
],
|
||||
"minecraft:wooden_slabs": [
|
||||
"minecraft:acacia_slab",
|
||||
"minecraft:bamboo_slab",
|
||||
"minecraft:birch_slab",
|
||||
"minecraft:cherry_slab",
|
||||
"minecraft:crimson_slab",
|
||||
"minecraft:dark_oak_slab",
|
||||
"minecraft:jungle_slab",
|
||||
"minecraft:mangrove_slab",
|
||||
"minecraft:oak_slab",
|
||||
"minecraft:pale_oak_slab",
|
||||
"minecraft:spruce_slab",
|
||||
"minecraft:warped_slab"
|
||||
],
|
||||
"minecraft:wooden_tier": [
|
||||
"minecraft:wooden_axe",
|
||||
"minecraft:wooden_hoe",
|
||||
"minecraft:wooden_pickaxe",
|
||||
"minecraft:wooden_shovel",
|
||||
"minecraft:wooden_sword"
|
||||
],
|
||||
"minecraft:wool": [
|
||||
"minecraft:black_wool",
|
||||
"minecraft:blue_wool",
|
||||
"minecraft:brown_wool",
|
||||
"minecraft:cyan_wool",
|
||||
"minecraft:gray_wool",
|
||||
"minecraft:green_wool",
|
||||
"minecraft:light_blue_wool",
|
||||
"minecraft:light_gray_wool",
|
||||
"minecraft:lime_wool",
|
||||
"minecraft:magenta_wool",
|
||||
"minecraft:orange_wool",
|
||||
"minecraft:pink_wool",
|
||||
"minecraft:purple_wool",
|
||||
"minecraft:red_wool",
|
||||
"minecraft:white_wool",
|
||||
"minecraft:yellow_wool"
|
||||
]
|
||||
}
|
||||
10784
core/src/main/resources/bedrock/runtime_item_states.1_21_70.json
Normal file
10784
core/src/main/resources/bedrock/runtime_item_states.1_21_70.json
Normal file
File diff suppressed because it is too large
Load Diff
Submodule core/src/main/resources/mappings updated: 362665358e...7654aabd95
@@ -4,15 +4,15 @@ cumulus = "1.1.2"
|
||||
erosion = "1.1-20240521.000109-3"
|
||||
events = "1.1-SNAPSHOT"
|
||||
jackson = "2.17.0"
|
||||
fastutil = "8.5.2"
|
||||
fastutil = "8.5.15-SNAPSHOT"
|
||||
netty = "4.1.107.Final"
|
||||
netty-io-uring = "0.0.25.Final-SNAPSHOT"
|
||||
guava = "29.0-jre"
|
||||
gson = "2.3.1" # Provided by Spigot 1.8.8
|
||||
websocket = "1.5.1"
|
||||
protocol-connection = "3.0.0.Beta6-20250212.131009-3"
|
||||
protocol-common = "3.0.0.Beta6-20250212.131009-3"
|
||||
protocol-codec = "3.0.0.Beta6-20250212.131009-3"
|
||||
protocol-connection = "3.0.0.Beta6-20250324.162731-5"
|
||||
protocol-common = "3.0.0.Beta6-20250324.162731-5"
|
||||
protocol-codec = "3.0.0.Beta6-20250324.162731-5"
|
||||
raknet = "1.0.0.CR3-20250218.160705-18"
|
||||
minecraftauth = "4.1.1"
|
||||
mcprotocollib = "1.21.4-20250311.232133-24"
|
||||
@@ -68,12 +68,13 @@ jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-datab
|
||||
jackson-core = { group = "com.fasterxml.jackson.core", name = "jackson-core", version.ref = "jackson" }
|
||||
jackson-dataformat-yaml = { group = "com.fasterxml.jackson.dataformat", name = "jackson-dataformat-yaml", version.ref = "jackson" }
|
||||
|
||||
fastutil-int-int-maps = { group = "com.nukkitx.fastutil", name = "fastutil-int-int-maps", version.ref = "fastutil" }
|
||||
fastutil-int-long-maps = { group = "com.nukkitx.fastutil", name = "fastutil-int-long-maps", version.ref = "fastutil" }
|
||||
fastutil-int-byte-maps = { group = "com.nukkitx.fastutil", name = "fastutil-int-byte-maps", version.ref = "fastutil" }
|
||||
fastutil-int-boolean-maps = { group = "com.nukkitx.fastutil", name = "fastutil-int-boolean-maps", version.ref = "fastutil" }
|
||||
fastutil-object-int-maps = { group = "com.nukkitx.fastutil", name = "fastutil-object-int-maps", version.ref = "fastutil" }
|
||||
fastutil-object-object-maps = { group = "com.nukkitx.fastutil", name = "fastutil-object-object-maps", version.ref = "fastutil" }
|
||||
fastutil-int-int-maps = { group = "org.cloudburstmc.fastutil.maps", name = "int-int-maps", version.ref = "fastutil" }
|
||||
fastutil-int-long-maps = { group = "org.cloudburstmc.fastutil.maps", name = "int-long-maps", version.ref = "fastutil" }
|
||||
fastutil-int-byte-maps = { group = "org.cloudburstmc.fastutil.maps", name = "int-byte-maps", version.ref = "fastutil" }
|
||||
fastutil-int-boolean-maps = { group = "org.cloudburstmc.fastutil.maps", name = "int-boolean-maps", version.ref = "fastutil" }
|
||||
fastutil-object-int-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-int-maps", version.ref = "fastutil" }
|
||||
fastutil-object-object-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-object-maps", version.ref = "fastutil" }
|
||||
fastutil-long-object-maps = { group = "org.cloudburstmc.fastutil.maps", name = "long-object-maps", version.ref = "fastutil" }
|
||||
|
||||
adventure-text-serializer-gson = { group = "net.kyori", name = "adventure-text-serializer-gson", version.ref = "adventure" } # Remove when we remove our Adventure bump
|
||||
adventure-text-serializer-legacy = { group = "net.kyori", name = "adventure-text-serializer-legacy", version.ref = "adventure" }
|
||||
@@ -160,7 +161,7 @@ runpaper = { id = "xyz.jpenilla.run-paper", version.ref = "runtask" }
|
||||
|
||||
[bundles]
|
||||
jackson = [ "jackson-annotations", "jackson-databind", "jackson-dataformat-yaml" ]
|
||||
fastutil = [ "fastutil-int-int-maps", "fastutil-int-long-maps", "fastutil-int-byte-maps", "fastutil-int-boolean-maps", "fastutil-object-int-maps", "fastutil-object-object-maps" ]
|
||||
fastutil = [ "fastutil-int-int-maps", "fastutil-int-long-maps", "fastutil-long-object-maps", "fastutil-int-byte-maps", "fastutil-int-boolean-maps", "fastutil-object-int-maps", "fastutil-object-object-maps" ]
|
||||
adventure = [ "adventure-text-serializer-gson", "adventure-text-serializer-legacy", "adventure-text-serializer-plain" ]
|
||||
log4j = [ "log4j-api", "log4j-core", "log4j-slf4j2-impl", "log4j-iostreams", "log4j-jul" ]
|
||||
jline = [ "jline-terminal", "jline-terminal-jna", "jline-reader" ]
|
||||
|
||||
Reference in New Issue
Block a user