Skip to content

Commit 34a098b

Browse files
committed
1.20.2 - 1.21 support
1 parent 012f1b3 commit 34a098b

File tree

16 files changed

+574
-106
lines changed

16 files changed

+574
-106
lines changed

protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import ru.leymooo.botfilter.packets.PlayerAbilities;
6969
import ru.leymooo.botfilter.packets.PlayerPosition;
7070
import ru.leymooo.botfilter.packets.PlayerPositionAndLook;
71+
import ru.leymooo.botfilter.packets.RegistryData;
7172
import ru.leymooo.botfilter.packets.SetExp;
7273
import ru.leymooo.botfilter.packets.SetSlot;
7374
import ru.leymooo.botfilter.packets.TeleportConfirm;
@@ -802,7 +803,17 @@ public enum Protocol
802803
}
803804
},
804805
//Custom
805-
BotFilter
806+
BOTFILTER_CONFIGURATION
807+
{{
808+
TO_CLIENT.registerPacket(
809+
RegistryData.class,
810+
RegistryData::new,
811+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x05 ),
812+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x07 )
813+
814+
);
815+
}},
816+
BOTFILTER
806817
{
807818

808819
{
@@ -818,7 +829,9 @@ public enum Protocol
818829
map( ProtocolConstants.MINECRAFT_1_19, 0x23 ),
819830
map( ProtocolConstants.MINECRAFT_1_19_1, 0x25 ),
820831
map( ProtocolConstants.MINECRAFT_1_19_3, 0x24 ),
821-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x28 )
832+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x28 ),
833+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x29 ),
834+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x2B )
822835
);
823836
TO_CLIENT.registerPacket(
824837
TimeUpdate.class, TimeUpdate::new,
@@ -834,7 +847,10 @@ public enum Protocol
834847
map( ProtocolConstants.MINECRAFT_1_18, 0x59 ),
835848
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5C ),
836849
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5A ),
837-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5E )
850+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5E ),
851+
map( ProtocolConstants.MINECRAFT_1_20_2,0x60),
852+
map( ProtocolConstants.MINECRAFT_1_20_3,0x62),
853+
map( ProtocolConstants.MINECRAFT_1_20_5,0x64)
838854
);
839855
TO_CLIENT.registerPacket(
840856
PlayerPositionAndLook.class, PlayerPositionAndLook::new,
@@ -850,9 +866,12 @@ public enum Protocol
850866
map( ProtocolConstants.MINECRAFT_1_19, 0x36 ),
851867
map( ProtocolConstants.MINECRAFT_1_19_1, 0x39 ),
852868
map( ProtocolConstants.MINECRAFT_1_19_3, 0x38 ),
853-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x3C )
869+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x3C ),
870+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x3E),
871+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x40)
854872
);
855873
TO_CLIENT.registerPacket(
874+
//todo
856875
EmptyChunkPacket.class, EmptyChunkPacket::new,
857876
map( ProtocolConstants.MINECRAFT_1_8, 0x21 ),
858877
map( ProtocolConstants.MINECRAFT_1_9, 0x20 ),
@@ -865,7 +884,9 @@ public enum Protocol
865884
map( ProtocolConstants.MINECRAFT_1_19, 0x1F ),
866885
map( ProtocolConstants.MINECRAFT_1_19_1, 0x21 ),
867886
map( ProtocolConstants.MINECRAFT_1_19_3, 0x20 ),
868-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x24 )
887+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x24 ),
888+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x25),
889+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x27)
869890
);
870891
TO_CLIENT.registerPacket(
871892
SetSlot.class, SetSlot::new,
@@ -879,7 +900,8 @@ public enum Protocol
879900
map( ProtocolConstants.MINECRAFT_1_17, 0x16 ),
880901
map( ProtocolConstants.MINECRAFT_1_19, 0x13 ),
881902
map( ProtocolConstants.MINECRAFT_1_19_3, 0x12 ),
882-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x14 )
903+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x14 ),
904+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x15)
883905
);
884906
TO_CLIENT.registerPacket(
885907
PlayerAbilities.class, PlayerAbilities::new,
@@ -895,7 +917,9 @@ public enum Protocol
895917
map( ProtocolConstants.MINECRAFT_1_19, 0x2f ),
896918
map( ProtocolConstants.MINECRAFT_1_19_1, 0x31 ),
897919
map( ProtocolConstants.MINECRAFT_1_19_3, 0x30 ),
898-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x34 )
920+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x34 ),
921+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x36),
922+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x38)
899923
);
900924
TO_CLIENT.registerPacket(
901925
SetExp.class, SetExp::new,
@@ -909,7 +933,10 @@ public enum Protocol
909933
map( ProtocolConstants.MINECRAFT_1_17, 0x51 ),
910934
map( ProtocolConstants.MINECRAFT_1_19_1, 0x54 ),
911935
map( ProtocolConstants.MINECRAFT_1_19_3, 0x52 ),
912-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x56 )
936+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x56 ),
937+
map( ProtocolConstants.MINECRAFT_1_20_2,0x58),
938+
map( ProtocolConstants.MINECRAFT_1_20_3,0x5A),
939+
map( ProtocolConstants.MINECRAFT_1_20_5,0x5C)
913940
);
914941
TO_CLIENT.registerPacket(
915942
DefaultSpawnPosition.class, DefaultSpawnPosition::new,
@@ -925,7 +952,10 @@ public enum Protocol
925952
map( ProtocolConstants.MINECRAFT_1_19, 0x4A ),
926953
map( ProtocolConstants.MINECRAFT_1_19_1, 0x4D ),
927954
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4C ),
928-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x50 )
955+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x50 ),
956+
map( ProtocolConstants.MINECRAFT_1_20_2,0x52),
957+
map( ProtocolConstants.MINECRAFT_1_20_3,0x54),
958+
map( ProtocolConstants.MINECRAFT_1_20_5,0x56)
929959
);
930960
TO_SERVER.registerPacket(
931961
ClientSettings.class, ClientSettings::new,
@@ -937,7 +967,9 @@ public enum Protocol
937967
map( ProtocolConstants.MINECRAFT_1_19, 0x07 ),
938968
map( ProtocolConstants.MINECRAFT_1_19_1, 0x08 ),
939969
map( ProtocolConstants.MINECRAFT_1_19_3, 0x07 ),
940-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x08 )
970+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x08 ),
971+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x09 ),
972+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x0A )
941973
);
942974
TO_SERVER.registerPacket(
943975
TeleportConfirm.class, TeleportConfirm::new,
@@ -956,7 +988,10 @@ public enum Protocol
956988
map( ProtocolConstants.MINECRAFT_1_19, 0x14 ),
957989
map( ProtocolConstants.MINECRAFT_1_19_1, 0x15 ),
958990
map( ProtocolConstants.MINECRAFT_1_19_3, 0x14 ),
959-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x15 )
991+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x15 ),
992+
map( ProtocolConstants.MINECRAFT_1_20_2,0x17),
993+
map( ProtocolConstants.MINECRAFT_1_20_3,0x18),
994+
map( ProtocolConstants.MINECRAFT_1_20_5,0x1B)
960995
);
961996
TO_SERVER.registerPacket(
962997
PlayerPosition.class, PlayerPosition::new,
@@ -971,7 +1006,10 @@ public enum Protocol
9711006
map( ProtocolConstants.MINECRAFT_1_19, 0x13 ),
9721007
map( ProtocolConstants.MINECRAFT_1_19_1, 0x14 ),
9731008
map( ProtocolConstants.MINECRAFT_1_19_3, 0x13 ),
974-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x14 )
1009+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x14 ),
1010+
map( ProtocolConstants.MINECRAFT_1_20_2,0x16),
1011+
map( ProtocolConstants.MINECRAFT_1_20_3,0x17),
1012+
map( ProtocolConstants.MINECRAFT_1_20_5,0x1A)
9751013
);
9761014
TO_SERVER.registerPacket(
9771015
Player.class, Player::new,
@@ -986,7 +1024,10 @@ public enum Protocol
9861024
map( ProtocolConstants.MINECRAFT_1_19, 0x16 ),
9871025
map( ProtocolConstants.MINECRAFT_1_19_1, 0x17 ),
9881026
map( ProtocolConstants.MINECRAFT_1_19_3, 0x16 ),
989-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x17 )
1027+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x17 ),
1028+
map( ProtocolConstants.MINECRAFT_1_20_2,0x19),
1029+
map( ProtocolConstants.MINECRAFT_1_20_3,0x1A),
1030+
map( ProtocolConstants.MINECRAFT_1_20_5,0x1D)
9901031
);
9911032
TO_SERVER.registerPacket(
9921033
KeepAlive.class, KeepAlive::new,
@@ -1001,7 +1042,10 @@ public enum Protocol
10011042
map( ProtocolConstants.MINECRAFT_1_19, 0x11 ),
10021043
map( ProtocolConstants.MINECRAFT_1_19_1, 0x12 ),
10031044
map( ProtocolConstants.MINECRAFT_1_19_3, 0x11 ),
1004-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x12 )
1045+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x12 ),
1046+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x14 ),
1047+
map( ProtocolConstants.MINECRAFT_1_20_3, 0x15 ),
1048+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x18 )
10051049
);
10061050
TO_SERVER.registerPacket(
10071051
Chat.class, Chat::new,
@@ -1016,7 +1060,8 @@ public enum Protocol
10161060
ClientChat.class,
10171061
ClientChat::new,
10181062
map( ProtocolConstants.MINECRAFT_1_19, 0x04 ),
1019-
map( ProtocolConstants.MINECRAFT_1_19_1, 0x05 )
1063+
map( ProtocolConstants.MINECRAFT_1_19_1, 0x05 ),
1064+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x06 )
10201065
);
10211066
TO_SERVER.registerPacket(
10221067
PluginMessage.class, PluginMessage::new,
@@ -1030,7 +1075,10 @@ public enum Protocol
10301075
map( ProtocolConstants.MINECRAFT_1_19, 0x0C ),
10311076
map( ProtocolConstants.MINECRAFT_1_19_1, 0x0D ),
10321077
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
1033-
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0D )
1078+
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0D ),
1079+
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0F ),
1080+
map( ProtocolConstants.MINECRAFT_1_20_3, 0x10 ),
1081+
map( ProtocolConstants.MINECRAFT_1_20_5, 0x12 )
10341082
);
10351083
}
10361084
};

