diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java index 2b33256b4..03265fced 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java @@ -101,6 +101,8 @@ public interface MappingData { @Nullable Mappings getStatisticsMappings(); + @Nullable Mappings getMenuMappings(); + @Nullable Mappings getEnchantmentMappings(); @Nullable FullMappings getEntityMappings(); diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java index 11f29fe0b..6ceac6919 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java @@ -52,6 +52,7 @@ public class MappingDataBase implements MappingData { protected Mappings statisticsMappings; protected Mappings enchantmentMappings; protected Mappings paintingMappings; + protected Mappings menuMappings; protected Map> tags; public MappingDataBase(final String unmappedVersion, final String mappedVersion) { @@ -71,6 +72,7 @@ public class MappingDataBase implements MappingData { blockEntityMappings = loadMappings(data, "blockentities"); soundMappings = loadMappings(data, "sounds"); statisticsMappings = loadMappings(data, "statistics"); + menuMappings = loadMappings(data, "menus"); enchantmentMappings = loadMappings(data, "enchantments"); paintingMappings = loadMappings(data, "paintings"); itemMappings = loadBiMappings(data, "items"); @@ -202,6 +204,11 @@ public class MappingDataBase implements MappingData { return statisticsMappings; } + @Override + public @Nullable Mappings getMenuMappings() { + return menuMappings; + } + @Override public @Nullable Mappings getEnchantmentMappings() { return enchantmentMappings; diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java index 8b48d3e22..d4b20e669 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/version/ProtocolVersion.java @@ -83,6 +83,7 @@ public class ProtocolVersion { public static final ProtocolVersion v1_19_1 = register(760, "1.19.1/2", new VersionRange("1.19", 1, 2)); public static final ProtocolVersion v1_19_3 = register(761, "1.19.3"); public static final ProtocolVersion v1_19_4 = register(762, "1.19.4"); + public static final ProtocolVersion v1_20 = register(763, 127, "1.20"); public static final ProtocolVersion unknown = register(-1, "UNKNOWN"); public static ProtocolVersion register(int version, String name) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20.java new file mode 100644 index 000000000..d6c758735 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/version/Types1_20.java @@ -0,0 +1,38 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2023 ViaVersion and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.viaversion.viaversion.api.type.types.version; + +import com.viaversion.viaversion.api.minecraft.metadata.Metadata; +import com.viaversion.viaversion.api.minecraft.metadata.types.MetaTypes1_19_4; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.minecraft.MetaListType; +import com.viaversion.viaversion.api.type.types.minecraft.ParticleType; +import java.util.List; + +public final class Types1_20 { + + public static final ParticleType PARTICLE = new ParticleType(); // Only safe to use after protocol loading + public static final MetaTypes1_19_4 META_TYPES = new MetaTypes1_19_4(PARTICLE); + public static final Type METADATA = new MetadataType(META_TYPES); + public static final Type> METADATA_LIST = new MetaListType(METADATA); +} diff --git a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java index bc5f388d3..f0784ae9a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java @@ -70,6 +70,7 @@ import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.Protocol1_19_1To import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.Protocol1_19_3To1_19_1; import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.Protocol1_19_4To1_19_3; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2; +import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.Protocol1_20To1_19_4; import com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4; import com.viaversion.viaversion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.Protocol1_9_3To1_9_1_2; @@ -180,6 +181,8 @@ public class ProtocolManagerImpl implements ProtocolManager { registerProtocol(new Protocol1_19_1To1_19(), ProtocolVersion.v1_19_1, ProtocolVersion.v1_19); registerProtocol(new Protocol1_19_3To1_19_1(), ProtocolVersion.v1_19_3, ProtocolVersion.v1_19_1); registerProtocol(new Protocol1_19_4To1_19_3(), ProtocolVersion.v1_19_4, ProtocolVersion.v1_19_3); + + registerProtocol(new Protocol1_20To1_19_4(), ProtocolVersion.v1_20, ProtocolVersion.v1_19_4); } @Override diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/rewriter/RecipeRewriter1_19_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/rewriter/RecipeRewriter1_19_4.java index 275686c8b..636e42a1f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/rewriter/RecipeRewriter1_19_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/rewriter/RecipeRewriter1_19_4.java @@ -30,11 +30,8 @@ public class RecipeRewriter1_19_4 extends Recip } @Override - public void handleCraftingShapeless(final PacketWrapper wrapper) throws Exception { - wrapper.passthrough(Type.STRING); // Group - wrapper.passthrough(Type.VAR_INT); // Crafting book category - handleIngredients(wrapper); - rewrite(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result + public void handleCraftingShaped(final PacketWrapper wrapper) throws Exception { + super.handleCraftingShaped(wrapper); wrapper.passthrough(Type.BOOLEAN); // Show notification } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java new file mode 100644 index 000000000..787f884ee --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java @@ -0,0 +1,94 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2023 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 . + */ +package com.viaversion.viaversion.protocols.protocol1_20to1_19_4; + +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.data.MappingData; +import com.viaversion.viaversion.api.data.MappingDataBase; +import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; +import com.viaversion.viaversion.api.protocol.AbstractProtocol; +import com.viaversion.viaversion.api.type.types.minecraft.ParticleType; +import com.viaversion.viaversion.api.type.types.version.Types1_20; +import com.viaversion.viaversion.data.entity.EntityTrackerBase; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ServerboundPackets1_19_4; +import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.packets.EntityPackets; +import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.packets.InventoryPackets; +import com.viaversion.viaversion.rewriter.SoundRewriter; +import com.viaversion.viaversion.rewriter.StatisticsRewriter; +import com.viaversion.viaversion.rewriter.TagRewriter; + +public final class Protocol1_20To1_19_4 extends AbstractProtocol { + + public static final MappingData MAPPINGS = new MappingDataBase("1.19.4", "1.20"); + private final EntityPackets entityRewriter = new EntityPackets(this); + private final InventoryPackets itemRewriter = new InventoryPackets(this); + + public Protocol1_20To1_19_4() { + super(ClientboundPackets1_19_4.class, ClientboundPackets1_19_4.class, ServerboundPackets1_19_4.class, ServerboundPackets1_19_4.class); + } + + @Override + protected void registerPackets() { + super.registerPackets(); + + final TagRewriter tagRewriter = new TagRewriter<>(this); + tagRewriter.registerGeneric(ClientboundPackets1_19_4.TAGS); + + final SoundRewriter soundRewriter = new SoundRewriter<>(this); + soundRewriter.register1_19_3Sound(ClientboundPackets1_19_4.SOUND); + soundRewriter.registerSound(ClientboundPackets1_19_4.ENTITY_SOUND); + + new StatisticsRewriter<>(this).register(ClientboundPackets1_19_4.STATISTICS); + } + + @Override + protected void onMappingDataLoaded() { + super.onMappingDataLoaded(); + Types1_20.PARTICLE.filler(this) + .reader("block", ParticleType.Readers.BLOCK) + .reader("block_marker", ParticleType.Readers.BLOCK) + .reader("dust", ParticleType.Readers.DUST) + .reader("falling_dust", ParticleType.Readers.BLOCK) + .reader("dust_color_transition", ParticleType.Readers.DUST_TRANSITION) + .reader("item", ParticleType.Readers.VAR_INT_ITEM) + .reader("vibration", ParticleType.Readers.VIBRATION) + .reader("sculk_charge", ParticleType.Readers.SCULK_CHARGE) + .reader("shriek", ParticleType.Readers.SHRIEK); + } + + @Override + public void init(final UserConnection user) { + addEntityTracker(user, new EntityTrackerBase(user, Entity1_19_4Types.PLAYER)); + } + + @Override + public MappingData getMappingData() { + return MAPPINGS; + } + + @Override + public EntityPackets getEntityRewriter() { + return entityRewriter; + } + + @Override + public InventoryPackets getItemRewriter() { + return itemRewriter; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java new file mode 100644 index 000000000..32f68fc1a --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java @@ -0,0 +1,84 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2023 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 . + */ +package com.viaversion.viaversion.protocols.protocol1_20to1_19_4.packets; + +import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; +import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.api.type.types.version.Types1_19_4; +import com.viaversion.viaversion.api.type.types.version.Types1_20; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4; +import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.Protocol1_20To1_19_4; +import com.viaversion.viaversion.rewriter.EntityRewriter; + +public final class EntityPackets extends EntityRewriter { + + public EntityPackets(final Protocol1_20To1_19_4 protocol) { + super(protocol); + } + + @Override + public void registerPackets() { + registerTrackerWithData1_19(ClientboundPackets1_19_4.SPAWN_ENTITY, Entity1_19_4Types.FALLING_BLOCK); + registerMetadataRewriter(ClientboundPackets1_19_4.ENTITY_METADATA, Types1_19_4.METADATA_LIST, Types1_20.METADATA_LIST); + registerRemoveEntities(ClientboundPackets1_19_4.REMOVE_ENTITIES); + + protocol.registerClientbound(ClientboundPackets1_19_4.JOIN_GAME, new PacketHandlers() { + @Override + public void register() { + 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()); // Caches dimensions to access data like height later + handler(biomeSizeTracker()); // Tracks the amount of biomes sent for chunk data + handler(worldDataTrackerHandlerByKey()); // Tracks world height and name for chunk data and entity (un)tracking + } + }); + + protocol.registerClientbound(ClientboundPackets1_19_4.RESPAWN, new PacketHandlers() { + @Override + public void register() { + map(Type.STRING); // Dimension + map(Type.STRING); // World + handler(worldDataTrackerHandlerByKey()); // Tracks world height and name for chunk data and entity (un)tracking + } + }); + } + + @Override + protected void registerRewrites() { + filter().handler((event, meta) -> meta.setMetaType(Types1_20.META_TYPES.byId(meta.metaType().typeId()))); + registerMetaTypeHandler(Types1_20.META_TYPES.itemType, Types1_20.META_TYPES.blockStateType, Types1_20.META_TYPES.particleType); + + filter().filterFamily(Entity1_19_4Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> { + final int blockState = meta.value(); + meta.setValue(protocol.getMappingData().getNewBlockStateId(blockState)); + }); + } + + @Override + public EntityType typeFromId(final int type) { + return Entity1_19_4Types.getTypeFromId(type); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java new file mode 100644 index 000000000..1812bada8 --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java @@ -0,0 +1,95 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2023 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 . + */ +package com.viaversion.viaversion.protocols.protocol1_20to1_19_4.packets; + +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ServerboundPackets1_19_4; +import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.rewriter.RecipeRewriter1_19_4; +import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.Protocol1_20To1_19_4; +import com.viaversion.viaversion.rewriter.BlockRewriter; +import com.viaversion.viaversion.rewriter.ItemRewriter; +import com.viaversion.viaversion.rewriter.RecipeRewriter; +import com.viaversion.viaversion.util.Key; + +public final class InventoryPackets extends ItemRewriter { + + public InventoryPackets(final Protocol1_20To1_19_4 protocol) { + super(protocol); + } + + @Override + public void registerPackets() { + final BlockRewriter blockRewriter = new BlockRewriter<>(protocol, Type.POSITION1_14); + blockRewriter.registerBlockAction(ClientboundPackets1_19_4.BLOCK_ACTION); + blockRewriter.registerBlockChange(ClientboundPackets1_19_4.BLOCK_CHANGE); + blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_19_4.MULTI_BLOCK_CHANGE); + blockRewriter.registerEffect(ClientboundPackets1_19_4.EFFECT, 1010, 2001); + blockRewriter.registerChunkData1_19(ClientboundPackets1_19_4.CHUNK_DATA, Chunk1_18Type::new); + blockRewriter.registerBlockEntityData(ClientboundPackets1_19_4.BLOCK_ENTITY_DATA); + + registerOpenWindow(ClientboundPackets1_19_4.OPEN_WINDOW); + registerSetCooldown(ClientboundPackets1_19_4.COOLDOWN); + registerWindowItems1_17_1(ClientboundPackets1_19_4.WINDOW_ITEMS); + registerSetSlot1_17_1(ClientboundPackets1_19_4.SET_SLOT); + registerAdvancements(ClientboundPackets1_19_4.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); + registerEntityEquipmentArray(ClientboundPackets1_19_4.ENTITY_EQUIPMENT); + registerClickWindow1_17_1(ServerboundPackets1_19_4.CLICK_WINDOW); + registerTradeList1_19(ClientboundPackets1_19_4.TRADE_LIST); + registerCreativeInvAction(ServerboundPackets1_19_4.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + registerWindowPropertyEnchantmentHandler(ClientboundPackets1_19_4.WINDOW_PROPERTY); + registerSpawnParticle1_19(ClientboundPackets1_19_4.SPAWN_PARTICLE); + + protocol.registerClientbound(ClientboundPackets1_19_4.OPEN_SIGN_EDITOR, wrapper -> { + wrapper.passthrough(Type.POSITION1_14); + wrapper.write(Type.BOOLEAN, true); // Front text + }); + protocol.registerServerbound(ServerboundPackets1_19_4.UPDATE_SIGN, wrapper -> { + wrapper.passthrough(Type.POSITION1_14); + final boolean frontText = wrapper.read(Type.BOOLEAN); + if (!frontText) { + wrapper.cancel(); + } + }); + + final RecipeRewriter recipeRewriter = new RecipeRewriter1_19_4<>(protocol); + protocol.registerClientbound(ClientboundPackets1_19_4.DECLARE_RECIPES, wrapper -> { + final int size = wrapper.passthrough(Type.VAR_INT); + int newSize = size; + for (int i = 0; i < size; i++) { + final String type = wrapper.read(Type.STRING); + final String cutType = Key.stripMinecraftNamespace(type); + if (cutType.equals("smithing")) { + newSize--; + wrapper.read(Type.STRING); // Recipe identifier + wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Base + wrapper.read(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Additions + wrapper.read(Type.FLAT_VAR_INT_ITEM); // Result + continue; + } + + wrapper.write(Type.STRING, type); + wrapper.passthrough(Type.STRING); // Recipe Identifier + recipeRewriter.handleRecipeType(wrapper, cutType); + } + + wrapper.set(Type.VAR_INT, 0, newSize); + }); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java index ce46ed36c..968c685ff 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/ItemRewriter.java @@ -85,6 +85,25 @@ public abstract class ItemRewriter { + final int windowType = wrapper.read(Type.VAR_INT); + final int mappedId = protocol.getMappingData().getMenuMappings().getNewId(windowType); + if (mappedId == -1) { + wrapper.cancel(); + return; + } + + wrapper.write(Type.VAR_INT, mappedId); + }); + } + }); + } + public void registerSetSlot(C packetType, Type type) { protocol.registerClientbound(packetType, new PacketHandlers() { @Override diff --git a/common/src/main/resources/assets/viaversion/data/identifiers-1.20.nbt b/common/src/main/resources/assets/viaversion/data/identifiers-1.20.nbt new file mode 100644 index 000000000..f59871f27 Binary files /dev/null and b/common/src/main/resources/assets/viaversion/data/identifiers-1.20.nbt differ diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.19.4to1.20.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.19.4to1.20.nbt new file mode 100644 index 000000000..b02ff0f95 Binary files /dev/null and b/common/src/main/resources/assets/viaversion/data/mappings-1.19.4to1.20.nbt differ diff --git a/gradle.properties b/gradle.properties index 21cd1a962..f3bda0701 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project properties - we put these here so they can be modified without causing a recompile of the build scripts -projectVersion=4.6.2-SNAPSHOT +projectVersion=4.7.0-23w12a-SNAPSHOT # Gradle properties org.gradle.daemon=true