ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java

137 lines
4.8 KiB
Java
Raw Normal View History

2015-08-29 14:33:25 +02:00
/*
2016-05-16 22:52:27 +02:00
* This file ("ItemUtil.java") is part of the Actually Additions mod for Minecraft.
2015-08-29 14:33:25 +02:00
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
2016-05-16 22:52:27 +02:00
* http://ellpeck.de/actaddlicense
2015-08-29 14:33:25 +02:00
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
2016-05-16 22:54:42 +02:00
* © 2015-2016 Ellpeck
2015-08-29 14:33:25 +02:00
*/
2016-01-05 04:47:35 +01:00
package de.ellpeck.actuallyadditions.mod.util;
2015-03-29 15:29:05 +02:00
2016-03-19 15:10:20 +01:00
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
2016-03-18 18:38:39 +01:00
import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase;
import de.ellpeck.actuallyadditions.mod.creative.CreativeTab;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
2015-03-29 15:29:05 +02:00
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.ResourceLocation;
2016-03-18 18:38:39 +01:00
import net.minecraftforge.fml.common.registry.GameRegistry;
import java.util.Arrays;
import java.util.List;
2015-10-03 22:09:53 +02:00
2016-06-17 23:50:38 +02:00
public final class ItemUtil{
2015-03-29 15:29:05 +02:00
2015-07-12 22:05:34 +02:00
public static Item getItemFromName(String name){
ResourceLocation resLoc = new ResourceLocation(name);
2016-04-20 21:39:03 +02:00
if(Item.REGISTRY.containsKey(resLoc)){
return Item.REGISTRY.getObject(resLoc);
2015-07-12 22:05:34 +02:00
}
return null;
}
2016-04-20 21:39:03 +02:00
public static void registerBlock(Block block, ItemBlockBase itemBlock, String name, boolean addTab){
block.setUnlocalizedName(ModUtil.MOD_ID+"."+name);
2016-03-18 18:38:39 +01:00
2016-03-18 20:39:24 +01:00
block.setRegistryName(ModUtil.MOD_ID, name);
2016-04-20 21:39:03 +02:00
GameRegistry.register(block);
itemBlock.setRegistryName(block.getRegistryName());
GameRegistry.register(itemBlock);
2016-03-18 18:38:39 +01:00
2016-06-17 23:50:38 +02:00
block.setCreativeTab(addTab ? CreativeTab.INSTANCE : null);
2016-03-18 18:38:39 +01:00
}
public static void registerItem(Item item, String name, boolean addTab){
2016-04-20 21:39:03 +02:00
item.setUnlocalizedName(ModUtil.MOD_ID+"."+name);
2016-03-18 18:38:39 +01:00
2016-03-18 20:39:24 +01:00
item.setRegistryName(ModUtil.MOD_ID, name);
2016-04-20 21:39:03 +02:00
GameRegistry.register(item);
2016-03-18 18:38:39 +01:00
2016-06-17 23:50:38 +02:00
item.setCreativeTab(addTab ? CreativeTab.INSTANCE : null);
2016-03-19 15:10:20 +01:00
if(item instanceof IColorProvidingItem){
ActuallyAdditions.proxy.addColoredItem(item);
}
2016-03-18 18:38:39 +01:00
}
/**
* Returns true if array contains stack or if both contain null
*/
public static boolean contains(ItemStack[] array, ItemStack stack, boolean checkWildcard){
return getPlaceAt(array, stack, checkWildcard) != -1;
}
public static int getPlaceAt(ItemStack[] array, ItemStack stack, boolean checkWildcard){
return getPlaceAt(Arrays.asList(array), stack, checkWildcard);
}
/**
* Returns the place of stack in array, -1 if not present
*/
public static int getPlaceAt(List<ItemStack> list, ItemStack stack, boolean checkWildcard){
if(list != null && list.size() > 0){
for(int i = 0; i < list.size(); i++){
if((stack == null && list.get(i) == null) || areItemsEqual(stack, list.get(i), checkWildcard)){
return i;
}
}
}
return -1;
}
public static boolean areItemsEqual(ItemStack stack1, ItemStack stack2, boolean checkWildcard){
return stack1 != null && stack2 != null && (stack1.isItemEqual(stack2) || (checkWildcard && stack1.getItem() == stack2.getItem() && (stack1.getItemDamage() == Util.WILDCARD || stack2.getItemDamage() == Util.WILDCARD)));
}
2015-10-03 22:13:57 +02:00
/**
* Returns true if list contains stack or if both contain null
*/
public static boolean contains(List<ItemStack> list, ItemStack stack, boolean checkWildcard){
return !(list == null || list.isEmpty()) && getPlaceAt(list, stack, checkWildcard) != -1;
2015-10-03 22:13:57 +02:00
}
public static void addEnchantment(ItemStack stack, Enchantment e, int level){
if(!hasEnchantment(stack, e)){
stack.addEnchantment(e, level);
}
}
2015-10-03 10:19:40 +02:00
public static boolean hasEnchantment(ItemStack stack, Enchantment e){
NBTTagList ench = stack.getEnchantmentTagList();
if(ench != null){
for(int i = 0; i < ench.tagCount(); i++){
short id = ench.getCompoundTagAt(i).getShort("id");
2016-03-18 23:47:22 +01:00
if(id == Enchantment.getEnchantmentID(e)){
2015-10-03 10:19:40 +02:00
return true;
}
}
}
2015-10-03 10:19:40 +02:00
return false;
}
2015-10-03 10:19:40 +02:00
public static void removeEnchantment(ItemStack stack, Enchantment e){
NBTTagList ench = stack.getEnchantmentTagList();
if(ench != null){
for(int i = 0; i < ench.tagCount(); i++){
short id = ench.getCompoundTagAt(i).getShort("id");
2016-03-18 23:47:22 +01:00
if(id == Enchantment.getEnchantmentID(e)){
2015-10-03 10:19:40 +02:00
ench.removeTag(i);
}
}
if(ench.hasNoTags() && stack.hasTagCompound()){
stack.getTagCompound().removeTag("ench");
}
}
}
public static boolean canBeStacked(ItemStack stack1, ItemStack stack2){
return ItemStack.areItemsEqual(stack1, stack2) && ItemStack.areItemStackTagsEqual(stack1, stack2);
}
2015-03-29 15:29:05 +02:00
}