Packets sent to the server nearly all come from either
- EntityClientPlayerMP (changes in state of a player –in particular position, flying), or
- PlayerControllerMP (actions performed by the user – clicking / destroying blocks, attacking entities).
The packets are usually handled by a method in EntityPlayerMP or ItemInWorldManager, which then call other server methods as appropriate.
Typical Client origin | NetServerHandler (Server processing) | Called by Server during processing | |
Packet3Chat Chat messages including commands | EntityClientPlayerMP | .handleChat() If command: .handleSlashCommand() If chat message: Send Packet3Chat to all players | FMLNetworkHandler.handleChatMessage() ForgeHooks.onServerChatEvent() ICommandManager.executeCommand() |
Packet7UseEntity The player performs interact (0) or attack (1) on another entity | PlayerControllerMP attackEntity interactWithEntity {func_78768_b} | .handleUseEntity() If 0: EntityPlayerMP.interactWith() If 1: EntityPlayerMP .attackTargetEntityWithCurrentItem() | |
Packet9Respawn Not used | Not used | .handleRespawn() Overridden but does nothing | |
Packet10Flying, Packet11PlayerPosition, Packet12PlayerLook, Packet13PlayerLookMove Tell the server the player’s flying state, position: x, y(feet) and y(eyes), z, and look (yaw, pitch) | EntityClientPlayerMP: 10 – changes flying state only 11 – changes position only 12 – changes look only 13 – changes position and look | .handleFlying() If the position is different (player has moved): move the player (checking for collision etc) then update position and look. If position is not different: Once every second, send a Packet13 with the current position & look back to the client. | EntityPlayerMP .moveEntity() .onUpdateEntity() .setPositionAndRotation() WorldServer .updateEntity() |
Packet14BlockDig Item action performed by the user: 0 = click block once (called repeatedly while user holds left button down) 1 = stop clicking block (undo any damage) 2 = block destroyed 3 = drop item stack (CTRL held) 4 = drop one item 5 = stop using item (release right button eg eating, drinking, blocking) | PlayerControllerMP EntityClientPlayerMP | .handleBlockDig() For dig actions – check reach, immunity etc, then damage block appropriately. Send Packet53BlockChange to ensure Client stays synchronised. | EntityPlayerMP .dropOneItem() .stopUsingItem() ItemInWorldManager .onBlockClicked() .cancelDestroyingBlock() .uncheckedTryHarvestBlock() Forge PlayerInteractEvent |
Packet15Place Right click action: Either on a block, or air (direction = 255) | PlayerControllerMP | .handlePlace() perform appropriate action and send Packet53BlockChange to ensure Client stays synchronised. Cleans up after item use (if it has been used up or destroyed), removes from inventory, sends Packet103SetSlot if reqd to update held item on the Client. | ItemInWorldManager .tryUseItem() .activateBlockOrUseItem() Forge PlayerInteractEvent |
Packet16BlockItemSwitch Changes the selected hotbar slot (0..8) | PlayerControllerMP | .handleBlockItemSwitch() Change inventory.currentitem to the nominated slot. | |
Packet18Animation 1 = swing item | EntityClientPlayerMP | .handleAnimation() swing the currently held item | EntityPlayerMP.swingItem() |
Packet19EntityAction 1 = start sneaking 2 = stop sneaking 3 = wake up 4 = start sprinting 5 = stop sprinting 6 = horse jump 7 = open horse inventory | GuiSleepMP EntityClientPlayerMP .sendMotionUpdates() | .handleEntityAction() Make the entity perform the appropriate animation. | EntityPlayerMP EntityHorse |
Packet27PlayerInput Transmit the current state of the player movement keys (forward/back, left/right, jump, sneak). Currently used for riding only. | EntityClientPlayerMP. .onUpdate() | handlePlayerInput() Copy the state of player movement keys to the server player. | EntityPlayerMP.setEntityActionState() |
Packet101CloseWindow Informs the server that the user has closed the currently open container (chest, furnace, etc) | EntityClientPlayerMP | .handleCloseWindow() | EntityPlayerMP .closeContainer |
Packet102WindowClick | PlayerControllerMP .windowClick() (from GuiContainer, eg .mouseClicked) | .handleWindowClick() The type of “click” depends on .holdingShift. 0 = normal click 1 = shiftclick 2 = hotbar key pressed (i.e. 1, 2, 3 etc) 3 = middle mouse button click 4 = drop key pressed 5, 6 = ?? L click = pick up / drop Shft Lclick: in invent -> swap to hotbar. If hotbar -> swap to inv. No drag. | EntityPlayerMP.openContainer.slotClick |
Packet106Transaction This packet works together with Packet102 to ensure that the container contents remain properly synchronised on client and server. | NetClientHandler .handleTransaction() | handleTransaction() | |
Packet107CreativeSetSlot In creative mode: put an item into the player’s inventory, or drop on the ground. | PlayerControllerMP | .handleCreativeSetSlot() | EntityPlayerMP .inventoryContainer .dropPlayerItem |
Packet108EnchantItem Tells the server to enchant the item on the table and deducts XP from player | GUIEnchantment PlayerControllerMP | .handleEnchantItem() | ContainerEnchantment . enchantItem |
Packet130UpdateSign Changes the text on a sign | GUIeditSign | .handleUpdateSign() | TileEntitySign |
Packet131MapData Not used by map; appears to be hijacked by Forge for sending other non-map data? | PacketDispatcher .getTinyPacket | .handleMapData() | FMLNetworkHandler .handlePacket131Packet --->ItemMap.getMPMapData (vanilla) Or NetworkRegistry.handleTinyPacket |
Packet202PlayerAbilities Tell the server that the player is flying. | EntityClientPlayerMP | .handlePlayerAbilities() only .isFlying is used. Other fields ignored. | EntityPlayerMP |
Packet203AutoComplete Client asks for possible autocompletions for the given string fragment | GUIchat | .handleAutoComplete() makes a list of possible completions and sends back to client. | MinecraftServer .getPossibleCompletions |
Packet204ClientInfo Update info about the client (eg language, show cape, chat colour) | GameSettings | .handleClientInfo() | EntityPlayerMP |
Packet205ClientCommand 0 sent to a netLoginHandler starts the server, 1 sent to NetServerHandler forces a respawn | EntityClientPlayerMP GUIwinGame NetClientHandler | .handleClientCommand() | ServerConfigurationManager |
Packet250CustomPayload Channel (string) Length Rawdata (byte stream) | Vanilla: NetClientHandler GUIbeacon GUIcommandBlock GUImerchant GUIrepair GUIscreenBoook ForgePacket: FML.common.network | .handleCustomPayload() Channels starting with MC| are handled by vanilla code Channels starting with FML are sent to handleFMLPacket. All others are sent to NetworkRegistry.handleCustomPacket (mod can register a custom handler) | FMLNetworkHandler.handlePacket250Packet handleFMLPacket; handleVanilla250Packet |
Tidak ada komentar:
Posting Komentar