13
0
geforkt von Mirrors/Paper

[Bleeding] Fix Achievement and Statistic API. Fixes BUKKIT-5305

By: t00thpick1 <t00thpick1dirko@gmail.com>
Dieser Commit ist enthalten in:
Bukkit/Spigot 2014-01-14 23:16:04 -05:00
Ursprung bac44d80a6
Commit 5c0ae695bc
5 geänderte Dateien mit 533 neuen und 67 gelöschten Zeilen

Datei anzeigen

@ -1,49 +1,69 @@
package org.bukkit; package org.bukkit;
/** /**
* Represents an achievement, which may be given to players * Represents an achievement, which may be given to players.
*/ */
public enum Achievement { public enum Achievement {
OPEN_INVENTORY, OPEN_INVENTORY,
MINE_WOOD, MINE_WOOD (OPEN_INVENTORY),
BUILD_WORKBENCH, BUILD_WORKBENCH (MINE_WOOD),
BUILD_PICKAXE, BUILD_PICKAXE (BUILD_WORKBENCH),
BUILD_FURNACE, BUILD_FURNACE (BUILD_PICKAXE),
ACQUIRE_IRON, ACQUIRE_IRON (BUILD_FURNACE),
BUILD_HOE, BUILD_HOE (BUILD_WORKBENCH),
MAKE_BREAD, MAKE_BREAD (BUILD_HOE),
BAKE_CAKE, BAKE_CAKE (BUILD_HOE),
BUILD_BETTER_PICKAXE, BUILD_BETTER_PICKAXE (BUILD_PICKAXE),
COOK_FISH, COOK_FISH (BUILD_FURNACE),
ON_A_RAIL, ON_A_RAIL (ACQUIRE_IRON),
BUILD_SWORD, BUILD_SWORD (BUILD_WORKBENCH),
KILL_ENEMY, KILL_ENEMY (BUILD_SWORD),
KILL_COW, KILL_COW (BUILD_SWORD),
FLY_PIG, FLY_PIG (KILL_COW),
SNIPE_SKELETON, SNIPE_SKELETON (KILL_ENEMY),
GET_DIAMONDS, GET_DIAMONDS (ACQUIRE_IRON),
NETHER_PORTAL, NETHER_PORTAL (GET_DIAMONDS),
GHAST_RETURN, GHAST_RETURN (NETHER_PORTAL),
GET_BLAZE_ROD, GET_BLAZE_ROD (NETHER_PORTAL),
BREW_POTION, BREW_POTION (GET_BLAZE_ROD),
END_PORTAL, END_PORTAL (GET_BLAZE_ROD),
THE_END, THE_END (END_PORTAL),
ENCHANTMENTS, ENCHANTMENTS (GET_DIAMONDS),
OVERKILL, OVERKILL (ENCHANTMENTS),
BOOKCASE, BOOKCASE (ENCHANTMENTS),
BREED_COW, EXPLORE_ALL_BIOMES (END_PORTAL),
SPAWN_WITHER, SPAWN_WITHER (THE_END),
KILL_WITHER, KILL_WITHER (SPAWN_WITHER),
FULL_BEACON, FULL_BEACON (KILL_WITHER),
EXPLORE_ALL_BIOMES, BREED_COW (KILL_COW),
DIAMONDS_TO_YOU, DIAMONDS_TO_YOU (GET_DIAMONDS),
; ;
private final Achievement parent;
private Achievement() {
parent = null;
}
private Achievement(Achievement parent) {
this.parent = parent;
}
/** /**
* The offset used to distinguish Achievements and Statistics. * Returns whether or not this achievement has a parent achievement.
* *
* @deprecated Magic value * @return whether the achievement has a parent achievement
*/ */
@Deprecated public boolean hasParent() {
public final static int STATISTIC_OFFSET = 0x500000; return parent != null;
}
/**
* Returns the parent achievement of this achievement, or null if none.
*
* @return the parent achievement or null
*/
public Achievement getParent() {
return parent;
}
} }

Datei anzeigen

