Start working on 22w42a

This commit is contained in:
Nassim Jahnke 2022-10-16 10:59:01 +02:00
parent 5bf8b59e91
commit 100901029e
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B
21 changed files with 1928 additions and 61 deletions

View File

@ -5,7 +5,7 @@ plugins {
allprojects {
group = "com.viaversion"
version = "4.4.3-SNAPSHOT"
version = "4.5.0-22w42a-SNAPSHOT"
description = "Allow older clients to join newer server versions."
}

View File

@ -47,6 +47,7 @@ import com.viaversion.viabackwards.protocol.protocol1_17_1to1_18.Protocol1_17_1T
import com.viaversion.viabackwards.protocol.protocol1_17to1_17_1.Protocol1_17To1_17_1;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.Protocol1_18_2To1_19;
import com.viaversion.viabackwards.protocol.protocol1_18to1_18_2.Protocol1_18To1_18_2;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_1To1_19_3;
import com.viaversion.viabackwards.protocol.protocol1_19to1_19_1.Protocol1_19To1_19_1;
import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10;
import com.viaversion.viaversion.api.Via;
@ -59,7 +60,7 @@ import java.util.logging.Logger;
public interface ViaBackwardsPlatform {
String MINIMUM_VV_VERSION = "4.4.2";
String MINIMUM_VV_VERSION = "4.5.0";
String IMPL_VERSION = "$IMPL_VERSION";
/**
@ -119,6 +120,8 @@ public interface ViaBackwardsPlatform {
protocolManager.registerProtocol(new Protocol1_18_2To1_19(), ProtocolVersion.v1_18_2, ProtocolVersion.v1_19);
protocolManager.registerProtocol(new Protocol1_19To1_19_1(), ProtocolVersion.v1_19, ProtocolVersion.v1_19_1);
protocolManager.registerProtocol(new Protocol1_19_1To1_19_3(), ProtocolVersion.v1_19_1, ProtocolVersion.v1_19_3);
}
/**

View File

@ -91,6 +91,11 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Entity
});
}
/**
* Returns a handler to track the current world and uncache entity data on world changes.
*
* @return handler to track the current world
*/
public PacketHandler worldTrackerHandlerByKey() {
return wrapper -> {
EntityTracker tracker = tracker(wrapper.user());

View File

@ -192,23 +192,17 @@ public class PlayerPacket1_13 extends RewriterBase<Protocol1_12_2To1_13> {
for (int j = 0; j < nProperties; j++) {
packetWrapper.passthrough(Type.STRING);
packetWrapper.passthrough(Type.STRING);
if (packetWrapper.passthrough(Type.BOOLEAN)) {
packetWrapper.passthrough(Type.STRING);
}
packetWrapper.passthrough(Type.OPTIONAL_STRING);
}
packetWrapper.passthrough(Type.VAR_INT);
packetWrapper.passthrough(Type.VAR_INT);
if (packetWrapper.passthrough(Type.BOOLEAN)) {
packetWrapper.passthrough(Type.COMPONENT);
}
packetWrapper.passthrough(Type.OPTIONAL_COMPONENT);
} else if (action == 1) { // Update Game Mode
packetWrapper.passthrough(Type.VAR_INT);
} else if (action == 2) { // Update Ping
packetWrapper.passthrough(Type.VAR_INT);
} else if (action == 3) { // Update Display Name
if (packetWrapper.passthrough(Type.BOOLEAN)) {
packetWrapper.passthrough(Type.COMPONENT);
}
packetWrapper.passthrough(Type.OPTIONAL_COMPONENT);
} else if (action == 4) { // Remove Player
storage.usernames().remove(uuid);
}

View File

@ -54,7 +54,7 @@ public class BlockItemPackets1_15 extends com.viaversion.viabackwards.api.rewrit
registerSetCooldown(ClientboundPackets1_15.COOLDOWN);
registerWindowItems(ClientboundPackets1_15.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
registerSetSlot(ClientboundPackets1_15.SET_SLOT, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_15.TRADE_LIST, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_15.TRADE_LIST);
registerEntityEquipment(ClientboundPackets1_15.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM);
registerAdvancements(ClientboundPackets1_15.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
registerClickWindow(ServerboundPackets1_14.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);

View File

@ -98,7 +98,7 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
registerSetCooldown(ClientboundPackets1_16.COOLDOWN);
registerWindowItems(ClientboundPackets1_16.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
registerSetSlot(ClientboundPackets1_16.SET_SLOT, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_16.TRADE_LIST, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_16.TRADE_LIST);
registerAdvancements(ClientboundPackets1_16.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_16.ACKNOWLEDGE_PLAYER_DIGGING);

View File

@ -221,25 +221,19 @@ public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
for (int j = 0; j < properties; j++) {
packetWrapper.passthrough(Type.STRING);
packetWrapper.passthrough(Type.STRING);
if (packetWrapper.passthrough(Type.BOOLEAN)) {
packetWrapper.passthrough(Type.STRING);
}
packetWrapper.passthrough(Type.OPTIONAL_STRING);
}
packetWrapper.passthrough(Type.VAR_INT);
packetWrapper.passthrough(Type.VAR_INT);
if (packetWrapper.passthrough(Type.BOOLEAN)) {
// Display Name
protocol.getTranslatableRewriter().processText(packetWrapper.passthrough(Type.COMPONENT));
}
// Display Name
protocol.getTranslatableRewriter().processText(packetWrapper.passthrough(Type.OPTIONAL_COMPONENT));
} else if (action == 1) { // Update Game Mode
packetWrapper.passthrough(Type.VAR_INT);
} else if (action == 2) { // Update Ping
packetWrapper.passthrough(Type.VAR_INT);
} else if (action == 3) { // Update Display Name
if (packetWrapper.passthrough(Type.BOOLEAN)) {
// Display name
protocol.getTranslatableRewriter().processText(packetWrapper.passthrough(Type.COMPONENT));
}
// Display name
protocol.getTranslatableRewriter().processText(packetWrapper.passthrough(Type.OPTIONAL_COMPONENT));
} // 4 = Remove Player
}
});

View File

@ -51,8 +51,8 @@ public class BlockItemPackets1_16_2 extends com.viaversion.viabackwards.api.rewr
registerSetCooldown(ClientboundPackets1_16_2.COOLDOWN);
registerWindowItems(ClientboundPackets1_16_2.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
registerSetSlot(ClientboundPackets1_16_2.SET_SLOT, Type.FLAT_VAR_INT_ITEM);
registerEntityEquipmentArray(ClientboundPackets1_16_2.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_16_2.TRADE_LIST, Type.FLAT_VAR_INT_ITEM);
registerEntityEquipmentArray(ClientboundPackets1_16_2.ENTITY_EQUIPMENT);
registerTradeList(ClientboundPackets1_16_2.TRADE_LIST);
registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
protocol.registerClientbound(ClientboundPackets1_16_2.UNLOCK_RECIPES, new PacketRemapper() {

View File

@ -66,8 +66,8 @@ public final class BlockItemPackets1_17 extends ItemRewriter<Protocol1_16_4To1_1
registerSetCooldown(ClientboundPackets1_17.COOLDOWN);
registerWindowItems(ClientboundPackets1_17.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY);
registerEntityEquipmentArray(ClientboundPackets1_17.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_17.TRADE_LIST, Type.FLAT_VAR_INT_ITEM);
registerEntityEquipmentArray(ClientboundPackets1_17.ENTITY_EQUIPMENT);
registerTradeList(ClientboundPackets1_17.TRADE_LIST);
registerAdvancements(ClientboundPackets1_17.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_17.ACKNOWLEDGE_PLAYER_DIGGING);

View File

@ -58,12 +58,12 @@ public final class BlockItemPackets1_18 extends ItemRewriter<Protocol1_17_1To1_1
new RecipeRewriter1_16(protocol).registerDefaultHandler(ClientboundPackets1_18.DECLARE_RECIPES);
registerSetCooldown(ClientboundPackets1_18.COOLDOWN);
registerWindowItems1_17_1(ClientboundPackets1_18.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT, Type.FLAT_VAR_INT_ITEM);
registerSetSlot1_17_1(ClientboundPackets1_18.SET_SLOT, Type.FLAT_VAR_INT_ITEM);
registerEntityEquipmentArray(ClientboundPackets1_18.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM);
registerTradeList(ClientboundPackets1_18.TRADE_LIST, Type.FLAT_VAR_INT_ITEM);
registerWindowItems1_17_1(ClientboundPackets1_18.WINDOW_ITEMS);
registerSetSlot1_17_1(ClientboundPackets1_18.SET_SLOT);
registerEntityEquipmentArray(ClientboundPackets1_18.ENTITY_EQUIPMENT);
registerTradeList(ClientboundPackets1_18.TRADE_LIST);
registerAdvancements(ClientboundPackets1_18.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW);
protocol.registerClientbound(ClientboundPackets1_18.EFFECT, new PacketRemapper() {
@Override

View File

@ -49,11 +49,11 @@ public final class BlockItemPackets1_19 extends ItemRewriter<Protocol1_18_2To1_1
new RecipeRewriter1_16(protocol).registerDefaultHandler(ClientboundPackets1_19.DECLARE_RECIPES);
registerSetCooldown(ClientboundPackets1_19.COOLDOWN);
registerWindowItems1_17_1(ClientboundPackets1_19.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT, Type.FLAT_VAR_INT_ITEM);
registerSetSlot1_17_1(ClientboundPackets1_19.SET_SLOT, Type.FLAT_VAR_INT_ITEM);
registerEntityEquipmentArray(ClientboundPackets1_19.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM);
registerWindowItems1_17_1(ClientboundPackets1_19.WINDOW_ITEMS);
registerSetSlot1_17_1(ClientboundPackets1_19.SET_SLOT);
registerEntityEquipmentArray(ClientboundPackets1_19.ENTITY_EQUIPMENT);
registerAdvancements(ClientboundPackets1_19.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW);
blockRewriter.registerBlockAction(ClientboundPackets1_19.BLOCK_ACTION);
blockRewriter.registerBlockChange(ClientboundPackets1_19.BLOCK_CHANGE);

View File

@ -219,25 +219,19 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
for (int j = 0; j < properties; j++) {
wrapper.passthrough(Type.STRING); // Name
wrapper.passthrough(Type.STRING); // Value
if (wrapper.passthrough(Type.BOOLEAN)) {
wrapper.passthrough(Type.STRING); // Signature
}
wrapper.passthrough(Type.OPTIONAL_STRING); // Signature
}
wrapper.passthrough(Type.VAR_INT); // Gamemode
wrapper.passthrough(Type.VAR_INT); // Ping
if (wrapper.passthrough(Type.BOOLEAN)) {
wrapper.passthrough(Type.COMPONENT); // Display name
}
wrapper.passthrough(Type.OPTIONAL_COMPONENT); // Display name
// Remove public profile signature
wrapper.read(Type.OPTIONAL_PROFILE_KEY);
} else if (action == 1 || action == 2) { // Update gamemode/update latency
wrapper.passthrough(Type.VAR_INT);
} else if (action == 3) { // Update display name
if (wrapper.passthrough(Type.BOOLEAN)) {
wrapper.passthrough(Type.COMPONENT);
}
wrapper.passthrough(Type.OPTIONAL_COMPONENT);
}
}
});
@ -246,7 +240,7 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
}
@Override
public void onMappingDataLoaded() {
protected void registerRewrites() {
filter().handler((event, meta) -> {
if (meta.metaType().typeId() <= Types1_18.META_TYPES.poseType.typeId()) {
meta.setMetaType(Types1_18.META_TYPES.byId(meta.metaType().typeId()));
@ -282,8 +276,6 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
registerMetaTypeHandler(Types1_18.META_TYPES.itemType, Types1_18.META_TYPES.blockStateType, null, Types1_18.META_TYPES.optionalComponentType);
mapTypes();
filter().filterFamily(Entity1_19Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> {
final int data = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
@ -315,20 +307,23 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
filter().type(Entity1_19Types.FROG).cancel(16); // Age
filter().type(Entity1_19Types.FROG).cancel(17); // Variant
filter().type(Entity1_19Types.FROG).cancel(18); // Tongue target
mapEntityTypeWithData(Entity1_19Types.FROG, Entity1_19Types.RABBIT).jsonName();
mapEntityTypeWithData(Entity1_19Types.TADPOLE, Entity1_19Types.PUFFERFISH).jsonName();
mapEntityTypeWithData(Entity1_19Types.CHEST_BOAT, Entity1_19Types.BOAT);
filter().type(Entity1_19Types.WARDEN).cancel(16); // Anger
mapEntityTypeWithData(Entity1_19Types.WARDEN, Entity1_19Types.IRON_GOLEM).jsonName();
mapEntityTypeWithData(Entity1_19Types.ALLAY, Entity1_19Types.VEX).jsonName();
filter().type(Entity1_19Types.GOAT).cancel(18);
filter().type(Entity1_19Types.GOAT).cancel(19);
}
@Override
public void onMappingDataLoaded() {
mapTypes();
mapEntityTypeWithData(Entity1_19Types.FROG, Entity1_19Types.RABBIT).jsonName();
mapEntityTypeWithData(Entity1_19Types.TADPOLE, Entity1_19Types.PUFFERFISH).jsonName();
mapEntityTypeWithData(Entity1_19Types.CHEST_BOAT, Entity1_19Types.BOAT);
mapEntityTypeWithData(Entity1_19Types.WARDEN, Entity1_19Types.IRON_GOLEM).jsonName();
mapEntityTypeWithData(Entity1_19Types.ALLAY, Entity1_19Types.VEX).jsonName();
}
@Override
public EntityType typeFromId(final int typeId) {
return Entity1_19Types.getTypeFromId(typeId);

View File

@ -0,0 +1,322 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3;
import com.google.common.base.Preconditions;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.BackwardsMappings;
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.packets.BlockItemPackets1_19_3;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.packets.EntityPackets1_19_3;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage.ChatSessionStorage;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage.NonceStorage;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.ProfileKey;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.rewriter.EntityRewriter;
import com.viaversion.viaversion.api.rewriter.ItemRewriter;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.BitSetType;
import com.viaversion.viaversion.api.type.types.ByteArrayType;
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.kyori.adventure.text.Component;
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1;
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ServerboundPackets1_19_1;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.Protocol1_19_3To1_19_1;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ServerboundPackets1_19_3;
import com.viaversion.viaversion.rewriter.CommandRewriter;
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
import com.viaversion.viaversion.rewriter.TagRewriter;
import com.viaversion.viaversion.util.CipherUtil;
import java.util.BitSet;
public final class Protocol1_19_1To1_19_3 extends BackwardsProtocol<ClientboundPackets1_19_3, ClientboundPackets1_19_1, ServerboundPackets1_19_3, ServerboundPackets1_19_1> {
public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.19.3", "1.19", Protocol1_19_3To1_19_1.class, true);
private static final ByteArrayType.OptionalByteArrayType OPTIONAL_SIGNATURE_BYTES_TYPE = new ByteArrayType.OptionalByteArrayType(256);
private static final ByteArrayType SIGNATURE_BYTES_TYPE = new ByteArrayType(256);
private static final byte[] EMPTY_BYTES = new byte[0];
private final EntityPackets1_19_3 entityRewriter = new EntityPackets1_19_3(this);
private final BlockItemPackets1_19_3 itemRewriter = new BlockItemPackets1_19_3(this);
private final TranslatableRewriter translatableRewriter = new TranslatableRewriter(this);
public Protocol1_19_1To1_19_3() {
super(ClientboundPackets1_19_3.class, ClientboundPackets1_19_1.class, ServerboundPackets1_19_3.class, ServerboundPackets1_19_1.class);
}
@Override
protected void registerPackets() {
// Make sure this protocol's mappingdata is loaded after ViaVersion has loaded theirs, since VB depends on it instead of duplicating all the data
executeAsyncAfterLoaded(Protocol1_19_3To1_19_1.class, () -> {
MAPPINGS.load();
entityRewriter.onMappingDataLoaded();
});
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_3.ACTIONBAR);
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_3.TITLE_TEXT);
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_3.TITLE_SUBTITLE);
translatableRewriter.registerBossBar(ClientboundPackets1_19_3.BOSSBAR);
translatableRewriter.registerDisconnect(ClientboundPackets1_19_3.DISCONNECT);
translatableRewriter.registerTabList(ClientboundPackets1_19_3.TAB_LIST);
translatableRewriter.registerOpenWindow(ClientboundPackets1_19_3.OPEN_WINDOW);
translatableRewriter.registerCombatKill(ClientboundPackets1_19_3.COMBAT_KILL);
translatableRewriter.registerPing();
itemRewriter.register();
entityRewriter.register();
final SoundRewriter soundRewriter = new SoundRewriter(this);
soundRewriter.registerStopSound(ClientboundPackets1_19_3.STOP_SOUND);
soundRewriter.registerSound(ClientboundPackets1_19_3.SOUND);
soundRewriter.registerSound(ClientboundPackets1_19_3.ENTITY_SOUND);
soundRewriter.registerNamedSound(ClientboundPackets1_19_3.NAMED_SOUND);
final TagRewriter tagRewriter = new TagRewriter(this);
tagRewriter.registerGeneric(ClientboundPackets1_19_3.TAGS);
new StatisticsRewriter(this).register(ClientboundPackets1_19_3.STATISTICS);
final CommandRewriter commandRewriter = new CommandRewriter(this);
registerClientbound(ClientboundPackets1_19_3.DECLARE_COMMANDS, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
final int size = wrapper.passthrough(Type.VAR_INT);
for (int i = 0; i < size; i++) {
final byte flags = wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
if ((flags & 0x08) != 0) {
wrapper.passthrough(Type.VAR_INT); // Redirect node index
}
final int nodeType = flags & 0x03;
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
wrapper.passthrough(Type.STRING); // Name
}
if (nodeType == 2) { // Argument node
final int argumentTypeId = wrapper.read(Type.VAR_INT);
final int mappedArgumentTypeId = MAPPINGS.getArgumentTypeMappings().mappings().getNewId(argumentTypeId);
Preconditions.checkArgument(mappedArgumentTypeId != -1, "Unknown command argument type id: " + argumentTypeId);
wrapper.write(Type.VAR_INT, mappedArgumentTypeId);
final String identifier = MAPPINGS.getArgumentTypeMappings().identifier(argumentTypeId);
commandRewriter.handleArgument(wrapper, identifier);
if ((flags & 0x10) != 0) {
wrapper.passthrough(Type.STRING); // Suggestion type
}
}
}
wrapper.passthrough(Type.VAR_INT); // Root node index
});
}
});
registerClientbound(ClientboundPackets1_19_3.SERVER_DATA, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.OPTIONAL_COMPONENT); // Motd
map(Type.OPTIONAL_STRING); // Encoded icon
create(Type.BOOLEAN, false); // Previews chat
}
});
// Remove the key once again
registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING); // Name
handler(wrapper -> {
wrapper.write(Type.UUID, wrapper.user().get(ChatSessionStorage.class).uuid()); // Session UUID
final ProfileKey profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
wrapper.write(Type.OPTIONAL_PROFILE_KEY, null);
if (profileKey == null) {
wrapper.user().put(new NonceStorage(null));
}
});
}
});
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO.getId(), ClientboundLoginPackets.HELLO.getId(), new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING); // Server id
handler(wrapper -> {
if (wrapper.user().has(NonceStorage.class)) {
return;
}
final byte[] publicKey = wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE);
final byte[] nonce = wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE);
wrapper.user().put(new NonceStorage(CipherUtil.encryptNonce(publicKey, nonce)));
});
}
});
registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketRemapper() {
@Override
public void registerMap() {
map(Type.BYTE_ARRAY_PRIMITIVE); // Keys
handler(wrapper -> {
final NonceStorage nonceStorage = wrapper.user().remove(NonceStorage.class);
if (nonceStorage.nonce() == null) {
return;
}
final boolean isNonce = wrapper.read(Type.BOOLEAN);
wrapper.write(Type.BOOLEAN, true);
if (!isNonce) { // Should never be true at this point, but /shrug otherwise
wrapper.read(Type.LONG); // Salt
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, nonceStorage.nonce());
}
});
}
});
registerServerbound(ServerboundPackets1_19_1.CHAT_MESSAGE, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING); // Message
map(Type.LONG); // Timestamp
map(Type.LONG); // Salt
read(Type.BYTE_ARRAY_PRIMITIVE); // Signature
create(OPTIONAL_SIGNATURE_BYTES_TYPE, null); // No signature
read(Type.BOOLEAN); // Signed preview
read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen messages
read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message
handler(wrapper -> {
//TODO is this fine (probably not)?
final int offset = 0;
final BitSet acknowledged = new BitSet(20);
wrapper.write(Type.VAR_INT, offset);
wrapper.write(new BitSetType(20), acknowledged);
});
}
});
registerServerbound(ServerboundPackets1_19_1.CHAT_COMMAND, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING); // Command
map(Type.LONG); // Timestamp
map(Type.LONG); // Salt
handler(wrapper -> {
final int signatures = wrapper.read(Type.VAR_INT);
wrapper.write(Type.VAR_INT, 0);
for (int i = 0; i < signatures; i++) {
wrapper.read(Type.STRING); // Name
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature
}
wrapper.read(Type.BOOLEAN); // Signed preview
//TODO is this fine (probably not)?
final int offset = 0;
final BitSet acknowledged = new BitSet(20);
wrapper.write(Type.VAR_INT, offset);
wrapper.write(new BitSetType(20), acknowledged);
});
read(Type.PLAYER_MESSAGE_SIGNATURE_ARRAY); // Last seen messages
read(Type.OPTIONAL_PLAYER_MESSAGE_SIGNATURE); // Last received message
}
});
registerClientbound(ClientboundPackets1_19_3.PLAYER_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketRemapper() {
@Override
public void registerMap() {
read(Type.UUID); // Sender
read(Type.VAR_INT); // Index
read(OPTIONAL_SIGNATURE_BYTES_TYPE); // Signature
handler(wrapper -> {
final String plainContent = wrapper.read(Type.STRING);
wrapper.read(Type.LONG); // Timestamp
wrapper.read(Type.LONG); // Salt
final int lastSeen = wrapper.read(Type.VAR_INT);
for (int i = 0; i < lastSeen; i++) {
final int index = wrapper.read(Type.VAR_INT);
if (index == 0) {
wrapper.read(SIGNATURE_BYTES_TYPE);
}
}
final JsonElement unsignedContent = wrapper.read(Type.OPTIONAL_COMPONENT);
final JsonElement content = unsignedContent != null ? unsignedContent : GsonComponentSerializer.gson().serializeToTree(Component.text(plainContent));
wrapper.write(Type.COMPONENT, content);
wrapper.write(Type.BOOLEAN, false);
final int filterMaskType = wrapper.read(Type.VAR_INT);
if (filterMaskType == 2) {
wrapper.read(Type.LONG_ARRAY_PRIMITIVE); // Mask
}
//TODO chat type handling
wrapper.read(Type.VAR_INT);
wrapper.read(Type.COMPONENT);
wrapper.read(Type.OPTIONAL_COMPONENT);
});
}
});
registerClientbound(ClientboundPackets1_19_3.DISGUISED_CHAT, ClientboundPackets1_19_1.SYSTEM_CHAT, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.COMPONENT);
//TODO chat type handling
read(Type.VAR_INT); // Chat type
read(Type.COMPONENT); // Sender
read(Type.OPTIONAL_COMPONENT); // Target
create(Type.BOOLEAN, false); // Overlay
}
});
cancelClientbound(ClientboundPackets1_19_3.UPDATE_ENABLED_FEATURES);
cancelServerbound(ServerboundPackets1_19_1.CHAT_PREVIEW);
cancelServerbound(ServerboundPackets1_19_1.CHAT_ACK);
}
@Override
public void init(final UserConnection user) {
user.put(new ChatSessionStorage());
addEntityTracker(user, new EntityTrackerBase(user, Entity1_19Types.PLAYER, true));
}
@Override
public BackwardsMappings getMappingData() {
return MAPPINGS;
}
@Override
public TranslatableRewriter getTranslatableRewriter() {
return translatableRewriter;
}
@Override
public ItemRewriter getItemRewriter() {
return itemRewriter;
}
@Override
public EntityRewriter getEntityRewriter() {
return entityRewriter;
}
}

