mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 18:57:32 +00:00
210 lines
5.0 KiB
Java
210 lines
5.0 KiB
Java
package noppes.npcs.scripted;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTBase;
|
|
import net.minecraft.nbt.NBTBase.NBTPrimitive;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.nbt.NBTTagList;
|
|
import net.minecraft.nbt.NBTTagString;
|
|
|
|
public class ScriptItemStack implements IItemStack {
|
|
protected ItemStack item;
|
|
|
|
public ScriptItemStack(ItemStack item){
|
|
this.item = item;
|
|
}
|
|
|
|
/**
|
|
* @return The minecraft name for this item
|
|
*/
|
|
public String getName(){
|
|
return Item.itemRegistry.getNameForObject(item.getItem());
|
|
}
|
|
|
|
/**
|
|
* @return Returns the stacksize
|
|
*/
|
|
public int getStackSize(){
|
|
return item.stackSize;
|
|
}
|
|
|
|
/**
|
|
* @return Return whether or not the item has a custom name
|
|
*/
|
|
public boolean hasCustomName(){
|
|
return item.hasDisplayName();
|
|
}
|
|
|
|
/**
|
|
* @param name The custom name this item will get
|
|
*/
|
|
public void setCustomName(String name){
|
|
item.setStackDisplayName(name);
|
|
}
|
|
|
|
/**
|
|
* @return Return the ingame displayed name. This is either the item name or the custom name if it has one.
|
|
*/
|
|
public String getDisplayName(){
|
|
return item.getDisplayName();
|
|
}
|
|
|
|
/**
|
|
* @return Get the items ingame name. Use this incase the item ingame has custom name and you want the original name.
|
|
*/
|
|
public String getItemName(){
|
|
return item.getItem().getItemStackDisplayName(item);
|
|
}
|
|
|
|
/**
|
|
* @param size The size of the itemstack. A number between 1 and 64
|
|
*/
|
|
public void setStackSize(int size){
|
|
if(size < 0)
|
|
size = 1;
|
|
else if(size > 64)
|
|
size = 64;
|
|
item.stackSize = size;
|
|
}
|
|
|
|
/**
|
|
* @return Returns the item damage of this item. For tools this is the durability for other items the color and more.
|
|
*/
|
|
public int getItemDamage(){
|
|
return item.getItemDamage();
|
|
}
|
|
|
|
/**
|
|
* @param value The value to be set as item damage. For tools this is the durability for other items the color and more.
|
|
*/
|
|
public void setItemDamage(int value){
|
|
item.setItemDamage(value);
|
|
}
|
|
|
|
/**
|
|
* @param key The key of this NBTTag
|
|
* @param value The value to be stored. Can be a Number or String
|
|
*/
|
|
public void setTag(String key, Object value){
|
|
if(value instanceof Number)
|
|
getTag().setDouble(key, ((Number) value).doubleValue());
|
|
else if(value instanceof String)
|
|
getTag().setString(key, (String) value);
|
|
|
|
}
|
|
|
|
/**
|
|
* @param key The key of the NBTTag
|
|
* @return Returns whether or not the key exists
|
|
*/
|
|
public boolean hasTag(String key){
|
|
return getTag().hasKey(key);
|
|
}
|
|
|
|
/**
|
|
* @param key The key of the NBTTag
|
|
* @return Returns the value associated with the key. Returns null of it doesnt exist
|
|
*/
|
|
public Object getTag(String key){
|
|
NBTBase tag = getTag().getTag(key);
|
|
if(tag == null)
|
|
return null;
|
|
if(tag instanceof NBTPrimitive)
|
|
return ((NBTPrimitive)tag).func_150286_g();
|
|
if(tag instanceof NBTTagString)
|
|
return ((NBTTagString)tag).func_150285_a_();
|
|
return tag;
|
|
}
|
|
|
|
public boolean isEnchanted(){
|
|
return item.isItemEnchanted();
|
|
}
|
|
|
|
/**
|
|
* @since 1.7.10d
|
|
* @param id The enchantment id
|
|
* @return
|
|
*/
|
|
public boolean hasEnchant(int id){
|
|
if(!isEnchanted())
|
|
return false;
|
|
NBTTagList list = item.getEnchantmentTagList();
|
|
for(int i = 0; i < list.tagCount(); i++){
|
|
NBTTagCompound compound = list.getCompoundTagAt(i);
|
|
if(compound.getShort("id") == id)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @since 1.7.10d
|
|
* @return Returns whether this item is a book
|
|
*/
|
|
public boolean isWrittenBook(){
|
|
return item.getItem() == Items.written_book || item.getItem() == Items.writable_book;
|
|
}
|
|
|
|
/**
|
|
* @since 1.7.10d
|
|
* @return Returns the books title
|
|
*/
|
|
public String getBookTitle(){
|
|
return item.getTagCompound().getString("title");
|
|
}
|
|
|
|
/**
|
|
* @since 1.7.10d
|
|
* @return Returns the books author
|
|
*/
|
|
public String getBookAuthor(){
|
|
return item.getTagCompound().getString("author");
|
|
}
|
|
|
|
/**
|
|
* @since 1.7.10d
|
|
* @return If the item is a book, returns a string array with book pages
|
|
*/
|
|
public String[] getBookText(){
|
|
if(!isWrittenBook())
|
|
return null;
|
|
List<String> list = new ArrayList<String>();
|
|
NBTTagList pages = item.getTagCompound().getTagList("pages", 8);
|
|
for (int i = 0; i < pages.tagCount(); ++i){
|
|
list.add(pages.getStringTagAt(i));
|
|
}
|
|
return list.toArray(new String[list.size()]);
|
|
}
|
|
|
|
private NBTTagCompound getTag(){
|
|
if(item.stackTagCompound == null)
|
|
item.stackTagCompound = new NBTTagCompound();
|
|
return item.stackTagCompound;
|
|
}
|
|
|
|
/**
|
|
* @return Returns whether or not this item is a block
|
|
*/
|
|
public boolean isBlock(){
|
|
Block block = Block.getBlockFromItem(item.getItem());
|
|
if(block == null || block == Blocks.air)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* No support is given for this method. Dont use if you dont know what you are doing.
|
|
* @return Minecraft ItemStack
|
|
*/
|
|
public ItemStack getMCItemStack() {
|
|
return item;
|
|
}
|
|
}
|