World packets
Server-to-client records about blocks, chunks, light, the world border, time, weather, sounds, particles and explosions. Every one arrives through PacketReceiveEvent.packet(); positions are in blocks, chunk coordinates are blocks/16, rotations are degrees and ticks run 20 per second — threads, cancelling and what a decode drops are on Packets.
on<PacketReceiveEvent> { e ->
val packet = e.packet()
if (packet !is S2CBlockUpdatePacket) return@on
// a block somewhere turned into air
if (packet.block() == "minecraft:air") log("${packet.x()} ${packet.y()} ${packet.z()}")
}S2CBlockBreakingProgressPacket
Break-progress overlay for a block another entity is mining.
| Component | Type | Description |
|---|---|---|
entityId() |
int |
network id of the mining entity |
x() |
int |
block x |
y() |
int |
block y |
z() |
int |
block z |
progress() |
int |
break stage 0..9, anything outside clears the overlay |
S2CBlockEntityUpdatePacket
Block entity data for one position.
| Component | Type | Description |
|---|---|---|
x() |
int |
block x |
y() |
int |
block y |
z() |
int |
block z |
type() |
String |
namespaced block entity type id |
nbt() |
String |
SNBT payload, "" when the packet carried none |
S2CBlockEventPacket
Block action — note block ping, chest lid, piston push, bell ring.
| Component | Type | Description |
|---|---|---|
x() |
int |
block x |
y() |
int |
block y |
z() |
int |
block z |
type() |
int |
block-specific action id |
data() |
int |
block-specific action parameter |
block() |
String |
namespaced id of the block acted on |
S2CBlockUpdatePacket
Single block change; only the block id survives, not the state properties.
| Component | Type | Description |
|---|---|---|
x() |
int |
block x |
y() |
int |
block y |
z() |
int |
block z |
block() |
String |
namespaced id of the new block |
S2CBlockValueDebugPacket
Debug block-value push; the value payload is not exposed.
| Component | Type | Description |
|---|---|---|
x() |
int |
block x |
y() |
int |
block y |
z() |
int |
block z |
S2CChunkBiomeDataPacket
Biome-only chunk resend; no components.
S2CChunkDataPacket
Full chunk send; sections, block entities, heightmaps and light are not exposed.
| Component | Type | Description |
|---|---|---|
chunkX() |
int |
chunk x, blocks/16 |
chunkZ() |
int |
chunk z, blocks/16 |
S2CChunkDeltaUpdatePacket
Several block changes inside one 16x16x16 chunk section.
| Component | Type | Description |
|---|---|---|
blocks() |
List<BlockChange> |
changed blocks, positions already absolute |
S2CChunkDeltaUpdatePacket.BlockChange
One block change inside a chunk-delta update.
| Component | Type | Description |
|---|---|---|
x() |
int |
absolute block x |
y() |
int |
absolute block y |
z() |
int |
absolute block z |
block() |
String |
namespaced id of the new block |
air() |
boolean |
the new state is air |
S2CChunkLoadDistancePacket
Server-side view distance change.
| Component | Type | Description |
|---|---|---|
distance() |
int |
view distance in chunks |
S2CChunkRenderDistanceCenterPacket
New center chunk for chunk loading.
| Component | Type | Description |
|---|---|---|
chunkX() |
int |
center chunk x |
chunkZ() |
int |
center chunk z |
S2CChunkSentPacket
End of a chunk batch; answered with C2SAcknowledgeChunksPacket.
| Component | Type | Description |
|---|---|---|
batchSize() |
int |
number of chunks in the finished batch |
S2CChunkValueDebugPacket
Debug chunk-value push; the value payload is not exposed.
| Component | Type | Description |
|---|---|---|
chunkX() |
int |
chunk x |
chunkZ() |
int |
chunk z |
S2CDifficultyPacket
World difficulty sync.
| Component | Type | Description |
|---|---|---|
difficulty() |
Difficulty? |
current difficulty, null when the constant is unmapped |
difficultyLocked() |
boolean |
difficulty is locked |
S2CExplosionPacket
Explosion effect; particle type, sound and the destroyed-block list are not exposed.
| Component | Type | Description |
|---|---|---|
x() |
double |
explosion center x in blocks |
y() |
double |
explosion center y in blocks |
z() |
double |
explosion center z in blocks |
radius() |
float |
explosion radius in blocks |
blockCount() |
int |
number of blocks destroyed |
knockbackX() |
double |
player knockback x in blocks/tick, 0 when absent |
knockbackY() |
double |
player knockback y in blocks/tick, 0 when absent |
knockbackZ() |
double |
player knockback z in blocks/tick, 0 when absent |
S2CGameJoinPacket
Initial join info for the play phase.
| Component | Type | Description |
|---|---|---|
playerEntityId() |
int |
the local player's entity network id |
hardcore() |
boolean |
hardcore world |
dimensionIds() |
List<String> |
namespaced ids of every dimension on the server |
maxPlayers() |
int |
advertised player slot count |
viewDistance() |
int |
server view distance in chunks |
simulationDistance() |
int |
server simulation distance in chunks |
reducedDebugInfo() |
boolean |
the F3 screen is reduced |
showDeathScreen() |
boolean |
show the death screen instead of respawning at once |
doLimitedCrafting() |
boolean |
crafting needs a recipe-book unlock |
enforcesSecureChat() |
boolean |
server requires signed chat |
S2CGameStateChangePacket
Game-state change value; the reason is not exposed, so the value alone is ambiguous.
| Component | Type | Description |
|---|---|---|
value() |
float |
reason-specific: gamemode id, rain gradient 0..1, demo screen id |
S2CGameTestHighlightPosPacket
Game-test debug position highlight.
| Component | Type | Description |
|---|---|---|
absoluteX() |
int |
world-space x |
absoluteY() |
int |
world-space y |
absoluteZ() |
int |
world-space z |
relativeX() |
int |
x relative to the test structure origin |
relativeY() |
int |
y relative to the test structure origin |
relativeZ() |
int |
z relative to the test structure origin |
S2CLightUpdatePacket
Chunk light data; the light arrays are not exposed.
| Component | Type | Description |
|---|---|---|
chunkX() |
int |
chunk x |
chunkZ() |
int |
chunk z |
S2CMapUpdatePacket
Filled-map update; pixel colors, icons and the updated rectangle are not exposed.
| Component | Type | Description |
|---|---|---|
mapId() |
int |
numeric map id |
scale() |
byte |
zoom level 0..4, 0 is one block per pixel |
locked() |
boolean |
locked in a cartography table |
S2CParticlePacket
Particle spawn request; the particle type and its parameters are not exposed.
| Component | Type | Description |
|---|---|---|
x() |
double |
spawn center x in blocks |
y() |
double |
spawn center y in blocks |
z() |
double |
spawn center z in blocks |
offsetX() |
float |
gaussian spread on x in blocks |
offsetY() |
float |
gaussian spread on y in blocks |
offsetZ() |
float |
gaussian spread on z in blocks |
speed() |
float |
particle speed multiplier |
count() |
int |
particle count; 0 turns the offsets into a velocity |
forceSpawn() |
boolean |
ignores the client's particle distance limit |
important() |
boolean |
spawns even on the lowest particle setting |
S2CPlaySoundFromEntityPacket
Sound anchored to an entity.
| Component | Type | Description |
|---|---|---|
sound() |
String |
namespaced sound event id |
category() |
SoundCategory? |
mixer channel, null when the constant is unmapped |
entityId() |
int |
source entity network id |
volume() |
float |
volume multiplier, 1.0 is nominal |
pitch() |
float |
pitch multiplier, 1.0 is nominal |
seed() |
long |
random seed picking the sound variant |
S2CPlaySoundPacket
Positional sound.
| Component | Type | Description |
|---|---|---|
sound() |
String |
namespaced sound event id |
category() |
SoundCategory? |
mixer channel, null when the constant is unmapped |
x() |
double |
sound x in blocks, wire value is 1/8-block fixed point |
y() |
double |
sound y in blocks |
z() |
double |
sound z in blocks |
volume() |
float |
volume multiplier, 1.0 is nominal |
pitch() |
float |
pitch multiplier, 1.0 is nominal |
seed() |
long |
random seed picking the sound variant |
S2CSimulationDistancePacket
Server simulation distance change.
| Component | Type | Description |
|---|---|---|
simulationDistance() |
int |
simulation distance in chunks |
S2CStartChunkSendPacket
Start of a chunk batch; no components.
S2CStopSoundPacket
Stops playing sounds.
| Component | Type | Description |
|---|---|---|
soundId() |
String? |
namespaced sound event id, null stops the whole category |
category() |
SoundCategory? |
mixer channel, null means every category |
S2CTestInstanceBlockStatusPacket
Test instance block status report.
| Component | Type | Description |
|---|---|---|
status() |
String |
plain-text status message |
sizeX() |
Integer? |
test area size x in blocks, null when the packet carries no size |
sizeY() |
Integer? |
test area size y in blocks, null when the packet carries no size |
sizeZ() |
Integer? |
test area size z in blocks, null when the packet carries no size |
S2CTickStepPacket
How many ticks to step while the world is frozen.
| Component | Type | Description |
|---|---|---|
tickSteps() |
int |
remaining ticks to step |
S2CUnloadChunkPacket
Chunk removed from the client world.
| Component | Type | Description |
|---|---|---|
chunkX() |
int |
chunk x |
chunkZ() |
int |
chunk z |
S2CUpdateTickRatePacket
Server tick rate and freeze state.
| Component | Type | Description |
|---|---|---|
tickRate() |
float |
ticks per second, vanilla default 20 |
isFrozen() |
boolean |
world ticking is frozen |
S2CWaypointPacket
Locator-bar waypoint change; the waypoint id and its data are not exposed.
| Component | Type | Description |
|---|---|---|
operation() |
WaypointOperation? |
track, update or untrack, null when unmapped |
S2CWorldBorderCenterChangedPacket
World border center moved.
| Component | Type | Description |
|---|---|---|
centerX() |
double |
border center x in blocks |
centerZ() |
double |
border center z in blocks |
S2CWorldBorderInitializePacket
Full world border state, sent on join.
| Component | Type | Description |
|---|---|---|
centerX() |
double |
border center x in blocks |
centerZ() |
double |
border center z in blocks |
size() |
double |
current border diameter in blocks |
sizeLerpTarget() |
double |
target border diameter in blocks |
sizeLerpTime() |
long |
interpolation duration in milliseconds |
maxRadius() |
int |
absolute world border limit in blocks |
warningBlocks() |
int |
warning overlay distance in blocks |
warningTime() |
int |
warning overlay lead time in seconds |
S2CWorldBorderInterpolateSizePacket
World border starts resizing over time.
| Component | Type | Description |
|---|---|---|
size() |
double |
current diameter in blocks |
sizeLerpTarget() |
double |
target diameter in blocks |
sizeLerpTime() |
long |
interpolation duration in milliseconds |
S2CWorldBorderSizeChangedPacket
World border resized instantly.
| Component | Type | Description |
|---|---|---|
sizeLerpTarget() |
double |
new diameter in blocks |
S2CWorldBorderWarningBlocksChangedPacket
World border warning distance changed.
| Component | Type | Description |
|---|---|---|
warningBlocks() |
int |
warning overlay distance in blocks |
S2CWorldBorderWarningTimeChangedPacket
World border warning lead time changed.
| Component | Type | Description |
|---|---|---|
warningTime() |
int |
warning overlay lead time in seconds |
S2CWorldEventPacket
World event — block break sound and particles, door, portal, dispenser.
| Component | Type | Description |
|---|---|---|
eventId() |
int |
vanilla WorldEvents id |
x() |
int |
event block x |
y() |
int |
event block y |
z() |
int |
event block z |
data() |
int |
event-specific parameter, often a packed block state id |
global() |
boolean |
audible across the dimension regardless of distance |
S2CWorldTimeUpdatePacket
World time sync.
| Component | Type | Description |
|---|---|---|
time() |
long |
total world age in ticks |
timeOfDay() |
long |
time of day in ticks, 0..23999 per day |
tickDayTime() |
boolean |
the daylight cycle is advancing (doDaylightCycle) |
Last updated