View File

@ -0,0 +1,141 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.packets;
import com.viaversion.viabackwards.api.rewriters.ItemRewriter;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_1To1_19_3;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type;
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ServerboundPackets1_19_1;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
import com.viaversion.viaversion.rewriter.BlockRewriter;
public final class BlockItemPackets1_19_3 extends ItemRewriter<Protocol1_19_1To1_19_3> {
public BlockItemPackets1_19_3(final Protocol1_19_1To1_19_3 protocol) {
super(protocol);
}
@Override
protected void registerPackets() {
final BlockRewriter blockRewriter = new BlockRewriter(protocol, Type.POSITION1_14);
blockRewriter.registerBlockAction(ClientboundPackets1_19_3.BLOCK_ACTION);
blockRewriter.registerBlockChange(ClientboundPackets1_19_3.BLOCK_CHANGE);
blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_19_3.MULTI_BLOCK_CHANGE);
blockRewriter.registerEffect(ClientboundPackets1_19_3.EFFECT, 1010, 2001);
blockRewriter.registerChunkData1_19(ClientboundPackets1_19_3.CHUNK_DATA, Chunk1_18Type::new);
blockRewriter.registerBlockEntityData(ClientboundPackets1_19_3.BLOCK_ENTITY_DATA);
registerSetCooldown(ClientboundPackets1_19_3.COOLDOWN);
registerWindowItems1_17_1(ClientboundPackets1_19_3.WINDOW_ITEMS);
registerSetSlot1_17_1(ClientboundPackets1_19_3.SET_SLOT);
registerEntityEquipmentArray(ClientboundPackets1_19_3.ENTITY_EQUIPMENT);
registerAdvancements(ClientboundPackets1_19_3.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_19_1.CLICK_WINDOW);
registerTradeList1_19(ClientboundPackets1_19_3.TRADE_LIST);
registerCreativeInvAction(ServerboundPackets1_19_1.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM);
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_3.WINDOW_PROPERTY);
registerSpawnParticle1_19(ClientboundPackets1_19_3.SPAWN_PARTICLE);
protocol.registerClientbound(ClientboundPackets1_19_3.EXPLOSION, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.DOUBLE, Type.FLOAT); // X
map(Type.DOUBLE, Type.FLOAT); // Y
map(Type.DOUBLE, Type.FLOAT); // Z
}
});
final RecipeRewriter1_16 recipeRewriter = new RecipeRewriter1_16(protocol);
protocol.registerClientbound(ClientboundPackets1_19_3.DECLARE_RECIPES, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
final int size = wrapper.passthrough(Type.VAR_INT);
for (int i = 0; i < size; i++) {
final String type = wrapper.passthrough(Type.STRING).replace("minecraft:", "");
wrapper.passthrough(Type.STRING); // Recipe Identifier
switch (type) {
case "crafting_shapeless": {
wrapper.passthrough(Type.STRING); // Group
wrapper.read(Type.VAR_INT); // Crafting book category
final int ingredients = wrapper.passthrough(Type.VAR_INT);
for (int j = 0; j < ingredients; j++) {
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
for (final Item item : items) {
handleItemToClient(item);
}
}
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
break;
}
case "crafting_shaped": {
final int ingredients = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
wrapper.passthrough(Type.STRING); // Group
wrapper.read(Type.VAR_INT); // Crafting book category
for (int j = 0; j < ingredients; j++) {
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
for (final Item item : items) {
handleItemToClient(item);
}
}
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
break;
}
case "smelting":
case "campfire_cooking":
case "blasting":
case "smoking":
wrapper.passthrough(Type.STRING); // Group
wrapper.read(Type.VAR_INT); // Crafting book category
final Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients
for (final Item item : items) {
handleItemToClient(item);
}
handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result
wrapper.passthrough(Type.FLOAT); // EXP
wrapper.passthrough(Type.VAR_INT); // Cooking time
break;
case "crafting_special_armordye":
case "crafting_special_bookcloning":
case "crafting_special_mapcloning":
case "crafting_special_mapextending":
case "crafting_special_firework_rocket":
case "crafting_special_firework_star":
case "crafting_special_firework_star_fade":
case "crafting_special_tippedarrow":
case "crafting_special_bannerduplicate":
case "crafting_special_shielddecoration":
case "crafting_special_shulkerboxcoloring":
case "crafting_special_suspiciousstew":
case "crafting_special_repairitem":
wrapper.read(Type.VAR_INT); // Crafting book category
break;
default:
recipeRewriter.handle(wrapper, type);
break;
}
}
});
}
});
}
}

