The following Packets are used to inform the client about changes to Entities. These are usually generated by
- EntityTrackerEntry (keeps track of entities near to each player)
- EntityPlayerMP (keeps track of player status, position, health, inventory, etc
The Client generally handles these packets by calling methods in
- EntityClientPlayerMP(for changes to the user / controlling player)
- WorldClient (addition or removal of Entities)
- Entity (for status changes to entities in general, eg health, position, etc)
Typical server origin | NetClientHandler (Client processing) | Called by Client during processing | |
Packet5PlayerInventory Change the equipped item or armour of an entity (player, other players, mob) | EntityLivingBase.onUpdate() EntityTrackerEntry | .handlePlayerInventory() | Entity.setCurrentItemOrArmor() |
Packet6SpawnPosition Tells the client where the player will respawn next. | ServerConfigurationManager | .handleSpawnPosition() | EntityClientPlayerMP.setSpawnChunk() WorldInfo.setSpawnPosition() |
Packet8UpdateHealth Sends updated health and food status to the client. | EntityPlayerMP.onUpdateEntity() | .handleUpdateHealth() | EntityClientPlayerMP |
Packet9Respawn Tell the client to respawn the player at the given location. | ServerConfigurationManager .transferPlayerToDimension() .respawnPlayer() | .handleRespawn() Change dimension, create new WorldClient, change game type | Minecraft.setDimensionAndSpawnPlayer PlayerControllerMP.setGameType |
Packet10Flying, Packet11PlayerPosition, Packet12PlayerLook, Packet13PlayerLookMove | NetServerHandler .setPlayerLocation() Only Packet13 is ever sent from server to client. It is sent once per second, to keep client and server synchronised. Used as a signal to the client that the world reload after respawning has completed. | .handleFlying() Update position and/or look to the new values. Then send the same Packet with updated values (in particular the foot and eye y-values) back to the server. Get rid of respawn screen. | EntityClientPlayerMP .setPositionAndRotation() |
Packet16BlockItemSwitch Changes the selected hotbar slot (0..8) | ServerConfigurationManager | handleBlockItemSwitch() Change inventory.currentitem to the nominated slot. | |
Packet17Sleep Put a player to sleep | EntityPlayerMP.sleepInBedAt | handleSleep() Put a player to sleep at the specified location, if possible. | Entityplayer.sleepInBedAt |
Packet18Animation Entity performs an action 1 = swing item 2 = gets hurt (not used) 3 = wake up 6 = critical hit 7 = magic critical hit | EntityPlayerMP EntityLivingBase | handleAnimation() Starts the appropriate animation (entity) or EffectRenderer | EffectRenderer.addEffect() Entity EntityLivingBase EntityPlayer <![if !supportLineBreakNewLine]> <![endif]> |
Packet20NamedEntitySpawn Spawn an Other Player on the client | EntityTrackerEntry | handleNamedEntitySpawn() Spawn the other player on the client, set its position, look, current item, and other metadata (Datawatcher objects) | EntityOtherPlayerMP WorldClient.addEntityToWorld() |
Packet22Collect Collect an item from the ground | EntityLivingBase .onItemPickup() | handleCollect() Removes the EntityItem, plays a sound effect, renders the pickup effect. Does not actually give an item to the entity. | WorldClient() EffectRenderer() |
Packet23VehicleSpawn Spawns a non-living Entity (boat, fireball, firework, etc) | EntityTrackerEntry .getPacketForThisEntity() FMLNetworkHandler .getEntitySpawningPacket() | handleVehicleSpawn() Create the Entity, set position, pitch & yaw. If thrown, set velocity. | WorldClient.addEntityToWorld() |
Packet24MobSpawn Spawn a mob | EntityTrackerEntry .getPacketForThisEntity() FMLNetworkHandler. getEntitySpawningPacket() | handleMobSpawn() Create the Entity, set position, pitch & yaws, and other metadata (Datawatcher objects). | WorldClient.addEntityToWorld() |
Packet25EntityPainting | EntityTrackerEntry .getPacketForThisEntity() | handleEntityPainting() Create a painting | WorldClient.addEntityToWorld() |
Packet26EntityXPOrb | EntityTrackerEntry .getPacketForThisEntity() | handleEntityExpOrb() Create an XP orb. | WorldClient.addEntityToWorld() |
Packet28EntityVelocity | EntityTrackerEntry .sendLocationToAllClients() | handleEntityVelocity() Change the Entity’s velocity | Entity.setVelocity() |
Packet29DestroyEntity Remove one or more entities from client world, i.e. client doesn’t need to track them anymore. | EntityPlayerMP.onUpdate() | handleDestroyEntity() | WorldClient.removeEntityFromWorld |
Packet30Entity, Packet31RelEntityMove, Packet32EntityLook, Packet33RelEntityMoveLook Tell the client the relative movement and/or yaw+pitch of the entity. | EntityTrackerEntry .sendLocationToAllClients() | .handleEntity() Update position (based on relative movement) and/or yaw/pitch. | Entity.setPositionAndRotation2() |
Packet34EntityTeleport Move the Entity to the specified position, yaw+pitch | EntityTrackerEntry .sendLocationToAllClients() Performs teleport instead of relative movement: once every 20 seconds, if riding, or if movement is too big. | .handleEntityTeleport() Set entity position to the specified position, yaw+pitch | Entity.setPositionAndRotation2() |
Packet35EntityHeadRotation | EntityTrackerEntry .sendLocationToAllClients() | .handleEntityHeadRotation() Sets the entity’s head to the given yaw | Entity. setRotationYawHead |
Packet38EntityStatus 2 = hurt, 3 = dead | EntityPlayerMP.onItemUseFinish() WorldServer.setEntityState() | .handleEntityStatus() calls Entity.handleHealthUpdate(), which plays appropriate sound and calls appropriate client method | Entity .attackEntityFrom() .onDeath() |
Packet39AttachEntity Sends mounting / leashing info for horse, boat, etc. | EntityPlayerMP.mountEntity EntityTrackerEntry EntityLiving | .handleAttachEntity() mounts / leashes or unmounts / unleashes entity – horse, boat, cart, etc | EntityLiving EntityBoat |
Packet40EntityMetadata Copy all changed metadata (WatchedObjects) to client (and optionally, clear the ‘changed’ flag .watched for each) | EntityTrackerEntry | .handleEntityMetadata() Transmit all metadata for the entity that has been changed (‘.watched’ flag is true). The ‘.watched’ flag for each is optionally cleared when the packet is created. | Entity.DataWatcher .updateWatchedObjectsFromList |
Packet41EntityEffect Apply the potion effect to the entity | EntityTrackerEntry EntityPlayerMP ServerConfigurationManager | .handleEntityEffect() Apply the potion effect to the entity | EntityLivingBase.addPotionEffect() |
Packet42RemoveEntityEffect Remove a potion effect from the entity | EntityPlayerMP | .handleRemoveEntityEffect() | EntityLivingBase. removePotionEffectClient |
Packet43Experience Set player experience | EntityPlayerMP ServerConfigurationManager | .handleExperience() sets the client player experience & level | EntityClientPlayerMP.setXPstats |
Packet44UpdateAttributes Send all Attributes for this entity to the client. | EntityTrackerEntry | .handleUpdateAttributes() set the attributes of the client entity | EntityLivingBase.getAttributeMap() (the elements in the map are overwritten). |
Packet200Statistic Send statistics (achievement, distance walked, or similar) | EntityPlayerMP | .handleStatistic() | EntityClientPlayerMP .incrementStat |
Packet201PlayerInfo Send network info about a player to client (name, connected?, ping) | ServerConfigurationManager | .handlePlayerInfo() | NetClientHandler |
Packet202PlayerAbilities Inform the client of the player’s abilities (can fly, walk speed, etc) | EntityPlayerMP ServerConfigurationManager | .handlePlayerAbilities() NB - .allowEdit is ignored | EntityClientPlayerMP |
There are also two FMLpackets used for custom entities:
Typical Server origin | FMLClientHandler (Client processing) | Called by Client during processing | |
EntitySpawnPacket | FMLNetworkHandler .getEntitySpawningPacket (from EntityTrackerEntry) | EntitySpawnPacket.execute() | FMLClientHandler .spawnEntityIntoClientWorld() |
EntitySpawnAdjustmentPacket | FMLNetworkHandler .makeEntitySpawnAdjustment (from EntityTrackerEntry) | EntitySpawnAdjustmentPacket.execute() | FMLClientHandler .adjustEntityLocationOnClient() |
Tidak ada komentar:
Posting Komentar