Update VV usage

This commit is contained in:
Nassim Jahnke 2023-03-02 13:22:16 +01:00
parent 565944c317
commit 5d0d6f603b
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B
32 changed files with 14748 additions and 14717 deletions

View File

@ -26,6 +26,7 @@ import com.viaversion.viaversion.api.data.Mappings;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.util.Key;
import java.util.Map;
import java.util.logging.Logger;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -33,7 +34,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
public class BackwardsMappings extends MappingDataBase {
private final Class<? extends Protocol<?, ?, ?, ?>> vvProtocolClass;
private Int2ObjectMap<MappedItem> backwardsItemMappings;
protected Int2ObjectMap<MappedItem> backwardsItemMappings;
private Map<String, String> backwardsSoundMappings;
private Map<String, String> entityNames;
@ -46,21 +47,20 @@ public class BackwardsMappings extends MappingDataBase {
Preconditions.checkArgument(vvProtocolClass == null || !vvProtocolClass.isAssignableFrom(BackwardsProtocol.class));
this.vvProtocolClass = vvProtocolClass;
// Just re-use ViaVersion's item id map
loadItems = false;
}
@Override
protected final void loadExtras(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings) {
protected final void loadExtras(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, @Nullable JsonObject diffMappings) {
if (diffMappings != null) {
JsonObject diffItems = diffMappings.getAsJsonObject("items");
if (diffItems != null) {
backwardsItemMappings = VBMappingDataLoader.loadItemMappings(oldMappings.getAsJsonObject("items"),
newMappings.getAsJsonObject("items"), diffItems, shouldWarnOnMissing("items"));
if (diffItems != null && mappedIdentifiers.get("items").isJsonArray() && unmappedIdentifiers.get("items").isJsonArray()) {
backwardsItemMappings = VBMappingDataLoader.loadItemMappings(unmappedIdentifiers.getAsJsonArray("items"),
mappedIdentifiers.getAsJsonArray("items"), diffItems, shouldWarnOnMissing("items"));
}
JsonObject diffSounds = diffMappings.getAsJsonObject("sounds");
if (diffSounds != null) {
backwardsSoundMappings = VBMappingDataLoader.objectToNamespacedMap(diffSounds);
backwardsSoundMappings = VBMappingDataLoader.objectToMap(diffSounds);
}
JsonObject diffEntityNames = diffMappings.getAsJsonObject("entitynames");
@ -74,24 +74,28 @@ public class BackwardsMappings extends MappingDataBase {
itemMappings = Via.getManager().getProtocolManager().getProtocol(vvProtocolClass).getMappingData().getItemMappings().inverse();
}
loadVBExtras(oldMappings, newMappings);
loadVBExtras(unmappedIdentifiers, mappedIdentifiers, diffMappings);
}
@Override
protected @Nullable Mappings loadFromArray(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings, String key) {
if (!oldMappings.has(key) || !newMappings.has(key)) return null;
protected @Nullable Mappings loadFromArray(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, @Nullable JsonObject diffMappings, String key) {
if (!unmappedIdentifiers.has(key) || !mappedIdentifiers.has(key) || !shouldLoad(key)) {
return null;
}
JsonObject diff = diffMappings != null ? diffMappings.getAsJsonObject(key) : null;
return VBMappings.vbBuilder().unmapped(oldMappings.getAsJsonArray(key)).mapped(newMappings.getAsJsonArray(key))
return VBMappings.vbBuilder().unmapped(unmappedIdentifiers.getAsJsonArray(key)).mapped(mappedIdentifiers.getAsJsonArray(key))
.diffMappings(diff).warnOnMissing(shouldWarnOnMissing(key)).build();
}
@Override
protected @Nullable Mappings loadFromObject(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings, String key) {
if (!oldMappings.has(key) || !newMappings.has(key)) return null;
protected @Nullable Mappings loadFromObject(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, @Nullable JsonObject diffMappings, String key) {
if (!unmappedIdentifiers.has(key) || !mappedIdentifiers.has(key) || !shouldLoad(key)) {
return null;
}
JsonObject diff = diffMappings != null ? diffMappings.getAsJsonObject(key) : null;
return VBMappings.vbBuilder().unmapped(oldMappings.getAsJsonObject(key)).mapped(newMappings.getAsJsonObject(key))
return VBMappings.vbBuilder().unmapped(unmappedIdentifiers.getAsJsonObject(key)).mapped(mappedIdentifiers.getAsJsonObject(key))
.diffMappings(diff).warnOnMissing(shouldWarnOnMissing(key)).build();
}
@ -103,13 +107,18 @@ public class BackwardsMappings extends MappingDataBase {
/**
* To be overridden.
*/
protected void loadVBExtras(JsonObject unmapped, JsonObject mapped) {
protected void loadVBExtras(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, JsonObject diffMappings) {
}
protected boolean shouldWarnOnMissing(String key) {
return !key.equals("blocks") && !key.equals("statistics") && !key.equals("entities");
}
@Override
protected boolean shouldLoad(final String key) {
return !key.equals("items");
}
@Override
protected Logger getLogger() {
return ViaBackwards.getPlatform().getLogger();
@ -121,7 +130,7 @@ public class BackwardsMappings extends MappingDataBase {
@Override
public int getNewItemId(int id) {
// Don't warn on missing here
return this.itemMappings.get(id);
return this.itemMappings.getNewId(id);
}
@Override
@ -133,7 +142,7 @@ public class BackwardsMappings extends MappingDataBase {
@Override
public int getOldItemId(final int id) {
// Warn on missing
return checkValidity(id, this.itemMappings.inverse().get(id), "item");
return checkValidity(id, this.itemMappings.inverse().getNewId(id), "item");
}
public @Nullable MappedItem getMappedItem(int id) {
@ -144,12 +153,7 @@ public class BackwardsMappings extends MappingDataBase {
if (backwardsSoundMappings == null) {
return null;
}
if (id.indexOf(':') == -1) {
id = "minecraft:" + id;
}
return backwardsSoundMappings.get(id);
return backwardsSoundMappings.get(Key.stripMinecraftNamespace(id));
}
public @Nullable String mappedEntityName(String entityName) {

View File

@ -23,6 +23,7 @@ import com.viaversion.viaversion.api.data.MappingDataLoader;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap;
import com.viaversion.viaversion.libs.gson.JsonArray;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonIOException;
import com.viaversion.viaversion.libs.gson.JsonObject;
@ -42,7 +43,9 @@ public final class VBMappingDataLoader {
public static JsonObject loadFromDataDir(String name) {
File file = new File(ViaBackwards.getPlatform().getDataFolder(), name);
if (!file.exists()) return loadData(name);
if (!file.exists()) {
return loadData(name);
}
// Load the file from the platform's directory if present
try (FileReader reader = new FileReader(file)) {
@ -72,61 +75,66 @@ public final class VBMappingDataLoader {
}
}
public static void mapIdentifiers(int[] output, JsonObject oldIdentifiers, JsonObject newIdentifiers, JsonObject diffIdentifiers, boolean warnOnMissing) {
Object2IntMap<String> newIdentifierMap = MappingDataLoader.indexedObjectToMap(newIdentifiers);
for (Map.Entry<String, JsonElement> entry : oldIdentifiers.entrySet()) {
String key = entry.getValue().getAsString();
int mappedId = newIdentifierMap.getInt(key);
if (mappedId == -1) {
if (diffIdentifiers != null) {
// Search in diff mappings
JsonPrimitive diffValueJson = diffIdentifiers.getAsJsonPrimitive(key);
String diffValue = diffValueJson != null ? diffValueJson.getAsString() : null;
int dataIndex;
if (diffValue == null && (dataIndex = key.indexOf('[')) != -1
&& (diffValueJson = diffIdentifiers.getAsJsonPrimitive(key.substring(0, dataIndex))) != null) {
// Check for wildcard mappings
diffValue = diffValueJson.getAsString();
// Keep original properties if value ends with [
if (diffValue.endsWith("[")) {
diffValue += key.substring(dataIndex + 1);
}
}
if (diffValue != null) {
mappedId = newIdentifierMap.getInt(diffValue);
}
}
if (mappedId == -1) {
// Nothing found :(
if (warnOnMissing && !Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
ViaBackwards.getPlatform().getLogger().warning("No key for " + entry.getValue() + " :( ");
}
continue;
}
public static void mapIdentifiers(int[] output, JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, JsonObject diffIdentifiers, boolean warnOnMissing) {
Object2IntMap<String> newIdentifierMap = MappingDataLoader.indexedObjectToMap(mappedIdentifiers);
for (Map.Entry<String, JsonElement> entry : unmappedIdentifiers.entrySet()) {
int mappedId = mapIdentifierEntry(entry.getValue().getAsString(), newIdentifierMap, diffIdentifiers, warnOnMissing);
if (mappedId != -1) {
output[Integer.parseInt(entry.getKey())] = mappedId;
}
output[Integer.parseInt(entry.getKey())] = mappedId;
}
}
public static Map<String, String> objectToNamespacedMap(JsonObject object) {
Map<String, String> mappings = new HashMap<>(object.size());
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
String key = entry.getKey();
if (key.indexOf(':') == -1) {
key = "minecraft:" + key;
public static void mapIdentifiers(int[] output, JsonArray unmappedIdentifiers, JsonArray mappedIdentifiers, JsonObject diffIdentifiers, boolean warnOnMissing) {
Object2IntMap<String> newIdentifierMap = MappingDataLoader.arrayToMap(mappedIdentifiers);
for (int id = 0; id < unmappedIdentifiers.size(); id++) {
JsonElement unmappedIdentifier = unmappedIdentifiers.get(id);
int mappedId = mapIdentifierEntry(unmappedIdentifier.getAsString(), newIdentifierMap, diffIdentifiers, warnOnMissing);
if (mappedId != -1) {
output[id] = mappedId;
}
String value = entry.getValue().getAsString();
if (value.indexOf(':') == -1) {
value = "minecraft:" + value;
}
mappings.put(key, value);
}
return mappings;
}
private static int mapIdentifierEntry(String key, Object2IntMap<String> mappedIdentifiers, @Nullable JsonObject diffIdentifiers, boolean warnOnMissing) {
int mappedId = mappedIdentifiers.getInt(key);
if (mappedId == -1) {
if (diffIdentifiers != null) {
// Search in diff mappings
JsonPrimitive diffValueJson = diffIdentifiers.getAsJsonPrimitive(key);
String diffValue = diffValueJson != null ? diffValueJson.getAsString() : null;
if (diffValue != null && diffValue.isEmpty()) {
return -1;
}
int dataIndex;
if (diffValue == null && (dataIndex = key.indexOf('[')) != -1
&& (diffValueJson = diffIdentifiers.getAsJsonPrimitive(key.substring(0, dataIndex))) != null) {
// Check for wildcard mappings
diffValue = diffValueJson.getAsString();
if (diffValue != null && diffValue.isEmpty()) {
return -1;
}
// Keep original properties if value ends with [
if (diffValue.endsWith("[")) {
diffValue += key.substring(dataIndex + 1);
}
}
if (diffValue != null) {
mappedId = mappedIdentifiers.getInt(diffValue);
}
}
if (mappedId == -1) {
if (warnOnMissing && !Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
ViaBackwards.getPlatform().getLogger().warning("No key for " + key + " :( ");
}
return -1;
}
}
return mappedId;
}
public static Map<String, String> objectToMap(JsonObject object) {
@ -137,38 +145,40 @@ public final class VBMappingDataLoader {
return mappings;
}
public static Int2ObjectMap<MappedItem> loadItemMappings(JsonObject oldMapping, JsonObject newMapping, JsonObject diffMapping, boolean warnOnMissing) {
public static Int2ObjectMap<MappedItem> loadItemMappings(JsonArray unmappedIdentifiers, JsonArray mappedIdentifiers, JsonObject diffMapping, boolean warnOnMissing) {
return loadItemMappings(MappingDataLoader.arrayToMap(unmappedIdentifiers), MappingDataLoader.arrayToMap(mappedIdentifiers), diffMapping, warnOnMissing);
}
public static Int2ObjectMap<MappedItem> loadItemMappings(Object2IntMap<String> unmappedIdentifiers, Object2IntMap<String> mappedIdentifiers, JsonObject diffMapping, boolean warnOnMissing) {
Int2ObjectMap<MappedItem> itemMapping = new Int2ObjectOpenHashMap<>(diffMapping.size(), 0.99F);
Object2IntMap<String> newIdentifierMap = MappingDataLoader.indexedObjectToMap(newMapping);
Object2IntMap<String> oldIdentifierMap = MappingDataLoader.indexedObjectToMap(oldMapping);
for (Map.Entry<String, JsonElement> entry : diffMapping.entrySet()) {
JsonObject object = entry.getValue().getAsJsonObject();
String mappedIdName = object.getAsJsonPrimitive("id").getAsString();
int mappedId = newIdentifierMap.getInt(mappedIdName);
String mappedIdentifier = object.getAsJsonPrimitive("id").getAsString();
int mappedId = mappedIdentifiers.getInt(mappedIdentifier);
if (mappedId == -1) {
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
ViaBackwards.getPlatform().getLogger().warning("No key for " + mappedIdName + " :( ");
ViaBackwards.getPlatform().getLogger().warning("Mapped item " + mappedIdentifier + " does not exist :( ");
}
continue;
}
int oldId = oldIdentifierMap.getInt(entry.getKey());
if (oldId == -1) {
int unmappedId = unmappedIdentifiers.getInt(entry.getKey());
if (unmappedId == -1) {
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
ViaBackwards.getPlatform().getLogger().warning("No old entry for " + mappedIdName + " :( ");
ViaBackwards.getPlatform().getLogger().warning("Unmapped item " + entry.getKey() + " doesn't exist :( ");
}
continue;
}
String name = object.getAsJsonPrimitive("name").getAsString();
JsonPrimitive customModelData = object.getAsJsonPrimitive("custom_model_data");
itemMapping.put(oldId, new MappedItem(mappedId, name, customModelData != null ? customModelData.getAsInt() : null));
itemMapping.put(unmappedId, new MappedItem(mappedId, name, customModelData != null ? customModelData.getAsInt() : null));
}
// Look for missing keys
if (warnOnMissing && !Via.getConfig().isSuppressConversionWarnings()) {
for (Object2IntMap.Entry<String> entry : oldIdentifierMap.object2IntEntrySet()) {
if (!newIdentifierMap.containsKey(entry.getKey()) && !itemMapping.containsKey(entry.getIntValue())) {
for (Object2IntMap.Entry<String> entry : unmappedIdentifiers.object2IntEntrySet()) {
if (!mappedIdentifiers.containsKey(entry.getKey()) && !itemMapping.containsKey(entry.getIntValue())) {
ViaBackwards.getPlatform().getLogger().warning("No item mapping for " + entry.getKey() + " :( ");
}
}

View File

@ -49,15 +49,14 @@ public final class VBMappings extends IntArrayMappings {
if (mapped.isJsonObject()) {
VBMappingDataLoader.mapIdentifiers(mappings, toJsonObject(unmapped.getAsJsonArray()), mapped.getAsJsonObject(), diffMappings, warnOnMissing);
} else {
// Use the normal loader
MappingDataLoader.mapIdentifiers(mappings, unmapped.getAsJsonArray(), mapped.getAsJsonArray(), diffMappings, warnOnMissing);
VBMappingDataLoader.mapIdentifiers(mappings, unmapped.getAsJsonArray(), mapped.getAsJsonArray(), diffMappings, warnOnMissing);
}
} else if (mapped.isJsonArray()) {
VBMappingDataLoader.mapIdentifiers(mappings, unmapped.getAsJsonObject(), toJsonObject(mapped.getAsJsonArray()), diffMappings, warnOnMissing);
} else {
VBMappingDataLoader.mapIdentifiers(mappings, unmapped.getAsJsonObject(), mapped.getAsJsonObject(), diffMappings, warnOnMissing);
}
return supplier.supply(mappings, mappedSize);
return new VBMappings(mappings, mappedSize);
}
}
}

View File

@ -22,14 +22,13 @@ import com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.providers.Backw
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.MappingDataLoader;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.libs.gson.JsonArray;
import com.viaversion.viaversion.libs.gson.JsonPrimitive;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.IntTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.StringJoiner;
@ -40,28 +39,24 @@ public class PistonHandler implements BackwardsBlockEntityProvider.BackwardsBloc
public PistonHandler() {
if (Via.getConfig().isServersideBlockConnections()) {
Map<String, Integer> keyToId;
try {
Field field = ConnectionData.class.getDeclaredField("keyToId");
field.setAccessible(true);
keyToId = (Map<String, Integer>) field.get(null);
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
return;
}
Map<String, Integer> keyToId = ConnectionData.getKeyToId();
for (Map.Entry<String, Integer> entry : keyToId.entrySet()) {
if (!entry.getKey().contains("piston")) continue;
if (!entry.getKey().contains("piston")) {
continue;
}
addEntries(entry.getKey(), entry.getValue());
}
} else {
JsonObject mappings = MappingDataLoader.getMappingsCache().get("mapping-1.13.json").getAsJsonObject("blockstates");
for (Map.Entry<String, JsonElement> blockState : mappings.entrySet()) {
String key = blockState.getValue().getAsString();
if (!key.contains("piston")) continue;
JsonArray mappings = MappingDataLoader.getMappingsCache().get("mapping-1.13.json").getAsJsonArray("blockstates");
for (int id = 0; id < mappings.size(); id++) {
JsonPrimitive state = mappings.get(id).getAsJsonPrimitive();
String key = state.getAsString();
if (!key.contains("piston")) {
continue;
}
addEntries(key, Integer.parseInt(blockState.getKey()));
addEntries(key, id);
}
}
}

View File

@ -19,6 +19,7 @@
package com.viaversion.viabackwards.protocol.protocol1_12_2to1_13.data;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.data.VBMappingDataLoader;
import com.viaversion.viabackwards.api.data.VBMappings;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.data.IntArrayMappings;
@ -27,6 +28,7 @@ import com.viaversion.viaversion.api.data.Mappings;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap;
import com.viaversion.viaversion.libs.gson.JsonArray;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.libs.gson.JsonPrimitive;
@ -46,9 +48,14 @@ public class BackwardsMappings extends com.viaversion.viabackwards.api.data.Back
}
@Override
public void loadVBExtras(JsonObject unmapped, JsonObject mapped) {
public void loadVBExtras(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, JsonObject diffMappings) {
JsonObject diffItems = diffMappings.getAsJsonObject("items");
JsonArray unmappedItems = unmappedIdentifiers.getAsJsonArray("items");
JsonObject mappedItems = mappedIdentifiers.getAsJsonObject("items");
backwardsItemMappings = VBMappingDataLoader.loadItemMappings(MappingDataLoader.arrayToMap(unmappedItems), MappingDataLoader.indexedObjectToMap(mappedItems), diffItems, false);
enchantmentMappings = VBMappings.vbBuilder().warnOnMissing(false)
.unmapped(unmapped.getAsJsonArray("enchantments")).mapped(mapped.getAsJsonObject("legacy_enchantments")).build();
.unmapped(unmappedIdentifiers.getAsJsonArray("enchantments")).mapped(mappedIdentifiers.getAsJsonObject("legacy_enchantments")).build();
for (Map.Entry<String, Integer> entry : StatisticMappings.CUSTOM_STATS.entrySet()) {
statisticMappings.put(entry.getValue().intValue(), entry.getKey());
}
@ -95,17 +102,26 @@ public class BackwardsMappings extends com.viaversion.viabackwards.api.data.Back
}
@Override
protected @Nullable Mappings loadFromObject(JsonObject oldMappings, JsonObject newMappings, @Nullable JsonObject diffMappings, String key) {
protected @Nullable Mappings loadFromArray(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, @Nullable JsonObject diffMappings, String key) {
if (key.equals("blockstates")) {
int[] oldToNew = new int[8582];
Arrays.fill(oldToNew, -1);
mapIdentifiers(oldToNew, oldMappings.getAsJsonObject("blockstates"), newMappings.getAsJsonObject("blocks"), diffMappings.getAsJsonObject("blockstates"));
mapIdentifiers(oldToNew, toJsonObject(unmappedIdentifiers.getAsJsonArray("blockstates")), mappedIdentifiers.getAsJsonObject("blocks"), diffMappings.getAsJsonObject("blockstates"));
return IntArrayMappings.of(oldToNew, -1);
} else {
return super.loadFromObject(oldMappings, newMappings, diffMappings, key);
return super.loadFromArray(unmappedIdentifiers, mappedIdentifiers, diffMappings, key);
}
}
private JsonObject toJsonObject(final JsonArray array) {
final JsonObject object = new JsonObject();
for (int i = 0; i < array.size(); i++) {
final JsonElement element = array.get(i);
object.add(Integer.toString(i), element);
}
return object;
}
@Override
public int getNewBlockStateId(int id) {
// Comparator funkyness: https://github.com/ViaVersion/ViaBackwards/issues/524
@ -156,4 +172,9 @@ public class BackwardsMappings extends com.viaversion.viabackwards.api.data.Back
public Map<String, String> getTranslateMappings() {
return translateMappings;
}
@Override
protected boolean shouldLoad(final String key) {
return super.shouldLoad(key) && !key.equals("blocks");
}
}

View File

@ -91,7 +91,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
protected void registerPackets() {
protocol.registerClientbound(ClientboundPackets1_13.COOLDOWN, wrapper -> {
int itemId = wrapper.read(Type.VAR_INT);
int oldId = protocol.getMappingData().getItemMappings().get(itemId);
int oldId = protocol.getMappingData().getItemMappings().getNewId(itemId);
if (oldId == -1) {
wrapper.cancel();
return;
@ -376,7 +376,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
int id = wrapper.get(Type.INT, 0);
int data = wrapper.get(Type.INT, 1);
if (id == 1010) { // Play record
wrapper.set(Type.INT, 1, protocol.getMappingData().getItemMappings().get(data) >> 4);
wrapper.set(Type.INT, 1, protocol.getMappingData().getItemMappings().getNewId(data) >> 4);
} else if (id == 2001) { // Block break + block break sound
data = protocol.getMappingData().getNewBlockStateId(data);
int blockId = data >> 4;
@ -804,7 +804,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
item.setIdentifier(identifier);
int newId = -1;
if (!protocol.getMappingData().getItemMappings().inverse().containsKey(rawId)) {
if (protocol.getMappingData().getItemMappings().inverse().getNewId(rawId) == -1) {
if (!isDamageable(item.identifier()) && item.identifier() != 358) { // Map
if (tag == null) item.setTag(tag = new CompoundTag());
tag.put(extraNbtTag, new IntTag(originalId)); // Data will be lost, saving original id
@ -814,7 +814,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
newId = 362; // directly set the new id -> base/colorless shulker box
} else if (item.identifier() == 31 && item.data() == 0) { // Shrub was removed
rawId = 32 << 4; // Dead Bush
} else if (protocol.getMappingData().getItemMappings().inverse().containsKey(rawId & ~0xF)) {
} else if (protocol.getMappingData().getItemMappings().inverse().getNewId(rawId & ~0xF) != -1) {
rawId &= ~0xF; // Remove data
} else {
if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) {
@ -825,7 +825,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit
}
if (newId == -1) {
newId = protocol.getMappingData().getItemMappings().inverse().get(rawId);
newId = protocol.getMappingData().getItemMappings().inverse().getNewId(rawId);
}
item.setIdentifier(newId);

View File

@ -80,7 +80,7 @@ public class Protocol1_13_2To1_14 extends BackwardsProtocol<ClientboundPackets1_
for (int j = 0; j < blockIds.length; j++) {
int id = blockIds[j];
// Ignore new blocktags
int blockId = getMappingData().getNewBlockId(id);
int blockId = MAPPINGS.getNewBlockId(id);
blockIds[j] = blockId;
}
}
@ -92,7 +92,7 @@ public class Protocol1_13_2To1_14 extends BackwardsProtocol<ClientboundPackets1_
for (int j = 0; j < itemIds.length; j++) {
int itemId = itemIds[j];
// Ignore new itemtags
int oldId = getMappingData().getItemMappings().get(itemId);
int oldId = MAPPINGS.getItemMappings().getNewId(itemId);
itemIds[j] = oldId;
}
}

View File

@ -30,7 +30,7 @@ public class BackwardsMappings extends com.viaversion.viabackwards.api.data.Back
}
@Override
protected void loadVBExtras(JsonObject unmapped, JsonObject mapped) {
protected void loadVBExtras(JsonObject unmappedIdentifiers, JsonObject mappedIdentifiers, JsonObject diffMappings) {
for (Map.Entry<String, String> entry : Protocol1_16To1_15_2.MAPPINGS.getAttributeMappings().entrySet()) {
attributeMappings.put(entry.getValue(), entry.getKey());
}

View File

@ -47,6 +47,7 @@ import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.types.Chunk1_16T
import com.viaversion.viaversion.rewriter.BlockRewriter;
import com.viaversion.viaversion.rewriter.RecipeRewriter;
import com.viaversion.viaversion.util.CompactArrayUtil;
import com.viaversion.viaversion.util.Key;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -71,7 +72,7 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit
int newSize = size;
for (int i = 0; i < size; i++) {
String originalType = wrapper.read(Type.STRING);
String type = originalType.replace("minecraft:", "");
String type = Key.stripMinecraftNamespace(originalType);
if (type.equals("smithing")) {
newSize--;

View File

@ -41,6 +41,7 @@ import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.ClientboundPackets1_16;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
import com.viaversion.viaversion.util.Key;
public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Protocol1_15_2To1_16> {
@ -190,7 +191,7 @@ public class EntityPackets1_16 extends EntityRewriter<ClientboundPackets1_16, Pr
for (int i = 0; i < size; i++) {
String attributeIdentifier = wrapper.read(Type.STRING);
String oldKey = protocol.getMappingData().getAttributeMappings().get(attributeIdentifier);
wrapper.write(Type.STRING, oldKey != null ? oldKey : attributeIdentifier.replace("minecraft:", ""));
wrapper.write(Type.STRING, oldKey != null ? oldKey : Key.stripMinecraftNamespace(attributeIdentifier));
wrapper.passthrough(Type.DOUBLE);
int modifierSize = wrapper.passthrough(Type.VAR_INT);

View File

@ -24,6 +24,7 @@ import com.viaversion.viaversion.libs.fastutil.objects.Object2IntMap;
import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.util.Key;
import java.util.Map;
public final class BiomeMappings {
@ -113,7 +114,7 @@ public final class BiomeMappings {
// Include the legacy biomes themselves
for (final Object2IntMap.Entry<String> entry : LEGACY_BIOMES.object2IntEntrySet()) {
MODERN_TO_LEGACY_ID.put("minecraft:" + entry.getKey(), entry.getIntValue());
MODERN_TO_LEGACY_ID.put(entry.getKey(), entry.getIntValue());
}
final JsonObject mappings = VBMappingDataLoader.loadFromDataDir("biome-mappings.json");
@ -133,10 +134,7 @@ public final class BiomeMappings {
}
public static int toLegacyBiome(String biome) {
if (biome.indexOf(':') == -1) {
biome = "minecraft:" + biome;
}
final int legacyBiome = MODERN_TO_LEGACY_ID.getInt(biome);
final int legacyBiome = MODERN_TO_LEGACY_ID.getInt(Key.stripMinecraftNamespace(biome));
if (legacyBiome == -1) {
if (!Via.getConfig().isSuppressConversionWarnings()) {
ViaBackwards.getPlatform().getLogger().warning("Biome with id " + biome + " has no legacy biome mapping (custom datapack?)");

View File

@ -44,6 +44,7 @@ import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPacke
import com.viaversion.viaversion.rewriter.IdRewriteFunction;
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
import com.viaversion.viaversion.rewriter.TagRewriter;
import com.viaversion.viaversion.util.Key;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -84,11 +85,7 @@ public final class Protocol1_16_4To1_17 extends BackwardsProtocol<ClientboundPac
int length = wrapper.read(Type.VAR_INT);
for (int i = 0; i < length; i++) {
String resourceKey = wrapper.read(Type.STRING);
if (resourceKey.startsWith("minecraft:")) {
resourceKey = resourceKey.substring(10);
}
String resourceKey = Key.stripMinecraftNamespace(wrapper.read(Type.STRING));
List<TagData> tagList = new ArrayList<>();
tags.put(resourceKey, tagList);

View File

@ -32,7 +32,7 @@ public final class BackwardsMappings extends com.viaversion.viabackwards.api.dat
}
@Override
protected void loadVBExtras(final JsonObject unmapped, final JsonObject mapped) {
protected void loadVBExtras(final JsonObject unmappedIdentifiers, final JsonObject mappedIdentifiers, JsonObject diffMappings) {
for (final Object2IntMap.Entry<String> entry : Protocol1_18To1_17_1.MAPPINGS.blockEntityIds().object2IntEntrySet()) {
blockEntities.put(entry.getIntValue(), entry.getKey());
}

View File

@ -41,6 +41,7 @@ import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.types.Chunk1_17T
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type;
import com.viaversion.viaversion.rewriter.RecipeRewriter;
import com.viaversion.viaversion.util.Key;
import com.viaversion.viaversion.util.MathUtil;
import java.util.ArrayList;
import java.util.BitSet;
@ -151,7 +152,7 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
final Position pos = wrapper.get(Type.POSITION1_14, 0);
// The protocol converters downstream rely on this field, let's add it back
newTag.put("id", new StringTag("minecraft:" + identifier));
newTag.put("id", new StringTag(Key.namespaced(identifier)));
// Weird glitches happen with the 1.17 client and below if these fields are missing
// Some examples are block entity models becoming invisible (e.g.: signs, banners)
@ -212,7 +213,7 @@ public final class BlockItemPackets1_18 extends ItemRewriter<ClientboundPackets1
tag.put("x", new IntTag((oldChunk.getX() << 4) + blockEntity.sectionX()));
tag.put("y", new IntTag(blockEntity.y()));
tag.put("z", new IntTag((oldChunk.getZ() << 4) + blockEntity.sectionZ()));
tag.put("id", new StringTag("minecraft:" + id));
tag.put("id", new StringTag(Key.namespaced(id)));
}
final Chunk chunk = new BaseChunk(oldChunk.getX(), oldChunk.getZ(), true, false, mask,

View File

@ -29,6 +29,7 @@ import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.NumberTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
import com.viaversion.viaversion.util.Key;
import java.io.IOException;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -42,13 +43,13 @@ public final class BackwardsMappings extends com.viaversion.viabackwards.api.dat
}
@Override
protected void loadVBExtras(final JsonObject unmapped, final JsonObject mapped) {
protected void loadVBExtras(final JsonObject unmappedIdentifiers, final JsonObject mappedIdentifiers, JsonObject diffMappings) {
int i = 0;
final JsonArray types = unmapped.getAsJsonArray("argumenttypes");
final JsonArray types = unmappedIdentifiers.getAsJsonArray("argumenttypes");
this.argumentTypes = new String[types.size()];
for (final JsonElement element : types) {
final String id = element.getAsString();
this.argumentTypes[i++] = id;
this.argumentTypes[i++] = Key.namespaced(id);
}
try {

View File

@ -22,6 +22,7 @@ import com.viaversion.viaversion.libs.fastutil.objects.Object2IntOpenHashMap;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.Protocol1_19_3To1_19_1;
import com.viaversion.viaversion.util.Key;
public final class BackwardsMappings extends com.viaversion.viabackwards.api.data.BackwardsMappings {
@ -33,14 +34,14 @@ public final class BackwardsMappings extends com.viaversion.viabackwards.api.dat
}
@Override
protected void loadVBExtras(final JsonObject unmapped, final JsonObject mapped) {
protected void loadVBExtras(final JsonObject unmappedIdentifiers, final JsonObject mappedIdentifiers, JsonObject diffMappings) {
int i = 0;
for (final JsonElement sound : mapped.getAsJsonArray("sounds")) {
for (final JsonElement sound : mappedIdentifiers.getAsJsonArray("sounds")) {
mappedSounds.put(sound.getAsString(), i++);
}
}
public int mappedSound(final String sound) {
return mappedSounds.getInt(sound.replace("minecraft:", ""));
return mappedSounds.getInt(Key.stripMinecraftNamespace(sound));
}
}

View File

@ -27,6 +27,7 @@ import com.viaversion.viaversion.protocols.protocol1_19_1to1_19.ServerboundPacke
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
import com.viaversion.viaversion.rewriter.BlockRewriter;
import com.viaversion.viaversion.rewriter.RecipeRewriter;
import com.viaversion.viaversion.util.Key;
public final class BlockItemPackets1_19_3 extends ItemRewriter<ClientboundPackets1_19_3, ServerboundPackets1_19_1, Protocol1_19_1To1_19_3> {
@ -68,7 +69,7 @@ public final class BlockItemPackets1_19_3 extends ItemRewriter<ClientboundPacket
protocol.registerClientbound(ClientboundPackets1_19_3.DECLARE_RECIPES, 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:", "");
final String type = Key.stripMinecraftNamespace(wrapper.passthrough(Type.STRING));
wrapper.passthrough(Type.STRING); // Recipe Identifier
switch (type) {
case "crafting_shapeless": {

View File

@ -27,6 +27,7 @@ import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ServerboundPac
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.rewriter.RecipeRewriter1_19_3;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4;
import com.viaversion.viaversion.rewriter.BlockRewriter;
import com.viaversion.viaversion.util.Key;
public final class BlockItemPackets1_19_4 extends ItemRewriter<ClientboundPackets1_19_4, ServerboundPackets1_19_3, Protocol1_19_3To1_19_4> {
@ -94,7 +95,7 @@ public final class BlockItemPackets1_19_4 extends ItemRewriter<ClientboundPacket
int newSize = size;
for (int i = 0; i < size; i++) {
final String type = wrapper.read(Type.STRING);
final String cutType = type.replace("minecraft:", "");
final String cutType = Key.stripMinecraftNamespace(type);
if (cutType.equals("smithing_transform") || cutType.equals("smithing_trim")) {
newSize--;
wrapper.read(Type.STRING); // Recipe identifier

View File

@ -1,28 +1,28 @@
{
"minecraft:nether_wastes": "nether",
"minecraft:soul_sand_valley": "nether",
"minecraft:crimson_forest": "nether",
"minecraft:warped_forest": "nether",
"minecraft:basalt_deltas": "nether",
"minecraft:dripstone_caves": "mountains",
"minecraft:lush_caves": "mountains",
"minecraft:meadow": "plains",
"minecraft:grove": "snowy_mountains",
"minecraft:snowy_slopes": "snowy_mountains",
"minecraft:frozen_peaks": "snowy_mountains",
"minecraft:jagged_peaks": "mountains",
"minecraft:stony_peaks": "mountains",
"minecraft:windswept_hills": "mountains",
"minecraft:snowy_plains": "snowy_tundra",
"minecraft:sparse_jungle": "jungle_edge",
"minecraft:stony_shore": "stone_shore",
"minecraft:old_growth_pine_taiga": "giant_spruce_taiga",
"minecraft:windswept_forest": "wooded_mountains",
"minecraft:wooded_badlands": "wooded_badlands_plateau",
"minecraft:windswept_gravelly_hills": "gravelly_mountains",
"minecraft:old_growth_birch_forest": "tall_birch_forest",
"minecraft:old_growth_spruce_taiga": "giant_spruce_taiga",
"minecraft:windswept_savanna": "shattered_savanna",
"minecraft:mangrove_swamp": "swamp",
"minecraft:deep_dark": "mountains"
"nether_wastes": "nether",
"soul_sand_valley": "nether",
"crimson_forest": "nether",
"warped_forest": "nether",
"basalt_deltas": "nether",
"dripstone_caves": "mountains",
"lush_caves": "mountains",
"meadow": "plains",
"grove": "snowy_mountains",
"snowy_slopes": "snowy_mountains",
"frozen_peaks": "snowy_mountains",
"jagged_peaks": "mountains",
"stony_peaks": "mountains",
"windswept_hills": "mountains",
"snowy_plains": "snowy_tundra",
"sparse_jungle": "jungle_edge",
"stony_shore": "stone_shore",
"old_growth_pine_taiga": "giant_spruce_taiga",
"windswept_forest": "wooded_mountains",
"wooded_badlands": "wooded_badlands_plateau",
"windswept_gravelly_hills": "gravelly_mountains",
"old_growth_birch_forest": "tall_birch_forest",
"old_growth_spruce_taiga": "giant_spruce_taiga",
"windswept_savanna": "shattered_savanna",
"mangrove_swamp": "swamp",
"deep_dark": "mountains"
}

View File

@ -1,20 +1,20 @@
{
"blockstates": {
"minecraft:tnt[unstable=false]": "minecraft:tnt",
"minecraft:tnt[unstable=true]": "minecraft:tnt",
"minecraft:oak_sign": "minecraft:sign[",
"minecraft:oak_wall_sign": "minecraft:wall_sign[",
"minecraft:smooth_stone_slab": "minecraft:stone_slab[",
"minecraft:dead_tube_coral": "minecraft:tube_coral",
"minecraft:dead_brain_coral": "minecraft:brain_coral",
"minecraft:dead_bubble_coral": "minecraft:bubble_coral",
"minecraft:dead_fire_coral": "minecraft:fire_coral",
"minecraft:dead_horn_coral": "minecraft:horn_coral",
"minecraft:tube_coral": "minecraft:tube_coral",
"minecraft:brain_coral": "minecraft:brain_coral",
"minecraft:bubble_coral": "minecraft:bubble_coral",
"minecraft:fire_coral": "minecraft:fire_coral",
"minecraft:horn_coral": "minecraft:horn_coral",
"minecraft:conduit": "minecraft:conduit"
"tnt[unstable=false]": "tnt",
"tnt[unstable=true]": "tnt",
"oak_sign": "sign[",
"oak_wall_sign": "wall_sign[",
"smooth_stone_slab": "stone_slab[",
"dead_tube_coral": "tube_coral",
"dead_brain_coral": "brain_coral",
"dead_bubble_coral": "bubble_coral",
"dead_fire_coral": "fire_coral",
"dead_horn_coral": "horn_coral",
"tube_coral": "tube_coral",
"brain_coral": "brain_coral",
"bubble_coral": "bubble_coral",
"fire_coral": "fire_coral",
"horn_coral": "horn_coral",
"conduit": "conduit"
}
}

View File

@ -1,69 +1,69 @@
{
"blockstates": {
"minecraft:bell[attachment=floor,facing=north,powered=true]": "minecraft:bell[attachment=floor,facing=north]",
"minecraft:bell[attachment=floor,facing=north,powered=false]": "minecraft:bell[attachment=floor,facing=north]",
"minecraft:bell[attachment=floor,facing=south,powered=true]": "minecraft:bell[attachment=floor,facing=south]",
"minecraft:bell[attachment=floor,facing=south,powered=false]": "minecraft:bell[attachment=floor,facing=south]",
"minecraft:bell[attachment=floor,facing=west,powered=true]": "minecraft:bell[attachment=floor,facing=west]",
"minecraft:bell[attachment=floor,facing=west,powered=false]": "minecraft:bell[attachment=floor,facing=west]",
"minecraft:bell[attachment=floor,facing=east,powered=true]": "minecraft:bell[attachment=floor,facing=east]",
"minecraft:bell[attachment=floor,facing=east,powered=false]": "minecraft:bell[attachment=floor,facing=east]",
"minecraft:bell[attachment=ceiling,facing=north,powered=true]": "minecraft:bell[attachment=ceiling,facing=north]",
"minecraft:bell[attachment=ceiling,facing=north,powered=false]": "minecraft:bell[attachment=ceiling,facing=north]",
"minecraft:bell[attachment=ceiling,facing=south,powered=true]": "minecraft:bell[attachment=ceiling,facing=south]",
"minecraft:bell[attachment=ceiling,facing=south,powered=false]": "minecraft:bell[attachment=ceiling,facing=south]",
"minecraft:bell[attachment=ceiling,facing=west,powered=true]": "minecraft:bell[attachment=ceiling,facing=west]",
"minecraft:bell[attachment=ceiling,facing=west,powered=false]": "minecraft:bell[attachment=ceiling,facing=west]",
"minecraft:bell[attachment=ceiling,facing=east,powered=true]": "minecraft:bell[attachment=ceiling,facing=east]",
"minecraft:bell[attachment=ceiling,facing=east,powered=false]": "minecraft:bell[attachment=ceiling,facing=east]",
"minecraft:bell[attachment=single_wall,facing=north,powered=true]": "minecraft:bell[attachment=single_wall,facing=north]",
"minecraft:bell[attachment=single_wall,facing=north,powered=false]": "minecraft:bell[attachment=single_wall,facing=north]",
"minecraft:bell[attachment=single_wall,facing=south,powered=true]": "minecraft:bell[attachment=single_wall,facing=south]",
"minecraft:bell[attachment=single_wall,facing=south,powered=false]": "minecraft:bell[attachment=single_wall,facing=south]",
"minecraft:bell[attachment=single_wall,facing=west,powered=true]": "minecraft:bell[attachment=single_wall,facing=west]",
"minecraft:bell[attachment=single_wall,facing=west,powered=false]": "minecraft:bell[attachment=single_wall,facing=west]",
"minecraft:bell[attachment=single_wall,facing=east,powered=true]": "minecraft:bell[attachment=single_wall,facing=east]",
"minecraft:bell[attachment=single_wall,facing=east,powered=false]": "minecraft:bell[attachment=single_wall,facing=east]",
"minecraft:bell[attachment=double_wall,facing=north,powered=true]": "minecraft:bell[attachment=double_wall,facing=north]",
"minecraft:bell[attachment=double_wall,facing=north,powered=false]": "minecraft:bell[attachment=double_wall,facing=north]",
"minecraft:bell[attachment=double_wall,facing=south,powered=true]": "minecraft:bell[attachment=double_wall,facing=south]",
"minecraft:bell[attachment=double_wall,facing=south,powered=false]": "minecraft:bell[attachment=double_wall,facing=south]",
"minecraft:bell[attachment=double_wall,facing=west,powered=true]": "minecraft:bell[attachment=double_wall,facing=west]",
"minecraft:bell[attachment=double_wall,facing=west,powered=false]": "minecraft:bell[attachment=double_wall,facing=west]",
"minecraft:bell[attachment=double_wall,facing=east,powered=true]": "minecraft:bell[attachment=double_wall,facing=east]",
"minecraft:bell[attachment=double_wall,facing=east,powered=false]": "minecraft:bell[attachment=double_wall,facing=east]",
"minecraft:honey_block": "minecraft:slime_block",
"minecraft:honeycomb_block": "minecraft:horn_coral_block",
"minecraft:beehive": "minecraft:barrel[facing=up,open=false]",
"minecraft:bee_nest": "minecraft:yellow_shulker_box[facing=up]"
"bell[attachment=floor,facing=north,powered=true]": "bell[attachment=floor,facing=north]",
"bell[attachment=floor,facing=north,powered=false]": "bell[attachment=floor,facing=north]",
"bell[attachment=floor,facing=south,powered=true]": "bell[attachment=floor,facing=south]",
"bell[attachment=floor,facing=south,powered=false]": "bell[attachment=floor,facing=south]",
"bell[attachment=floor,facing=west,powered=true]": "bell[attachment=floor,facing=west]",
"bell[attachment=floor,facing=west,powered=false]": "bell[attachment=floor,facing=west]",
"bell[attachment=floor,facing=east,powered=true]": "bell[attachment=floor,facing=east]",
"bell[attachment=floor,facing=east,powered=false]": "bell[attachment=floor,facing=east]",
"bell[attachment=ceiling,facing=north,powered=true]": "bell[attachment=ceiling,facing=north]",
"bell[attachment=ceiling,facing=north,powered=false]": "bell[attachment=ceiling,facing=north]",
"bell[attachment=ceiling,facing=south,powered=true]": "bell[attachment=ceiling,facing=south]",
"bell[attachment=ceiling,facing=south,powered=false]": "bell[attachment=ceiling,facing=south]",
"bell[attachment=ceiling,facing=west,powered=true]": "bell[attachment=ceiling,facing=west]",
"bell[attachment=ceiling,facing=west,powered=false]": "bell[attachment=ceiling,facing=west]",
"bell[attachment=ceiling,facing=east,powered=true]": "bell[attachment=ceiling,facing=east]",
"bell[attachment=ceiling,facing=east,powered=false]": "bell[attachment=ceiling,facing=east]",
"bell[attachment=single_wall,facing=north,powered=true]": "bell[attachment=single_wall,facing=north]",
"bell[attachment=single_wall,facing=north,powered=false]": "bell[attachment=single_wall,facing=north]",
"bell[attachment=single_wall,facing=south,powered=true]": "bell[attachment=single_wall,facing=south]",
"bell[attachment=single_wall,facing=south,powered=false]": "bell[attachment=single_wall,facing=south]",
"bell[attachment=single_wall,facing=west,powered=true]": "bell[attachment=single_wall,facing=west]",
"bell[attachment=single_wall,facing=west,powered=false]": "bell[attachment=single_wall,facing=west]",
"bell[attachment=single_wall,facing=east,powered=true]": "bell[attachment=single_wall,facing=east]",
"bell[attachment=single_wall,facing=east,powered=false]": "bell[attachment=single_wall,facing=east]",
"bell[attachment=double_wall,facing=north,powered=true]": "bell[attachment=double_wall,facing=north]",
"bell[attachment=double_wall,facing=north,powered=false]": "bell[attachment=double_wall,facing=north]",
"bell[attachment=double_wall,facing=south,powered=true]": "bell[attachment=double_wall,facing=south]",
"bell[attachment=double_wall,facing=south,powered=false]": "bell[attachment=double_wall,facing=south]",
"bell[attachment=double_wall,facing=west,powered=true]": "bell[attachment=double_wall,facing=west]",
"bell[attachment=double_wall,facing=west,powered=false]": "bell[attachment=double_wall,facing=west]",
"bell[attachment=double_wall,facing=east,powered=true]": "bell[attachment=double_wall,facing=east]",
"bell[attachment=double_wall,facing=east,powered=false]": "bell[attachment=double_wall,facing=east]",
"honey_block": "slime_block",
"honeycomb_block": "horn_coral_block",
"beehive": "barrel[facing=up,open=false]",
"bee_nest": "yellow_shulker_box[facing=up]"
},
"items": {
"minecraft:honey_bottle": {
"id": "minecraft:dragon_breath",
"honey_bottle": {
"id": "dragon_breath",
"name": "1.15 Honey Bottle"
},
"minecraft:honeycomb": {
"id": "minecraft:sunflower",
"honeycomb": {
"id": "sunflower",
"name": "1.15 Honeycomb"
},
"minecraft:honeycomb_block": {
"id": "minecraft:horn_coral_block",
"honeycomb_block": {
"id": "horn_coral_block",
"name": "1.15 Honeycomb Block"
},
"minecraft:bee_nest": {
"id": "minecraft:yellow_shulker_box",
"bee_nest": {
"id": "yellow_shulker_box",
"name": "1.15 Bee Nest"
},
"minecraft:beehive": {
"id": "minecraft:barrel",
"beehive": {
"id": "barrel",
"name": "1.15 Beehive"
},
"minecraft:honey_block": {
"id": "minecraft:slime_block",
"honey_block": {
"id": "slime_block",
"name": "1.15 Honey Block"
},
"minecraft:bee_spawn_egg": {
"id": "minecraft:ocelot_spawn_egg",
"bee_spawn_egg": {
"id": "ocelot_spawn_egg",
"name": "1.15 Bee Spawn Egg"
}
},

View File

@ -1,23 +1,23 @@
{
"blockstates": {
"minecraft:lantern[hanging=true,waterlogged=true]": "minecraft:lantern[hanging=true]",
"minecraft:lantern[hanging=true,waterlogged=false]": "minecraft:lantern[hanging=true]",
"minecraft:lantern[hanging=false,waterlogged=true]": "minecraft:lantern[hanging=false]",
"minecraft:lantern[hanging=false,waterlogged=false]": "minecraft:lantern[hanging=false]",
"minecraft:soul_lantern[hanging=true,waterlogged=true]": "minecraft:soul_lantern[hanging=true]",
"minecraft:soul_lantern[hanging=true,waterlogged=false]": "minecraft:soul_lantern[hanging=true]",
"minecraft:soul_lantern[hanging=false,waterlogged=true]": "minecraft:soul_lantern[hanging=false]",
"minecraft:soul_lantern[hanging=false,waterlogged=false]": "minecraft:soul_lantern[hanging=false]",
"minecraft:chain[axis=x,waterlogged=true]": "minecraft:chain[waterlogged=true]",
"minecraft:chain[axis=x,waterlogged=false]": "minecraft:chain[waterlogged=false]",
"minecraft:chain[axis=y,waterlogged=true]": "minecraft:chain[waterlogged=true]",
"minecraft:chain[axis=y,waterlogged=false]": "minecraft:chain[waterlogged=false]",
"minecraft:chain[axis=z,waterlogged=true]": "minecraft:chain[waterlogged=true]",
"minecraft:chain[axis=z,waterlogged=false]": "minecraft:chain[waterlogged=false]"
"lantern[hanging=true,waterlogged=true]": "lantern[hanging=true]",
"lantern[hanging=true,waterlogged=false]": "lantern[hanging=true]",
"lantern[hanging=false,waterlogged=true]": "lantern[hanging=false]",
"lantern[hanging=false,waterlogged=false]": "lantern[hanging=false]",
"soul_lantern[hanging=true,waterlogged=true]": "soul_lantern[hanging=true]",
"soul_lantern[hanging=true,waterlogged=false]": "soul_lantern[hanging=true]",
"soul_lantern[hanging=false,waterlogged=true]": "soul_lantern[hanging=false]",
"soul_lantern[hanging=false,waterlogged=false]": "soul_lantern[hanging=false]",
"chain[axis=x,waterlogged=true]": "chain[waterlogged=true]",
"chain[axis=x,waterlogged=false]": "chain[waterlogged=false]",
"chain[axis=y,waterlogged=true]": "chain[waterlogged=true]",
"chain[axis=y,waterlogged=false]": "chain[waterlogged=false]",
"chain[axis=z,waterlogged=true]": "chain[waterlogged=true]",
"chain[axis=z,waterlogged=false]": "chain[waterlogged=false]"
},
"items": {
"minecraft:piglin_brute_spawn_egg": {
"id": "minecraft:piglin_spawn_egg",
"piglin_brute_spawn_egg": {
"id": "piglin_spawn_egg",
"name": "1.16.2 Piglin Brute Spawn Egg"
}
},

View File

@ -15,8 +15,8 @@
"music.overworld.stony_peaks": ""
},
"items": {
"minecraft:music_disc_otherside": {
"id": "minecraft:music_disc_ward",
"music_disc_otherside": {
"id": "music_disc_ward",
"name": "1.18 Otherside Music Disc"
}
},

View File

@ -1,203 +1,203 @@
{
"blockstates": {
"minecraft:cherry_planks": "minecraft:acacia_planks",
"minecraft:cherry_sapling": "minecraft:acacia_sapling[",
"minecraft:suspicious_sand": "minecraft:sand",
"minecraft:cherry_log": "minecraft:acacia_log[",
"minecraft:stripped_cherry_log": "minecraft:stripped_acacia_log[",
"minecraft:cherry_wood": "minecraft:acacia_wood[",
"minecraft:stripped_cherry_wood": "minecraft:stripped_acacia_wood[",
"minecraft:cherry_leaves": "minecraft:acacia_leaves[",
"minecraft:torchflower": "minecraft:red_tulip",
"minecraft:cherry_sign": "minecraft:acacia_sign[",
"minecraft:cherry_wall_sign": "minecraft:acacia_wall_sign[",
"minecraft:cherry_hanging_sign": "minecraft:acacia_hanging_sign[",
"minecraft:cherry_wall_hanging_sign": "minecraft:acacia_wall_hanging_sign[",
"minecraft:cherry_pressure_plate": "minecraft:acacia_pressure_plate[",
"minecraft:cherry_trapdoor": "minecraft:acacia_trapdoor[",
"minecraft:potted_torchflower": "minecraft:potted_red_tulip",
"minecraft:potted_cherry_sapling": "minecraft:potted_pink_tulip",
"minecraft:cherry_button": "minecraft:acacia_button[",
"minecraft:cherry_stairs": "minecraft:acacia_stairs[",
"minecraft:cherry_slab": "minecraft:acacia_slab[",
"minecraft:cherry_fence": "minecraft:acacia_fence[",
"minecraft:cherry_fence_gate": "minecraft:acacia_fence_gate[",
"minecraft:cherry_door": "minecraft:acacia_door[",
"minecraft:torchflower_crop": "minecraft:melon_stem[",
"minecraft:pink_petals": "minecraft:air",
"minecraft:decorated_pot": "minecraft:bricks"
"cherry_planks": "acacia_planks",
"cherry_sapling": "acacia_sapling[",
"suspicious_sand": "sand",
"cherry_log": "acacia_log[",
"stripped_cherry_log": "stripped_acacia_log[",
"cherry_wood": "acacia_wood[",
"stripped_cherry_wood": "stripped_acacia_wood[",
"cherry_leaves": "acacia_leaves[",
"torchflower": "red_tulip",
"cherry_sign": "acacia_sign[",
"cherry_wall_sign": "acacia_wall_sign[",
"cherry_hanging_sign": "acacia_hanging_sign[",
"cherry_wall_hanging_sign": "acacia_wall_hanging_sign[",
"cherry_pressure_plate": "acacia_pressure_plate[",
"cherry_trapdoor": "acacia_trapdoor[",
"potted_torchflower": "potted_red_tulip",
"potted_cherry_sapling": "potted_pink_tulip",
"cherry_button": "acacia_button[",
"cherry_stairs": "acacia_stairs[",
"cherry_slab": "acacia_slab[",
"cherry_fence": "acacia_fence[",
"cherry_fence_gate": "acacia_fence_gate[",
"cherry_door": "acacia_door[",
"torchflower_crop": "melon_stem[",
"pink_petals": "air",
"decorated_pot": "bricks"
},
"blockentities": {
"suspicious_sand": "",
"decorated_pot": ""
},
"items": {
"minecraft:cherry_planks": {
"id": "minecraft:acacia_planks",
"cherry_planks": {
"id": "acacia_planks",
"name": "1.19.4 Cherry Planks"
},
"minecraft:cherry_sapling": {
"id": "minecraft:peony",
"cherry_sapling": {
"id": "peony",
"name": "1.19.4 Cherry Sapling"
},
"minecraft:suspicious_sand": {
"id": "minecraft:sand",
"suspicious_sand": {
"id": "sand",
"name": "1.19.4 Suspicious Sand"
},
"minecraft:cherry_log": {
"id": "minecraft:acacia_log",
"cherry_log": {
"id": "acacia_log",
"name": "1.19.4 Cherry Log"
},
"minecraft:stripped_cherry_log": {
"id": "minecraft:stripped_acacia_log",
"stripped_cherry_log": {
"id": "stripped_acacia_log",
"name": "1.19.4 Stripped Cherry Log"
},
"minecraft:stripped_cherry_wood": {
"id": "minecraft:stripped_acacia_wood",
"stripped_cherry_wood": {
"id": "stripped_acacia_wood",
"name": "1.19.4 Stripped Cherry Wood"
},
"minecraft:cherry_wood": {
"id": "minecraft:acacia_wood",
"cherry_wood": {
"id": "acacia_wood",
"name": "1.19.4 Cherry Wood"
},
"minecraft:cherry_leaves": {
"id": "minecraft:acacia_leaves",
"cherry_leaves": {
"id": "acacia_leaves",
"name": "1.19.4 Cherry Leaves"
},
"minecraft:torchflower": {
"id": "minecraft:red_tulip",
"torchflower": {
"id": "red_tulip",
"name": "1.19.4 Torchflower"
},
"minecraft:pink_petals": {
"id": "minecraft:brain_coral_fan",
"pink_petals": {
"id": "brain_coral_fan",
"name": "1.19.4 Pink Petals"
},
"minecraft:cherry_slab": {
"id": "minecraft:acacia_slab",
"cherry_slab": {
"id": "acacia_slab",
"name": "1.19.4 Cherry Slab"
},
"minecraft:decorated_pot": {
"id": "minecraft:flower_pot",
"decorated_pot": {
"id": "flower_pot",
"name": "1.19.4 Decorated Pot"
},
"minecraft:cherry_fence": {
"id": "minecraft:acacia_fence",
"cherry_fence": {
"id": "acacia_fence",
"name": "1.19.4 Cherry Fence"
},
"minecraft:cherry_stairs": {
"id": "minecraft:acacia_stairs",
"cherry_stairs": {
"id": "acacia_stairs",
"name": "1.19.4 Cherry Stairs"
},
"minecraft:cherry_button": {
"id": "minecraft:acacia_button",
"cherry_button": {
"id": "acacia_button",
"name": "1.19.4 Cherry Button"
},
"minecraft:cherry_pressure_plate": {
"id": "minecraft:acacia_pressure_plate",
"cherry_pressure_plate": {
"id": "acacia_pressure_plate",
"name": "1.19.4 Cherry Pressure Plate"
},
"minecraft:cherry_door": {
"id": "minecraft:acacia_door",
"cherry_door": {
"id": "acacia_door",
"name": "1.19.4 Cherry Door"
},
"minecraft:cherry_trapdoor": {
"id": "minecraft:acacia_trapdoor",
"cherry_trapdoor": {
"id": "acacia_trapdoor",
"name": "1.19.4 Cherry Trapdoor"
},
"minecraft:cherry_fence_gate": {
"id": "minecraft:acacia_fence_gate",
"cherry_fence_gate": {
"id": "acacia_fence_gate",
"name": "1.19.4 Cherry Fence Gate"
},
"minecraft:cherry_boat": {
"id": "minecraft:acacia_boat",
"cherry_boat": {
"id": "acacia_boat",
"name": "1.19.4 Cherry Boat"
},
"minecraft:cherry_chest_boat": {
"id": "minecraft:acacia_chest_boat",
"cherry_chest_boat": {
"id": "acacia_chest_boat",
"name": "1.19.4 Cherry Chest Boat"
},
"minecraft:cherry_sign": {
"id": "minecraft:acacia_sign",
"cherry_sign": {
"id": "acacia_sign",
"name": "1.19.4 Cherry Sign"
},
"minecraft:cherry_hanging_sign": {
"id": "minecraft:acacia_hanging_sign",
"cherry_hanging_sign": {
"id": "acacia_hanging_sign",
"name": "1.19.4 Cherry Hanging Sign"
},
"minecraft:sniffer_spawn_egg": {
"id": "minecraft:strider_spawn_egg",
"sniffer_spawn_egg": {
"id": "strider_spawn_egg",
"name": "1.19.4 Sniffer Spawn Egg"
},
"minecraft:torchflower_seeds": {
"id": "minecraft:beetroot_seeds",
"torchflower_seeds": {
"id": "beetroot_seeds",
"name": "1.19.4 Torchflower Seeds"
},
"minecraft:brush": {
"id": "minecraft:shears",
"brush": {
"id": "shears",
"name": "1.19.4 Brush"
},
"minecraft:netherite_upgrade_smithing_template": {
"id": "minecraft:book",
"netherite_upgrade_smithing_template": {
"id": "book",
"name": "1.19.4 Netherite Upgrade Smithing Template"
},
"minecraft:sentry_armor_trim_smithing_template": {
"id": "minecraft:book",
"sentry_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Sentry Armor Trim Smithing Template"
},
"minecraft:dune_armor_trim_smithing_template": {
"id": "minecraft:book",
"dune_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Dune Armor Trim Smithing Template"
},
"minecraft:coast_armor_trim_smithing_template": {
"id": "minecraft:book",
"coast_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Coast Armor Trim Smithing Template"
},
"minecraft:wild_armor_trim_smithing_template": {
"id": "minecraft:book",
"wild_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Wild Armor Trim Smithing Template"
},
"minecraft:ward_armor_trim_smithing_template": {
"id": "minecraft:book",
"ward_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Ward Armor Trim Smithing Template"
},
"minecraft:eye_armor_trim_smithing_template": {
"id": "minecraft:book",
"eye_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Eye Armor Trim Smithing Template"
},
"minecraft:vex_armor_trim_smithing_template": {
"id": "minecraft:book",
"vex_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Vex Armor Trim Smithing Template"
},
"minecraft:tide_armor_trim_smithing_template": {
"id": "minecraft:book",
"tide_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Tide Armor Trim Smithing Template"
},
"minecraft:snout_armor_trim_smithing_template": {
"id": "minecraft:book",
"snout_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Snout Armor Trim Smithing Template"
},
"minecraft:rib_armor_trim_smithing_template": {
"id": "minecraft:book",
"rib_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Rib Armor Trim Smithing Template"
},
"minecraft:spire_armor_trim_smithing_template": {
"id": "minecraft:book",
"spire_armor_trim_smithing_template": {
"id": "book",
"name": "1.19.4 Spire Armor Trim Smithing Template"
},
"minecraft:pottery_shard_archer": {
"id": "minecraft:brick",
"pottery_shard_archer": {
"id": "brick",
"name": "1.19.4 Pottery Shard Archer"
},
"minecraft:pottery_shard_prize": {
"id": "minecraft:brick",
"pottery_shard_prize": {
"id": "brick",
"name": "1.19.4 Pottery Shard Prize"
},
"minecraft:pottery_shard_arms_up": {
"id": "minecraft:brick",
"pottery_shard_arms_up": {
"id": "brick",
"name": "1.19.4 Pottery Shard Arms Up"
},
"minecraft:pottery_shard_skull": {
"id": "minecraft:brick",
"pottery_shard_skull": {
"id": "brick",
"name": "1.19.4 Pottery Shard Skull"
}
},
@ -274,6 +274,6 @@
"sniffer": "Sniffer"
},
"argumenttypes": {
"minecraft:heightmap": "brigadier:string"
"heightmap": "brigadier:string"
}
}

View File

@ -3,7 +3,7 @@ metadata.format.version = "1.1"
[versions]
# ViaVersion
viaver = "4.6.0-23w08a-SNAPSHOT"
viaver = "4.6.0-1.19.4-pre3-SNAPSHOT"
# Common provided
netty = "4.0.20.Final"

View File

@ -5,7 +5,7 @@ rootProject.name = "viabackwards-parent"
dependencyResolutionManagement {
repositories {
maven("https://repo.viaversion.com")
maven("https://papermc.io/repo/repository/maven-public/")
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://oss.sonatype.org/content/repositories/snapshots/")
maven("https://repo.spongepowered.org/maven")
mavenCentral()