View File

@ -0,0 +1,192 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.packets;
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_1To1_19_3;
import com.viaversion.viaversion.api.minecraft.ProfileKey;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.BitSetType;
import com.viaversion.viaversion.api.type.types.version.Types1_19;
import com.viaversion.viaversion.api.type.types.version.Types1_19_3;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ClientboundPackets1_19_1;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
import java.util.BitSet;
import java.util.UUID;
public final class EntityPackets1_19_3 extends EntityRewriter<Protocol1_19_1To1_19_3> {
private static final BitSetType PROFILE_ACTIONS_ENUM_TYPE = new BitSetType(6);
private static final int[] PROFILE_ACTIONS = {0, 2, 4, 5}; // Ignore initialize chat and listed status
public EntityPackets1_19_3(final Protocol1_19_1To1_19_3 protocol) {
super(protocol);
}
@Override
protected void registerPackets() {
registerMetadataRewriter(ClientboundPackets1_19_3.ENTITY_METADATA, Types1_19_3.METADATA_LIST, Types1_19.METADATA_LIST);
registerRemoveEntities(ClientboundPackets1_19_3.REMOVE_ENTITIES);
registerTrackerWithData1_19(ClientboundPackets1_19_3.SPAWN_ENTITY, Entity1_19_3Types.FALLING_BLOCK);
protocol.registerClientbound(ClientboundPackets1_19_3.JOIN_GAME, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.INT); // Entity id
map(Type.BOOLEAN); // Hardcore
map(Type.UNSIGNED_BYTE); // Gamemode
map(Type.BYTE); // Previous Gamemode
map(Type.STRING_ARRAY); // World List
map(Type.NBT); // Dimension registry
map(Type.STRING); // Dimension key
map(Type.STRING); // World
handler(dimensionDataHandler());
handler(biomeSizeTracker());
handler(worldDataTrackerHandlerByKey());
}
});
protocol.registerClientbound(ClientboundPackets1_19_3.RESPAWN, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.STRING); // Dimension
map(Type.STRING); // World
handler(worldDataTrackerHandlerByKey());
}
});
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_UPDATE, ClientboundPackets1_19_1.PLAYER_INFO, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
wrapper.cancel();
final BitSet actions = wrapper.read(PROFILE_ACTIONS_ENUM_TYPE);
final int entries = wrapper.read(Type.VAR_INT);
for (final int action : PROFILE_ACTIONS) {
if (!actions.get(action)) {
continue;
}
final PacketWrapper playerInfoPacket = wrapper.create(ClientboundPackets1_19_1.PLAYER_INFO);
if (action == 0) {
playerInfoPacket.write(Type.VAR_INT, 0);
} else if (action == 2) {
playerInfoPacket.write(Type.VAR_INT, 1);
} else {
playerInfoPacket.write(Type.VAR_INT, action - 2);
}
playerInfoPacket.write(Type.VAR_INT, entries);
playerInfoPacket.write(Type.UUID, wrapper.read(Type.UUID));
switch (action) {
case 0: // Add player
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Player Name
final int properties = wrapper.read(Type.VAR_INT);
playerInfoPacket.write(Type.VAR_INT, properties);
for (int j = 0; j < properties; j++) {
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Name
playerInfoPacket.write(Type.STRING, wrapper.read(Type.STRING)); // Value
playerInfoPacket.write(Type.OPTIONAL_STRING, wrapper.read(Type.OPTIONAL_STRING)); // Signature
}
// Now check for the other parts individually and add dummy values if not present
final ProfileKey profileKey;
if (actions.get(1)) {
wrapper.read(Type.UUID); // Session UUID
profileKey = wrapper.read(Type.OPTIONAL_PROFILE_KEY);
} else {
profileKey = null;
}
final int gamemode = actions.get(2) ? wrapper.read(Type.VAR_INT) : 0;
if (actions.get(3)) {
wrapper.read(Type.BOOLEAN); // Listed - throw away
}
final int latency = actions.get(4) ? wrapper.read(Type.VAR_INT) : 0;
final JsonElement displayName = actions.get(5) ? wrapper.read(Type.OPTIONAL_COMPONENT) : null;
playerInfoPacket.write(Type.VAR_INT, gamemode);
playerInfoPacket.write(Type.VAR_INT, latency);
playerInfoPacket.write(Type.OPTIONAL_COMPONENT, displayName);
playerInfoPacket.write(Type.OPTIONAL_PROFILE_KEY, profileKey);
playerInfoPacket.send(Protocol1_19_1To1_19_3.class);
return; // We're done
case 2: // Update gamemode
case 4: // Update latency
playerInfoPacket.write(Type.VAR_INT, wrapper.read(Type.VAR_INT));
break;
case 5: // Update display name
playerInfoPacket.write(Type.OPTIONAL_COMPONENT, wrapper.read(Type.OPTIONAL_COMPONENT));
break;
}
playerInfoPacket.send(Protocol1_19_1To1_19_3.class);
}
});
}
});
protocol.registerClientbound(ClientboundPackets1_19_3.PLAYER_INFO_REMOVE, ClientboundPackets1_19_1.PLAYER_INFO, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
final UUID[] uuids = wrapper.read(Type.UUID_ARRAY);
wrapper.write(Type.VAR_INT, 4); // Remove player
wrapper.write(Type.VAR_INT, uuids.length);
for (final UUID uuid : uuids) {
wrapper.write(Type.UUID, uuid);
}
});
}
});
}
@Override
public void registerRewrites() {
//TODO metadata oopsies
filter().handler((event, meta) -> {
final int id = meta.metaType().typeId();
meta.setMetaType(Types1_19.META_TYPES.byId(id > 2 ? id - 1 : id)); // long added
});
registerMetaTypeHandler(Types1_19.META_TYPES.itemType, Types1_19.META_TYPES.blockStateType, Types1_19.META_TYPES.particleType, Types1_19.META_TYPES.optionalComponentType);
filter().filterFamily(Entity1_19_3Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> {
final int data = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
});
filter().type(Entity1_19_3Types.CAMEL).cancel(19); // Dashing
filter().type(Entity1_19_3Types.CAMEL).cancel(20); // Last pose change time
}
@Override
public void onMappingDataLoaded() {
mapTypes();
mapEntityTypeWithData(Entity1_19_3Types.CAMEL, Entity1_19_3Types.DONKEY).jsonName();
}
@Override
public EntityType typeFromId(final int typeId) {
return Entity1_19_3Types.getTypeFromId(typeId);
}
}

