[Bleeding] Fix Achievements and Statistics API. Fixes BUKKIT-5305
By: t00thpick1 <t00thpick1dirko@gmail.com>
This commit is contained in:
@@ -20,11 +20,11 @@ import net.minecraft.server.*;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.apache.commons.lang.NotImplementedException;
|
||||
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.Achievement;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic.Type;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||
import org.bukkit.conversations.Conversation;
|
||||
@@ -35,6 +35,7 @@ import org.bukkit.craftbukkit.CraftEffect;
|
||||
import org.bukkit.craftbukkit.CraftOfflinePlayer;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.CraftSound;
|
||||
import org.bukkit.craftbukkit.CraftStatistic;
|
||||
import org.bukkit.craftbukkit.CraftWorld;
|
||||
import org.bukkit.craftbukkit.map.CraftMapView;
|
||||
import org.bukkit.craftbukkit.map.RenderData;
|
||||
@@ -51,7 +52,6 @@ import org.bukkit.inventory.InventoryView.Property;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.Messenger;
|
||||
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
|
||||
@@ -517,7 +517,29 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
|
||||
@Override
|
||||
public void awardAchievement(Achievement achievement) {
|
||||
// TODO - non-functional as of ID purge
|
||||
Validate.notNull(achievement, "Achievement cannot be null");
|
||||
if (achievement.hasParent() && !hasAchievement(achievement.getParent())) {
|
||||
awardAchievement(achievement.getParent());
|
||||
}
|
||||
getHandle().x().a(getHandle(), CraftStatistic.getNMSAchievement(achievement), 1);
|
||||
getHandle().x().b(getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAchievement(Achievement achievement) {
|
||||
Validate.notNull(achievement, "Achievement cannot be null");
|
||||
for (Achievement achieve : Achievement.values()) {
|
||||
if (achieve.getParent() == achievement && hasAchievement(achieve)) {
|
||||
removeAchievement(achieve);
|
||||
}
|
||||
}
|
||||
getHandle().x().a(getHandle(), CraftStatistic.getNMSAchievement(achievement), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAchievement(Achievement achievement) {
|
||||
Validate.notNull(achievement, "Achievement cannot be null");
|
||||
return getHandle().x().a(CraftStatistic.getNMSAchievement(achievement));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -525,9 +547,37 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
incrementStatistic(statistic, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic) {
|
||||
decrementStatistic(statistic, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStatistic(Statistic statistic) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.isTrue(statistic.getType() == Type.UNTYPED, "Must supply additional paramater for this statistic");
|
||||
return getHandle().x().a(CraftStatistic.getNMSStatistic(statistic));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStatistic(Statistic statistic, int amount) {
|
||||
// TODO - non-functional as of ID purge
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, getStatistic(statistic) + amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic, int amount) {
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, getStatistic(statistic) - amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatistic(Statistic statistic, int newValue) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.isTrue(statistic.getType() == Type.UNTYPED, "Must supply additional paramater for this statistic");
|
||||
Validate.isTrue(newValue >= 0, "Value must be greater than or equal to 0");
|
||||
net.minecraft.server.Statistic nmsStatistic = CraftStatistic.getNMSStatistic(statistic);
|
||||
getHandle().x().a(getHandle(), nmsStatistic, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -535,9 +585,85 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
incrementStatistic(statistic, material, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic, Material material) {
|
||||
decrementStatistic(statistic, material, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStatistic(Statistic statistic, Material material) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.notNull(material, "Material cannot be null");
|
||||
Validate.isTrue(statistic.getType() == Type.BLOCK || statistic.getType() == Type.ITEM, "This statistic does not take a Material parameter");
|
||||
net.minecraft.server.Statistic nmsStatistic = CraftStatistic.getMaterialStatistic(statistic, material);
|
||||
Validate.notNull(nmsStatistic, "The supplied Material does not have a corresponding statistic");
|
||||
return getHandle().x().a(nmsStatistic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStatistic(Statistic statistic, Material material, int amount) {
|
||||
// TODO - non-functional as of ID purge
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, material, getStatistic(statistic, material) + amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic, Material material, int amount) {
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, material, getStatistic(statistic, material) - amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatistic(Statistic statistic, Material material, int newValue) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.notNull(material, "Material cannot be null");
|
||||
Validate.isTrue(newValue >= 0, "Value must be greater than or equal to 0");
|
||||
Validate.isTrue(statistic.getType() == Type.BLOCK || statistic.getType() == Type.ITEM, "This statistic does not take a Material parameter");
|
||||
net.minecraft.server.Statistic nmsStatistic = CraftStatistic.getMaterialStatistic(statistic, material);
|
||||
Validate.notNull(nmsStatistic, "The supplied Material does not have a corresponding statistic");
|
||||
getHandle().x().a(getHandle(), nmsStatistic, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStatistic(Statistic statistic, EntityType entityType) {
|
||||
incrementStatistic(statistic, entityType, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic, EntityType entityType) {
|
||||
decrementStatistic(statistic, entityType, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStatistic(Statistic statistic, EntityType entityType) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.notNull(entityType, "EntityType cannot be null");
|
||||
Validate.isTrue(statistic.getType() == Type.ENTITY, "This statistic does not take an EntityType parameter");
|
||||
net.minecraft.server.Statistic nmsStatistic = CraftStatistic.getEntityStatistic(statistic, entityType);
|
||||
Validate.notNull(nmsStatistic, "The supplied EntityType does not have a corresponding statistic");
|
||||
return getHandle().x().a(nmsStatistic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStatistic(Statistic statistic, EntityType entityType, int amount) {
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, entityType, getStatistic(statistic, entityType) + amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decrementStatistic(Statistic statistic, EntityType entityType, int amount) {
|
||||
Validate.isTrue(amount > 0, "Amount must be greater than 0");
|
||||
setStatistic(statistic, entityType, getStatistic(statistic, entityType) - amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatistic(Statistic statistic, EntityType entityType, int newValue) {
|
||||
Validate.notNull(statistic, "Statistic cannot be null");
|
||||
Validate.notNull(entityType, "EntityType cannot be null");
|
||||
Validate.isTrue(newValue >= 0, "Value must be greater than or equal to 0");
|
||||
Validate.isTrue(statistic.getType() == Type.ENTITY, "This statistic does not take an EntityType parameter");
|
||||
net.minecraft.server.Statistic nmsStatistic = CraftStatistic.getEntityStatistic(statistic, entityType);
|
||||
Validate.notNull(nmsStatistic, "The supplied EntityType does not have a corresponding statistic");
|
||||
getHandle().x().a(getHandle(), nmsStatistic, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user