package net.minecraftforge.event.entity.player; import java.io.File; import cpw.mods.fml.common.eventhandler.Cancelable; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.entity.living.LivingEvent; /** * PlayerEvent is fired whenever an event involving Living entities occurs. <br> * If a method utilizes this {@link Event} as its parameter, the method will * receive every child event of this class.<br> * <br> * All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}. **/ public class PlayerEvent extends LivingEvent { public final EntityPlayer entityPlayer; public PlayerEvent(EntityPlayer player) { super(player); entityPlayer = player; } /** * HarvestCheck is fired when a player attempts to harvest a block.<br> * This event is fired whenever a player attempts to harvest a block in * EntityPlayer#canHarvestBlock(Block).<br> * <br> * This event is fired via the {@link ForgeEventFactory#doPlayerHarvestCheck(EntityPlayer, Block, boolean)}.<br> * <br> * {@link #block} contains the Block that is being checked for harvesting. <br> * {@link #success} contains the boolean value for whether the Block will be successfully harvested. <br> * <br> * This event is not {@link Cancelable}.<br> * <br> * This event does not have a result. {@link HasResult}<br> * <br> * This event is fired on the {@link MinecraftForge#EVENT_BUS}. **/ public static class HarvestCheck extends PlayerEvent { public final Block block; public boolean success; public HarvestCheck(EntityPlayer player, Block block, boolean success) { super(player); this.block = block; this.success = success; } } /** * BreakSpeed is fired when a player attempts to harvest a block.<br> * This event is fired whenever a player attempts to harvest a block in * EntityPlayer#canHarvestBlock(Block).<br> * <br> * This event is fired via the {@link ForgeEventFactory#getBreakSpeed(EntityPlayer, Block, int, float, int, int, int)}.<br> * <br> * {@link #block} contains the block being broken. <br> * {@link #metadata} contains the metadata of the block being broken. <br> * {@link #originalSpeed} contains the original speed at which the player broke the block. <br> * {@link #newSpeed} contains the newSpeed at which the player will break the block. <br> * {@link #x} contains the x-coordinate at which this event is occurring. <br> * {@link #y} contains the y-coordinate at which this event is occurring. <br> * {@link #z} contains the z-coordinate at which this event is occurring. <br> * <br> * This event is {@link Cancelable}.<br> * If it is canceled, the player is unable to break the block.<br> * <br> * This event does not have a result. {@link HasResult}<br> * <br> * This event is fired on the {@link MinecraftForge#EVENT_BUS}. **/ @Cancelable public static class BreakSpeed extends PlayerEvent { public final Block block; public final int metadata; public final float originalSpeed; public float newSpeed = 0.0f; public final int x; public final int y; // -1 notes unknown location public final int z; @Deprecated public BreakSpeed(EntityPlayer player, Block block, int metadata, float original) { this(player, block, metadata, original, 0, -1, 0); } public BreakSpeed(EntityPlayer player, Block block, int metadata, float original, int x, int y, int z) { super(player); this.block = block; this.metadata = metadata; this.originalSpeed = original; this.newSpeed = original; this.x = x; this.y = y; this.z = z; } } /** * NameFormat is fired when a player's display name is retrieved.<br> * This event is fired whenever a player's name is retrieved in * EntityPlayer#getDisplayName() or EntityPlayer#refreshDisplayName().<br> * <br> * This event is fired via the {@link ForgeEventFactory#getPlayerDisplayName(EntityPlayer, String)}.<br> * <br> * {@link #username} contains the username of the player. * {@link #displayname} contains the display name of the player. * <br> * This event is not {@link Cancelable}. * <br> * This event does not have a result. {@link HasResult} * <br> * This event is fired on the {@link MinecraftForge#EVENT_BUS}. **/ public static class NameFormat extends PlayerEvent { public final String username; public String displayname; public NameFormat(EntityPlayer player, String username) { super(player); this.username = username; this.displayname = username; } } /** * Fired when the EntityPlayer is cloned, typically caused by the network sending a RESPAWN_PLAYER event. * Either caused by death, or by traveling from the End to the overworld. */ public static class Clone extends PlayerEvent { /** * The old EntityPlayer that this new entity is a clone of. */ public final EntityPlayer original; /** * True if this event was fired because the player died. * False if it was fired because the entity switched dimensions. */ public final boolean wasDeath; public Clone(EntityPlayer _new, EntityPlayer oldPlayer, boolean wasDeath) { super(_new); this.original = oldPlayer; this.wasDeath = wasDeath; } } /** * Fired when an Entity is started to be "tracked" by this player (the player receives updates about this entity, e.g. motion). * */ public static class StartTracking extends PlayerEvent { /** * The Entity now being tracked. */ public final Entity target; public StartTracking(EntityPlayer player, Entity target) { super(player); this.target = target; } } /** * Fired when an Entity is stopped to be "tracked" by this player (the player no longer receives updates about this entity, e.g. motion). * */ public static class StopTracking extends PlayerEvent { /** * The Entity no longer being tracked. */ public final Entity target; public StopTracking(EntityPlayer player, Entity target) { super(player); this.target = target; } } /** * The player is being loaded from the world save. Note that the * player won't have been added to the world yet. Intended to * allow mods to load an additional file from the players directory * containing additional mod related player data. */ public static class LoadFromFile extends PlayerEvent { /** * The directory where player data is being stored. Use this * to locate your mod additional file. */ public final File playerDirectory; /** * The UUID is the standard for player related file storage. * It is broken out here for convenience for quick file generation. */ public final String playerUUID; public LoadFromFile(EntityPlayer player, File originDirectory, String playerUUID) { super(player); this.playerDirectory = originDirectory; this.playerUUID = playerUUID; } /** * Construct and return a recommended file for the supplied suffix * @param suffix The suffix to use. * @return */ public File getPlayerFile(String suffix) { if ("dat".equals(suffix)) throw new IllegalArgumentException("The suffix 'dat' is reserved"); return new File(this.playerDirectory, this.playerUUID+"."+suffix); } } /** * The player is being saved to the world store. Note that the * player may be in the process of logging out or otherwise departing * from the world. Don't assume it's association with the world. * This allows mods to load an additional file from the players directory * containing additional mod related player data. * <br> * Use this event to save the additional mod related player data to the world. * * <br> * <em>WARNING</em>: Do not overwrite the player's .dat file here. You will * corrupt the world state. */ public static class SaveToFile extends PlayerEvent { /** * The directory where player data is being stored. Use this * to locate your mod additional file. */ public final File playerDirectory; /** * The UUID is the standard for player related file storage. * It is broken out here for convenience for quick file generation. */ public final String playerUUID; public SaveToFile(EntityPlayer player, File originDirectory, String playerUUID) { super(player); this.playerDirectory = originDirectory; this.playerUUID = playerUUID; } /** * Construct and return a recommended file for the supplied suffix * @param suffix The suffix to use. * @return */ public File getPlayerFile(String suffix) { if ("dat".equals(suffix)) throw new IllegalArgumentException("The suffix 'dat' is reserved"); return new File(this.playerDirectory, this.playerUUID+"."+suffix); } } }