@ -1,7 +1,7 @@
package org.bukkit; package org.bukkit;
/** /**
* Represents a countable statistic, which is collected by the client * Represents a countable statistic, which is tracked by the server.
*/ */
public enum Statistic { public enum Statistic {
DAMAGE_DEALT, DAMAGE_DEALT,
@ -10,45 +10,99 @@ public enum Statistic {
MOB_KILLS, MOB_KILLS,
PLAYER_KILLS, PLAYER_KILLS,
FISH_CAUGHT, FISH_CAUGHT,
MINE_BLOCK(true), ANIMALS_BRED,
USE_ITEM(false), TREASURE_FISHED,
BREAK_ITEM(true); JUNK_FISHED,
LEAVE_GAME,
JUMP,
DROP,
PLAY_ONE_TICK,
WALK_ONE_CM,
SWIM_ONE_CM,
FALL_ONE_CM,
CLIMB_ONE_CM,
FLY_ONE_CM,
DIVE_ONE_CM,
MINECART_ONE_CM,
BOAT_ONE_CM,
PIG_ONE_CM,
HORSE_ONE_CM,
MINE_BLOCK(Type.BLOCK),
USE_ITEM(Type.ITEM),
BREAK_ITEM(Type.ITEM),
CRAFT_ITEM(Type.ITEM),
KILL_ENTITY(Type.ENTITY),
ENTITY_KILLED_BY(Type.ENTITY);
private final boolean isSubstat; private final Type type;
private final boolean isBlock;
private Statistic() { private Statistic() {
this(false, false); this(Type.UNTYPED);
} }
private Statistic(boolean isBlock) { private Statistic(Type type) {
this(true, isBlock); this.type = type;
} }
private Statistic(boolean isSubstat, boolean isBlock) { /**
this.isSubstat = isSubstat; * Gets the type of this statistic.
this.isBlock = isBlock; *
* @return the type of this statistic
*/
public Type getType() {
return type;
} }
/** /**
* Checks if this is a substatistic. * Checks if this is a substatistic.
* <p> * <p>
* A substatistic exists in mass for each block or item, depending on * A substatistic exists en masse for each block, item, or entitytype, depending on
* {@link #isBlock()} * {@link #getType()}.
* <p>
* This is a redundant method and equivalent to checking
* <code>getType() != Type.UNTYPED</code>
* *
* @return true if this is a substatistic * @return true if this is a substatistic
*/ */
public boolean isSubstatistic() { public boolean isSubstatistic() {
return isSubstat; return type != Type.UNTYPED;
} }
/** /**
* Checks if this is a substatistic dealing with blocks (As opposed to * Checks if this is a substatistic dealing with blocks.
* items) * <p>
* This is a redundant method and equivalent to checking
* <code>getType() == Type.BLOCK</code>
* *
* @return true if this deals with blocks, false if with items * @return true if this deals with blocks
*/ */
public boolean isBlock() { public boolean isBlock() {
return isSubstat && isBlock; return type == Type.BLOCK;
}
/**
* The type of statistic.
*
*/
public enum Type {
/**
* Statistics of this type do not require a qualifier.
*/
UNTYPED,
/**
* Statistics of this type require an Item Material qualifier.
*/
ITEM,
/**
* Statistics of this type require a Block Material qualifier.
*/
BLOCK,
/**
* Statistics of this type require an EntityType qualifier.
*/
ENTITY;
} }
} }

Datei anzeigen

@ -323,43 +323,273 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
public void updateInventory(); public void updateInventory();
/** /**
* Awards this player the given achievement * Awards the given achievement and any parent achievements that the
* player does not have.
* *
* @param achievement Achievement to award * @param achievement Achievement to award
* @throws IllegalArgumentException if achievement is null
*/ */
public void awardAchievement(Achievement achievement); public void awardAchievement(Achievement achievement);
/** /**
* Increments the given statistic for this player * Removes the given achievement and any children achievements that the
* player has.
* *
* @param statistic Statistic to increment * @param achievement Achievement to remove
* @throws IllegalArgumentException if achievement is null
*/ */
public void incrementStatistic(Statistic statistic); public void removeAchievement(Achievement achievement);
/** /**
* Increments the given statistic for this player * Gets whether this player has the given achievement.
*
* @return whether the player has the achievement
* @throws IllegalArgumentException if achievement is null
*/
public boolean hasAchievement(Achievement achievement);
/**
* Increments the given statistic for this player.
* <p>
* This is equivalent to the following code:
* <code>incrementStatistic(Statistic, 1)</code>
*
* @param statistic Statistic to increment
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/
public void incrementStatistic(Statistic statistic) throws IllegalArgumentException;
/**
* Decrements the given statistic for this player.
* <p>
* This is equivalent to the following code:
* <code>decrementStatistic(Statistic, 1)</code>
*
* @param statistic Statistic to decrement
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/
public void decrementStatistic(Statistic statistic) throws IllegalArgumentException;
/**
* Increments the given statistic for this player.
* *
* @param statistic Statistic to increment * @param statistic Statistic to increment
* @param amount Amount to increment this statistic by * @param amount Amount to increment this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/ */
public void incrementStatistic(Statistic statistic, int amount); public void incrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException;
/** /**
* Increments the given statistic for this player for the given material * Decrements the given statistic for this player.
*
* @param statistic Statistic to decrement
* @param amount Amount to decrement this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/
public void decrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException;
/**
* Sets the given statistic for this player.
*
* @param statistic Statistic to set
* @param newValue The value to set this statistic to
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if newValue is negative
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/
public void setStatistic(Statistic statistic, int newValue) throws IllegalArgumentException;
/**
* Gets the value of the given statistic for this player.
*
* @param statistic Statistic to check
* @return the value of the given statistic
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if the statistic requires an
* additional parameter
*/
public int getStatistic(Statistic statistic) throws IllegalArgumentException;
/**
* Increments the given statistic for this player for the given material.
* <p>
* This is equivalent to the following code:
* <code>incrementStatistic(Statistic, Material, 1)</code>
* *
* @param statistic Statistic to increment * @param statistic Statistic to increment
* @param material Material to offset the statistic with * @param material Material to offset the statistic with
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/ */
public void incrementStatistic(Statistic statistic, Material material); public void incrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException;
/** /**
* Increments the given statistic for this player for the given material * Decrements the given statistic for this player for the given material.
* <p>
* This is equivalent to the following code:
* <code>decrementStatistic(Statistic, Material, 1)</code>
*
* @param statistic Statistic to decrement
* @param material Material to offset the statistic with
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void decrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException;
/**
* Gets the value of the given statistic for this player.
*
* @param statistic Statistic to check
* @param material Material offset of the statistic
* @return the value of the given statistic
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public int getStatistic(Statistic statistic, Material material) throws IllegalArgumentException;
/**
* Increments the given statistic for this player for the given material.
* *
* @param statistic Statistic to increment * @param statistic Statistic to increment
* @param material Material to offset the statistic with * @param material Material to offset the statistic with
* @param amount Amount to increment this statistic by * @param amount Amount to increment this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/ */
public void incrementStatistic(Statistic statistic, Material material, int amount); public void incrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException;
/**
* Decrements the given statistic for this player for the given material.
*
* @param statistic Statistic to decrement
* @param material Material to offset the statistic with
* @param amount Amount to decrement this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void decrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException;
/**
* Sets the given statistic for this player for the given material.
*
* @param statistic Statistic to set
* @param material Material to offset the statistic with
* @param newValue The value to set this statistic to
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if material is null
* @throws IllegalArgumentException if newValue is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void setStatistic(Statistic statistic, Material material, int newValue) throws IllegalArgumentException;
/**
* Increments the given statistic for this player for the given entity.
* <p>
* This is equivalent to the following code:
* <code>incrementStatistic(Statistic, EntityType, 1)</code>
*
* @param statistic Statistic to increment
* @param entityType EntityType to offset the statistic with
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void incrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException;
/**
* Decrements the given statistic for this player for the given entity.
* <p>
* This is equivalent to the following code:
* <code>decrementStatistic(Statistic, EntityType, 1)</code>
*
* @param statistic Statistic to decrement
* @param entityType EntityType to offset the statistic with
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void decrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException;
/**
* Gets the value of the given statistic for this player.
*
* @param statistic Statistic to check
* @param entityType EntityType offset of the statistic
* @return the value of the given statistic
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public int getStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException;
/**
* Increments the given statistic for this player for the given entity.
*
* @param statistic Statistic to increment
* @param entityType EntityType to offset the statistic with
* @param amount Amount to increment this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void incrementStatistic(Statistic statistic, EntityType entityType, int amount) throws IllegalArgumentException;
/**
* Decrements the given statistic for this player for the given entity.
*
* @param statistic Statistic to decrement
* @param entityType EntityType to offset the statistic with
* @param amount Amount to decrement this statistic by
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if amount is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void decrementStatistic(Statistic statistic, EntityType entityType, int amount);
/**
* Sets the given statistic for this player for the given entity.
*
* @param statistic Statistic to set
* @param entityType EntityType to offset the statistic with
* @param newValue The value to set this statistic to
* @throws IllegalArgumentException if statistic is null
* @throws IllegalArgumentException if entityType is null
* @throws IllegalArgumentException if newValue is negative
* @throws IllegalArgumentException if the given parameter is not valid
* for the statistic
*/
public void setStatistic(Statistic statistic, EntityType entityType, int newValue);
/** /**
* Sets the current time on the player's client. When relative is true the * Sets the current time on the player's client. When relative is true the

Datei anzeigen

@ -0,0 +1,46 @@
package org.bukkit.event.player;
import org.bukkit.Achievement;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
/**
* Called when a player earns an achievement.
*/
public class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private final Achievement achievement;
private boolean isCancelled = false;
public PlayerAchievementAwardedEvent(Player player, Achievement achievement) {
super(player);
this.achievement = achievement;
}
/**
* Gets the Achievement being awarded.
*
* @return the achievement being awarded
*/
public Achievement getAchievement() {
return achievement;
}
public boolean isCancelled() {
return isCancelled;
}
public void setCancelled(boolean cancel) {
this.isCancelled = cancel;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

Datei anzeigen

@ -0,0 +1,116 @@
package org.bukkit.event.player;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
/**
* Called when a player statistic is incremented.
* <p>
* This event is not called for {@link org.bukkit.Statistic#PLAY_ONE_MINUTE}
* or movement based statistics.
*
*/
public class PlayerStatisticIncrementEvent extends PlayerEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
protected final Statistic statistic;
private final int initialValue;
private final int newValue;
private boolean isCancelled = false;
private final EntityType entityType;
private final Material material;
public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue) {
super (player);
this.statistic = statistic;
this.initialValue = initialValue;
this.newValue = newValue;
this.entityType = null;
this.material = null;
}
public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue, EntityType entityType) {
super (player);
this.statistic = statistic;
this.initialValue = initialValue;
this.newValue = newValue;
this.entityType = entityType;
this.material = null;
}
public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue, Material material) {
super (player);
this.statistic = statistic;
this.initialValue = initialValue;
this.newValue = newValue;
this.entityType = null;
this.material = material;
}
/**
* Gets the statistic that is being incremented.
*
* @return the incremented statistic
*/
public Statistic getStatistic() {
return statistic;
}
/**
* Gets the previous value of the statistic.
*
* @return the previous value of the statistic
*/
public int getPreviousValue() {
return initialValue;
}
/**
* Gets the new value of the statistic.
*
* @return the new value of the statistic
*/
public int getNewValue() {
return newValue;
}
/**
* Gets the EntityType if {@link #getStatistic() getStatistic()} is an
* entity statistic otherwise returns null.
*
* @return the EntityType of the statistic
*/
public EntityType getEntityType() {
return entityType;
}
/**
* Gets the Material if {@link #getStatistic() getStatistic()} is a block
* or item statistic otherwise returns null.
*
* @return the Material of the statistic
*/
public Material getMaterial() {
return material;
}
public boolean isCancelled() {
return isCancelled;
}
public void setCancelled(boolean cancel) {
this.isCancelled = cancel;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}