Skip to content

Commit 3b30aa2

Browse files
committed
Make entity data type mapping less manual
1 parent 74b0bfb commit 3b30aa2

File tree

9 files changed

+94
-148
lines changed

9 files changed

+94
-148
lines changed

common/src/main/java/com/viaversion/viabackwards/protocol/template/EntityPacketRewriter99_1.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
2121
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2222
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_11;
23-
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_11;
23+
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes26_1;
2424
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
2525
import com.viaversion.viaversion.protocols.v1_21_11to26_1.packet.ClientboundPacket26_1;
2626

2727
// Replace if needed
2828
// VersionedTypes
2929
final class EntityPacketRewriter99_1 extends EntityRewriter<ClientboundPacket26_1, Protocol99_1To98_1> {
3030

31-
private static final EntityDataTypes1_21_11 MAPPED_DATA_TYPES = VersionedTypes.V1_21_11.entityDataTypes;
31+
private static final EntityDataTypes26_1 MAPPED_DATA_TYPES = VersionedTypes.V26_1.entityDataTypes;
3232

3333
public EntityPacketRewriter99_1(final Protocol99_1To98_1 protocol) {
3434
super(protocol, MAPPED_DATA_TYPES.optionalComponentType, MAPPED_DATA_TYPES.booleanType);
@@ -40,16 +40,13 @@ public void registerPackets() {
4040

4141
@Override
4242
protected void registerRewrites() {
43-
/*filter().handler((event, data) -> {
44-
int id = data.dataType().typeId();
45-
if (id >= ac) {
46-
return;
47-
} else if (id >= ab) {
48-
id--;
49-
}
50-
51-
data.setDataType(MAPPED_DATA_TYPES.byId(id));
52-
});*/
43+
dataTypeMapper().register();
44+
/* ... or like this for additions and removals that are not at the very end
45+
dataTypeMapper()
46+
.added(MAPPED_DATA_TYPES.catSoundVariant)
47+
.removed(MAPPED_DATA_TYPES.cowSoundVariant)
48+
.skip(MAPPED_DATA_TYPES.pigSoundVariant) // if neither removed nor added, but the value type has to be changed separately
49+
.register();*/
5350

5451
registerEntityDataTypeHandler1_20_3(
5552
MAPPED_DATA_TYPES.itemType,

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/rewriter/EntityPacketRewriter1_21_11.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,13 @@ public void registerPackets() {
6363
protected void registerRewrites() {
6464
final EntityDataTypes1_21_11 unmappedDataTypes = VersionedTypes.V1_21_11.entityDataTypes;
6565
final EntityDataTypes1_21_9 entityDataTypes = VersionedTypes.V1_21_9.entityDataTypes;
66-
filter().handler((event, data) -> {
67-
if (data.dataType() == unmappedDataTypes.humanoidArmType) {
68-
final int arm = data.value();
69-
data.setTypeAndValue(entityDataTypes.byteType, (byte) arm);
70-
return;
71-
} else if (data.dataType() == unmappedDataTypes.zombieNautilusVariantType) {
72-
event.cancel();
73-
return;
74-
}
75-
76-
int id = data.dataType().typeId();
77-
if (id > unmappedDataTypes.zombieNautilusVariantType.typeId()) {
78-
id--;
79-
}
80-
data.setDataType(entityDataTypes.byId(id));
66+
dataTypeMapper()
67+
.removed(unmappedDataTypes.zombieNautilusVariantType)
68+
.skip(unmappedDataTypes.humanoidArmType)
69+
.register();
70+
filter().dataType(unmappedDataTypes.humanoidArmType).handler((event, data) -> {
71+
final int arm = data.value();
72+
data.setTypeAndValue(entityDataTypes.byteType, (byte) arm);
8173
});
8274

8375
registerEntityDataTypeHandler1_20_3(

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/rewriter/EntityPacketRewriter1_21_2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ private void fixOnGround(final PacketWrapper wrapper) {
626626

627627
@Override
628628
protected void registerRewrites() {
629-
filter().mapDataType(VersionedTypes.V1_21.entityDataTypes::byId);
629+
dataTypeMapper().register();
630630
registerEntityDataTypeHandler1_20_3(
631631
VersionedTypes.V1_21.entityDataTypes.itemType,
632632
VersionedTypes.V1_21.entityDataTypes.blockStateType,

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/rewriter/EntityPacketRewriter1_21_4.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void registerPackets() {
7777

7878
@Override
7979
protected void registerRewrites() {
80-
filter().mapDataType(VersionedTypes.V1_21_2.entityDataTypes::byId);
80+
dataTypeMapper().register();
8181
registerEntityDataTypeHandler1_20_3(
8282
VersionedTypes.V1_21_2.entityDataTypes.itemType,
8383
VersionedTypes.V1_21_2.entityDataTypes.blockStateType,

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/EntityPacketRewriter1_21_5.java

Lines changed: 43 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -136,62 +136,17 @@ private String collision(final int id) {
136136
protected void registerRewrites() {
137137
final EntityDataTypes1_21_5 entityDataTypes = VersionedTypes.V1_21_5.entityDataTypes;
138138
final EntityDataTypes1_21_2 mappedEntityDataTypes = VersionedTypes.V1_21_4.entityDataTypes;
139-
filter().handler((event, data) -> {
140-
final int id = data.dataType().typeId();
141-
if (id == entityDataTypes.wolfVariantType.typeId()) {
142-
final int type = data.value();
143-
final Holder<WolfVariant> variant = Holder.of(type);
144-
data.setTypeAndValue(mappedEntityDataTypes.wolfVariantType, variant);
145-
return;
146-
} else if (id == entityDataTypes.frogVariantType.typeId()) {
147-
final int value = data.value();
148-
final String variantKey = protocol.getRegistryDataRewriter().getMappings("frog_variant").idToKey(value);
149-
final int newValue = (variantKey == null) ? 0 : switch (variantKey) {
150-
case "cold" -> 2;
151-
case "temperate" -> 0;
152-
case "warm" -> 1;
153-
default -> 0;
154-
};
155-
data.setTypeAndValue(mappedEntityDataTypes.frogVariantType, newValue);
156-
return;
157-
} else if (id == entityDataTypes.catVariantType.typeId()) {
158-
final int value = data.value();
159-
final String variantKey = protocol.getRegistryDataRewriter().getMappings("cat_variant").idToKey(value);
160-
final int newValue = (variantKey == null) ? 1 : switch (variantKey) {
161-
case "all_black" -> 10;
162-
case "black" -> 1;
163-
case "british_shorthair" -> 4;
164-
case "calico" -> 5;
165-
case "jellie" -> 9;
166-
case "persian" -> 6;
167-
case "ragdoll" -> 7;
168-
case "red" -> 2;
169-
case "siamese" -> 3;
170-
case "tabby" -> 0;
171-
case "white" -> 8;
172-
default -> 1;
173-
};
174-
data.setTypeAndValue(mappedEntityDataTypes.catVariantType, newValue);
175-
return;
176-
}
177-
178-
int mappedId = id;
179-
if (id == entityDataTypes.cowVariantType.typeId()
180-
|| id == entityDataTypes.pigVariantType.typeId()
181-
|| id == entityDataTypes.chickenVariantType.typeId()
182-
|| id == entityDataTypes.wolfSoundVariantType.typeId()) {
183-
event.cancel();
184-
return;
185-
} else if (id > entityDataTypes.chickenVariantType.typeId()) {
186-
mappedId -= 4;
187-
} else if (id > entityDataTypes.pigVariantType.typeId()) {
188-
mappedId -= 3;
189-
} else if (id > entityDataTypes.wolfSoundVariantType.typeId()) {
190-
mappedId -= 2;
191-
} else if (id > entityDataTypes.cowVariantType.typeId()) {
192-
mappedId -= 1;
193-
}
194-
data.setDataType(mappedEntityDataTypes.byId(mappedId));
139+
dataTypeMapper()
140+
.removed(entityDataTypes.cowVariantType)
141+
.removed(entityDataTypes.wolfSoundVariantType)
142+
.removed(entityDataTypes.pigVariantType)
143+
.removed(entityDataTypes.chickenVariantType)
144+
.skip(entityDataTypes.wolfVariantType)
145+
.register();
146+
filter().dataType(entityDataTypes.wolfVariantType).handler((event, data) -> {
147+
final int type = data.value();
148+
final Holder<WolfVariant> variant = Holder.of(type);
149+
data.setTypeAndValue(mappedEntityDataTypes.wolfVariantType, variant);
195150
});
196151

197152
registerEntityDataTypeHandler1_20_3(
@@ -204,6 +159,37 @@ protected void registerRewrites() {
204159
mappedEntityDataTypes.optionalComponentType
205160
);
206161

162+
filter().dataType(mappedEntityDataTypes.frogVariantType).handler((event, data) -> {
163+
final int value = data.value();
164+
final String variantKey = protocol.getRegistryDataRewriter().getMappings("frog_variant").idToKey(value);
165+
final int newValue = (variantKey == null) ? 0 : switch (variantKey) {
166+
case "cold" -> 2;
167+
case "temperate" -> 0;
168+
case "warm" -> 1;
169+
default -> 0;
170+
};
171+
data.setValue(newValue);
172+
});
173+
filter().dataType(mappedEntityDataTypes.catVariantType).handler((event, data) -> {
174+
final int value = data.value();
175+
final String variantKey = protocol.getRegistryDataRewriter().getMappings("cat_variant").idToKey(value);
176+
final int newValue = (variantKey == null) ? 1 : switch (variantKey) {
177+
case "all_black" -> 10;
178+
case "black" -> 1;
179+
case "british_shorthair" -> 4;
180+
case "calico" -> 5;
181+
case "jellie" -> 9;
182+
case "persian" -> 6;
183+
case "ragdoll" -> 7;
184+
case "red" -> 2;
185+
case "siamese" -> 3;
186+
case "tabby" -> 0;
187+
case "white" -> 8;
188+
default -> 1;
189+
};
190+
data.setValue(newValue);
191+
});
192+
207193
filter().type(EntityTypes1_21_5.ABSTRACT_MINECART).addIndex(13); // Custom display
208194
filter().type(EntityTypes1_21_5.ABSTRACT_MINECART).index(11).handler((event, data) -> {
209195
final int state = (int) data.getValue();
@@ -240,7 +226,7 @@ protected void registerRewrites() {
240226

241227
filter().type(EntityTypes1_21_5.CHICKEN).cancel(17); // Chicken variant
242228
filter().type(EntityTypes1_21_5.COW).cancel(17); // Cow variant
243-
filter().type(EntityTypes1_21_5.PIG).cancel(19); // Pig variant
229+
filter().type(EntityTypes1_21_5.PIG).cancel(18); // Pig variant
244230
filter().type(EntityTypes1_21_5.WOLF).cancel(23); // Sound variant
245231
filter().type(EntityTypes1_21_5.EXPERIENCE_ORB).cancel(8); // Value
246232

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/EntityPacketRewriter1_21_6.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void registerPackets() {
8484
@Override
8585
protected void registerRewrites() {
8686
final EntityDataTypes1_21_5 entityDataTypes = VersionedTypes.V1_21_5.entityDataTypes;
87-
filter().mapDataType(entityDataTypes::byId);
87+
dataTypeMapper().register();
8888
registerEntityDataTypeHandler1_20_3(
8989
entityDataTypes.itemType,
9090
entityDataTypes.blockStateType,

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -338,27 +338,12 @@ private void storePlayerRotation(final PacketWrapper wrapper) {
338338
@Override
339339
protected void registerRewrites() {
340340
final EntityDataTypes1_21_5 entityDataTypes = protocol.mappedTypes().entityDataTypes();
341-
filter().handler((event, data) -> {
342-
int id = data.dataType().typeId();
343-
if (id == VersionedTypes.V1_21_9.entityDataTypes.copperGolemState.typeId()
344-
|| id == VersionedTypes.V1_21_9.entityDataTypes.weatheringCopperState.typeId()) {
345-
event.cancel();
346-
return;
347-
}
348-
if (id == VersionedTypes.V1_21_9.entityDataTypes.mannequinProfileType.typeId()) {
349-
if (event.entityType() == null) {
350-
event.cancel();
351-
}
352-
return; // Handled separately
353-
}
354-
if (id > VersionedTypes.V1_21_9.entityDataTypes.armadilloState.typeId()) {
355-
id -= 2;
356-
}
357-
if (id >= entityDataTypes.compoundTagType.typeId()) {
358-
id++;
359-
}
360-
data.setDataType(entityDataTypes.byId(id));
361-
});
341+
dataTypeMapper()
342+
.added(entityDataTypes.compoundTagType)
343+
.removed(VersionedTypes.V1_21_9.entityDataTypes.copperGolemState)
344+
.removed(VersionedTypes.V1_21_9.entityDataTypes.weatheringCopperState)
345+
.removed(VersionedTypes.V1_21_9.entityDataTypes.mannequinProfileType)
346+
.register();
362347

363348
registerEntityDataTypeHandler1_20_3(
364349
entityDataTypes.itemType,

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/rewriter/EntityPacketRewriter1_21.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.viaversion.viaversion.api.minecraft.WolfVariant;
3030
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
3131
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_20_5;
32-
import com.viaversion.viaversion.api.minecraft.entitydata.EntityDataType;
3332
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_20_5;
3433
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3534
import com.viaversion.viaversion.api.type.Types;
@@ -147,26 +146,27 @@ private int[] paintingMappingsForEntries(final RegistryEntry[] entries) {
147146
@Override
148147
protected void registerRewrites() {
149148
final EntityDataTypes1_20_5 mappedEntityDataTypes = VersionedTypes.V1_20_5.entityDataTypes;
150-
filter().handler((event, data) -> {
151-
final EntityDataType type = data.dataType();
152-
if (type == VersionedTypes.V1_21.entityDataTypes.wolfVariantType) {
153-
final Holder<WolfVariant> variant = data.value();
154-
if (variant.hasId()) {
155-
data.setTypeAndValue(mappedEntityDataTypes.wolfVariantType, variant.id());
156-
} else {
157-
event.cancel();
158-
}
159-
} else if (type == VersionedTypes.V1_21.entityDataTypes.paintingVariantType) {
160-
final Holder<PaintingVariant> variant = data.value();
161-
if (variant.hasId()) {
162-
final EnchantmentsPaintingsStorage storage = event.user().get(EnchantmentsPaintingsStorage.class);
163-
final int mappedId = storage.mappedPainting(variant.id());
164-
data.setTypeAndValue(mappedEntityDataTypes.paintingVariantType, mappedId);
165-
} else {
166-
event.cancel();
167-
}
149+
dataTypeMapper()
150+
.skip(VersionedTypes.V1_21.entityDataTypes.wolfVariantType)
151+
.skip(VersionedTypes.V1_21.entityDataTypes.paintingVariantType)
152+
.register();
153+
154+
filter().dataType(VersionedTypes.V1_21.entityDataTypes.wolfVariantType).handler((event, data) -> {
155+
final Holder<WolfVariant> variant = data.value();
156+
if (variant.hasId()) {
157+
data.setTypeAndValue(mappedEntityDataTypes.wolfVariantType, variant.id());
158+
} else {
159+
event.cancel();
160+
}
161+
});
162+
filter().dataType(VersionedTypes.V1_21.entityDataTypes.paintingVariantType).handler((event, data) -> {
163+
final Holder<PaintingVariant> variant = data.value();
164+
if (variant.hasId()) {
165+
final EnchantmentsPaintingsStorage storage = event.user().get(EnchantmentsPaintingsStorage.class);
166+
final int mappedId = storage.mappedPainting(variant.id());
167+
data.setTypeAndValue(mappedEntityDataTypes.paintingVariantType, mappedId);
168168
} else {
169-
data.setDataType(mappedEntityDataTypes.byId(type.typeId()));
169+
event.cancel();
170170
}
171171
});
172172
registerEntityDataTypeHandler1_20_3(

common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/rewriter/EntityPacketRewriter26_1.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,12 @@ public void registerPackets() {
8181
protected void registerRewrites() {
8282
final EntityDataTypes26_1 entityDataTypes = VersionedTypes.V26_1.entityDataTypes;
8383
final EntityDataTypes1_21_11 mappedEntityDataTypes = VersionedTypes.V1_21_11.entityDataTypes;
84-
filter().handler((event, data) -> {
85-
final int id = data.dataType().typeId();
86-
int mappedId = id;
87-
if (id == entityDataTypes.catSoundVariant.typeId()
88-
|| id == entityDataTypes.cowSoundVariant.typeId()
89-
|| id == entityDataTypes.pigSoundVariant.typeId()
90-
|| id == entityDataTypes.chickenSoundVariant.typeId()) {
91-
event.cancel();
92-
return;
93-
} else if (id > entityDataTypes.chickenSoundVariant.typeId()) {
94-
mappedId -= 4;
95-
} else if (id > entityDataTypes.pigSoundVariant.typeId()) {
96-
mappedId -= 3;
97-
} else if (id > entityDataTypes.cowSoundVariant.typeId()) {
98-
mappedId -= 2;
99-
} else if (id > entityDataTypes.catSoundVariant.typeId()) {
100-
mappedId -= 1;
101-
}
102-
data.setDataType(mappedEntityDataTypes.byId(mappedId));
103-
});
84+
dataTypeMapper()
85+
.removed(entityDataTypes.catSoundVariant)
86+
.removed(entityDataTypes.cowSoundVariant)
87+
.removed(entityDataTypes.pigSoundVariant)
88+
.removed(entityDataTypes.chickenSoundVariant)
89+
.register();
10490
registerEntityDataTypeHandler1_20_3(
10591
mappedEntityDataTypes.itemType,
10692
mappedEntityDataTypes.blockStateType,

0 commit comments

Comments
 (0)