Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / craftbukkit / util / CraftMagicNumbers.java
@vlad20012 vlad20012 on 24 Feb 2017 3 KB initial
package org.bukkit.craftbukkit.util;

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;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@SuppressWarnings("deprecation")
public final class CraftMagicNumbers implements UnsafeValues
{
	public static final UnsafeValues INSTANCE = new CraftMagicNumbers();

	private CraftMagicNumbers()
	{
	}

	public static net.minecraft.block.Block getBlock(org.bukkit.block.Block block)
	{
		return getBlock(block.getType());
	}

	@Deprecated
	// A bad method for bad magic.
	public static net.minecraft.block.Block getBlock(int id)
	{
		return getBlock(Material.getMaterial(id));
	}

	@Deprecated
	// A bad method for bad magic.
	public static int getId(net.minecraft.block.Block block)
	{
		return net.minecraft.block.Block.getIdFromBlock(block);
	}

	public static Material getMaterial(net.minecraft.block.Block block)
	{
		return Material.getMaterial(net.minecraft.block.Block.getIdFromBlock(block));
	}

	public static net.minecraft.item.Item getItem(Material material)
	{
		// TODO: Don't use ID
		net.minecraft.item.Item item = net.minecraft.item.Item.getItemById(material.getId());
		return item;
	}

	@Deprecated
	// A bad method for bad magic.
	public static net.minecraft.item.Item getItem(int id)
	{
		return net.minecraft.item.Item.getItemById(id);
	}

	@Deprecated
	// A bad method for bad magic.
	public static int getId(net.minecraft.item.Item item)
	{
		return net.minecraft.item.Item.getIdFromItem(item);
	}

	public static Material getMaterial(net.minecraft.item.Item item)
	{
		// TODO: Don't use ID
		Material material = Material.getMaterial(net.minecraft.item.Item.getIdFromItem(item));

		if(material == null)
		{
			return Material.AIR;
		}

		return material;
	}

	public static net.minecraft.block.Block getBlock(Material material)
	{
		material = material == null ? Material.AIR : material; // Cauldron - this should not happen but just in case it does
		// TODO: Don't use ID
		net.minecraft.block.Block block = net.minecraft.block.Block.getBlockById(material.getId());

		if(block == null)
		{
			return net.minecraft.init.Blocks.air;
		}

		return block;
	}

	@Override
	public Material getMaterialFromInternalName(String name)
	{
		return getMaterial((net.minecraft.item.Item) net.minecraft.item.Item.itemRegistry.getObject(name));
	}

	@Override
	public List<String> tabCompleteInternalMaterialName(String token, List<String> completions)
	{
		return StringUtil.copyPartialMatches(token, net.minecraft.item.Item.itemRegistry.getKeys(), completions);
	}

	@Override
	public ItemStack modifyItemStack(ItemStack stack, String arguments)
	{
		net.minecraft.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);

		try
		{
			nmsStack.setTagCompound((net.minecraft.nbt.NBTTagCompound) net.minecraft.nbt.JsonToNBT.func_150315_a(arguments));
		} catch(net.minecraft.nbt.NBTException e)
		{
			e.printStackTrace();
		}

		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<String> tabCompleteInternalStatisticOrAchievementName(String token, List<String> completions)
	{
		List<String> matches = new ArrayList<String>();
		Iterator iterator = net.minecraft.stats.StatList.allStats.iterator();
		while(iterator.hasNext())
		{
			String statistic = ((net.minecraft.stats.StatBase) iterator.next()).statId;
			if(statistic.startsWith(token))
			{
				matches.add(statistic);
			}
		}
		return matches;
	}
}