protocol/src/main/java/net/md_5/bungee/protocol/packet/PluginMessage.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ public String apply(String tag)
5555
* Allow this packet to be sent as an "extended" packet.
5656
*/
5757
private boolean allowExtendedPacket = false;
58+
public boolean transform;
59+
60+
public PluginMessage(String tag, byte[] data, boolean allowExtendedPacket)
61+
{
62+
this.tag = tag;
63+
this.data = data;
64+
this.allowExtendedPacket = allowExtendedPacket;
65+
}
5866

5967
@Override
6068
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
@@ -69,6 +77,11 @@ public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protoco
6977
@Override
7078
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
7179
{
80+
//BotFilter start
81+
if (transform)
82+
{
83+
tag = transformBrand( tag, protocolVersion );
84+
} //BotFilter End
7285
writeString( ( protocolVersion >= ProtocolConstants.MINECRAFT_1_13 ) ? MODERNISE.apply( tag ) : tag, buf );
7386
buf.writeBytes( data );
7487
}
@@ -83,4 +96,15 @@ public DataInput getStream()
8396
{
8497
return new DataInputStream( new ByteArrayInputStream( data ) );
8598
}
99+
100+
//BotFilter start
101+
private String transformBrand(String input, int protocolVersion)
102+
{
103+
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_13 && "MC|Brand".equals( input ) )
104+
{
105+
return "minecraft:brand";
106+
}
107+
return input;
108+
}
109+
//BotFilter end
86110
}

