package org.bukkit.craftbukkit.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.minecraft.server.Block; import net.minecraft.server.Blocks; import net.minecraft.server.Item; import net.minecraft.server.MojangsonParser; import net.minecraft.server.NBTTagCompound; import net.minecraft.server.StatisticList; import org.bukkit.Achievement; import org.bukkit.Material; import org.bukkit.Statistic; import org.bukkit.UnsafeValues; import org.bukkit.craftbukkit.CraftStatistic; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.bukkit.util.StringUtil; @SuppressWarnings("deprecation") public final class CraftMagicNumbers implements UnsafeValues { public static final UnsafeValues INSTANCE = new CraftMagicNumbers(); private CraftMagicNumbers() {} public static Block getBlock(org.bukkit.block.Block block) { return getBlock(block.getType()); } @Deprecated // A bad method for bad magic. public static Block getBlock(int id) { return getBlock(Material.getMaterial(id)); } @Deprecated // A bad method for bad magic. public static int getId(Block block) { return Block.b(block); } public static Material getMaterial(Block block) { return Material.getMaterial(Block.b(block)); } public static Item getItem(Material material) { // TODO: Don't use ID Item item = Item.d(material.getId()); return item; } @Deprecated // A bad method for bad magic. public static Item getItem(int id) { return Item.d(id); } @Deprecated // A bad method for bad magic. public static int getId(Item item) { return Item.b(item); } public static Material getMaterial(Item item) { // TODO: Don't use ID Material material = Material.getMaterial(Item.b(item)); if (material == null) { return Material.AIR; } return material; } public static Block getBlock(Material material) { // TODO: Don't use ID Block block = Block.e(material.getId()); if (block == null) { return Blocks.AIR; } return block; } @Override public Material getMaterialFromInternalName(String name) { return getMaterial((Item) Item.REGISTRY.a(name)); } @Override public List tabCompleteInternalMaterialName(String token, List completions) { return StringUtil.copyPartialMatches(token, Item.REGISTRY.b(), completions); } @Override public ItemStack modifyItemStack(ItemStack stack, String arguments) { net.minecraft.server.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack); nmsStack.setTag((NBTTagCompound) MojangsonParser.a(arguments)); stack.setItemMeta(CraftItemStack.getItemMeta(nmsStack)); return stack; } @Override public Statistic getStatisticFromInternalName(String name) { return CraftStatistic.getBukkitStatisticByName(name); } @Override public Achievement getAchievementFromInternalName(String name) { return CraftStatistic.getBukkitAchievementByName(name); } @Override public List tabCompleteInternalStatisticOrAchievementName(String token, List completions) { List matches = new ArrayList(); Iterator iterator = StatisticList.b.iterator(); while (iterator.hasNext()) { String statistic = ((net.minecraft.server.Statistic) iterator.next()).e; if (statistic.startsWith(token)) { matches.add(statistic); } } return matches; } }