13
0
geforkt von Mirrors/Paper
Paper/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java

168 Zeilen
7.0 KiB
Java

package org.bukkit.craftbukkit;
import net.minecraft.server.EntityTypes;
2015-02-26 23:41:06 +01:00
import net.minecraft.server.EntityTypes.MonsterEggInfo;
import net.minecraft.server.StatisticList;
import org.bukkit.Achievement;
import org.bukkit.Statistic;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import com.google.common.base.CaseFormat;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import net.minecraft.server.Block;
import net.minecraft.server.Item;
import net.minecraft.server.MinecraftKey;
2016-02-29 22:32:46 +01:00
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
public class CraftStatistic {
private static final BiMap<String, org.bukkit.Statistic> statistics;
private static final BiMap<String, org.bukkit.Achievement> achievements;
static {
ImmutableMap<String, org.bukkit.Achievement> specialCases = ImmutableMap.<String, org.bukkit.Achievement> builder()
.put("achievement.buildWorkBench", Achievement.BUILD_WORKBENCH)
.put("achievement.diamonds", Achievement.GET_DIAMONDS)
.put("achievement.portal", Achievement.NETHER_PORTAL)
.put("achievement.ghast", Achievement.GHAST_RETURN)
.put("achievement.theEnd", Achievement.END_PORTAL)
.put("achievement.theEnd2", Achievement.THE_END)
.put("achievement.blazeRod", Achievement.GET_BLAZE_ROD)
.put("achievement.potion", Achievement.BREW_POTION)
.build();
ImmutableBiMap.Builder<String, org.bukkit.Statistic> statisticBuilder = ImmutableBiMap.<String, org.bukkit.Statistic>builder();
ImmutableBiMap.Builder<String, org.bukkit.Achievement> achievementBuilder = ImmutableBiMap.<String, org.bukkit.Achievement>builder();
for (Statistic statistic : Statistic.values()) {
if (statistic == Statistic.PLAY_ONE_TICK) {
statisticBuilder.put("stat.playOneMinute", statistic);
} else {
statisticBuilder.put("stat." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, statistic.name()), statistic);
}
}
for (Achievement achievement : Achievement.values()) {
if (specialCases.values().contains(achievement)) {
continue;
}
achievementBuilder.put("achievement." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, achievement.name()), achievement);
}
achievementBuilder.putAll(specialCases);
statistics = statisticBuilder.build();
achievements = achievementBuilder.build();
}
private CraftStatistic() {}
public static org.bukkit.Achievement getBukkitAchievement(net.minecraft.server.Achievement achievement) {
2014-03-21 05:26:30 +01:00
return getBukkitAchievementByName(achievement.name);
}
public static org.bukkit.Achievement getBukkitAchievementByName(String name) {
return achievements.get(name);
}
public static org.bukkit.Statistic getBukkitStatistic(net.minecraft.server.Statistic statistic) {
2014-03-21 05:26:30 +01:00
return getBukkitStatisticByName(statistic.name);
}
public static org.bukkit.Statistic getBukkitStatisticByName(String name) {
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.killEntity.")) {
name = "stat.killEntity";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.entityKilledBy.")) {
name = "stat.entityKilledBy";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.breakItem.")) {
name = "stat.breakItem";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.useItem.")) {
name = "stat.useItem";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.mineBlock.")) {
name = "stat.mineBlock";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.craftItem.")) {
name = "stat.craftItem";
}
2016-02-29 22:32:46 +01:00
if (name.startsWith("stat.drop.")) {
name = "stat.drop";
}
if (name.startsWith("stat.pickup.")) {
name = "stat.pickup";
}
return statistics.get(name);
}
public static net.minecraft.server.Statistic getNMSStatistic(org.bukkit.Statistic statistic) {
2014-03-21 05:26:30 +01:00
return StatisticList.getStatistic(statistics.inverse().get(statistic));
}
public static net.minecraft.server.Achievement getNMSAchievement(org.bukkit.Achievement achievement) {
2014-03-21 05:26:30 +01:00
return (net.minecraft.server.Achievement) StatisticList.getStatistic(achievements.inverse().get(achievement));
}
public static net.minecraft.server.Statistic getMaterialStatistic(org.bukkit.Statistic stat, Material material) {
try {
if (stat == Statistic.MINE_BLOCK) {
2016-02-29 22:32:46 +01:00
return StatisticList.a(CraftMagicNumbers.getBlock(material)); // PAIL: getMineBlockStatistic
}
if (stat == Statistic.CRAFT_ITEM) {
2016-02-29 22:32:46 +01:00
return StatisticList.a(CraftMagicNumbers.getItem(material)); // PAIL: getCraftItemStatistic
}
if (stat == Statistic.USE_ITEM) {
2016-02-29 22:32:46 +01:00
return StatisticList.b(CraftMagicNumbers.getItem(material)); // PAIL: getUseItemStatistic
}
if (stat == Statistic.BREAK_ITEM) {
2016-02-29 22:32:46 +01:00
return StatisticList.c(CraftMagicNumbers.getItem(material)); // PAIL: getBreakItemStatistic
}
if (stat == Statistic.DROP) {
return StatisticList.e(CraftMagicNumbers.getItem(material)); // PAIL: getDropItemStatistic
}
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
return null;
}
public static net.minecraft.server.Statistic getEntityStatistic(org.bukkit.Statistic stat, EntityType entity) {
MonsterEggInfo monsteregginfo = (MonsterEggInfo) EntityTypes.eggInfo.get(entity.getName());
if (monsteregginfo != null) {
if (stat == org.bukkit.Statistic.KILL_ENTITY) {
return monsteregginfo.killEntityStatistic;
}
if (stat == org.bukkit.Statistic.ENTITY_KILLED_BY) {
2016-05-10 13:47:39 +02:00
return monsteregginfo.killedByEntityStatistic;
}
}
return null;
}
public static EntityType getEntityTypeFromStatistic(net.minecraft.server.Statistic statistic) {
2014-03-21 05:26:30 +01:00
String statisticString = statistic.name;
return EntityType.fromName(statisticString.substring(statisticString.lastIndexOf(".") + 1));
}
public static Material getMaterialFromStatistic(net.minecraft.server.Statistic statistic) {
2014-03-21 05:26:30 +01:00
String statisticString = statistic.name;
String val = statisticString.substring(statisticString.lastIndexOf(".") + 1);
Item item = (Item) Item.REGISTRY.get(new MinecraftKey(val));
if (item != null) {
return Material.getMaterial(Item.getId(item));
}
Block block = (Block) Block.REGISTRY.get(new MinecraftKey(val));
if (block != null) {
return Material.getMaterial(Block.getId(block));
}
try {
return Material.getMaterial(Integer.parseInt(val));
} catch (NumberFormatException e) {
return null;
}
}
}