protocol/src/main/java/ru/leymooo/botfilter/packets/EmptyChunkPacket.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import net.md_5.bungee.protocol.AbstractPacketHandler;
1212
import net.md_5.bungee.protocol.DefinedPacket;
1313
import net.md_5.bungee.protocol.ProtocolConstants;
14+
import se.llbit.nbt.CompoundTag;
15+
import se.llbit.nbt.LongArrayTag;
16+
import se.llbit.nbt.NamedTag;
17+
import se.llbit.nbt.Tag;
1418

1519
@Data
1620
@NoArgsConstructor
@@ -132,25 +136,11 @@ public void handle(AbstractPacketHandler handler) throws Exception
132136

133137
private void write1_14Heightmaps(ByteBuf buf, int version)
134138
{
135-
try ( ByteBufOutputStream output = new ByteBufOutputStream( buf ) )
136-
{
137-
output.writeByte( 10 ); //CompoundTag
138-
output.writeUTF( "" ); // CompoundName
139-
output.writeByte( 10 ); //CompoundTag
140-
output.writeUTF( "root" ); //root compound
141-
output.writeByte( 12 ); //long array
142-
output.writeUTF( "MOTION_BLOCKING" );
143-
long[] longArrayTag = new long[version < ProtocolConstants.MINECRAFT_1_18 ? 36 : 37];
144-
output.writeInt( longArrayTag.length );
145-
for ( int i = 0, length = longArrayTag.length; i < length; i++ )
146-
{
147-
output.writeLong( longArrayTag[i] );
148-
}
149-
buf.writeByte( 0 ); //end of compound
150-
buf.writeByte( 0 ); //end of compound
151-
} catch ( IOException ex )
152-
{
153-
throw new RuntimeException( ex );
154-
}
139+
long[] longArrayTag = new long[version < ProtocolConstants.MINECRAFT_1_18 ? 36 : 37];
140+
CompoundTag compoundTag = new CompoundTag();
141+
compoundTag.add( "MOTION_BLOCKING", new LongArrayTag( longArrayTag ) );
142+
Tag write = version >= ProtocolConstants.MINECRAFT_1_20_2 ? compoundTag : new NamedTag( "", compoundTag );
143+
writeTag( write, buf, version );
144+
155145
}
156146
}