View File

@ -0,0 +1,31 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage;
import com.viaversion.viaversion.api.connection.StorableObject;
import java.util.UUID;
public final class ChatSessionStorage implements StorableObject {
private final UUID uuid = UUID.randomUUID();
public UUID uuid() {
return uuid;
}
}

View File

@ -0,0 +1,34 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.storage;
import com.viaversion.viaversion.api.connection.StorableObject;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class NonceStorage implements StorableObject {
private final byte[] nonce;
public NonceStorage(final byte @Nullable[] nonce) {
this.nonce = nonce;
}
public byte @Nullable [] nonce() {
return nonce;
}
}

View File

@ -124,10 +124,7 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPac
@Override
public void registerMap() {
handler(wrapper -> {
if (wrapper.read(Type.BOOLEAN)) {
// Previous signature
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE);
}
wrapper.read(Type.OPTIONAL_BYTE_ARRAY_PRIMITIVE); // Previous signature
final PlayerMessageSignature signature = wrapper.read(Type.PLAYER_MESSAGE_SIGNATURE);

View File

@ -0,0 +1,837 @@
{
"blockstates": {
"minecraft:bamboo_planks": "minecraft:birch_planks",
"minecraft:bamboo_mosaic": "minecraft:birch_planks",
"minecraft:chiseled_bookshelf": "minecraft:bookshelf",
"minecraft:bamboo_sign": "minecraft:birch_sign[",
"minecraft:bamboo_wall_sign": "minecraft:birch_wall_sign[",
"minecraft:oak_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:oak_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:spruce_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:birch_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:acacia_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:jungle_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:dark_oak_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:crimson_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:warped_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:mangrove_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=0,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=0,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=1,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=1,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=2,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=2,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=3,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=3,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=4,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=4,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=5,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=5,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=6,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=6,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=7,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=7,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=8,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=8,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=9,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=9,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=10,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=10,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=11,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=11,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=12,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=12,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=13,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=13,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=14,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=14,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=15,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=true,rotation=15,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=0,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=0,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=1,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=1,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=2,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=2,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=3,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=3,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=4,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=4,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=5,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=5,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=6,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=6,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=7,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=7,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=8,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=8,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=9,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=9,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=10,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=10,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=11,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=11,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=12,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=12,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=13,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=13,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=14,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=14,waterlogged=false]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=15,waterlogged=true]": "",
"minecraft:bamboo_hanging_sign[attached=false,rotation=15,waterlogged=false]": "",
"minecraft:oak_wall_hanging_sign": "minecraft:oak_wall_sign[",
"minecraft:spruce_wall_hanging_sign": "minecraft:spruce_wall_sign[",
"minecraft:birch_wall_hanging_sign": "minecraft:birch_wall_sign[",
"minecraft:acacia_wall_hanging_sign": "minecraft:acacia_wall_sign[",
"minecraft:jungle_wall_hanging_sign": "minecraft:jungle_wall_sign[",
"minecraft:dark_oak_wall_hanging_sign": "minecraft:dark_oak_wall_sign[",
"minecraft:mangrove_wall_hanging_sign": "minecraft:mangrove_wall_sign[",
"minecraft:crimson_wall_hanging_sign": "minecraft:crimson_wall_sign[",
"minecraft:warped_wall_hanging_sign": "minecraft:warped_wall_sign[",
"minecraft:bamboo_wall_hanging_sign": "minecraft:birch_wall_sign[",
"minecraft:bamboo_pressure_plate": "minecraft:birch_pressure_plate[",
"minecraft:bamboo_trapdoor": "minecraft:birch_trapdoor[",
"minecraft:bamboo_button": "minecraft:birch_button[",
"minecraft:bamboo_stairs": "minecraft:birch_stairs[",
"minecraft:bamboo_mosaic_stairs": "minecraft:birch_stairs[",
"minecraft:bamboo_slab": "minecraft:birch_slab[",
"minecraft:bamboo_mosaic_slab": "minecraft:birch_slab[",
"minecraft:bamboo_fence_gate": "minecraft:birch_fence_gate[",
"minecraft:bamboo_door": "minecraft:birch_door["
},
"argumenttypes": {
"minecraft:resource_key": "minecraft:resource_or_tag",
"minecraft:resource_or_tag_key": "minecraft:resource_or_tag"
},
"blockentities": {
"hanging_sign": "sign",
"chiseled_bookshelf": ""
},
"items": {
"minecraft:bamboo_planks": {
"id": "minecraft:birch_planks",
"name": "1.19.3 Bamboo Planks"
},
"minecraft:bamboo_mosaic": {
"id": "minecraft:birch_planks",
"name": "1.19.3 Bamboo Mosaic"
},
"minecraft:bamboo_slab": {
"id": "minecraft:birch_slab",
"name": "1.19.3 Bamboo Slab"
},
"minecraft:bamboo_mosaic_slab": {
"id": "minecraft:birch_slab",
"name": "1.19.3 Bamboo Mosaic Slab"
},
"minecraft:chiseled_bookshelf": {
"id": "minecraft:bookshelf",
"name": "1.19.3 Chiseled Bookshelf"
},
"minecraft:bamboo_fence": {
"id": "minecraft:birch_fence",
"name": "1.19.3 Bamboo Fence"
},
"minecraft:bamboo_stairs": {
"id": "minecraft:birch_stairs",
"name": "1.19.3 Bamboo Stairs"
},
"minecraft:bamboo_mosaic_stairs": {
"id": "minecraft:birch_stairs",
"name": "1.19.3 Bamboo Mosaic Stairs"
},
"minecraft:bamboo_button": {
"id": "minecraft:birch_button",
"name": "1.19.3 Bamboo Button"
},
"minecraft:bamboo_pressure_plate": {
"id": "minecraft:birch_pressure_plate",
"name": "1.19.3 Bamboo Pressure Plate"
},
"minecraft:bamboo_door": {
"id": "minecraft:birch_door",
"name": "1.19.3 Bamboo Door"
},
"minecraft:bamboo_trapdoor": {
"id": "minecraft:birch_trapdoor",
"name": "1.19.3 Bamboo Trapdoor"
},
"minecraft:bamboo_fence_gate": {
"id": "minecraft:birch_fence_gate",
"name": "1.19.3 Bamboo Fence Gate"
},
"minecraft:bamboo_raft": {
"id": "minecraft:birch_boat",
"name": "1.19.3 Bamboo Raft"
},
"minecraft:bamboo_chest_raft": {
"id": "minecraft:birch_chest_boat",
"name": "1.19.3 Bamboo Chest Raft"
},
"minecraft:bamboo_sign": {
"id": "minecraft:birch_sign",
"name": "1.19.3 Bamboo Sign"
},
"minecraft:oak_hanging_sign": {
"id": "minecraft:birch_sign",
"name": "1.19.3 Oak Hanging Sign"
},
"minecraft:spruce_hanging_sign": {
"id": "minecraft:spruce_sign",
"name": "1.19.3 Spruce Hanging Sign"
},
"minecraft:birch_hanging_sign": {
"id": "minecraft:birch_sign",
"name": "1.19.3 Birch Hanging Sign"
},
"minecraft:jungle_hanging_sign": {
"id": "minecraft:jungle_sign",
"name": "1.19.3 Jungle Hanging Sign"
},
"minecraft:acacia_hanging_sign": {
"id": "minecraft:acacia_sign",
"name": "1.19.3 Acacia Hanging Sign"
},
"minecraft:dark_oak_hanging_sign": {
"id": "minecraft:dark_oak_sign",
"name": "1.19.3 Dark Oak Hanging Sign"
},
"minecraft:mangrove_hanging_sign": {
"id": "minecraft:mangrove_sign",
"name": "1.19.3 Mangrove Hanging Sign"
},
"minecraft:bamboo_hanging_sign": {
"id": "minecraft:birch_sign",
"name": "1.19.3 Bamboo Hanging Sign"
},
"minecraft:crimson_hanging_sign": {
"id": "minecraft:crimson_sign",
"name": "1.19.3 Crimson Hanging Sign"
},
"minecraft:warped_hanging_sign": {
"id": "minecraft:warped_sign",
"name": "1.19.3 Warped Hanging Sign"
},
"minecraft:camel_spawn_egg": {
"id": "minecraft:donkey_spawn_egg",
"name": "1.19.3 Camel Spawn Egg"
}
},
"sounds": {
"block.bamboo_wood.break": "",
"block.bamboo_wood.fall": "",
"block.bamboo_wood.hit": "",
"block.bamboo_wood.place": "",
"block.bamboo_wood.step": "",
"block.bamboo_wood_door.close": "",
"block.bamboo_wood_door.open": "",
"block.bamboo_wood_trapdoor.close": "",
"block.bamboo_wood_trapdoor.open": "",
"block.bamboo_wood_button.click_off": "",
"block.bamboo_wood_button.click_on": "",
"block.bamboo_wood_pressure_plate.click_off": "",
"block.bamboo_wood_pressure_plate.click_on": "",
"block.bamboo_wood_fence_gate.close": "",
"block.bamboo_wood_fence_gate.open": "",
"entity.camel.ambient": "",
"entity.camel.dash": "",
"entity.camel.dash_ready": "",
"entity.camel.death": "",
"entity.camel.eat": "",
"entity.camel.hurt": "",
"entity.camel.saddle": "",
"entity.camel.sit": "",
"entity.camel.stand": "",
"entity.camel.step": "",
"entity.camel.step_sand": "",
"block.hanging_sign.step": "",
"block.hanging_sign.break": "",
"block.hanging_sign.fall": "",
"block.hanging_sign.hit": "",
"block.hanging_sign.place": "",
"block.nether_wood.break": "",
"block.nether_wood.fall": "",
"block.nether_wood.hit": "",
"block.nether_wood.place": "",
"block.nether_wood.step": "",
"block.nether_wood_door.close": "",
"block.nether_wood_door.open": "",
"block.nether_wood_trapdoor.close": "",
"block.nether_wood_trapdoor.open": "",
"block.nether_wood_button.click_off": "",
"block.nether_wood_button.click_on": "",
"block.nether_wood_pressure_plate.click_off": "",
"block.nether_wood_pressure_plate.click_on": "",
"block.nether_wood_fence_gate.close": "",
"block.nether_wood_fence_gate.open": ""
},
"entitynames": {
"camel": "Camel"
}
}

View File

@ -1,4 +1,326 @@
{
"1.19.3": {
"selectWorld.experimental": "Experimental",
"selectWorld.warning.experimental.title": "Warning! These settings are using experimental features",
"selectWorld.warning.experimental.question": "These settings are experimental and could one day stop working. Do you wish to proceed?",
"selectWorld.warning.deprecated.title": "Warning! These settings are using deprecated features",
"selectWorld.warning.deprecated.question": "Some features used are deprecated and will stop working in the future. Do you wish to proceed?",
"selectWorld.experimental.title": "Experimental Features Warning",
"selectWorld.experimental.message": "Be careful!\nSome of the selected packs require features that are still under development. Your world might crash, break or not work with future updates.",
"selectWorld.experimental.details": "Details",
"selectWorld.experimental.details.title": "Experimental feature requirements",
"selectWorld.experimental.details.entry": "Required experimental features: %s",
"multiplayer.disconnect.expired_public_key": "Expired profile public key. Check that your system time is synchronized, and try restarting your game.",
"chat.disabled.expiredProfileKey": "Chat disabled due to expired profile public key. Please try reconnecting.",
"chat.disabled.chain_broken": "Chat disabled due to broken chain. Please try reconnecting.",
"chat.tag.system": "Server message. Cannot be reported.",
"chat.filtered": "Filtered by the server.",
"chat.deleted_marker": "This chat message has been deleted by the server.",
"options.accessibility.panorama_speed": "Panorama Scroll Speed",
"resourcePack.programmer_art.name": "Programmer Art",
"resourcePack.vanilla.name": "Default",
"dataPack.vanilla.name": "Default",
"dataPack.bundle.description": "Enables experimental Bundle item",
"dataPack.update_1_20.description": "New features and content for Minecraft 1.20",
"hanging_sign.edit": "Edit Hanging Sign Message",
"block.minecraft.bamboo_planks": "Bamboo Planks",
"block.minecraft.bamboo_mosaic": "Bamboo Mosaic",
"block.minecraft.bamboo_door": "Bamboo Door",
"block.minecraft.bamboo_slab": "Bamboo Slab",
"block.minecraft.bamboo_mosaic_slab": "Bamboo Mosaic Slab",
"block.minecraft.chiseled_bookshelf": "Chiseled Bookshelf",
"block.minecraft.bamboo_stairs": "Bamboo Stairs",
"block.minecraft.bamboo_mosaic_stairs": "Bamboo Mosaic Stairs",
"block.minecraft.bamboo_sign": "Bamboo Sign",
"block.minecraft.bamboo_wall_sign": "Bamboo Wall Sign",
"block.minecraft.oak_hanging_sign": "Oak Hanging Sign",
"block.minecraft.spruce_hanging_sign": "Spruce Hanging Sign",
"block.minecraft.birch_hanging_sign": "Birch Hanging Sign",
"block.minecraft.acacia_hanging_sign": "Acacia Hanging Sign",
"block.minecraft.jungle_hanging_sign": "Jungle Hanging Sign",
"block.minecraft.crimson_hanging_sign": "Crimson Hanging Sign",
"block.minecraft.warped_hanging_sign": "Warped Hanging Sign",
"block.minecraft.dark_oak_hanging_sign": "Dark Oak Hanging Sign",
"block.minecraft.mangrove_hanging_sign": "Mangrove Hanging Sign",
"block.minecraft.bamboo_hanging_sign": "Bamboo Hanging Sign",
"block.minecraft.oak_wall_hanging_sign": "Oak Wall Hanging Sign",
"block.minecraft.spruce_wall_hanging_sign": "Spruce Wall Hanging Sign",
"block.minecraft.birch_wall_hanging_sign": "Birch Wall Hanging Sign",
"block.minecraft.acacia_wall_hanging_sign": "Acacia Wall Hanging Sign",
"block.minecraft.jungle_wall_hanging_sign": "Jungle Wall Hanging Sign",
"block.minecraft.dark_oak_wall_hanging_sign": "Dark Oak Wall Hanging Sign",
"block.minecraft.mangrove_wall_hanging_sign": "Mangrove Wall Hanging Sign",
"block.minecraft.crimson_wall_hanging_sign": "Crimson Wall Hanging Sign",
"block.minecraft.warped_wall_hanging_sign": "Warped Wall Hanging Sign",
"block.minecraft.bamboo_wall_hanging_sign": "Bamboo Wall Hanging Sign",
"block.minecraft.bamboo_pressure_plate": "Bamboo Pressure Plate",
"block.minecraft.bamboo_button": "Bamboo Button",
"block.minecraft.bamboo_fence": "Bamboo Fence",
"block.minecraft.bamboo_fence_gate": "Bamboo Fence Gate",
"block.minecraft.bamboo_trapdoor": "Bamboo Trapdoor",
"item.minecraft.bamboo_raft": "Bamboo Raft",
"item.minecraft.bamboo_chest_raft": "Bamboo Raft with Chest",
"item.minecraft.camel_spawn_egg": "Camel Spawn Egg",
"item.disabled": "Disabled item",
"entity.minecraft.camel": "Camel",
"itemGroup.nature": "Nature Blocks",
"itemGroup.functional": "Functional Blocks",
"itemGroup.spawnEggs": "Spawn Eggs",
"itemGroup.consumables": "Consumables",
"itemGroup.crafting": "Crafting",
"subtitles.entity.camel.ambient": "Camel grunts",
"subtitles.entity.camel.dash": "Camel yeets",
"subtitles.entity.camel.dash_ready": "Camel recovers",
"subtitles.entity.camel.death": "Camel dies",
"subtitles.entity.camel.eat": "Camel eats",
"subtitles.entity.camel.hurt": "Camel hurts",
"subtitles.entity.camel.saddle": "Saddle equips",
"subtitles.entity.camel.sit": "Camel sits down",
"subtitles.entity.camel.stand": "Camel stands up",
"subtitles.entity.camel.step": "Camel steps",
"subtitles.entity.camel.step_sand": "Camel sands",
"subtitles.entity.tadpole.grow_up": "Tadpole grows up",
"argument.resource.not_found": "Can't find element '%s' of type '%s'",
"argument.resource.invalid_type": "Element '%s' has wrong type '%s' (expected '%s')",
"argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'",
"argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')",
"entity.not_summonable": "Can't summon entity of type %s",
"commands.datapack.enable.failed.no_flags": "Pack '%s' cannot be enabled, since required flags are not enabled in this world: %s!",
"pack.source.feature": "feature",
"mco.gui.ok": "Ok",
"mco.gui.button": "Button",
"mco.terms.buttons.agree": "Agree",
"mco.terms.buttons.disagree": "Don't agree",
"mco.terms.title": "Realms Terms of Service",
"mco.terms.sentence.1": "I agree to the Minecraft Realms",
"mco.terms.sentence.2": "Terms of Service",
"mco.selectServer.play": "Play",
"mco.selectServer.configure": "Configure realm",
"mco.selectServer.leave": "Leave realm",
"mco.selectServer.create": "Create realm",
"mco.selectServer.purchase": "Add Realm",
"mco.selectServer.buy": "Buy a realm!",
"mco.selectServer.trial": "Get a trial!",
"mco.selectServer.close": "Close",
"mco.selectServer.expiredTrial": "Your trial has ended",
"mco.selectServer.expiredList": "Your subscription has expired",
"mco.selectServer.expiredSubscribe": "Subscribe",
"mco.selectServer.expiredRenew": "Renew",
"mco.selectServer.expired": "Expired realm",
"mco.selectServer.open": "Open realm",
"mco.selectServer.closed": "Closed realm",
"mco.selectServer.openserver": "Open realm",
"mco.selectServer.closeserver": "Close realm",
"mco.selectServer.minigame": "Minigame:",
"mco.selectServer.uninitialized": "Click to start your new realm!",
"mco.selectServer.expires.days": "Expires in %s days",
"mco.selectServer.expires.day": "Expires in a day",
"mco.selectServer.expires.soon": "Expires soon",
"mco.selectServer.note": "Note:",
"mco.selectServer.mapOnlySupportedForVersion": "This map is unsupported in %s",
"mco.selectServer.minigameNotSupportedInVersion": "Can't play this minigame in %s",
"mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.",
"mco.configure.world.settings.title": "Settings",
"mco.configure.world.title": "Configure realm:",
"mco.configure.worlds.title": "Worlds",
"mco.configure.world.name": "Realm name",
"mco.configure.world.description": "Realm description",
"mco.configure.world.location": "Location",
"mco.configure.world.invited": "Invited",
"mco.configure.world.invite.narration": "You have %s new invites",
"mco.configure.world.buttons.edit": "Settings",
"mco.configure.world.buttons.done": "Done",
"mco.configure.world.buttons.delete": "Delete",
"mco.configure.world.buttons.open": "Open realm",
"mco.configure.world.buttons.close": "Close realm",
"mco.configure.world.buttons.invite": "Invite player",
"mco.configure.world.buttons.activity": "Player activity",
"mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled",
"mco.configure.world.buttons.moreoptions": "More options",
"mco.configure.world.invite.profile.name": "Name",
"mco.configure.world.uninvite.question": "Are you sure that you want to uninvite",
"mco.configure.world.status": "Status",
"mco.configure.world.invites.ops.tooltip": "Operator",
"mco.configure.world.invites.normal.tooltip": "Normal user",
"mco.configure.world.invites.remove.tooltip": "Remove",
"mco.configure.world.closing": "Closing the realm...",
"mco.configure.world.opening": "Opening the realm...",
"mco.configure.world.buttons.players": "Players",
"mco.configure.world.buttons.settings": "Settings",
"mco.configure.world.buttons.subscription": "Subscription",
"mco.configure.world.buttons.options": "World options",
"mco.configure.world.backup": "World backups",
"mco.configure.world.buttons.resetworld": "Reset world",
"mco.configure.world.buttons.switchminigame": "Switch minigame",
"mco.configure.current.minigame": "Current",
"mco.configure.world.subscription.title": "Your subscription",
"mco.configure.world.subscription.timeleft": "Time left",
"mco.configure.world.subscription.unknown": "Unknown",
"mco.configure.world.subscription.recurring.daysleft": "Renewed automatically in",
"mco.configure.world.subscription.less_than_a_day": "Less than a day",
"mco.configure.world.subscription.expired": "Expired",
"mco.configure.world.subscription.start": "Start date",
"mco.configure.world.subscription.extend": "Extend subscription",
"mco.configure.world.subscription.day": "day",
"mco.configure.world.subscription.month": "month",
"mco.configure.world.subscription.days": "days",
"mco.configure.world.subscription.months": "months",
"mco.configure.world.pvp": "PVP",
"mco.configure.world.spawn_toggle.title": "Warning!",
"mco.configure.world.spawn_toggle.message": "Turning this option off will REMOVE ALL existing entities of that type",
"mco.configure.world.spawn_toggle.message.npc": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers",
"mco.configure.world.spawnAnimals": "Spawn animals",
"mco.configure.world.spawnNPCs": "Spawn NPCs",
"mco.configure.world.spawnMonsters": "Spawn monsters",
"mco.configure.world.spawnProtection": "Spawn protection",
"mco.configure.world.commandBlocks": "Command blocks",
"mco.configure.world.forceGameMode": "Force game mode",
"mco.configure.world.slot": "World %s",
"mco.configure.world.slot.empty": "Empty",
"mco.create.world.wait": "Creating the realm...",
"mco.create.world.error": "You must enter a name!",
"mco.create.world.subtitle": "Optionally, select what world to put on your new realm",
"mco.create.world.skip": "Skip",
"mco.reset.world.title": "Reset world",
"mco.reset.world.warning": "This will replace the current world of your realm",
"mco.reset.world.seed": "Seed (Optional)",
"mco.reset.world.resetting.screen.title": "Resetting world...",
"mco.reset.world.generate": "New world",
"mco.reset.world.upload": "Upload world",
"mco.reset.world.adventure": "Adventures",
"mco.reset.world.template": "World templates",
"mco.reset.world.experience": "Experiences",
"mco.reset.world.inspiration": "Inspiration",
"mco.minigame.world.title": "Switch realm to minigame",
"mco.minigame.world.info.line1": "This will temporarily replace your world with a minigame!",
"mco.minigame.world.info.line2": "You can later return to your original world without losing anything.",
"mco.minigame.world.selected": "Selected minigame:",
"mco.minigame.world.noSelection": "Please make a selection",
"mco.minigame.world.startButton": "Switch",
"mco.minigame.world.starting.screen.title": "Starting minigame...",
"mco.minigame.world.changeButton": "Select another minigame",
"mco.minigame.world.stopButton": "End minigame",
"mco.minigame.world.switch.title": "Switch minigame",
"mco.minigame.world.switch.new": "Select another minigame?",
"mco.minigame.world.restore.question.line1": "The minigame will end and your realm will be restored.",
"mco.minigame.world.restore.question.line2": "Are you sure you want to continue?",
"mco.minigame.world.restore": "Ending minigame...",
"mco.configure.world.slot.tooltip": "Switch to world",
"mco.configure.world.slot.tooltip.minigame": "Switch to minigame",
"mco.configure.world.slot.tooltip.active": "Join",
"mco.configure.world.close.question.line1": "Your realm will become unavailable.",
"mco.configure.world.close.question.line2": "Are you sure you want to continue?",
"mco.configure.world.leave.question.line1": "If you leave this realm you won't see it unless you are invited again",
"mco.configure.world.leave.question.line2": "Are you sure you want to continue?",
"mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm",
"mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?",
"mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost",
"mco.configure.world.reset.question.line2": "Are you sure you want to continue?",
"mco.configure.world.restore.question.line1": "Your world will be restored to date '%s' (%s)",
"mco.configure.world.restore.question.line2": "Are you sure you want to continue?",
"mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.",
"mco.configure.world.restore.download.question.line2": "Do you want to continue?",
"mco.configure.world.slot.switch.question.line1": "Your realm will be switched to another world",
"mco.configure.world.slot.switch.question.line2": "Are you sure you want to continue?",
"mco.configure.world.switch.slot": "Create world",
"mco.configure.world.switch.slot.subtitle": "This world is empty, choose how to create your world",
"mco.minigame.world.slot.screen.title": "Switching world...",
"mco.configure.world.edit.subscreen.adventuremap": "Some settings are disabled since your current world is an adventure",
"mco.configure.world.edit.subscreen.experience": "Some settings are disabled since your current world is an experience",
"mco.configure.world.edit.subscreen.inspiration": "Some settings are disabled since your current world is an inspiration",
"mco.configure.world.edit.slot.name": "World name",
"mco.configure.world.players.title": "Players",
"mco.configure.world.players.error": "A player with the provided name does not exist",
"mco.configure.world.delete.button": "Delete realm",
"mco.configure.world.delete.question.line1": "Your realm will be permanently deleted",
"mco.configure.world.delete.question.line2": "Are you sure you want to continue?",
"mco.connect.connecting": "Connecting to the realm...",
"mco.connect.authorizing": "Logging in...",
"mco.connect.failed": "Failed to connect to the realm",
"mco.connect.success": "Done",
"mco.create.world": "Create",
"mco.create.world.reset.title": "Creating world...",
"mco.client.incompatible.title": "Client incompatible!",
"mco.client.incompatible.msg.line1": "Your client is not compatible with Realms.",
"mco.client.incompatible.msg.line2": "Please use the most recent version of Minecraft.",
"mco.client.incompatible.msg.line3": "Realms is not compatible with snapshot versions.",
"mco.backup.button.restore": "Restore",
"mco.backup.generate.world": "Generate world",
"mco.backup.restoring": "Restoring your realm",
"mco.backup.button.download": "Download latest",
"mco.backup.changes.tooltip": "Changes",
"mco.backup.nobackups": "This realm doesn't have any backups currently.",
"mco.backup.button.upload": "Upload world",
"mco.backup.button.reset": "Reset world",
"mco.download.title": "Downloading latest world",
"mco.download.cancelled": "Download cancelled",
"mco.download.failed": "Download failed",
"mco.download.done": "Download done",
"mco.download.downloading": "Downloading",
"mco.download.extracting": "Extracting",
"mco.download.preparing": "Preparing download",
"mco.download.confirmation.line1": "The world you are going to download is larger than %s",
"mco.download.confirmation.line2": "You won't be able to upload this world to your realm again",
"mco.template.title": "World templates",
"mco.template.title.minigame": "Minigames",
"mco.template.button.select": "Select",
"mco.template.button.trailer": "Trailer",
"mco.template.button.publisher": "Publisher",
"mco.template.default.name": "World template",
"mco.template.name": "Template",
"mco.template.info.tooltip": "Publisher website",
"mco.template.trailer.tooltip": "Map trailer",
"mco.template.select.none": "Oops, it looks like this content category is currently empty.\nPlease check back later for new content, or if you're a creator,\n%s.",
"mco.template.select.none.linkTitle": "consider submitting something yourself",
"mco.template.select.failure": "We couldn't retrieve the list of content for this category.\nPlease check your internet connection, or try again later.",
"mco.template.select.narrate.authors": "Authors: %s",
"mco.template.select.narrate.version": "version %s",
"mco.invites.button.accept": "Accept",
"mco.invites.button.reject": "Reject",
"mco.invites.title": "Pending Invites",
"mco.invites.pending": "New invites!",
"mco.invites.nopending": "No pending invites!",
"mco.upload.select.world.title": "Upload world",
"mco.upload.select.world.subtitle": "Please select a singleplayer world to upload",
"mco.upload.select.world.none": "No singleplayer worlds found!",
"mco.upload.button.name": "Upload",
"mco.upload.verifying": "Verifying your world",
"mco.upload.preparing": "Preparing your world",
"mco.upload.close.failure": "Could not close your realm, please try again later",
"mco.upload.size.failure.line1": "'%s' is too big!",
"mco.upload.size.failure.line2": "It is %s. The maximum allowed size is %s.",
"mco.upload.uploading": "Uploading '%s'",
"mco.upload.done": "Upload done",
"mco.upload.failed": "Upload failed! (%s)",
"mco.upload.cancelled": "Upload cancelled",
"mco.upload.hardcore": "Hardcore worlds can't be uploaded!",
"mco.activity.title": "Player activity",
"mco.activity.noactivity": "No activity for the past %s days",
"mco.errorMessage.6001": "Client outdated",
"mco.errorMessage.6002": "Terms of service not accepted",
"mco.errorMessage.6003": "Download limit reached",
"mco.errorMessage.6004": "Upload limit reached",
"mco.errorMessage.connectionFailure": "An error occurred, please try again later.",
"mco.errorMessage.serviceBusy": "Realms is busy at the moment.\nPlease try connecting to your Realm again in a couple of minutes.",
"mco.trial.message.line1": "Want to get your own realm?",
"mco.trial.message.line2": "Click here for more info!",
"mco.brokenworld.play": "Play",
"mco.brokenworld.download": "Download",
"mco.brokenworld.downloaded": "Downloaded",
"mco.brokenworld.reset": "Reset",
"mco.brokenworld.title": "Your current world is no longer supported",
"mco.brokenworld.message.line1": "Please reset or select another world.",
"mco.brokenworld.message.line2": "You can also choose to download the world to singleplayer.",
"mco.brokenworld.minigame.title": "This minigame is no longer supported",
"mco.brokenworld.nonowner.title": "World is out of date",
"mco.brokenworld.nonowner.error": "Please wait for the realm owner to reset the world",
"mco.error.invalid.session.title": "Invalid session",
"mco.error.invalid.session.message": "Please try restarting Minecraft",
"mco.news": "Realms news",
"mco.account.privacyinfo": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children<65>s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.\n\nIf you have an older Minecraft account (you log in with your username), you need to migrate the account to a Mojang account in order to access Realms.",
"mco.account.update": "Update account",
"mco.account.privacy.info": "Read more about Mojang and privacy laws"
},
"1.19.1": {
"gui.acknowledge": "Acknowledge",
"gui.socialInteractions.report": "Report",

View File

@ -3,7 +3,7 @@ metadata.format.version = "1.1"
[versions]
# ViaVersion
viaver = "4.4.2"
viaver = "4.5.0-22w42a-SNAPSHOT"
# Common provided
netty = "4.0.20.Final"