diff --git a/pom.xml b/pom.xml
index a27d94a9..efd56f84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.github.steveice10
mcprotocollib
- 20w46a-SNAPSHOT
+ 20w49a-SNAPSHOT
jar
MCProtocolLib
diff --git a/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java b/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
index 3103ceac..cae26ab5 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/MinecraftConstants.java
@@ -12,12 +12,12 @@ public final class MinecraftConstants {
/**
* Current supported game version.
*/
- public static final String GAME_VERSION = "20w46a";
+ public static final String GAME_VERSION = "20w49a";
/**
* Current supported protocol version.
*/
- public static final int PROTOCOL_VERSION = (1 << 30) | 6;
+ public static final int PROTOCOL_VERSION = (1 << 30) | 8;
// General Key Constants
diff --git a/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java b/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
index 8e228a49..da1e0ebf 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/MinecraftProtocol.java
@@ -123,28 +123,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSl
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerTradeListPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowPropertyPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerBlockBreakAnimPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerBlockChangePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerBlockValuePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerChunkDataPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerExplosionPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMapDataPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMultiBlockChangePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNBTResponsePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerOpenTileEntityEditorPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerPlayBuiltinSoundPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerPlayEffectPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerPlaySoundPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerSpawnParticlePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerSpawnPositionPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUnloadChunkPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateLightPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTileEntityPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateViewDistancePacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateViewPositionPacket;
-import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerWorldBorderPacket;
+import com.github.steveice10.mc.protocol.packet.ingame.server.world.*;
import com.github.steveice10.mc.protocol.packet.login.client.EncryptionResponsePacket;
import com.github.steveice10.mc.protocol.packet.login.client.LoginPluginResponsePacket;
import com.github.steveice10.mc.protocol.packet.login.client.LoginStartPacket;
@@ -163,6 +142,7 @@ import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.crypt.AESEncryption;
import com.github.steveice10.packetlib.crypt.PacketEncryption;
import com.github.steveice10.packetlib.packet.DefaultPacketHeader;
+import com.github.steveice10.packetlib.packet.Packet;
import com.github.steveice10.packetlib.packet.PacketHeader;
import com.github.steveice10.packetlib.packet.PacketProtocol;
import lombok.AccessLevel;
@@ -173,6 +153,7 @@ import lombok.Setter;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.util.UUID;
+import java.util.function.BiConsumer;
/**
* Implements the Minecraft protocol.
@@ -352,33 +333,33 @@ public class MinecraftProtocol extends PacketProtocol {
switch(subProtocol) {
case HANDSHAKE:
if(client) {
- this.initClientHandshake(session);
+ this.initClientHandshake();
} else {
- this.initServerHandshake(session);
+ this.initServerHandshake();
}
break;
case LOGIN:
if(client) {
- this.initClientLogin(session);
+ this.initLogin(this::registerIncoming, this::registerOutgoing);
} else {
- this.initServerLogin(session);
+ this.initLogin(this::registerOutgoing, this::registerIncoming);
}
break;
case GAME:
if(client) {
- this.initClientGame(session);
+ this.initGame(this::registerIncoming, this::registerOutgoing);
} else {
- this.initServerGame(session);
+ this.initGame(this::registerOutgoing, this::registerIncoming);
}
break;
case STATUS:
if(client) {
- this.initClientStatus(session);
+ this.initStatus(this::registerIncoming, this::registerOutgoing);
} else {
- this.initServerStatus(session);
+ this.initStatus(this::registerOutgoing, this::registerIncoming);
}
break;
@@ -387,339 +368,176 @@ public class MinecraftProtocol extends PacketProtocol {
this.subProtocol = subProtocol;
}
- private void initClientHandshake(Session session) {
+ private void initClientHandshake() {
this.registerOutgoing(0, HandshakePacket.class);
}
- private void initServerHandshake(Session session) {
+ private void initServerHandshake() {
this.registerIncoming(0, HandshakePacket.class);
}
- private void initClientLogin(Session session) {
- this.registerIncoming(0x00, LoginDisconnectPacket.class);
- this.registerIncoming(0x01, EncryptionRequestPacket.class);
- this.registerIncoming(0x02, LoginSuccessPacket.class);
- this.registerIncoming(0x03, LoginSetCompressionPacket.class);
- this.registerIncoming(0x04, LoginPluginRequestPacket.class);
+ private void initLogin(BiConsumer> clientboundPackets, BiConsumer> serverboundPackets) {
+ clientboundPackets.accept(0x00, LoginDisconnectPacket.class);
+ clientboundPackets.accept(0x01, EncryptionRequestPacket.class);
+ clientboundPackets.accept(0x02, LoginSuccessPacket.class);
+ clientboundPackets.accept(0x03, LoginSetCompressionPacket.class);
+ clientboundPackets.accept(0x04, LoginPluginRequestPacket.class);
- this.registerOutgoing(0x00, LoginStartPacket.class);
- this.registerOutgoing(0x01, EncryptionResponsePacket.class);
- this.registerOutgoing(0x02, LoginPluginResponsePacket.class);
+ serverboundPackets.accept(0x00, LoginStartPacket.class);
+ serverboundPackets.accept(0x01, EncryptionResponsePacket.class);
+ serverboundPackets.accept(0x02, LoginPluginResponsePacket.class);
}
- private void initServerLogin(Session session) {
- this.registerIncoming(0x00, LoginStartPacket.class);
- this.registerIncoming(0x01, EncryptionResponsePacket.class);
- this.registerIncoming(0x02, LoginPluginResponsePacket.class);
+ private void initGame(BiConsumer> clientboundPackets, BiConsumer> serverboundPackets) {
+ clientboundPackets.accept(0x00, ServerSpawnEntityPacket.class);
+ clientboundPackets.accept(0x01, ServerSpawnExpOrbPacket.class);
+ clientboundPackets.accept(0x02, ServerSpawnLivingEntityPacket.class);
+ clientboundPackets.accept(0x03, ServerSpawnPaintingPacket.class);
+ clientboundPackets.accept(0x04, ServerSpawnPlayerPacket.class);
+ clientboundPackets.accept(0x05, ServerSculkSensorPacket.class);
+ clientboundPackets.accept(0x06, ServerEntityAnimationPacket.class);
+ clientboundPackets.accept(0x07, ServerStatisticsPacket.class);
+ clientboundPackets.accept(0x08, ServerPlayerActionAckPacket.class);
+ clientboundPackets.accept(0x09, ServerBlockBreakAnimPacket.class);
+ clientboundPackets.accept(0x0A, ServerUpdateTileEntityPacket.class);
+ clientboundPackets.accept(0x0B, ServerBlockValuePacket.class);
+ clientboundPackets.accept(0x0C, ServerBlockChangePacket.class);
+ clientboundPackets.accept(0x0D, ServerBossBarPacket.class);
+ clientboundPackets.accept(0x0E, ServerDifficultyPacket.class);
+ clientboundPackets.accept(0x0F, ServerChatPacket.class);
+ clientboundPackets.accept(0x10, ServerTabCompletePacket.class);
+ clientboundPackets.accept(0x11, ServerDeclareCommandsPacket.class);
+ clientboundPackets.accept(0x12, ServerConfirmTransactionPacket.class);
+ clientboundPackets.accept(0x13, ServerCloseWindowPacket.class);
+ clientboundPackets.accept(0x14, ServerWindowItemsPacket.class);
+ clientboundPackets.accept(0x15, ServerWindowPropertyPacket.class);
+ clientboundPackets.accept(0x16, ServerSetSlotPacket.class);
+ clientboundPackets.accept(0x17, ServerSetCooldownPacket.class);
+ clientboundPackets.accept(0x18, ServerPluginMessagePacket.class);
+ clientboundPackets.accept(0x19, ServerPlaySoundPacket.class);
+ clientboundPackets.accept(0x1A, ServerDisconnectPacket.class);
+ clientboundPackets.accept(0x1B, ServerEntityStatusPacket.class);
+ clientboundPackets.accept(0x1C, ServerExplosionPacket.class);
+ clientboundPackets.accept(0x1D, ServerUnloadChunkPacket.class);
+ clientboundPackets.accept(0x1E, ServerNotifyClientPacket.class);
+ clientboundPackets.accept(0x1F, ServerOpenHorseWindowPacket.class);
+ clientboundPackets.accept(0x20, ServerKeepAlivePacket.class);
+ clientboundPackets.accept(0x21, ServerChunkDataPacket.class);
+ clientboundPackets.accept(0x22, ServerPlayEffectPacket.class);
+ clientboundPackets.accept(0x23, ServerSpawnParticlePacket.class);
+ clientboundPackets.accept(0x24, ServerUpdateLightPacket.class);
+ clientboundPackets.accept(0x25, ServerJoinGamePacket.class);
+ clientboundPackets.accept(0x26, ServerMapDataPacket.class);
+ clientboundPackets.accept(0x27, ServerTradeListPacket.class);
+ clientboundPackets.accept(0x28, ServerEntityPositionPacket.class);
+ clientboundPackets.accept(0x29, ServerEntityPositionRotationPacket.class);
+ clientboundPackets.accept(0x2A, ServerEntityRotationPacket.class);
+ clientboundPackets.accept(0x2B, ServerEntityMovementPacket.class);
+ clientboundPackets.accept(0x2C, ServerVehicleMovePacket.class);
+ clientboundPackets.accept(0x2D, ServerOpenBookPacket.class);
+ clientboundPackets.accept(0x2E, ServerOpenWindowPacket.class);
+ clientboundPackets.accept(0x2F, ServerOpenTileEntityEditorPacket.class);
+ clientboundPackets.accept(0x30, ServerPreparedCraftingGridPacket.class);
+ clientboundPackets.accept(0x31, ServerPlayerAbilitiesPacket.class);
+ clientboundPackets.accept(0x32, ServerCombatPacket.class);
+ clientboundPackets.accept(0x33, ServerPlayerListEntryPacket.class);
+ clientboundPackets.accept(0x34, ServerPlayerFacingPacket.class);
+ clientboundPackets.accept(0x35, ServerPlayerPositionRotationPacket.class);
+ clientboundPackets.accept(0x36, ServerUnlockRecipesPacket.class);
+ clientboundPackets.accept(0x37, ServerEntityDestroyPacket.class);
+ clientboundPackets.accept(0x38, ServerEntityRemoveEffectPacket.class);
+ clientboundPackets.accept(0x39, ServerResourcePackSendPacket.class);
+ clientboundPackets.accept(0x3A, ServerRespawnPacket.class);
+ clientboundPackets.accept(0x3B, ServerEntityHeadLookPacket.class);
+ clientboundPackets.accept(0x3C, ServerMultiBlockChangePacket.class);
+ clientboundPackets.accept(0x3D, ServerAdvancementTabPacket.class);
+ clientboundPackets.accept(0x3E, ServerWorldBorderPacket.class);
+ clientboundPackets.accept(0x3F, ServerSwitchCameraPacket.class);
+ clientboundPackets.accept(0x40, ServerPlayerChangeHeldItemPacket.class);
+ clientboundPackets.accept(0x41, ServerUpdateViewPositionPacket.class);
+ clientboundPackets.accept(0x42, ServerUpdateViewDistancePacket.class);
+ clientboundPackets.accept(0x43, ServerSpawnPositionPacket.class);
+ clientboundPackets.accept(0x44, ServerDisplayScoreboardPacket.class);
+ clientboundPackets.accept(0x45, ServerEntityMetadataPacket.class);
+ clientboundPackets.accept(0x46, ServerEntityAttachPacket.class);
+ clientboundPackets.accept(0x47, ServerEntityVelocityPacket.class);
+ clientboundPackets.accept(0x48, ServerEntityEquipmentPacket.class);
+ clientboundPackets.accept(0x49, ServerPlayerSetExperiencePacket.class);
+ clientboundPackets.accept(0x4A, ServerPlayerHealthPacket.class);
+ clientboundPackets.accept(0x4B, ServerScoreboardObjectivePacket.class);
+ clientboundPackets.accept(0x4C, ServerEntitySetPassengersPacket.class);
+ clientboundPackets.accept(0x4D, ServerTeamPacket.class);
+ clientboundPackets.accept(0x4E, ServerUpdateScorePacket.class);
+ clientboundPackets.accept(0x4F, ServerUpdateTimePacket.class);
+ clientboundPackets.accept(0x50, ServerTitlePacket.class);
+ clientboundPackets.accept(0x51, ServerEntitySoundEffectPacket.class);
+ clientboundPackets.accept(0x52, ServerPlayBuiltinSoundPacket.class);
+ clientboundPackets.accept(0x53, ServerStopSoundPacket.class);
+ clientboundPackets.accept(0x54, ServerPlayerListDataPacket.class);
+ clientboundPackets.accept(0x55, ServerNBTResponsePacket.class);
+ clientboundPackets.accept(0x56, ServerEntityCollectItemPacket.class);
+ clientboundPackets.accept(0x57, ServerEntityTeleportPacket.class);
+ clientboundPackets.accept(0x58, ServerAdvancementsPacket.class);
+ clientboundPackets.accept(0x59, ServerEntityPropertiesPacket.class);
+ clientboundPackets.accept(0x5A, ServerEntityEffectPacket.class);
+ clientboundPackets.accept(0x5B, ServerDeclareRecipesPacket.class);
+ clientboundPackets.accept(0x5C, ServerDeclareTagsPacket.class);
- this.registerOutgoing(0x00, LoginDisconnectPacket.class);
- this.registerOutgoing(0x01, EncryptionRequestPacket.class);
- this.registerOutgoing(0x02, LoginSuccessPacket.class);
- this.registerOutgoing(0x03, LoginSetCompressionPacket.class);
- this.registerOutgoing(0x04, LoginPluginRequestPacket.class);
+ serverboundPackets.accept(0x00, ClientTeleportConfirmPacket.class);
+ serverboundPackets.accept(0x01, ClientBlockNBTRequestPacket.class);
+ serverboundPackets.accept(0x02, ClientSetDifficultyPacket.class);
+ serverboundPackets.accept(0x03, ClientChatPacket.class);
+ serverboundPackets.accept(0x04, ClientRequestPacket.class);
+ serverboundPackets.accept(0x05, ClientSettingsPacket.class);
+ serverboundPackets.accept(0x06, ClientTabCompletePacket.class);
+ serverboundPackets.accept(0x07, ClientConfirmTransactionPacket.class);
+ serverboundPackets.accept(0x08, ClientClickWindowButtonPacket.class);
+ serverboundPackets.accept(0x09, ClientWindowActionPacket.class);
+ serverboundPackets.accept(0x0A, ClientCloseWindowPacket.class);
+ serverboundPackets.accept(0x0B, ClientPluginMessagePacket.class);
+ serverboundPackets.accept(0x0C, ClientEditBookPacket.class);
+ serverboundPackets.accept(0x0D, ClientEntityNBTRequestPacket.class);
+ serverboundPackets.accept(0x0E, ClientPlayerInteractEntityPacket.class);
+ serverboundPackets.accept(0x0F, ClientGenerateStructuresPacket.class);
+ serverboundPackets.accept(0x10, ClientKeepAlivePacket.class);
+ serverboundPackets.accept(0x11, ClientLockDifficultyPacket.class);
+ serverboundPackets.accept(0x12, ClientPlayerPositionPacket.class);
+ serverboundPackets.accept(0x13, ClientPlayerPositionRotationPacket.class);
+ serverboundPackets.accept(0x14, ClientPlayerRotationPacket.class);
+ serverboundPackets.accept(0x15, ClientPlayerMovementPacket.class);
+ serverboundPackets.accept(0x16, ClientVehicleMovePacket.class);
+ serverboundPackets.accept(0x17, ClientSteerBoatPacket.class);
+ serverboundPackets.accept(0x18, ClientMoveItemToHotbarPacket.class);
+ serverboundPackets.accept(0x19, ClientPrepareCraftingGridPacket.class);
+ serverboundPackets.accept(0x1A, ClientPlayerAbilitiesPacket.class);
+ serverboundPackets.accept(0x1B, ClientPlayerActionPacket.class);
+ serverboundPackets.accept(0x1C, ClientPlayerStatePacket.class);
+ serverboundPackets.accept(0x1D, ClientSteerVehiclePacket.class);
+ serverboundPackets.accept(0x1E, ClientDisplayedRecipePacket.class);
+ serverboundPackets.accept(0x1F, ClientCraftingBookStatePacket.class);
+ serverboundPackets.accept(0x20, ClientRenameItemPacket.class);
+ serverboundPackets.accept(0x21, ClientResourcePackStatusPacket.class);
+ serverboundPackets.accept(0x22, ClientAdvancementTabPacket.class);
+ serverboundPackets.accept(0x23, ClientSelectTradePacket.class);
+ serverboundPackets.accept(0x24, ClientSetBeaconEffectPacket.class);
+ serverboundPackets.accept(0x25, ClientPlayerChangeHeldItemPacket.class);
+ serverboundPackets.accept(0x26, ClientUpdateCommandBlockPacket.class);
+ serverboundPackets.accept(0x27, ClientUpdateCommandBlockMinecartPacket.class);
+ serverboundPackets.accept(0x28, ClientCreativeInventoryActionPacket.class);
+ serverboundPackets.accept(0x29, ClientUpdateJigsawBlockPacket.class);
+ serverboundPackets.accept(0x2A, ClientUpdateStructureBlockPacket.class);
+ serverboundPackets.accept(0x2B, ClientUpdateSignPacket.class);
+ serverboundPackets.accept(0x2C, ClientPlayerSwingArmPacket.class);
+ serverboundPackets.accept(0x2D, ClientSpectatePacket.class);
+ serverboundPackets.accept(0x2E, ClientPlayerPlaceBlockPacket.class);
+ serverboundPackets.accept(0x2F, ClientPlayerUseItemPacket.class);
}
- private void initClientGame(Session session) {
- this.registerIncoming(0x00, ServerSpawnEntityPacket.class);
- this.registerIncoming(0x01, ServerSpawnExpOrbPacket.class);
- this.registerIncoming(0x02, ServerSpawnLivingEntityPacket.class);
- this.registerIncoming(0x03, ServerSpawnPaintingPacket.class);
- this.registerIncoming(0x04, ServerSpawnPlayerPacket.class);
- this.registerIncoming(0x05, ServerEntityAnimationPacket.class);
- this.registerIncoming(0x06, ServerStatisticsPacket.class);
- this.registerIncoming(0x07, ServerPlayerActionAckPacket.class);
- this.registerIncoming(0x08, ServerBlockBreakAnimPacket.class);
- this.registerIncoming(0x09, ServerUpdateTileEntityPacket.class);
- this.registerIncoming(0x0A, ServerBlockValuePacket.class);
- this.registerIncoming(0x0B, ServerBlockChangePacket.class);
- this.registerIncoming(0x0C, ServerBossBarPacket.class);
- this.registerIncoming(0x0D, ServerDifficultyPacket.class);
- this.registerIncoming(0x0E, ServerChatPacket.class);
- this.registerIncoming(0x0F, ServerTabCompletePacket.class);
- this.registerIncoming(0x10, ServerDeclareCommandsPacket.class);
- this.registerIncoming(0x11, ServerConfirmTransactionPacket.class);
- this.registerIncoming(0x12, ServerCloseWindowPacket.class);
- this.registerIncoming(0x13, ServerWindowItemsPacket.class);
- this.registerIncoming(0x14, ServerWindowPropertyPacket.class);
- this.registerIncoming(0x15, ServerSetSlotPacket.class);
- this.registerIncoming(0x16, ServerSetCooldownPacket.class);
- this.registerIncoming(0x17, ServerPluginMessagePacket.class);
- this.registerIncoming(0x18, ServerPlaySoundPacket.class);
- this.registerIncoming(0x19, ServerDisconnectPacket.class);
- this.registerIncoming(0x1A, ServerEntityStatusPacket.class);
- this.registerIncoming(0x1B, ServerExplosionPacket.class);
- this.registerIncoming(0x1C, ServerUnloadChunkPacket.class);
- this.registerIncoming(0x1D, ServerNotifyClientPacket.class);
- this.registerIncoming(0x1E, ServerOpenHorseWindowPacket.class);
- this.registerIncoming(0x1F, ServerKeepAlivePacket.class);
- this.registerIncoming(0x20, ServerChunkDataPacket.class);
- this.registerIncoming(0x21, ServerPlayEffectPacket.class);
- this.registerIncoming(0x22, ServerSpawnParticlePacket.class);
- this.registerIncoming(0x23, ServerUpdateLightPacket.class);
- this.registerIncoming(0x24, ServerJoinGamePacket.class);
- this.registerIncoming(0x25, ServerMapDataPacket.class);
- this.registerIncoming(0x26, ServerTradeListPacket.class);
- this.registerIncoming(0x27, ServerEntityPositionPacket.class);
- this.registerIncoming(0x28, ServerEntityPositionRotationPacket.class);
- this.registerIncoming(0x29, ServerEntityRotationPacket.class);
- this.registerIncoming(0x2A, ServerEntityMovementPacket.class);
- this.registerIncoming(0x2B, ServerVehicleMovePacket.class);
- this.registerIncoming(0x2C, ServerOpenBookPacket.class);
- this.registerIncoming(0x2D, ServerOpenWindowPacket.class);
- this.registerIncoming(0x2E, ServerOpenTileEntityEditorPacket.class);
- this.registerIncoming(0x2F, ServerPreparedCraftingGridPacket.class);
- this.registerIncoming(0x30, ServerPlayerAbilitiesPacket.class);
- this.registerIncoming(0x31, ServerCombatPacket.class);
- this.registerIncoming(0x32, ServerPlayerListEntryPacket.class);
- this.registerIncoming(0x33, ServerPlayerFacingPacket.class);
- this.registerIncoming(0x34, ServerPlayerPositionRotationPacket.class);
- this.registerIncoming(0x35, ServerUnlockRecipesPacket.class);
- this.registerIncoming(0x36, ServerEntityDestroyPacket.class);
- this.registerIncoming(0x37, ServerEntityRemoveEffectPacket.class);
- this.registerIncoming(0x38, ServerResourcePackSendPacket.class);
- this.registerIncoming(0x39, ServerRespawnPacket.class);
- this.registerIncoming(0x3A, ServerEntityHeadLookPacket.class);
- this.registerIncoming(0x3B, ServerMultiBlockChangePacket.class);
- this.registerIncoming(0x3C, ServerAdvancementTabPacket.class);
- this.registerIncoming(0x3D, ServerWorldBorderPacket.class);
- this.registerIncoming(0x3E, ServerSwitchCameraPacket.class);
- this.registerIncoming(0x3F, ServerPlayerChangeHeldItemPacket.class);
- this.registerIncoming(0x40, ServerUpdateViewPositionPacket.class);
- this.registerIncoming(0x41, ServerUpdateViewDistancePacket.class);
- this.registerIncoming(0x42, ServerSpawnPositionPacket.class);
- this.registerIncoming(0x43, ServerDisplayScoreboardPacket.class);
- this.registerIncoming(0x44, ServerEntityMetadataPacket.class);
- this.registerIncoming(0x45, ServerEntityAttachPacket.class);
- this.registerIncoming(0x46, ServerEntityVelocityPacket.class);
- this.registerIncoming(0x47, ServerEntityEquipmentPacket.class);
- this.registerIncoming(0x48, ServerPlayerSetExperiencePacket.class);
- this.registerIncoming(0x49, ServerPlayerHealthPacket.class);
- this.registerIncoming(0x4A, ServerScoreboardObjectivePacket.class);
- this.registerIncoming(0x4B, ServerEntitySetPassengersPacket.class);
- this.registerIncoming(0x4C, ServerTeamPacket.class);
- this.registerIncoming(0x4D, ServerUpdateScorePacket.class);
- this.registerIncoming(0x4E, ServerUpdateTimePacket.class);
- this.registerIncoming(0x4F, ServerTitlePacket.class);
- this.registerIncoming(0x50, ServerEntitySoundEffectPacket.class);
- this.registerIncoming(0x51, ServerPlayBuiltinSoundPacket.class);
- this.registerIncoming(0x52, ServerStopSoundPacket.class);
- this.registerIncoming(0x53, ServerPlayerListDataPacket.class);
- this.registerIncoming(0x54, ServerNBTResponsePacket.class);
- this.registerIncoming(0x55, ServerEntityCollectItemPacket.class);
- this.registerIncoming(0x56, ServerEntityTeleportPacket.class);
- this.registerIncoming(0x57, ServerAdvancementsPacket.class);
- this.registerIncoming(0x58, ServerEntityPropertiesPacket.class);
- this.registerIncoming(0x59, ServerEntityEffectPacket.class);
- this.registerIncoming(0x5A, ServerDeclareRecipesPacket.class);
- this.registerIncoming(0x5B, ServerDeclareTagsPacket.class);
+ private void initStatus(BiConsumer> clientboundPackets, BiConsumer> serverboundPackets) {
+ clientboundPackets.accept(0x00, StatusResponsePacket.class);
+ clientboundPackets.accept(0x01, StatusPongPacket.class);
- this.registerOutgoing(0x00, ClientTeleportConfirmPacket.class);
- this.registerOutgoing(0x01, ClientBlockNBTRequestPacket.class);
- this.registerOutgoing(0x02, ClientSetDifficultyPacket.class);
- this.registerOutgoing(0x03, ClientChatPacket.class);
- this.registerOutgoing(0x04, ClientRequestPacket.class);
- this.registerOutgoing(0x05, ClientSettingsPacket.class);
- this.registerOutgoing(0x06, ClientTabCompletePacket.class);
- this.registerOutgoing(0x07, ClientConfirmTransactionPacket.class);
- this.registerOutgoing(0x08, ClientClickWindowButtonPacket.class);
- this.registerOutgoing(0x09, ClientWindowActionPacket.class);
- this.registerOutgoing(0x0A, ClientCloseWindowPacket.class);
- this.registerOutgoing(0x0B, ClientPluginMessagePacket.class);
- this.registerOutgoing(0x0C, ClientEditBookPacket.class);
- this.registerOutgoing(0x0D, ClientEntityNBTRequestPacket.class);
- this.registerOutgoing(0x0E, ClientPlayerInteractEntityPacket.class);
- this.registerOutgoing(0x0F, ClientGenerateStructuresPacket.class);
- this.registerOutgoing(0x10, ClientKeepAlivePacket.class);
- this.registerOutgoing(0x11, ClientLockDifficultyPacket.class);
- this.registerOutgoing(0x12, ClientPlayerPositionPacket.class);
- this.registerOutgoing(0x13, ClientPlayerPositionRotationPacket.class);
- this.registerOutgoing(0x14, ClientPlayerRotationPacket.class);
- this.registerOutgoing(0x15, ClientPlayerMovementPacket.class);
- this.registerOutgoing(0x16, ClientVehicleMovePacket.class);
- this.registerOutgoing(0x17, ClientSteerBoatPacket.class);
- this.registerOutgoing(0x18, ClientMoveItemToHotbarPacket.class);
- this.registerOutgoing(0x19, ClientPrepareCraftingGridPacket.class);
- this.registerOutgoing(0x1A, ClientPlayerAbilitiesPacket.class);
- this.registerOutgoing(0x1B, ClientPlayerActionPacket.class);
- this.registerOutgoing(0x1C, ClientPlayerStatePacket.class);
- this.registerOutgoing(0x1D, ClientSteerVehiclePacket.class);
- this.registerOutgoing(0x1E, ClientDisplayedRecipePacket.class);
- this.registerOutgoing(0x1F, ClientCraftingBookStatePacket.class);
- this.registerOutgoing(0x20, ClientRenameItemPacket.class);
- this.registerOutgoing(0x21, ClientResourcePackStatusPacket.class);
- this.registerOutgoing(0x22, ClientAdvancementTabPacket.class);
- this.registerOutgoing(0x23, ClientSelectTradePacket.class);
- this.registerOutgoing(0x24, ClientSetBeaconEffectPacket.class);
- this.registerOutgoing(0x25, ClientPlayerChangeHeldItemPacket.class);
- this.registerOutgoing(0x26, ClientUpdateCommandBlockPacket.class);
- this.registerOutgoing(0x27, ClientUpdateCommandBlockMinecartPacket.class);
- this.registerOutgoing(0x28, ClientCreativeInventoryActionPacket.class);
- this.registerOutgoing(0x29, ClientUpdateJigsawBlockPacket.class);
- this.registerOutgoing(0x2A, ClientUpdateStructureBlockPacket.class);
- this.registerOutgoing(0x2B, ClientUpdateSignPacket.class);
- this.registerOutgoing(0x2C, ClientPlayerSwingArmPacket.class);
- this.registerOutgoing(0x2D, ClientSpectatePacket.class);
- this.registerOutgoing(0x2E, ClientPlayerPlaceBlockPacket.class);
- this.registerOutgoing(0x2F, ClientPlayerUseItemPacket.class);
- }
-
- private void initServerGame(Session session) {
- this.registerIncoming(0x00, ClientTeleportConfirmPacket.class);
- this.registerIncoming(0x01, ClientBlockNBTRequestPacket.class);
- this.registerIncoming(0x02, ClientSetDifficultyPacket.class);
- this.registerIncoming(0x03, ClientChatPacket.class);
- this.registerIncoming(0x04, ClientRequestPacket.class);
- this.registerIncoming(0x05, ClientSettingsPacket.class);
- this.registerIncoming(0x06, ClientTabCompletePacket.class);
- this.registerIncoming(0x07, ClientConfirmTransactionPacket.class);
- this.registerIncoming(0x08, ClientClickWindowButtonPacket.class);
- this.registerIncoming(0x09, ClientWindowActionPacket.class);
- this.registerIncoming(0x0A, ClientCloseWindowPacket.class);
- this.registerIncoming(0x0B, ClientPluginMessagePacket.class);
- this.registerIncoming(0x0C, ClientEditBookPacket.class);
- this.registerIncoming(0x0D, ClientEntityNBTRequestPacket.class);
- this.registerIncoming(0x0E, ClientPlayerInteractEntityPacket.class);
- this.registerIncoming(0x0F, ClientGenerateStructuresPacket.class);
- this.registerIncoming(0x10, ClientKeepAlivePacket.class);
- this.registerIncoming(0x11, ClientLockDifficultyPacket.class);
- this.registerIncoming(0x12, ClientPlayerPositionPacket.class);
- this.registerIncoming(0x13, ClientPlayerPositionRotationPacket.class);
- this.registerIncoming(0x14, ClientPlayerRotationPacket.class);
- this.registerIncoming(0x15, ClientPlayerMovementPacket.class);
- this.registerIncoming(0x16, ClientVehicleMovePacket.class);
- this.registerIncoming(0x17, ClientSteerBoatPacket.class);
- this.registerIncoming(0x18, ClientMoveItemToHotbarPacket.class);
- this.registerIncoming(0x19, ClientPrepareCraftingGridPacket.class);
- this.registerIncoming(0x1A, ClientPlayerAbilitiesPacket.class);
- this.registerIncoming(0x1B, ClientPlayerActionPacket.class);
- this.registerIncoming(0x1C, ClientPlayerStatePacket.class);
- this.registerIncoming(0x1D, ClientSteerVehiclePacket.class);
- this.registerIncoming(0x1E, ClientDisplayedRecipePacket.class);
- this.registerIncoming(0x1F, ClientCraftingBookStatePacket.class);
- this.registerIncoming(0x20, ClientRenameItemPacket.class);
- this.registerIncoming(0x21, ClientResourcePackStatusPacket.class);
- this.registerIncoming(0x22, ClientAdvancementTabPacket.class);
- this.registerIncoming(0x23, ClientSelectTradePacket.class);
- this.registerIncoming(0x24, ClientSetBeaconEffectPacket.class);
- this.registerIncoming(0x25, ClientPlayerChangeHeldItemPacket.class);
- this.registerIncoming(0x26, ClientUpdateCommandBlockPacket.class);
- this.registerIncoming(0x27, ClientUpdateCommandBlockMinecartPacket.class);
- this.registerIncoming(0x28, ClientCreativeInventoryActionPacket.class);
- this.registerIncoming(0x29, ClientUpdateJigsawBlockPacket.class);
- this.registerIncoming(0x2A, ClientUpdateStructureBlockPacket.class);
- this.registerIncoming(0x2B, ClientUpdateSignPacket.class);
- this.registerIncoming(0x2C, ClientPlayerSwingArmPacket.class);
- this.registerIncoming(0x2D, ClientSpectatePacket.class);
- this.registerIncoming(0x2E, ClientPlayerPlaceBlockPacket.class);
- this.registerIncoming(0x2F, ClientPlayerUseItemPacket.class);
-
- this.registerOutgoing(0x00, ServerSpawnEntityPacket.class);
- this.registerOutgoing(0x01, ServerSpawnExpOrbPacket.class);
- this.registerOutgoing(0x02, ServerSpawnLivingEntityPacket.class);
- this.registerOutgoing(0x03, ServerSpawnPaintingPacket.class);
- this.registerOutgoing(0x04, ServerSpawnPlayerPacket.class);
- this.registerOutgoing(0x05, ServerEntityAnimationPacket.class);
- this.registerOutgoing(0x06, ServerStatisticsPacket.class);
- this.registerOutgoing(0x07, ServerPlayerActionAckPacket.class);
- this.registerOutgoing(0x08, ServerBlockBreakAnimPacket.class);
- this.registerOutgoing(0x09, ServerUpdateTileEntityPacket.class);
- this.registerOutgoing(0x0A, ServerBlockValuePacket.class);
- this.registerOutgoing(0x0B, ServerBlockChangePacket.class);
- this.registerOutgoing(0x0C, ServerBossBarPacket.class);
- this.registerOutgoing(0x0D, ServerDifficultyPacket.class);
- this.registerOutgoing(0x0E, ServerChatPacket.class);
- this.registerOutgoing(0x0F, ServerTabCompletePacket.class);
- this.registerOutgoing(0x10, ServerDeclareCommandsPacket.class);
- this.registerOutgoing(0x11, ServerConfirmTransactionPacket.class);
- this.registerOutgoing(0x12, ServerCloseWindowPacket.class);
- this.registerOutgoing(0x13, ServerWindowItemsPacket.class);
- this.registerOutgoing(0x14, ServerWindowPropertyPacket.class);
- this.registerOutgoing(0x15, ServerSetSlotPacket.class);
- this.registerOutgoing(0x16, ServerSetCooldownPacket.class);
- this.registerOutgoing(0x17, ServerPluginMessagePacket.class);
- this.registerOutgoing(0x18, ServerPlaySoundPacket.class);
- this.registerOutgoing(0x19, ServerDisconnectPacket.class);
- this.registerOutgoing(0x1A, ServerEntityStatusPacket.class);
- this.registerOutgoing(0x1B, ServerExplosionPacket.class);
- this.registerOutgoing(0x1C, ServerUnloadChunkPacket.class);
- this.registerOutgoing(0x1D, ServerNotifyClientPacket.class);
- this.registerOutgoing(0x1E, ServerOpenHorseWindowPacket.class);
- this.registerOutgoing(0x1F, ServerKeepAlivePacket.class);
- this.registerOutgoing(0x20, ServerChunkDataPacket.class);
- this.registerOutgoing(0x21, ServerPlayEffectPacket.class);
- this.registerOutgoing(0x22, ServerSpawnParticlePacket.class);
- this.registerOutgoing(0x23, ServerUpdateLightPacket.class);
- this.registerOutgoing(0x24, ServerJoinGamePacket.class);
- this.registerOutgoing(0x25, ServerMapDataPacket.class);
- this.registerOutgoing(0x26, ServerTradeListPacket.class);
- this.registerOutgoing(0x27, ServerEntityPositionPacket.class);
- this.registerOutgoing(0x28, ServerEntityPositionRotationPacket.class);
- this.registerOutgoing(0x29, ServerEntityRotationPacket.class);
- this.registerOutgoing(0x2A, ServerEntityMovementPacket.class);
- this.registerOutgoing(0x2B, ServerVehicleMovePacket.class);
- this.registerOutgoing(0x2C, ServerOpenBookPacket.class);
- this.registerOutgoing(0x2D, ServerOpenWindowPacket.class);
- this.registerOutgoing(0x2E, ServerOpenTileEntityEditorPacket.class);
- this.registerOutgoing(0x2F, ServerPreparedCraftingGridPacket.class);
- this.registerOutgoing(0x30, ServerPlayerAbilitiesPacket.class);
- this.registerOutgoing(0x31, ServerCombatPacket.class);
- this.registerOutgoing(0x32, ServerPlayerListEntryPacket.class);
- this.registerOutgoing(0x33, ServerPlayerFacingPacket.class);
- this.registerOutgoing(0x34, ServerPlayerPositionRotationPacket.class);
- this.registerOutgoing(0x35, ServerUnlockRecipesPacket.class);
- this.registerOutgoing(0x36, ServerEntityDestroyPacket.class);
- this.registerOutgoing(0x37, ServerEntityRemoveEffectPacket.class);
- this.registerOutgoing(0x38, ServerResourcePackSendPacket.class);
- this.registerOutgoing(0x39, ServerRespawnPacket.class);
- this.registerOutgoing(0x3A, ServerEntityHeadLookPacket.class);
- this.registerOutgoing(0x3B, ServerMultiBlockChangePacket.class);
- this.registerOutgoing(0x3C, ServerAdvancementTabPacket.class);
- this.registerOutgoing(0x3D, ServerWorldBorderPacket.class);
- this.registerOutgoing(0x3E, ServerSwitchCameraPacket.class);
- this.registerOutgoing(0x3F, ServerPlayerChangeHeldItemPacket.class);
- this.registerOutgoing(0x40, ServerUpdateViewPositionPacket.class);
- this.registerOutgoing(0x41, ServerUpdateViewDistancePacket.class);
- this.registerOutgoing(0x42, ServerSpawnPositionPacket.class);
- this.registerOutgoing(0x43, ServerDisplayScoreboardPacket.class);
- this.registerOutgoing(0x44, ServerEntityMetadataPacket.class);
- this.registerOutgoing(0x45, ServerEntityAttachPacket.class);
- this.registerOutgoing(0x46, ServerEntityVelocityPacket.class);
- this.registerOutgoing(0x47, ServerEntityEquipmentPacket.class);
- this.registerOutgoing(0x48, ServerPlayerSetExperiencePacket.class);
- this.registerOutgoing(0x49, ServerPlayerHealthPacket.class);
- this.registerOutgoing(0x4A, ServerScoreboardObjectivePacket.class);
- this.registerOutgoing(0x4B, ServerEntitySetPassengersPacket.class);
- this.registerOutgoing(0x4C, ServerTeamPacket.class);
- this.registerOutgoing(0x4D, ServerUpdateScorePacket.class);
- this.registerOutgoing(0x4E, ServerUpdateTimePacket.class);
- this.registerOutgoing(0x4F, ServerTitlePacket.class);
- this.registerOutgoing(0x50, ServerEntitySoundEffectPacket.class);
- this.registerOutgoing(0x51, ServerPlayBuiltinSoundPacket.class);
- this.registerOutgoing(0x52, ServerStopSoundPacket.class);
- this.registerOutgoing(0x53, ServerPlayerListDataPacket.class);
- this.registerOutgoing(0x54, ServerNBTResponsePacket.class);
- this.registerOutgoing(0x55, ServerEntityCollectItemPacket.class);
- this.registerOutgoing(0x56, ServerEntityTeleportPacket.class);
- this.registerOutgoing(0x57, ServerAdvancementsPacket.class);
- this.registerOutgoing(0x58, ServerEntityPropertiesPacket.class);
- this.registerOutgoing(0x59, ServerEntityEffectPacket.class);
- this.registerOutgoing(0x5A, ServerDeclareRecipesPacket.class);
- this.registerOutgoing(0x5B, ServerDeclareTagsPacket.class);
- }
-
- private void initClientStatus(Session session) {
- this.registerIncoming(0x00, StatusResponsePacket.class);
- this.registerIncoming(0x01, StatusPongPacket.class);
-
- this.registerOutgoing(0x00, StatusQueryPacket.class);
- this.registerOutgoing(0x01, StatusPingPacket.class);
- }
-
- private void initServerStatus(Session session) {
- this.registerIncoming(0x00, StatusQueryPacket.class);
- this.registerIncoming(0x01, StatusPingPacket.class);
-
- this.registerOutgoing(0x00, StatusResponsePacket.class);
- this.registerOutgoing(0x01, StatusPongPacket.class);
+ serverboundPackets.accept(0x00, StatusQueryPacket.class);
+ serverboundPackets.accept(0x01, StatusPingPacket.class);
}
}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSculkSensorPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSculkSensorPacket.java
new file mode 100644
index 00000000..3200d897
--- /dev/null
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerSculkSensorPacket.java
@@ -0,0 +1,39 @@
+package com.github.steveice10.mc.protocol.packet.ingame.server.world;
+
+import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
+import com.github.steveice10.packetlib.io.NetInput;
+import com.github.steveice10.packetlib.io.NetOutput;
+import com.github.steveice10.packetlib.packet.Packet;
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.IOException;
+
+//TODO
+@Data
+@Setter(AccessLevel.NONE)
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class ServerSculkSensorPacket implements Packet {
+ private Position position;
+ private String identifier;
+
+ @Override
+ public void read(NetInput in) throws IOException {
+ this.position = Position.read(in);
+ this.identifier = in.readString();
+ // more to do
+ }
+
+ @Override
+ public void write(NetOutput out) throws IOException {
+ Position.write(out, this.position);
+ out.writeString(this.identifier);
+ }
+
+ @Override
+ public boolean isPriority() {
+ return false;
+ }
+}
diff --git a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerUpdateLightPacket.java b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerUpdateLightPacket.java
index 8a97eb66..3235214a 100644
--- a/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerUpdateLightPacket.java
+++ b/src/main/java/com/github/steveice10/mc/protocol/packet/ingame/server/world/ServerUpdateLightPacket.java
@@ -16,8 +16,8 @@ import java.util.Arrays;
@Data
@Setter(AccessLevel.NONE)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
+//TODO: Actually, like, make this work, instead of hacked together.
public class ServerUpdateLightPacket implements Packet {
- private static final int NUM_ENTRIES = 18;
private static final int EMPTY_SIZE = 4096;
private static final NibbleArray3d EMPTY = new NibbleArray3d(EMPTY_SIZE);
@@ -28,14 +28,6 @@ public class ServerUpdateLightPacket implements Packet {
private @NonNull NibbleArray3d[] blockLight;
public ServerUpdateLightPacket(int x, int z, boolean trustEdges, @NonNull NibbleArray3d[] skyLight, @NonNull NibbleArray3d[] blockLight) {
- if(skyLight.length != NUM_ENTRIES) {
- throw new IllegalArgumentException("skyLight must have exactly " + NUM_ENTRIES + " entries (null entries are permitted)");
- }
-
- if(blockLight.length != NUM_ENTRIES) {
- throw new IllegalArgumentException("blockLight must have exactly " + NUM_ENTRIES + " entries (null entries are permitted)");
- }
-
this.x = x;
this.z = z;
this.trustEdges = trustEdges;
@@ -49,27 +41,27 @@ public class ServerUpdateLightPacket implements Packet {
this.z = in.readVarInt();
this.trustEdges = in.readBoolean();
- long skyLightMask = in.readVarLong();
- long blockLightMask = in.readVarLong();
- long emptySkyLightMask = in.readVarLong();
- long emptyBlockLightMask = in.readVarLong();
+ long[] skyLightMask = in.readLongs(in.readVarInt());
+ long[] blockLightMask = in.readLongs(in.readVarInt());
+ long[] emptySkyLightMask = in.readLongs(in.readVarInt());
+ long[] emptyBlockLightMask = in.readLongs(in.readVarInt());
- this.skyLight = new NibbleArray3d[NUM_ENTRIES];
- for (int i = 0; i < NUM_ENTRIES; i++) {
- if ((skyLightMask & 1 << i) != 0) {
+ this.skyLight = new NibbleArray3d[in.readVarInt()];
+ for (int i = 0; i < this.skyLight.length; i++) {
+ if ((skyLightMask[0] & 1 << i) != 0) {
this.skyLight[i] = new NibbleArray3d(in, in.readVarInt());
- } else if ((emptySkyLightMask & 1 << i) != 0) {
+ } else if ((emptySkyLightMask[0] & 1 << i) != 0) {
this.skyLight[i] = new NibbleArray3d(EMPTY_SIZE);
} else {
this.skyLight[i] = null;
}
}
- this.blockLight = new NibbleArray3d[NUM_ENTRIES];
- for (int i = 0; i < NUM_ENTRIES; i++) {
- if ((blockLightMask & 1 << i) != 0) {
+ this.blockLight = new NibbleArray3d[in.readVarInt()];
+ for (int i = 0; i < this.blockLight.length; i++) {
+ if ((blockLightMask[0] & 1 << i) != 0) {
this.blockLight[i] = new NibbleArray3d(in, in.readVarInt());
- } else if ((emptyBlockLightMask & 1 << i) != 0) {
+ } else if ((emptyBlockLightMask[0] & 1 << i) != 0) {
this.blockLight[i] = new NibbleArray3d(EMPTY_SIZE);
} else {
this.blockLight[i] = null;
@@ -88,7 +80,7 @@ public class ServerUpdateLightPacket implements Packet {
int emptySkyLightMask = 0;
int emptyBlockLightMask = 0;
- for (int i = 0; i < NUM_ENTRIES; i++) {
+ for (int i = 0; i < this.skyLight.length; i++) {
NibbleArray3d skyLight = this.skyLight[i];
if(skyLight != null) {
if(EMPTY.equals(skyLight)) {
@@ -97,7 +89,9 @@ public class ServerUpdateLightPacket implements Packet {
skyLightMask |= 1 << i;
}
}
+ }
+ for (int i = 0; i < this.blockLight.length; i++) {
NibbleArray3d blockLight = this.blockLight[i];
if(blockLight != null) {
if(EMPTY.equals(blockLight)) {
@@ -108,19 +102,25 @@ public class ServerUpdateLightPacket implements Packet {
}
}
- out.writeVarLong(skyLightMask);
- out.writeVarLong(blockLightMask);
- out.writeVarLong(emptySkyLightMask);
- out.writeVarLong(emptyBlockLightMask);
+ out.writeVarInt(1);
+ out.writeLong(skyLightMask);
+ out.writeVarInt(1);
+ out.writeLong(blockLightMask);
+ out.writeVarInt(1);
+ out.writeLong(emptySkyLightMask);
+ out.writeVarInt(1);
+ out.writeLong(emptyBlockLightMask);
- for(int i = 0; i < NUM_ENTRIES; i++) {
+ out.writeVarInt(this.skyLight.length);
+ for(int i = 0; i < this.skyLight.length; i++) {
if((skyLightMask & 1 << i) != 0) {
out.writeVarInt(this.skyLight[i].getData().length);
this.skyLight[i].write(out);
}
}
- for(int i = 0; i < NUM_ENTRIES; i++) {
+ out.writeVarInt(this.blockLight.length);
+ for(int i = 0; i < this.blockLight.length; i++) {
if((blockLightMask & 1 << i) != 0) {
out.writeVarInt(this.blockLight[i].getData().length);
this.blockLight[i].write(out);