0x2B S2BPacketChangeGameState
Changes a global game state: rain toggle, gamemode change, credits, demo messages, elder guardian effect.
Fields
| Field | Type | Description |
|---|---|---|
| reason | unsigned byte | Reason code: 0=invalidBed, 1=endRain, 2=beginRain, 3=changeGamemode, 4=credits, 5=demo, 6=arrow, 7=fadeValue, 8=fadeTime, 9=elderGuardian |
| value | float | Value associated with reason (gamemode ID, rain strength, fade value) |
Wire Encoding
| Field | Type | Notes |
|---|---|---|
| Reason | Unsigned Byte | 0=invalidBed, 1=endRain, 2=beginRain, 3=changeGamemode, 4=credits, 5=demo, 6=arrow, 7=fade, 8=fadeTime, 9=elderGuardian |
| Value | float | Reason-dependent |
MCP References
MCP
NetHandlerPlayClient.handleChangeGameState()Handler Interface
HND
INetHandlerPlayClientNotes
Reason 0: bed can't be set (respawn). Reason 1/2: rain toggle. Reason 3: gamemode change (value=0-3). Reason 4: credits. Reason 5: demo. Reason 6: arrow hitting entity. Reason 7/8: fade values. Reason 9: elder guardian effect.
implementation Implementation Cases
AutoGG
(Gugustus, Tenacity 6.0)
Detect game state changes. NoRain cancels rain start (reason=1/2). AutoGG detects game end (reason=4=credits).
// NoRain
if (event.getPacket() instanceof S2BPacketChangeGameState) {
S2BPacketChangeGameState s2b = (S2BPacketChangeGameState) event.getPacket();
if (s2b.getGameState() == 1 || s2b.getGameState() == 2) event.setCancelled(true);
}NoRain
(Gugustus, Tenacity 6.0)
Detect game state changes. NoRain cancels rain start (reason=1/2). AutoGG detects game end (reason=4=credits).
// NoRain
if (event.getPacket() instanceof S2BPacketChangeGameState) {
S2BPacketChangeGameState s2b = (S2BPacketChangeGameState) event.getPacket();
if (s2b.getGameState() == 1 || s2b.getGameState() == 2) event.setCancelled(true);
}AntiDemo
(Gugustus, Tenacity 6.0)
Detect game state changes. NoRain cancels rain start (reason=1/2). AutoGG detects game end (reason=4=credits).
// NoRain
if (event.getPacket() instanceof S2BPacketChangeGameState) {
S2BPacketChangeGameState s2b = (S2BPacketChangeGameState) event.getPacket();
if (s2b.getGameState() == 1 || s2b.getGameState() == 2) event.setCancelled(true);
}