Rework legacy item/block mappings format (#728)

This commit is contained in:
EnZaXD 2024-04-26 09:18:42 +02:00 committed by GitHub
parent c4c15fb047
commit 100febf575
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 125 additions and 89 deletions

View File

@ -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;
}
}
}

View File

@ -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 (:

View File

@ -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;

View File

@ -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"
}
}
}

View File

@ -1,6 +1,8 @@
{
"452": {
"id": 265,
"name": "1.11.1 Iron Nugget"
"items": {
"452": {
"id": 265,
"name": "1.11.1 Iron Nugget"
}
}
}

View File

@ -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"
}
}
}

View File

@ -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"
}
}
}