Destroyed ViaBackwards development (markdown)

Nassim Jahnke 2024-03-25 16:56:21 +01:00
parent de7c5475c3
commit fc1d01d399

@ -1,100 +0,0 @@
## Creating a protocol for a new major version
Here's a template to be copied when creating new protocol transformers for the very latest (!) Minecraft version. **Only differences when [compared to ViaVersion](https://github.com/ViaVersion/ViaVersion/wiki/ViaVersion-development) are commented.**
### Main protocol class
In the main protocol class, the transformation direction is of course the other way around, so
```java
public final class Protocol1_19To1_19_1 extends BackwardsProtocol<ClientboundPackets1_19, ClientboundPackets1_19_1, ServerboundPackets1_19, ServerboundPackets1_19_1> {
```
from ViaVersion would become the following in ViaBackwards:
```java
public final class Protocol1_19_1To1_19 extends BackwardsProtocol<ClientboundPackets1_19_1, ClientboundPackets1_19, ServerboundPackets1_19_1, ServerboundPackets1_19> {
```
**First, copy the template from the ViaVersion wiki, then apply the required changed below.**
```java
// ...
// ViaBackwards uses its own mappings and also needs a translatablerewriter for translation mappings
public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.x", "1.y", Protocol1_xTo1_y.class); // Uses the ViaVersion protocol class as a parameter!
private final TranslatableRewriter<ClientboundPacketsOld> translatableRewriter = new TranslatableRewriter<>(this);
@Override
protected void registerPackets() {
super.registerPackets();
// Registers translatable mappings
//translatableRewriter.registerOpenWindow(ClientboundPacketsOld.OPEN_WINDOW); // Handled by registerOpenWindow in item rewriters
translatableRewriter.registerComponentPacket(ClientboundPacketsOld.ACTIONBAR);
translatableRewriter.registerComponentPacket(ClientboundPacketsOld.TITLE_TEXT);
translatableRewriter.registerComponentPacket(ClientboundPacketsOld.TITLE_SUBTITLE);
translatableRewriter.registerBossBar(ClientboundPacketsOld.BOSSBAR);
translatableRewriter.registerDisconnect(ClientboundPacketsOld.DISCONNECT);
translatableRewriter.registerTabList(ClientboundPacketsOld.TAB_LIST);
translatableRewriter.registerCombatKill1_20(ClientboundPacketsOld.COMBAT_KILL);
translatableRewriter.registerComponentPacket(ClientboundPacketsOld.SYSTEM_CHAT);
translatableRewriter.registerComponentPacket(ClientboundPacketsOld.DISGUISED_CHAT);
translatableRewriter.registerPing();
// And more, like chat messages
// ...
// The sound rewriter also needs to register stop sound and named sound packets for the manual id mappings
final SoundRewriter<ClientboundPacketsOld> soundRewriter = new SoundRewriter<>(this);
soundRewriter.registerStopSound(ClientboundPacketsOld.STOP_SOUND);
soundRewriter.register1_19_3Sound(ClientboundPacketsOld.SOUND);
soundRewriter.registerSound(ClientboundPacketsOld.ENTITY_SOUND);
}
@Override
public TranslatableRewriter getTranslatableRewriter() {
return translatableRewriter;
}
```
### Entity, block and item rewriters
Extend the ViaBackwards provided ones:
* `com.viaversion.viabackwards.api.rewriters.EntityRewriter`
* `com.viaversion.viabackwards.api.rewriters.ItemRewriter`
### Entity data
```java
@Override
public void registerRewrites() {
/*filter().handler((event, meta) -> {
int id = meta.metaType().typeId();
if (id >= ac) {
return;
} else if (id >= ab) {
id--;
}
meta.setMetaType(Types1_z.META_TYPES.byId(id));
});*/
registerMetaTypeHandler(Types1_z.META_TYPES.itemType, Types1_z.META_TYPES.blockStateType, Types1_z.META_TYPES.optionalBlockStateType, Types1_z.META_TYPES.particleType, Types1_z.META_TYPES.optionalComponentType, Types1_z.META_TYPES.componentType);
filter().filterFamily(Types1_z.MINECART_ABSTRACT).index(11).handler((event, meta) -> {
final int blockState = meta.value();
meta.setValue(protocol.getMappingData().getNewBlockStateId(blockState));
});
// Remove metadata of new entity type
// filter().type(Entity1_xTypes.SNIFFER).removeIndex(newIndex);
}
@Override
public void onMappingDataLoaded() {
mapTypes();
// mapEntityTypeWithData(Entity1_xTypes.SNIFFER, Entity1_xTypes.RAVAGER).jsonName();
}
```
Mapping new to old entity types has to be done in code, same for their metadata and particle data. Most other registry type mappings (blocks, sounds, items, simple particles, enchantments, ...) are done via the json mappings.
### Diff mappings
#### Wildcard blockstate mappings
Instead of manually mapping every single property iteration of a blockstate, use:
```json
"minecraft:mangrove_wood": "minecraft:acacia_wood[",
```
The `[` at the end signalized that properties are copied across the mappings.