Skip to content

Commit 48b7f37

Browse files
committed
Default rewriter registrations across protocols
1 parent 4f4fd5d commit 48b7f37

File tree

102 files changed

+764
-1913
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+764
-1913
lines changed

common/src/main/java/com/viaversion/viabackwards/api/BackwardsProtocol.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
package com.viaversion.viabackwards.api;
1919

2020
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
21-
import com.viaversion.viabackwards.api.rewriters.text.TranslatableRewriter;
21+
import com.viaversion.viabackwards.api.rewriters.BackwardsRegistryRewriter;
22+
import com.viaversion.viabackwards.protocol.registration.BackwardsRegistrations;
2223
import com.viaversion.viabackwards.utils.BackwardsProtocolLogger;
23-
import com.viaversion.viaversion.api.Via;
2424
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
2525
import com.viaversion.viaversion.api.protocol.Protocol;
2626
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
@@ -31,6 +31,7 @@
3131
public abstract class BackwardsProtocol<CU extends ClientboundPacketType, CM extends ClientboundPacketType, SM extends ServerboundPacketType, SU extends ServerboundPacketType>
3232
extends AbstractProtocol<CU, CM, SM, SU> {
3333

34+
@Deprecated
3435
protected BackwardsProtocol() {
3536
}
3637

@@ -39,21 +40,10 @@ protected BackwardsProtocol(@Nullable Class<CU> oldClientboundPacketEnum, @Nulla
3940
super(oldClientboundPacketEnum, clientboundPacketEnum, oldServerboundPacketEnum, serverboundPacketEnum);
4041
}
4142

42-
/**
43-
* Waits for the given protocol to be loaded to then asynchronously execute the runnable for this protocol.
44-
*/
45-
protected void executeAsyncAfterLoaded(Class<? extends Protocol> protocolClass, Runnable runnable) {
46-
Via.getManager().getProtocolManager().addMappingLoaderFuture(getClass(), protocolClass, runnable);
47-
}
48-
4943
@Override
50-
protected void registerPackets() {
51-
super.registerPackets();
52-
53-
final BackwardsMappingData mappingData = getMappingData();
54-
if (mappingData != null && mappingData.getViaVersionProtocolClass() != null) {
55-
executeAsyncAfterLoaded(mappingData.getViaVersionProtocolClass(), this::loadMappingData);
56-
}
44+
protected void applySharedRegistrations() {
45+
super.applySharedRegistrations();
46+
BackwardsRegistrations.registrations().applyMatching(this);
5747
}
5848

5949
@Override
@@ -62,18 +52,17 @@ protected ProtocolLogger createLogger() {
6252
}
6353

6454
@Override
65-
public boolean hasMappingDataToLoad() {
66-
// Manually load them later, since they depend on VV's mappings
67-
return false;
55+
public @Nullable Class<? extends Protocol<?, ?, ?, ?>> dependsOn() {
56+
return getMappingData() != null ? getMappingData().getViaVersionProtocolClass() : null;
6857
}
6958

7059
@Override
71-
public @Nullable BackwardsMappingData getMappingData() { // Change return type to BackwardsMappings
60+
public @Nullable BackwardsMappingData getMappingData() {
7261
return null;
7362
}
7463

7564
@Override
76-
public @Nullable TranslatableRewriter getComponentRewriter() {
65+
public @Nullable BackwardsRegistryRewriter getRegistryDataRewriter() {
7766
return null;
7867
}
7968
}

common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.viaversion.viabackwards.ViaBackwards;
2222
import com.viaversion.viabackwards.ViaBackwardsConfig;
2323
import com.viaversion.viabackwards.api.data.TranslatableMappings;
24+
import com.viaversion.viabackwards.protocol.registration.BackwardsRegistrations;
2425
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
2526
import com.viaversion.viabackwards.protocol.v1_11_1to1_11.Protocol1_11_1To1_11;
2627
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
@@ -105,6 +106,8 @@ default void init(final com.viaversion.viabackwards.api.ViaBackwardsConfig confi
105106
TranslatableMappings.loadTranslatables();
106107

107108
getLogger().info("Registering protocols...");
109+
BackwardsRegistrations.apply();
110+
108111
final ProtocolManager protocolManager = Via.getManager().getProtocolManager();
109112
protocolManager.registerProtocol(new Protocol1_9_1To1_9(), ProtocolVersion.v1_9, ProtocolVersion.v1_9_1);
110113
protocolManager.registerProtocol(new Protocol1_9_3To1_9_1(), Arrays.asList(ProtocolVersion.v1_9_1, ProtocolVersion.v1_9_2), ProtocolVersion.v1_9_3);

common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ protected EntityRewriter(T protocol, EntityDataType displayType, EntityDataType
3838
}
3939

4040
@Override
41-
public void registerTrackerWithData(C packetType, EntityType fallingBlockType) {
41+
public void registerTrackerWithData(C packetType) {
4242
protocol.registerClientbound(packetType, wrapper -> {
4343
wrapper.passthrough(Types.VAR_INT); // Entity ID
4444
wrapper.passthrough(Types.UUID); // Entity UUID
@@ -49,12 +49,12 @@ public void registerTrackerWithData(C packetType, EntityType fallingBlockType) {
4949
wrapper.passthrough(Types.BYTE); // Pitch
5050
wrapper.passthrough(Types.BYTE); // Yaw
5151
wrapper.passthrough(Types.INT); // Data
52-
getSpawnTrackerWithDataHandler(fallingBlockType).handle(wrapper);
52+
getSpawnTrackerWithDataHandler().handle(wrapper);
5353
});
5454
}
5555

5656
@Override
57-
public void registerTrackerWithData1_19(C packetType, EntityType fallingBlockType) {
57+
public void registerTrackerWithData1_19(C packetType) {
5858
protocol.registerClientbound(packetType, wrapper -> {
5959
wrapper.passthrough(Types.VAR_INT); // Entity id
6060
wrapper.passthrough(Types.UUID); // Entity UUID
@@ -66,37 +66,38 @@ public void registerTrackerWithData1_19(C packetType, EntityType fallingBlockTyp
6666
wrapper.passthrough(Types.BYTE); // Yaw
6767
wrapper.passthrough(Types.BYTE); // Head yaw
6868
wrapper.passthrough(Types.VAR_INT); // Data
69-
getSpawnTrackerWithDataHandler1_19(fallingBlockType).handle(wrapper);
69+
getSpawnTrackerWithDataHandler1_19().handle(wrapper);
7070
});
7171
}
7272

73-
public PacketHandler getSpawnTrackerWithDataHandler(EntityType fallingBlockType) {
73+
public PacketHandler getSpawnTrackerWithDataHandler() {
7474
return wrapper -> {
7575
// Check against the UNMAPPED entity type
7676
EntityType entityType = trackAndMapEntity(wrapper);
77-
if (entityType == fallingBlockType) {
77+
if (entityType == typeFromId("falling_block")) {
7878
int blockState = wrapper.get(Types.INT, 0);
7979
wrapper.set(Types.INT, 0, protocol.getMappingData().getNewBlockStateId(blockState));
8080
}
8181
};
8282
}
8383

84-
public PacketHandler getSpawnTrackerWithDataHandler1_19(EntityType fallingBlockType) {
84+
public PacketHandler getSpawnTrackerWithDataHandler1_19() {
8585
return wrapper -> {
8686
if (protocol.getMappingData() == null) {
8787
return;
8888
}
8989

9090
// Check against the UNMAPPED entity type
9191
EntityType entityType = trackAndMapEntity(wrapper);
92-
if (entityType == fallingBlockType) {
92+
if (entityType == typeFromId("falling_block")) {
9393
int blockState = wrapper.get(Types.VAR_INT, 2);
9494
wrapper.set(Types.VAR_INT, 2, protocol.getMappingData().getNewBlockStateId(blockState));
9595
}
9696
};
9797
}
9898

99-
public void registerSpawnTracker(C packetType) {
99+
@Override
100+
public void registerTracker(C packetType) {
100101
protocol.registerClientbound(packetType, wrapper -> {
101102
wrapper.passthrough(Types.VAR_INT); // Entity ID
102103
wrapper.passthrough(Types.UUID); // Entity UUID

common/src/main/java/com/viaversion/viabackwards/api/rewriters/SoundRewriter.java

Lines changed: 19 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -17,60 +17,41 @@
1717
*/
1818
package com.viaversion.viabackwards.api.rewriters;
1919

20-
import com.viaversion.viabackwards.api.BackwardsProtocol;
21-
import com.viaversion.viaversion.api.minecraft.Holder;
22-
import com.viaversion.viaversion.api.minecraft.SoundEvent;
20+
import com.viaversion.viaversion.api.data.Mappings;
21+
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
2322
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
24-
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
2523
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
2624
import com.viaversion.viaversion.api.type.Types;
2725

2826
public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversion.viaversion.rewriter.SoundRewriter<C> {
2927

30-
private final BackwardsProtocol<C, ?, ?, ?> protocol;
31-
32-
public SoundRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol) {
28+
public SoundRewriter(final AbstractProtocol<C, ?, ?, ?> protocol) {
3329
super(protocol);
34-
this.protocol = protocol;
3530
}
3631

3732
public void registerNamedSound(final C packetType) {
33+
if (protocol.getMappingData() == null || Mappings.isFullIdentity(protocol.getMappingData().getFullSoundMappings())) {
34+
return;
35+
}
3836
protocol.registerClientbound(packetType, wrapper -> {
3937
wrapper.passthrough(Types.STRING); // Sound identifier
4038
getNamedSoundHandler().handle(wrapper);
4139
});
4240
}
4341

4442
public void registerStopSound(final C packetType) {
45-
protocol.registerClientbound(packetType, wrapper -> getStopSoundHandler().handle(wrapper));
46-
}
47-
48-
public PacketHandler getNamedSoundHandler() {
49-
return wrapper -> {
50-
final String soundId = wrapper.get(Types.STRING, 0);
51-
final String mappedId = protocol.getMappingData().getMappedNamedSound(soundId);
52-
if (mappedId == null) {
53-
return;
54-
}
55-
56-
if (!mappedId.isEmpty()) {
57-
wrapper.set(Types.STRING, 0, mappedId);
58-
} else {
59-
wrapper.cancel();
60-
}
61-
};
62-
}
63-
64-
public PacketHandler getStopSoundHandler() {
65-
return wrapper -> {
43+
if (protocol.getMappingData() == null || Mappings.isFullIdentity(protocol.getMappingData().getFullSoundMappings())) {
44+
return;
45+
}
46+
protocol.registerClientbound(packetType, wrapper -> {
6647
final byte flags = wrapper.passthrough(Types.BYTE);
6748
if ((flags & 0x01) != 0) {
6849
wrapper.passthrough(Types.VAR_INT); // Source
6950
}
7051

7152
if ((flags & 0x02) == 0) return; // No sound specified
7253
final String soundId = wrapper.read(Types.STRING);
73-
final String mappedId = protocol.getMappingData().getMappedNamedSound(soundId);
54+
final String mappedId = protocol.getMappingData().getFullSoundMappings().mappedIdentifier(soundId);
7455
if (mappedId == null) {
7556
// No mapping found
7657
wrapper.write(Types.STRING, soundId);
@@ -83,45 +64,22 @@ public PacketHandler getStopSoundHandler() {
8364
// Cancel if set to empty
8465
wrapper.cancel();
8566
}
86-
};
87-
}
88-
89-
@Override
90-
public void registerSound1_19_3(final C packetType) {
91-
protocol.registerClientbound(packetType, getSoundHandler1_19_3());
67+
});
9268
}
9369

94-
public PacketHandler getSoundHandler1_19_3() {
70+
public PacketHandler getNamedSoundHandler() {
9571
return wrapper -> {
96-
Holder<SoundEvent> soundEventHolder = wrapper.read(Types.SOUND_EVENT);
97-
if (soundEventHolder.isDirect()) {
98-
wrapper.write(Types.SOUND_EVENT, rewriteSoundEvent(wrapper, soundEventHolder));
72+
final String soundId = wrapper.get(Types.STRING, 0);
73+
final String mappedId = protocol.getMappingData().getFullSoundMappings().mappedIdentifier(soundId);
74+
if (mappedId == null) {
9975
return;
10076
}
10177

102-
final int mappedId = idRewriter.rewrite(soundEventHolder.id());
103-
if (mappedId == -1) {
78+
if (!mappedId.isEmpty()) {
79+
wrapper.set(Types.STRING, 0, mappedId);
80+
} else {
10481
wrapper.cancel();
105-
return;
106-
}
107-
108-
if (mappedId != soundEventHolder.id()) {
109-
soundEventHolder = Holder.of(mappedId);
11082
}
111-
112-
wrapper.write(Types.SOUND_EVENT, soundEventHolder);
11383
};
11484
}
115-
116-
public Holder<SoundEvent> rewriteSoundEvent(final PacketWrapper wrapper, final Holder<SoundEvent> soundEventHolder) {
117-
final SoundEvent soundEvent = soundEventHolder.value();
118-
final String mappedIdentifier = protocol.getMappingData().getMappedNamedSound(soundEvent.identifier());
119-
if (mappedIdentifier != null) {
120-
if (!mappedIdentifier.isEmpty()) {
121-
return Holder.of(soundEvent.withIdentifier(mappedIdentifier));
122-
}
123-
wrapper.cancel();
124-
}
125-
return soundEventHolder;
126-
}
12785
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
3+
* Copyright (C) 2016-2026 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.protocol.registration;
19+
20+
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
21+
import com.viaversion.viaversion.protocol.shared_registration.SharedRegistrations;
22+
23+
public final class BackwardsRegistrations {
24+
25+
private static final SharedRegistrations REGISTRATIONS = SharedRegistrations.create();
26+
27+
public static void apply() {
28+
REGISTRATIONS.registrations()
29+
.range(ProtocolVersion.v1_10, ProtocolVersion.v1_19_3, RegistryRegistrations::registerNamedSound1_10)
30+
.since(ProtocolVersion.v1_14, RegistryRegistrations::registerStopSound1_14)
31+
32+
.register();
33+
}
34+
35+
public static SharedRegistrations registrations() {
36+
return REGISTRATIONS;
37+
}
38+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
3+
* Copyright (C) 2016-2026 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.protocol.registration;
19+
20+
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
21+
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
22+
import com.viaversion.viaversion.protocol.shared_registration.PacketBound;
23+
import com.viaversion.viaversion.protocol.shared_registration.RegistrationContext;
24+
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
25+
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
26+
27+
final class RegistryRegistrations {
28+
29+
static <CU extends ClientboundPacketType> void registerNamedSound1_10(final RegistrationContext<CU, ?> ctx) {
30+
ctx.clientbound(ClientboundPackets1_9_3.CUSTOM_SOUND, new SoundRewriter<>(ctx.protocol())::registerNamedSound, PacketBound.REMOVED_AT_MAX);
31+
}
32+
33+
static <CU extends ClientboundPacketType> void registerStopSound1_14(final RegistrationContext<CU, ?> ctx) {
34+
ctx.clientbound(ClientboundPackets1_14.STOP_SOUND, new SoundRewriter<>(ctx.protocol())::registerStopSound);
35+
}
36+
}

0 commit comments

Comments
 (0)