protocol/src/main/java/ru/leymooo/botfilter/packets/JoinGame.java

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.md_5.bungee.protocol.DefinedPacket;
1212
import net.md_5.bungee.protocol.ProtocolConstants;
1313
import ru.leymooo.botfilter.utils.Dimension;
14+
import se.llbit.nbt.Tag;
1415

1516
@Data
1617
@RequiredArgsConstructor
@@ -34,6 +35,7 @@ public class JoinGame extends DefinedPacket
3435
private boolean debug = false;
3536
private boolean flat = true;
3637

38+
3739
private Dimension dimension;
3840
public JoinGame()
3941
{
@@ -62,30 +64,42 @@ public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protoc
6264
{
6365
buf.writeBoolean( hardcore );
6466
}
65-
buf.writeByte( gameMode );
67+
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
68+
{
69+
buf.writeByte( gameMode );
70+
}
6671
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
6772
{
68-
buf.writeByte( previousGameMode );
73+
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
74+
{
75+
buf.writeByte( previousGameMode );
76+
}
6977

7078
writeVarInt( worldNames.size(), buf );
7179
for ( String world : worldNames )
7280
{
7381
writeString( world, buf );
7482
}
7583

76-
writeTag( dimension.getFullCodec( protocolVersion ), buf, protocolVersion );
77-
}
84+
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
85+
{
86+
writeTag( dimension.getFullCodec( protocolVersion ), buf, protocolVersion );
87+
}
7888

89+
}
7990
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
8091
{
81-
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19 || protocolVersion <= ProtocolConstants.MINECRAFT_1_16_1 )
92+
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 && protocolVersion < ProtocolConstants.MINECRAFT_1_19 )
93+
{
94+
writeTag( dimension.getAttributes( protocolVersion ), buf, protocolVersion );
95+
} else if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
8296
{
8397
writeString( worldName, buf );
84-
} else
98+
}
99+
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
85100
{
86-
writeTag( dimension.getAttributes( protocolVersion ), buf, protocolVersion );
101+
writeString( worldName, buf );
87102
}
88-
writeString( worldName, buf );
89103
} else if ( protocolVersion > ProtocolConstants.MINECRAFT_1_9 )
90104
{
91105
buf.writeInt( dimensionId ); //dim
@@ -95,7 +109,10 @@ public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protoc
95109
}
96110
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_15 )
97111
{
98-
buf.writeLong( seed );
112+
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
113+
{
114+
buf.writeLong( seed );
115+
}
99116
}
100117
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_14 )
101118
{
@@ -128,6 +145,21 @@ public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protoc
128145
{
129146
buf.writeBoolean( normalRespawn );
130147
}
148+
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
149+
{
150+
buf.writeBoolean( true ); //limited crafring
151+
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_5 )
152+
{
153+
writeVarInt( 0, buf ); //dimension id
154+
} else
155+
{
156+
writeString( worldName, buf ); //dimension
157+
}
158+
writeString( worldName, buf );
159+
buf.writeLong( seed );
160+
buf.writeByte( gameMode );
161+
buf.writeByte( previousGameMode );
162+
}
131163
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
132164
{
133165
buf.writeBoolean( debug );
@@ -143,6 +175,11 @@ public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protoc
143175
writeVarInt( 0, buf ); //portal cooldown
144176
}
145177

178+
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_5 )
179+
{
180+
buf.writeBoolean( false ); //secure profile
181+
}
182+
146183
}
147184

148185
@Override

0 commit comments

Comments
 (0)