mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-04-09 20:26:42 +00:00
Minor cleanup of pocket computer upgrades
- General improvements of the docs. - Move all ItemStack code to the ItemPocketComputer class - Make PocketAPI execute on the server thread, rather than the computer thread
This commit is contained in:
parent
5a4375f6ac
commit
8ba5edb6e4
@ -15,25 +15,25 @@ import java.util.Map;
|
||||
public interface IPocketAccess
|
||||
{
|
||||
/**
|
||||
* Gets the holding entity of this item
|
||||
* Gets the entity holding this item.
|
||||
*
|
||||
* @return The holding entity, may be {@code null}.
|
||||
* @return The holding entity. This may be {@code null}.
|
||||
*/
|
||||
@Nullable
|
||||
Entity getEntity();
|
||||
|
||||
/**
|
||||
* Get the colour of the modem light.
|
||||
* Get the colour of the pocket computer's light.
|
||||
*
|
||||
* See {@link #setLight(int)} for the values this may return.
|
||||
*
|
||||
* @return The colour of the modem light.
|
||||
* @return The colour of the pocket computer's light.
|
||||
* @see #setLight(int)
|
||||
*/
|
||||
int getLight();
|
||||
|
||||
/**
|
||||
* Set the colour of the modem light. Use {@link 0} to turn it off.
|
||||
* Set the colour of the pocket computer's light. Use {@link 0} to turn it off.
|
||||
*
|
||||
* Colours take the form of an integer between 0 and 15, using the opposite order to those in
|
||||
* {@link <a href="http://www.computercraft.info/wiki/Colors_(API)#Colors">The colors API</a>} - so 0 being black,
|
||||
@ -45,31 +45,32 @@ public interface IPocketAccess
|
||||
void setLight( int value );
|
||||
|
||||
/**
|
||||
* Get the upgrade specific NBT
|
||||
* Get the upgrade-specific NBT.
|
||||
*
|
||||
* @return The upgrade's NBT
|
||||
* This is persisted between computer reboots and chunk loads.
|
||||
*
|
||||
* @return The upgrade's NBT.
|
||||
* @see #updateUpgradeNBTData()
|
||||
*/
|
||||
@Nonnull
|
||||
NBTTagCompound getUpgradeNBTData();
|
||||
|
||||
/**
|
||||
* Mark the upgrade specific NBT as dirty
|
||||
* Mark the upgrade-specific NBT as dirty.
|
||||
*
|
||||
* @see #getUpgradeNBTData()
|
||||
*/
|
||||
void updateUpgradeNBTData();
|
||||
|
||||
/**
|
||||
* Remove the current peripheral and create a new one. You
|
||||
* may wish to do this if the methods available change.
|
||||
* Remove the current peripheral and create a new one. You may wish to do this if the methods available change.
|
||||
*/
|
||||
void invalidatePeripheral();
|
||||
|
||||
/**
|
||||
* Get a list of all upgrades for the pocket computer
|
||||
* Get a list of all upgrades for the pocket computer.
|
||||
*
|
||||
* @return A collection of all upgrade names
|
||||
* @return A collection of all upgrade names.
|
||||
*/
|
||||
@Nonnull
|
||||
Map<ResourceLocation, IPeripheral> getUpgrades();
|
||||
|
@ -2,9 +2,7 @@ package dan200.computercraft.api.pocket;
|
||||
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
@ -14,18 +12,20 @@ import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Additional peripherals for pocket computers.
|
||||
* <p>
|
||||
*
|
||||
* This is similar to {@link dan200.computercraft.api.turtle.ITurtleUpgrade}.
|
||||
*/
|
||||
public interface IPocketUpgrade
|
||||
{
|
||||
|
||||
/**
|
||||
* Gets a unique identifier representing this type of turtle upgrade. eg: "computercraft:wireless_modem" or "my_mod:my_upgrade".
|
||||
* You should use a unique resource domain to ensure this upgrade is uniquely identified.
|
||||
* The peripheral will fail registration if an already used ID is specified.
|
||||
* Gets a unique identifier representing this type of turtle upgrade. eg: "computercraft:wireless_modem" or
|
||||
* "my_mod:my_upgrade".
|
||||
*
|
||||
* @return The id
|
||||
* You should use a unique resource domain to ensure this upgrade is uniquely identified. The upgrade will fail
|
||||
* registration if an already used ID is specified.
|
||||
*
|
||||
* @return The upgrade's id.
|
||||
* @see IPocketUpgrade#getUpgradeID()
|
||||
* @see ComputerCraftAPI#registerPocketUpgrade(IPocketUpgrade)
|
||||
*/
|
||||
@ -33,54 +33,59 @@ public interface IPocketUpgrade
|
||||
ResourceLocation getUpgradeID();
|
||||
|
||||
/**
|
||||
* Return a String to describe this type of turtle in turtle item names.
|
||||
* An example of built-in adjectives is "Wireless".
|
||||
* Return an unlocalised string to describe the type of pocket computer this upgrade provides.
|
||||
*
|
||||
* @return The unlocalised adjective
|
||||
* An example of a built-in adjectives is "Wireless" - this is converted to "Wireless Pocket Computer".
|
||||
*
|
||||
* @return The unlocalised adjective.
|
||||
* @see ITurtleUpgrade#getUnlocalisedAdjective()
|
||||
*/
|
||||
@Nonnull
|
||||
String getUnlocalisedAdjective();
|
||||
|
||||
/**
|
||||
* Return an item stack representing the type of item that a turtle must be crafted
|
||||
* with to create a turtle which holds this upgrade. This item stack is also used
|
||||
* to determine the upgrade given by turtle.equip()
|
||||
* Return an item stack representing the type of item that a pocket computer must be crafted with to create a
|
||||
* pocket computer which holds this upgrade. This item stack is also used to determine the upgrade given by
|
||||
* {@code pocket.equip()}/{@code pocket.unequip()}.
|
||||
*
|
||||
* @return The item stack used for crafting. This can be {@code null} if crafting is disabled.
|
||||
* @see ITurtleUpgrade#getCraftingItem()
|
||||
*/
|
||||
@Nullable
|
||||
ItemStack getCraftingItem();
|
||||
|
||||
/**
|
||||
* Creates a peripheral for the pocket computer.
|
||||
* <p>
|
||||
* The peripheral created will be stored for the lifetime of the upgrade, will have update() called
|
||||
* once-per-tick, and will be attached, detached and have methods called in the same manner as a Computer peripheral.
|
||||
*
|
||||
* @param access The access object for the pocket item stack
|
||||
* The peripheral created will be stored for the lifetime of the upgrade, will be passed an argument to
|
||||
* {@link #update(IPocketAccess, IPeripheral)} and will be attached, detached and have methods called in the same
|
||||
* manner as an ordinary peripheral.
|
||||
*
|
||||
* @param access The access object for the pocket item stack.
|
||||
* @return The newly created peripheral.
|
||||
* @see ITurtleUpgrade#createPeripheral(ITurtleAccess, TurtleSide)
|
||||
* @see #update(IPocketAccess, IPeripheral)
|
||||
*/
|
||||
@Nullable
|
||||
IPeripheral createPeripheral( @Nonnull IPocketAccess access );
|
||||
|
||||
/**
|
||||
* Called when the pocket computer item stack updates
|
||||
* Called when the pocket computer item stack updates.
|
||||
*
|
||||
* @param access The access object for the pocket item stack
|
||||
* @param peripheral The peripheral for this upgrade
|
||||
* @param access The access object for the pocket item stack.
|
||||
* @param peripheral The peripheral for this upgrade.
|
||||
* @see #createPeripheral(IPocketAccess)
|
||||
*/
|
||||
void update( @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral );
|
||||
|
||||
/**
|
||||
* Called when the pocket computer is right clicked on something
|
||||
* Called when the pocket computer is right clicked.
|
||||
*
|
||||
* @param world The world the computer is in
|
||||
* @param access The access object for the pocket item stack
|
||||
* @param peripheral The peripheral for this upgrade
|
||||
* @return {@code true} to stop the gui from opening, otherwise false.
|
||||
* @param world The world the computer is in.
|
||||
* @param access The access object for the pocket item stack.
|
||||
* @param peripheral The peripheral for this upgrade.
|
||||
* @return {@code true} to stop the GUI from opening, otherwise false. You should always provide some code path
|
||||
* which returns {@code false}, such as requiring the player to be sneaking - otherwise they will be unable to
|
||||
* access the GUI.
|
||||
* @see #createPeripheral(IPocketAccess)
|
||||
*/
|
||||
boolean onRightClick( @Nonnull World world, @Nonnull IPocketAccess access, @Nullable IPeripheral peripheral );
|
||||
}
|
||||
|
@ -8,11 +8,11 @@ package dan200.computercraft.shared.pocket.apis;
|
||||
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.lua.ILuaTask;
|
||||
import dan200.computercraft.api.lua.LuaException;
|
||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||
import dan200.computercraft.core.apis.ILuaAPI;
|
||||
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||
import dan200.computercraft.shared.util.InventoryUtil;
|
||||
import dan200.computercraft.shared.util.WorldUtil;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@ -61,84 +61,91 @@ public class PocketAPI implements ILuaAPI
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] callMethod( ILuaContext context, int method, Object[] arguments ) throws LuaException
|
||||
public Object[] callMethod( ILuaContext context, int method, Object[] arguments ) throws LuaException, InterruptedException
|
||||
{
|
||||
switch( method )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
// equipBack
|
||||
if( !(m_computer.getEntity() instanceof EntityPlayer) )
|
||||
return context.executeMainThreadTask( new ILuaTask()
|
||||
{
|
||||
throw new LuaException( "Cannot find player" );
|
||||
}
|
||||
|
||||
ItemStack pocketStack = m_computer.getStack();
|
||||
EntityPlayer player = (EntityPlayer) m_computer.getEntity();
|
||||
InventoryPlayer inventory = player.inventory;
|
||||
|
||||
IPocketUpgrade previousUpgrade = m_computer.getUpgrade();
|
||||
|
||||
// Attempt to find the upgrade, starting in the main segment, and then looking in the opposite
|
||||
// one. We start from the position the item is currently in and loop round to the start.
|
||||
IPocketUpgrade newUpgrade = findUpgrade( inventory.mainInventory, inventory.currentItem, previousUpgrade );
|
||||
if( newUpgrade == null ) newUpgrade = findUpgrade( inventory.offHandInventory, 0, previousUpgrade );
|
||||
if( newUpgrade == null ) throw new LuaException( "Cannot find a valid upgrade" );
|
||||
|
||||
// Remove the current upgrade
|
||||
if( previousUpgrade != null )
|
||||
{
|
||||
ItemStack stack = previousUpgrade.getCraftingItem();
|
||||
if( stack != null )
|
||||
@Override
|
||||
public Object[] execute() throws LuaException
|
||||
{
|
||||
stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem );
|
||||
if( stack != null )
|
||||
if( !(m_computer.getEntity() instanceof EntityPlayer) )
|
||||
{
|
||||
WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ );
|
||||
throw new LuaException( "Cannot find player" );
|
||||
}
|
||||
|
||||
EntityPlayer player = (EntityPlayer) m_computer.getEntity();
|
||||
InventoryPlayer inventory = player.inventory;
|
||||
|
||||
IPocketUpgrade previousUpgrade = m_computer.getUpgrade();
|
||||
|
||||
// Attempt to find the upgrade, starting in the main segment, and then looking in the opposite
|
||||
// one. We start from the position the item is currently in and loop round to the start.
|
||||
IPocketUpgrade newUpgrade = findUpgrade( inventory.mainInventory, inventory.currentItem, previousUpgrade );
|
||||
if( newUpgrade == null )
|
||||
{
|
||||
newUpgrade = findUpgrade( inventory.offHandInventory, 0, previousUpgrade );
|
||||
}
|
||||
if( newUpgrade == null ) throw new LuaException( "Cannot find a valid upgrade" );
|
||||
|
||||
// Remove the current upgrade
|
||||
if( previousUpgrade != null )
|
||||
{
|
||||
ItemStack stack = previousUpgrade.getCraftingItem();
|
||||
if( stack != null )
|
||||
{
|
||||
stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem );
|
||||
if( stack != null )
|
||||
{
|
||||
WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the new upgrade
|
||||
m_computer.setUpgrade( newUpgrade );
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the new upgrade
|
||||
ItemPocketComputer.setUpgrade( pocketStack, newUpgrade );
|
||||
m_computer.setUpgrade( newUpgrade );
|
||||
|
||||
inventory.markDirty();
|
||||
|
||||
return null;
|
||||
}
|
||||
} );
|
||||
|
||||
case 1:
|
||||
{
|
||||
// unequipBack
|
||||
if( !(m_computer.getEntity() instanceof EntityPlayer) )
|
||||
return context.executeMainThreadTask( new ILuaTask()
|
||||
{
|
||||
throw new LuaException( "Cannot find player" );
|
||||
}
|
||||
|
||||
ItemStack pocketStack = m_computer.getStack();
|
||||
EntityPlayer player = (EntityPlayer) m_computer.getEntity();
|
||||
InventoryPlayer inventory = player.inventory;
|
||||
|
||||
IPocketUpgrade previousUpgrade = m_computer.getUpgrade();
|
||||
|
||||
if( previousUpgrade == null ) throw new LuaException( "Nothing to unequip" );
|
||||
|
||||
ItemPocketComputer.setUpgrade( pocketStack, null );
|
||||
m_computer.setUpgrade( null );
|
||||
|
||||
ItemStack stack = previousUpgrade.getCraftingItem();
|
||||
if( stack != null )
|
||||
{
|
||||
stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem );
|
||||
if( stack != null )
|
||||
@Override
|
||||
public Object[] execute() throws LuaException
|
||||
{
|
||||
WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ );
|
||||
}
|
||||
}
|
||||
if( !(m_computer.getEntity() instanceof EntityPlayer) )
|
||||
{
|
||||
throw new LuaException( "Cannot find player" );
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
EntityPlayer player = (EntityPlayer) m_computer.getEntity();
|
||||
InventoryPlayer inventory = player.inventory;
|
||||
|
||||
IPocketUpgrade previousUpgrade = m_computer.getUpgrade();
|
||||
|
||||
if( previousUpgrade == null ) throw new LuaException( "Nothing to unequip" );
|
||||
|
||||
m_computer.setUpgrade( null );
|
||||
|
||||
ItemStack stack = previousUpgrade.getCraftingItem();
|
||||
if( stack != null )
|
||||
{
|
||||
stack = InventoryUtil.storeItems( stack, inventory, 0, 36, inventory.currentItem );
|
||||
if( stack != null )
|
||||
{
|
||||
WorldUtil.dropItemStack( stack, player.worldObj, player.posX, player.posY, player.posZ );
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
} );
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@ -26,10 +25,9 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces
|
||||
private Entity m_entity;
|
||||
private ItemStack m_stack;
|
||||
|
||||
public PocketServerComputer( World world, int computerID, String label, int instanceID, ComputerFamily family, ItemStack stack, Entity entity )
|
||||
public PocketServerComputer( World world, int computerID, String label, int instanceID, ComputerFamily family )
|
||||
{
|
||||
super( world, computerID, label, instanceID, family, ComputerCraft.terminalWidth_pocketComputer, ComputerCraft.terminalHeight_pocketComputer );
|
||||
update( entity, stack );
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -63,30 +61,7 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces
|
||||
@Override
|
||||
public NBTTagCompound getUpgradeNBTData()
|
||||
{
|
||||
NBTTagCompound tag;
|
||||
if( m_stack.hasTagCompound() )
|
||||
{
|
||||
tag = m_stack.getTagCompound();
|
||||
}
|
||||
else
|
||||
{
|
||||
tag = new NBTTagCompound();
|
||||
m_stack.setTagCompound( tag );
|
||||
}
|
||||
|
||||
if( tag.hasKey( "upgrade_info", Constants.NBT.TAG_COMPOUND ) )
|
||||
{
|
||||
return tag.getCompoundTag( "upgrade_info" );
|
||||
}
|
||||
else
|
||||
{
|
||||
NBTTagCompound sub = new NBTTagCompound();
|
||||
|
||||
tag.setTag( "upgrade_info", sub );
|
||||
updateUpgradeNBTData();
|
||||
|
||||
return sub;
|
||||
}
|
||||
return ComputerCraft.Items.pocketComputer.getUpgradeInfo( m_stack );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -120,39 +95,47 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getStack()
|
||||
{
|
||||
return m_stack;
|
||||
}
|
||||
|
||||
public IPocketUpgrade getUpgrade()
|
||||
{
|
||||
return m_upgrade;
|
||||
}
|
||||
|
||||
public void update( Entity entity, ItemStack stack )
|
||||
{
|
||||
if( m_entity != null ) setPosition( entity.getPosition() );
|
||||
m_entity = entity;
|
||||
m_stack = stack;
|
||||
}
|
||||
|
||||
public synchronized void setUpgrade( IPocketUpgrade upgrade )
|
||||
/**
|
||||
* Set the upgrade for this pocket computer, also updating the item stack.
|
||||
*
|
||||
* Note this method is not thread safe - it must be called from the server thread.
|
||||
*
|
||||
* @param upgrade The new upgrade to set it to, may be {@code null}.
|
||||
*/
|
||||
public void setUpgrade( IPocketUpgrade upgrade )
|
||||
{
|
||||
if( this.m_upgrade == upgrade ) return;
|
||||
|
||||
// Clear the old upgrade NBT
|
||||
if( m_stack.hasTagCompound() )
|
||||
synchronized (this)
|
||||
{
|
||||
NBTTagCompound tag = m_stack.getTagCompound();
|
||||
if( tag.hasKey( "upgrade_info", 10 ) )
|
||||
{
|
||||
tag.removeTag( "upgrade_info" );
|
||||
updateUpgradeNBTData();
|
||||
}
|
||||
ComputerCraft.Items.pocketComputer.setUpgrade( m_stack, upgrade );
|
||||
if( m_entity instanceof EntityPlayer ) ((EntityPlayer) m_entity).inventory.markDirty();
|
||||
|
||||
this.m_upgrade = upgrade;
|
||||
invalidatePeripheral();
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void updateValues( Entity entity, ItemStack stack, IPocketUpgrade upgrade )
|
||||
{
|
||||
if( entity != null )
|
||||
{
|
||||
setWorld( entity.getEntityWorld() );
|
||||
setPosition( entity.getPosition() );
|
||||
}
|
||||
|
||||
this.m_upgrade = upgrade;
|
||||
invalidatePeripheral();
|
||||
m_entity = entity;
|
||||
m_stack = stack;
|
||||
|
||||
if( this.m_upgrade != upgrade )
|
||||
{
|
||||
this.m_upgrade = upgrade;
|
||||
invalidatePeripheral();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -104,10 +104,12 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
PocketServerComputer computer = createServerComputer( world, inventory, entity, stack );
|
||||
if( computer != null )
|
||||
{
|
||||
IPocketUpgrade upgrade = getUpgrade( stack );
|
||||
|
||||
// Ping computer
|
||||
computer.keepAlive();
|
||||
computer.setWorld( world );
|
||||
computer.update( entity, stack );
|
||||
computer.updateValues( entity, stack, upgrade );
|
||||
|
||||
// Sync ID
|
||||
int id = computer.getID();
|
||||
@ -131,8 +133,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
}
|
||||
}
|
||||
|
||||
// Update modem
|
||||
IPocketUpgrade upgrade = getUpgrade( stack );
|
||||
// Update pocket upgrade
|
||||
if( upgrade != null )
|
||||
{
|
||||
upgrade.update( computer, computer.getPeripheral( 2 ) );
|
||||
@ -165,6 +166,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
IPocketUpgrade upgrade = getUpgrade( stack );
|
||||
if( upgrade != null )
|
||||
{
|
||||
computer.updateValues( player, stack, upgrade );
|
||||
stop = upgrade.onRightClick( world, computer, computer.getPeripheral( 2 ) );
|
||||
}
|
||||
}
|
||||
@ -258,12 +260,10 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
computerID,
|
||||
getLabel( stack ),
|
||||
instanceID,
|
||||
getFamily( stack ),
|
||||
stack,
|
||||
entity
|
||||
getFamily( stack )
|
||||
);
|
||||
computer.updateValues( entity, stack, getUpgrade( stack ) );
|
||||
computer.addAPI( new PocketAPI( computer ) );
|
||||
computer.setUpgrade( getUpgrade( stack ) );
|
||||
ComputerCraft.serverComputerRegistry.add( instanceID, computer );
|
||||
if( inventory != null )
|
||||
{
|
||||
@ -461,7 +461,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static IPocketUpgrade getUpgrade( ItemStack stack )
|
||||
public IPocketUpgrade getUpgrade( ItemStack stack )
|
||||
{
|
||||
NBTTagCompound compound = stack.getTagCompound();
|
||||
if( compound != null )
|
||||
@ -484,7 +484,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void setUpgrade( ItemStack stack, IPocketUpgrade upgrade )
|
||||
public void setUpgrade( ItemStack stack, IPocketUpgrade upgrade )
|
||||
{
|
||||
NBTTagCompound compound = stack.getTagCompound();
|
||||
if( compound == null ) stack.setTagCompound( compound = new NBTTagCompound() );
|
||||
@ -500,4 +500,25 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia
|
||||
|
||||
compound.removeTag( "upgrade_info" );
|
||||
}
|
||||
|
||||
public NBTTagCompound getUpgradeInfo( ItemStack stack )
|
||||
{
|
||||
NBTTagCompound tag = stack.getTagCompound();
|
||||
if( tag == null )
|
||||
{
|
||||
tag = new NBTTagCompound();
|
||||
stack.setTagCompound( tag );
|
||||
}
|
||||
|
||||
if( tag.hasKey( "upgrade_info", Constants.NBT.TAG_COMPOUND ) )
|
||||
{
|
||||
return tag.getCompoundTag( "upgrade_info" );
|
||||
}
|
||||
else
|
||||
{
|
||||
NBTTagCompound sub = new NBTTagCompound();
|
||||
tag.setTag( "upgrade_info", sub );
|
||||
return sub;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user