package com.bergerkiller.bukkit.common.wrappers; import org.bukkit.Chunk; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import com.bergerkiller.bukkit.common.protocol.CommonPacket; import com.bergerkiller.bukkit.common.reflection.classes.EntityTrackerRef; /** * Wrapper class for the Entity Tracker */ public class EntityTracker extends BasicWrapper { public EntityTracker(Object entityTrackerHandle) { setHandle(entityTrackerHandle); } /** * Sends a packet to all nearby players (and self if it is a player) * * @param entity near which viewers should be sent * @param packet to send */ public void sendPacket(Entity entity, CommonPacket packet) { sendPacket(entity, packet.getHandle()); } /** * Sends a packet to all nearby players (and self if it is a player) * * @param entity near which viewers should be sent * @param packet to send */ public void sendPacket(Entity entity, Object packet) { EntityTrackerRef.sendPacket(handle, entity, packet); } /** * Sends spawn packets to the player for all entities contained in the chunk * * @param player to send spawn packets to * @param chunk containing the entities to update */ public void spawnEntities(Player player, Chunk chunk) { EntityTrackerRef.spawnEntities(handle, player, chunk); } /** * Removes a player viewer, resulting in all entities being removed for the viewer. * If the player is still referenced in the entity tracker in some way, the entities will * be re-sent at a later time automatically. This method acts as a 'total respawn' system * for that reason. * * @param player to remove from this Entity Tracker */ public void removeViewer(Player player) { EntityTrackerRef.removeViewer(handle, player); } /** * Informs all entities of a new player viewer, sending possible spawn packets * * @param player to update */ public void updateViewer(Player player) { EntityTrackerRef.updatePlayer(handle, player); } /** * Adds an entity to this entity tracker, creating a new entity tracker entry if needed * * @param entity to start tracking */ public void startTracking(Entity entity) { EntityTrackerRef.startTracking(handle, entity); } /** * Removes an entity from this entity tracker. * This call will result in entity destroy packets being sent to nearby players. * * @param entity to remove */ public void stopTracking(Entity entity) { EntityTrackerRef.stopTracking(handle, entity); } /** * Sets the entity tracker entry for an entity * * @param entity to set the tracker entry for * @param entityTrackerEntry to set to * @return previously set entity tracker entry, null if there was none */ public Object setEntry(Entity entity, Object entityTrackerEntry) { return EntityTrackerRef.setEntry(handle, entity, entityTrackerEntry); } /** * Gets the entity tracker entry of an entity * * @param entity to get the entry of * @return entity tracker entry */ public Object getEntry(Entity entity) { return EntityTrackerRef.getEntry(handle, entity); } }