11package io .minepkg .testutils ;
22
3- import io .netty .buffer .Unpooled ;
3+ import io .minepkg .testutils .network .c2s .SetRulePayload ;
4+ import io .minepkg .testutils .network .c2s .SetTimePayload ;
5+ import io .minepkg .testutils .network .c2s .SetWeatherPayload ;
6+ import io .minepkg .testutils .network .s2c .OpenBookPayload ;
7+ import io .minepkg .testutils .network .s2c .WeatherGameruleSyncPayload ;
48import net .fabricmc .api .ModInitializer ;
59import net .fabricmc .fabric .api .itemgroup .v1 .ItemGroupEvents ;
10+ import net .fabricmc .fabric .api .networking .v1 .PayloadTypeRegistry ;
611import net .fabricmc .fabric .api .networking .v1 .ServerPlayConnectionEvents ;
712import net .fabricmc .fabric .api .networking .v1 .ServerPlayNetworking ;
813import net .minecraft .item .Item ;
914import net .minecraft .item .ItemGroups ;
10- import net .minecraft .network .PacketByteBuf ;
1115import net .minecraft .registry .Registries ;
1216import net .minecraft .registry .Registry ;
13-
1417import net .minecraft .server .MinecraftServer ;
1518import net .minecraft .server .network .ServerPlayerEntity ;
1619import net .minecraft .server .world .ServerWorld ;
@@ -24,13 +27,6 @@ public class TestUtils implements ModInitializer {
2427 public static final String MOD_ID = "testutils" ; // Note: currently different from fabric.mod.json id
2528 public static final Logger LOGGER = LogManager .getLogger (MOD_ID );
2629
27- public static final Identifier OPEN_BOOK_S2C = TestUtils .id ("open_book" );
28- public static final Identifier WEATHER_GAMERULE_SYNC_S2C = TestUtils .id ("weather_sync" );
29-
30- public static final Identifier SET_TIME_C2S = TestUtils .id ("set_time" );
31- public static final Identifier SET_RULE_C2S = TestUtils .id ("set_rule" );
32- public static final Identifier SET_WEATHER_C2S = TestUtils .id ("set_weather" );
33-
3430 public static final short DO_DAYLIGHT_CYCLE_RULE = 1 ;
3531 public static final short DO_WEATHER_CYCLE_RULE = 2 ;
3632
@@ -62,86 +58,82 @@ public void onInitialize() {
6258 });
6359
6460 // client wants to set the time
65- ServerPlayNetworking .registerGlobalReceiver (SET_TIME_C2S , (server , player , handler , buf , responseSender ) -> {
66- // make sure its not over 24000
67- long wantedTime = buf .getLong (0 ) % 24000 ;
68-
61+ PayloadTypeRegistry .playC2S ().register (SetTimePayload .ID , SetTimePayload .CODEC );
62+ ServerPlayNetworking .registerGlobalReceiver (SetTimePayload .ID , (payload , context ) -> {
6963 // Execute on the main thread
70- server .execute (() -> {
71- ServerWorld world = player .getServerWorld ();
64+ context . player (). server .execute (() -> {
65+ ServerWorld world = context . player () .getServerWorld ();
7266 // set the time
73- world .setTimeOfDay (wantedTime );
67+ world .setTimeOfDay (payload . time () );
7468 });
7569 });
7670
7771 // client wants to set the weather
78- ServerPlayNetworking . registerGlobalReceiver ( SET_WEATHER_C2S , ( server , player , handler , buf , responseSender ) -> {
79- short weather = buf . getShort ( 0 );
80- ServerWorld world = player .getServerWorld ();
72+ PayloadTypeRegistry . playC2S (). register ( SetWeatherPayload . ID , SetWeatherPayload . CODEC );
73+ ServerPlayNetworking . registerGlobalReceiver ( SetWeatherPayload . ID , ( payload , context ) -> {
74+ ServerWorld world = context . player () .getServerWorld ();
8175
8276 // Execute on the main thread
83- server .execute (() -> {
84- switch (weather ) {
77+ context . player (). server .execute (() -> {
78+ switch (payload . weather () ) {
8579 case WEATHER_CLEAR -> world .setWeather (120000 , 0 , false , false );
8680 case WEATHER_RAIN -> world .setWeather (0 , 24000 , true , false );
8781 case WEATHER_THUNDER -> world .setWeather (0 , 24000 , true , true );
8882 }
8983 });
9084 });
9185
92- // client wants to set a rule (eg. freeze the time)
93- ServerPlayNetworking .registerGlobalReceiver (SET_RULE_C2S , (server , player , handler , buf , sender ) -> {
94- short ruleID = buf .getShort (0 );
95- boolean value = buf .getBoolean (2 );
86+ // client wants to set a rule (e.g. freeze the time)
87+ PayloadTypeRegistry .playC2S ().register (SetRulePayload .ID , SetRulePayload .CODEC );
88+ ServerPlayNetworking .registerGlobalReceiver (SetRulePayload .ID , (payload , context ) -> {
89+ ServerPlayerEntity player = context .player ();
90+ MinecraftServer server = player .server ;
9691 ServerWorld world = player .getServerWorld ();
9792
9893 // Execute on the main thread
9994 server .execute (() -> {
10095
10196 GameRules rules = world .getGameRules ();
10297
103- switch (ruleID ) {
98+ switch (payload . ruleID () ) {
10499 // daylight cycle
105100 case DO_DAYLIGHT_CYCLE_RULE -> {
106101 BooleanRule rule = rules .get (GameRules .DO_DAYLIGHT_CYCLE );
107- rule .set (value , world . getServer () );
102+ rule .set (payload . value (), server );
108103 }
109104 case DO_WEATHER_CYCLE_RULE -> {
110105 BooleanRule rule = rules .get (GameRules .DO_WEATHER_CYCLE );
111- rule .set (value , world . getServer () );
112- broadcastWeatherRuleChange (server , value );
106+ rule .set (payload . value (), server );
107+ broadcastWeatherRuleChange (server , payload . value () );
113108 }
114109 default ->
115110 LOGGER .error (
116111 "Player {} requested to change an unsupported rule id ({}). (client might be outdated)" ,
117112 player .getName ().getString (),
118- ruleID
113+ payload . ruleID ()
119114 );
120115 }
121116 });
122117 });
123118 }
124119
125120 public static void sendOpenBookPacket (ServerPlayerEntity player ) {
126- PacketByteBuf packet = new PacketByteBuf (Unpooled .buffer ());
127- ServerPlayNetworking .send (player , OPEN_BOOK_S2C , packet );
121+ ServerPlayNetworking .send (player , new OpenBookPayload ());
128122 }
129123
130124 public static void broadcastWeatherRuleChange (MinecraftServer server , boolean value ) {
131- PacketByteBuf packet = new PacketByteBuf (Unpooled .buffer ());
132- packet .writeBoolean (value );
125+ var payload = new WeatherGameruleSyncPayload (value );
133126
134127 // Notify each player on the server about the weather gamerule update.
135128 server .getPlayerManager ().getPlayerList ().forEach (player -> {
136- ServerPlayNetworking .send (player , WEATHER_GAMERULE_SYNC_S2C , packet );
129+ ServerPlayNetworking .send (player , payload );
137130 });
138131 }
139132
140133 public static void sendWeatherRule (ServerPlayerEntity player ) {
141134 ServerWorld world = player .getServerWorld ();
142135 boolean doWeatherCycle = world .getGameRules ().getBoolean (GameRules .DO_WEATHER_CYCLE );
143- PacketByteBuf packet = new PacketByteBuf (Unpooled .buffer ());
144- packet .writeBoolean (doWeatherCycle );
145- ServerPlayNetworking .send (player , WEATHER_GAMERULE_SYNC_S2C , packet );
136+ var payload = new WeatherGameruleSyncPayload (doWeatherCycle );
137+ ServerPlayNetworking .send (player , payload );
146138 }
147139}
0 commit comments