1818package com .viaversion .viabackwards .api .rewriters ;
1919
2020import com .viaversion .viabackwards .api .BackwardsProtocol ;
21+ import com .viaversion .viaversion .api .minecraft .Holder ;
22+ import com .viaversion .viaversion .api .minecraft .SoundEvent ;
2123import com .viaversion .viaversion .api .protocol .packet .ClientboundPacketType ;
24+ import com .viaversion .viaversion .api .protocol .packet .PacketWrapper ;
2225import com .viaversion .viaversion .api .protocol .remapper .PacketHandler ;
2326import com .viaversion .viaversion .api .protocol .remapper .PacketHandlers ;
2427import com .viaversion .viaversion .api .type .Type ;
@@ -27,12 +30,12 @@ public class SoundRewriter<C extends ClientboundPacketType> extends com.viaversi
2730
2831 private final BackwardsProtocol <C , ?, ?, ?> protocol ;
2932
30- public SoundRewriter (BackwardsProtocol <C , ?, ?, ?> protocol ) {
33+ public SoundRewriter (final BackwardsProtocol <C , ?, ?, ?> protocol ) {
3134 super (protocol );
3235 this .protocol = protocol ;
3336 }
3437
35- public void registerNamedSound (C packetType ) {
38+ public void registerNamedSound (final C packetType ) {
3639 protocol .registerClientbound (packetType , new PacketHandlers () {
3740 @ Override
3841 public void register () {
@@ -42,7 +45,7 @@ public void register() {
4245 });
4346 }
4447
45- public void registerStopSound (C packetType ) {
48+ public void registerStopSound (final C packetType ) {
4649 protocol .registerClientbound (packetType , new PacketHandlers () {
4750 @ Override
4851 public void register () {
@@ -53,8 +56,8 @@ public void register() {
5356
5457 public PacketHandler getNamedSoundHandler () {
5558 return wrapper -> {
56- String soundId = wrapper .get (Type .STRING , 0 );
57- String mappedId = protocol .getMappingData ().getMappedNamedSound (soundId );
59+ final String soundId = wrapper .get (Type .STRING , 0 );
60+ final String mappedId = protocol .getMappingData ().getMappedNamedSound (soundId );
5861 if (mappedId == null ) {
5962 return ;
6063 }
@@ -69,15 +72,15 @@ public PacketHandler getNamedSoundHandler() {
6972
7073 public PacketHandler getStopSoundHandler () {
7174 return wrapper -> {
72- byte flags = wrapper .passthrough (Type .BYTE );
75+ final byte flags = wrapper .passthrough (Type .BYTE );
7376 if ((flags & 0x02 ) == 0 ) return ; // No sound specified
7477
7578 if ((flags & 0x01 ) != 0 ) {
7679 wrapper .passthrough (Type .VAR_INT ); // Source
7780 }
7881
79- String soundId = wrapper .read (Type .STRING );
80- String mappedId = protocol .getMappingData ().getMappedNamedSound (soundId );
82+ final String soundId = wrapper .read (Type .STRING );
83+ final String mappedId = protocol .getMappingData ().getMappedNamedSound (soundId );
8184 if (mappedId == null ) {
8285 // No mapping found
8386 wrapper .write (Type .STRING , soundId );
@@ -94,38 +97,41 @@ public PacketHandler getStopSoundHandler() {
9497 }
9598
9699 @ Override
97- public void register1_19_3Sound (C packetType ) {
100+ public void register1_19_3Sound (final C packetType ) {
98101 protocol .registerClientbound (packetType , get1_19_3SoundHandler ());
99102 }
100103
101104 public PacketHandler get1_19_3SoundHandler () {
102105 return wrapper -> {
103- final int soundId = wrapper .read (Type .VAR_INT );
104- if (soundId != 0 ) {
105- final int mappedId = idRewriter .rewrite (soundId - 1 ); // Normalize the id
106- if (mappedId == -1 ) {
107- wrapper .cancel ();
108- return ;
109- }
110-
111- wrapper .write (Type .VAR_INT , mappedId + 1 );
106+ Holder <SoundEvent > soundEventHolder = wrapper .read (Type .SOUND_EVENT );
107+ if (soundEventHolder .isDirect ()) {
108+ wrapper .write (Type .SOUND_EVENT , rewriteSoundEvent (wrapper , soundEventHolder ));
112109 return ;
113110 }
114111
115- // Is followed by the resource loation
116- wrapper .write (Type .VAR_INT , 0 );
117-
118- String soundIdentifier = wrapper .read (Type .STRING );
119- final String mappedIdentifier = protocol .getMappingData ().getMappedNamedSound (soundIdentifier );
120- if (mappedIdentifier != null ) {
121- if (mappedIdentifier .isEmpty ()) {
122- wrapper .cancel ();
123- return ;
124- }
112+ final int mappedId = idRewriter .rewrite (soundEventHolder .id ());
113+ if (mappedId == -1 ) {
114+ wrapper .cancel ();
115+ return ;
116+ }
125117
126- soundIdentifier = mappedIdentifier ;
118+ if (mappedId != soundEventHolder .id ()) {
119+ soundEventHolder = new Holder <>(mappedId );
127120 }
128- wrapper .write (Type .STRING , soundIdentifier );
121+
122+ wrapper .write (Type .SOUND_EVENT , soundEventHolder );
129123 };
130124 }
125+
126+ public Holder <SoundEvent > rewriteSoundEvent (final PacketWrapper wrapper , final Holder <SoundEvent > soundEventHolder ) {
127+ final SoundEvent soundEvent = soundEventHolder .value ();
128+ final String mappedIdentifier = protocol .getMappingData ().getMappedNamedSound (soundEvent .identifier ());
129+ if (mappedIdentifier != null ) {
130+ if (!mappedIdentifier .isEmpty ()) {
131+ return new Holder <>(soundEvent .withIdentifier (mappedIdentifier ));
132+ }
133+ wrapper .cancel ();
134+ }
135+ return soundEventHolder ;
136+ }
131137}
0 commit comments