mirror of
https://github.com/ViaVersion/ViaBackwards.git
synced 2024-11-21 12:07:38 +01:00
Rework legacy item/block mappings format (#728)
This commit is contained in:
parent
c4c15fb047
commit
100febf575
@ -27,13 +27,19 @@ public class MappedLegacyBlockItem {
|
||||
private final short data;
|
||||
private final String name;
|
||||
private final IdAndData block;
|
||||
private final Type type;
|
||||
private BlockEntityHandler blockEntityHandler;
|
||||
|
||||
public MappedLegacyBlockItem(int id, short data, @Nullable String name, boolean block) {
|
||||
public MappedLegacyBlockItem(int id) {
|
||||
this(id, (short) -1, null, Type.ITEM);
|
||||
}
|
||||
|
||||
public MappedLegacyBlockItem(int id, short data, @Nullable String name, Type type) {
|
||||
this.id = id;
|
||||
this.data = data;
|
||||
this.name = name != null ? "§f" + name : null;
|
||||
this.block = block ? data != -1 ? new IdAndData(id, data) : new IdAndData(id) : null;
|
||||
this.block = type != Type.ITEM ? data != -1 ? new IdAndData(id, data) : new IdAndData(id) : null;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
@ -48,8 +54,8 @@ public class MappedLegacyBlockItem {
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean isBlock() {
|
||||
return block != null;
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public IdAndData getBlock() {
|
||||
@ -73,4 +79,21 @@ public class MappedLegacyBlockItem {
|
||||
|
||||
CompoundTag handleOrNewCompoundTag(int block, CompoundTag tag);
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
|
||||
ITEM("items"),
|
||||
BLOCK_ITEM("block-items"),
|
||||
BLOCK("blocks");
|
||||
|
||||
final String name;
|
||||
|
||||
Type(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,18 +62,25 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
protected LegacyBlockItemRewriter(T protocol, String name) {
|
||||
super(protocol, Type.ITEM1_8, Type.ITEM1_8_SHORT_ARRAY, false);
|
||||
final JsonObject jsonObject = readMappingsFile("item-mappings-" + name + ".json");
|
||||
for (Map.Entry<String, JsonElement> dataEntry : jsonObject.entrySet()) {
|
||||
addMapping(dataEntry.getKey(), dataEntry.getValue().getAsJsonObject(), replacementData);
|
||||
for (final MappedLegacyBlockItem.Type value : MappedLegacyBlockItem.Type.values()) {
|
||||
addMappings(value, jsonObject, replacementData);
|
||||
}
|
||||
}
|
||||
|
||||
private void addMapping(String key, JsonObject object, Int2ObjectMap<MappedLegacyBlockItem> mappings) {
|
||||
private void addMappings(MappedLegacyBlockItem.Type type, JsonObject object, Int2ObjectMap<MappedLegacyBlockItem> mappings) {
|
||||
if (object.has(type.getName())) {
|
||||
final JsonObject mappingsObject = object.getAsJsonObject(type.getName());
|
||||
for (Map.Entry<String, JsonElement> dataEntry : mappingsObject.entrySet()) {
|
||||
addMapping(dataEntry.getKey(), dataEntry.getValue().getAsJsonObject(), type, mappings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addMapping(String key, JsonObject object, MappedLegacyBlockItem.Type type, Int2ObjectMap<MappedLegacyBlockItem> mappings) {
|
||||
int id = object.getAsJsonPrimitive("id").getAsInt();
|
||||
JsonPrimitive jsonData = object.getAsJsonPrimitive("data");
|
||||
short data = jsonData != null ? jsonData.getAsShort() : 0;
|
||||
String name = object.getAsJsonPrimitive("name").getAsString();
|
||||
JsonPrimitive blockField = object.getAsJsonPrimitive("block");
|
||||
boolean block = blockField != null && blockField.getAsBoolean();
|
||||
String name = type != MappedLegacyBlockItem.Type.BLOCK ? object.getAsJsonPrimitive("name").getAsString() : null;
|
||||
|
||||
if (key.indexOf('-') == -1) {
|
||||
int unmappedId;
|
||||
@ -87,7 +94,7 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
unmappedId = IdAndData.toRawData(Integer.parseInt(key));
|
||||
}
|
||||
|
||||
mappings.put(unmappedId, new MappedLegacyBlockItem(id, data, name, block));
|
||||
mappings.put(unmappedId, new MappedLegacyBlockItem(id, data, name, type));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -97,12 +104,12 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
int to = Integer.parseInt(split[1]);
|
||||
|
||||
// Special block color handling
|
||||
if (name.contains("%color%")) {
|
||||
if (name != null && name.contains("%color%")) {
|
||||
for (int i = from; i <= to; i++) {
|
||||
mappings.put(IdAndData.toRawData(i), new MappedLegacyBlockItem(id, data, name.replace("%color%", BlockColors.get(i - from)), block));
|
||||
mappings.put(IdAndData.toRawData(i), new MappedLegacyBlockItem(id, data, name.replace("%color%", BlockColors.get(i - from)), type));
|
||||
}
|
||||
} else {
|
||||
MappedLegacyBlockItem mappedBlockItem = new MappedLegacyBlockItem(id, data, name, block);
|
||||
MappedLegacyBlockItem mappedBlockItem = new MappedLegacyBlockItem(id, data, name, type);
|
||||
for (int i = from; i <= to; i++) {
|
||||
mappings.put(IdAndData.toRawData(i), mappedBlockItem);
|
||||
}
|
||||
@ -146,7 +153,7 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
if (item == null) return null;
|
||||
|
||||
MappedLegacyBlockItem data = getMappedBlockItem(item.identifier(), item.data());
|
||||
if (data == null) {
|
||||
if (data == null || data.getType() == MappedLegacyBlockItem.Type.BLOCK) {
|
||||
// Just rewrite the id
|
||||
return super.handleItemToClient(connection, item);
|
||||
}
|
||||
@ -219,7 +226,9 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
|
||||
public @Nullable IdAndData handleBlock(int blockId, int data) {
|
||||
MappedLegacyBlockItem settings = getMappedBlockItem(blockId, data);
|
||||
if (settings == null || !settings.isBlock()) return null;
|
||||
if (settings == null || settings.getType() == MappedLegacyBlockItem.Type.ITEM) {
|
||||
return null;
|
||||
}
|
||||
|
||||
IdAndData block = settings.getBlock();
|
||||
// For some blocks, the data can still be useful (:
|
||||
|
@ -274,7 +274,7 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter<ClientboundPac
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
// Handle spawner block entity (map to itself with custom handler)
|
||||
MappedLegacyBlockItem data = replacementData.computeIfAbsent(IdAndData.toRawData(52), s -> new MappedLegacyBlockItem(52, (short) -1, null, false));
|
||||
MappedLegacyBlockItem data = replacementData.computeIfAbsent(IdAndData.toRawData(52), s -> new MappedLegacyBlockItem(52));
|
||||
data.setBlockEntityHandler((b, tag) -> {
|
||||
EntityIdRewriter.toClientSpawner(tag, true);
|
||||
return tag;
|
||||
|
@ -1,33 +1,32 @@
|
||||
{
|
||||
"255": {
|
||||
"id": 217,
|
||||
"name": "1.10 Structure Block"
|
||||
"items": {
|
||||
"255": {
|
||||
"id": 217,
|
||||
"name": "1.10 Structure Block"
|
||||
}
|
||||
},
|
||||
"217": {
|
||||
"id": 287,
|
||||
"name": "1.10 Structure Void",
|
||||
"block": true
|
||||
},
|
||||
"213": {
|
||||
"id": 159,
|
||||
"data": 1,
|
||||
"name": "1.10 Magma Block",
|
||||
"block": true
|
||||
},
|
||||
"214": {
|
||||
"id": 159,
|
||||
"data": 14,
|
||||
"name": "1.10 Nether Wart Block",
|
||||
"block": true
|
||||
},
|
||||
"215": {
|
||||
"id": 112,
|
||||
"name": "1.10 Red Nether Bricks",
|
||||
"block": true
|
||||
},
|
||||
"216": {
|
||||
"id": 155,
|
||||
"name": "1.10 Bone Block",
|
||||
"block": true
|
||||
"block-items": {
|
||||
"217": {
|
||||
"id": 287,
|
||||
"name": "1.10 Structure Void"
|
||||
},
|
||||
"213": {
|
||||
"id": 159,
|
||||
"data": 1,
|
||||
"name": "1.10 Magma Block"
|
||||
},
|
||||
"214": {
|
||||
"id": 159,
|
||||
"data": 14,
|
||||
"name": "1.10 Nether Wart Block"
|
||||
},
|
||||
"215": {
|
||||
"id": 112,
|
||||
"name": "1.10 Red Nether Bricks"
|
||||
},
|
||||
"216": {
|
||||
"id": 155,
|
||||
"name": "1.10 Bone Block"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
{
|
||||
"452": {
|
||||
"id": 265,
|
||||
"name": "1.11.1 Iron Nugget"
|
||||
"items": {
|
||||
"452": {
|
||||
"id": 265,
|
||||
"name": "1.11.1 Iron Nugget"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +1,23 @@
|
||||
{
|
||||
"218": {
|
||||
"id": 23,
|
||||
"data": -1,
|
||||
"name": "1.11 Observer",
|
||||
"block": true
|
||||
"items": {
|
||||
"449": {
|
||||
"id": 418,
|
||||
"name": "1.11 Totem of Undying"
|
||||
},
|
||||
"450": {
|
||||
"id": 433,
|
||||
"name": "1.11 Shulker Shell"
|
||||
}
|
||||
},
|
||||
"449": {
|
||||
"id": 418,
|
||||
"name": "1.11 Totem of Undying"
|
||||
},
|
||||
"450": {
|
||||
"id": 433,
|
||||
"name": "1.11 Shulker Shell"
|
||||
},
|
||||
"219-234": {
|
||||
"id": 158,
|
||||
"name": "1.11 %color% Shulker Box",
|
||||
"block": true
|
||||
"block-items": {
|
||||
"218": {
|
||||
"id": 23,
|
||||
"data": -1,
|
||||
"name": "1.11 Observer"
|
||||
},
|
||||
"219-234": {
|
||||
"id": 158,
|
||||
"name": "1.11 %color% Shulker Box"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,27 +1,28 @@
|
||||
{
|
||||
"251": {
|
||||
"id": 159,
|
||||
"data": -1,
|
||||
"name": "1.12 %vb_color% Concrete",
|
||||
"block": true
|
||||
"items": {
|
||||
"453": {
|
||||
"id": 340,
|
||||
"name": "1.12 Knowledge Book"
|
||||
},
|
||||
"355": {
|
||||
"id": 355,
|
||||
"name": "1.12 %vb_color% Bed"
|
||||
}
|
||||
},
|
||||
"252": {
|
||||
"id": 35,
|
||||
"data": -1,
|
||||
"name": "1.12 %vb_color% Concrete Powder",
|
||||
"block": true
|
||||
},
|
||||
"453": {
|
||||
"id": 340,
|
||||
"name": "1.12 Knowledge Book"
|
||||
},
|
||||
"355": {
|
||||
"id": 355,
|
||||
"name": "1.12 %vb_color% Bed"
|
||||
},
|
||||
"235-250": {
|
||||
"id": 159,
|
||||
"name": "1.12 %color% Glazed Terracotta",
|
||||
"block": true
|
||||
"block-items": {
|
||||
"251": {
|
||||
"id": 159,
|
||||
"data": -1,
|
||||
"name": "1.12 %vb_color% Concrete"
|
||||
},
|
||||
"252": {
|
||||
"id": 35,
|
||||
"data": -1,
|
||||
"name": "1.12 %vb_color% Concrete Powder"
|
||||
},
|
||||
"235-250": {
|
||||
"id": 159,
|
||||
"name": "1.12 %color% Glazed Terracotta"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user