mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-09 18:03:08 +00:00
Allow dying turtles arbitrary colours
- Makes ITurtleItem implement IColourableItem - Only cache one turtle item model for all colours, rather than one for each colour. - Allow ITurtleAccess to set an arbitrary colour.
This commit is contained in:
@@ -11,13 +11,12 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import dan200.computercraft.shared.common.IDirectionalTile;
|
||||
import dan200.computercraft.shared.computer.blocks.IComputerTile;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public interface ITurtleTile extends IComputerTile, IDirectionalTile
|
||||
{
|
||||
Colour getColour();
|
||||
int getColour();
|
||||
ResourceLocation getOverlay();
|
||||
ITurtleUpgrade getUpgrade( TurtleSide side );
|
||||
ITurtleAccess getAccess();
|
||||
|
||||
@@ -17,7 +17,6 @@ import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||
import dan200.computercraft.shared.turtle.apis.TurtleAPI;
|
||||
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
||||
import dan200.computercraft.shared.turtle.items.TurtleItemFactory;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import dan200.computercraft.shared.util.InventoryUtil;
|
||||
import dan200.computercraft.shared.util.RedstoneUtil;
|
||||
import dan200.computercraft.shared.util.WorldUtil;
|
||||
@@ -202,14 +201,14 @@ public class TileTurtle extends TileComputerBase
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if( currentItem.getItem() == Items.WATER_BUCKET && m_brain.getDyeColour() != -1 )
|
||||
else if( currentItem.getItem() == Items.WATER_BUCKET && m_brain.getColour() != -1 )
|
||||
{
|
||||
// Water to remove turtle colour
|
||||
if( !worldObj.isRemote )
|
||||
{
|
||||
if( m_brain.getDyeColour() != -1 )
|
||||
if( m_brain.getColour() != -1 )
|
||||
{
|
||||
m_brain.setDyeColour( -1 );
|
||||
m_brain.setColour( -1 );
|
||||
if( !player.capabilities.isCreativeMode )
|
||||
{
|
||||
player.setHeldItem( EnumHand.MAIN_HAND, new ItemStack( Items.BUCKET ) );
|
||||
@@ -417,14 +416,9 @@ public class TileTurtle extends TileComputerBase
|
||||
}
|
||||
|
||||
@Override
|
||||
public Colour getColour()
|
||||
public int getColour()
|
||||
{
|
||||
int dye = m_brain.getDyeColour();
|
||||
if( dye >= 0 )
|
||||
{
|
||||
return Colour.values()[ dye ];
|
||||
}
|
||||
return null;
|
||||
return m_brain.getColour();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,10 +16,7 @@ import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.computer.core.IComputer;
|
||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import dan200.computercraft.shared.util.DirectionUtil;
|
||||
import dan200.computercraft.shared.util.Holiday;
|
||||
import dan200.computercraft.shared.util.HolidayUtil;
|
||||
import dan200.computercraft.shared.util.*;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
@@ -117,6 +114,7 @@ public class TurtleBrain implements ITurtleAccess
|
||||
private int m_selectedSlot;
|
||||
private int m_fuelLevel;
|
||||
private Colour m_colour;
|
||||
private int m_colourHex;
|
||||
private ResourceLocation m_overlay;
|
||||
|
||||
private int m_instanceID;
|
||||
@@ -139,6 +137,7 @@ public class TurtleBrain implements ITurtleAccess
|
||||
m_selectedSlot = 0;
|
||||
m_fuelLevel = 0;
|
||||
m_colour = null;
|
||||
m_colourHex = -1;
|
||||
m_overlay = null;
|
||||
|
||||
m_instanceID = -1;
|
||||
@@ -218,14 +217,8 @@ public class TurtleBrain implements ITurtleAccess
|
||||
}
|
||||
|
||||
// Read colour
|
||||
if( nbttagcompound.hasKey( "colourIndex" ) )
|
||||
{
|
||||
m_colour = Colour.values()[ nbttagcompound.getInteger( "colourIndex" ) ];
|
||||
}
|
||||
else
|
||||
{
|
||||
m_colour = null;
|
||||
}
|
||||
m_colour = ColourUtils.getColour( nbttagcompound );
|
||||
m_colourHex = ColourUtils.getHexColour( nbttagcompound );
|
||||
|
||||
// Read overlay
|
||||
if( nbttagcompound.hasKey( "overlay_mod" ) )
|
||||
@@ -328,6 +321,10 @@ public class TurtleBrain implements ITurtleAccess
|
||||
{
|
||||
nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() );
|
||||
}
|
||||
else if( m_colourHex != -1 )
|
||||
{
|
||||
nbttagcompound.setInteger( "colour", m_colourHex );
|
||||
}
|
||||
|
||||
// Write overlay
|
||||
if( m_overlay != null )
|
||||
@@ -387,6 +384,10 @@ public class TurtleBrain implements ITurtleAccess
|
||||
{
|
||||
nbttagcompound.setInteger( "colourIndex", m_colour.ordinal() );
|
||||
}
|
||||
else if( m_colourHex != -1 )
|
||||
{
|
||||
nbttagcompound.setInteger( "colour", m_colourHex );
|
||||
}
|
||||
|
||||
// Overlay
|
||||
if( m_overlay != null )
|
||||
@@ -438,14 +439,8 @@ public class TurtleBrain implements ITurtleAccess
|
||||
}
|
||||
|
||||
// Colour
|
||||
if( nbttagcompound.hasKey( "colourIndex" ) )
|
||||
{
|
||||
m_colour = Colour.values()[ nbttagcompound.getInteger( "colourIndex" ) ];
|
||||
}
|
||||
else
|
||||
{
|
||||
m_colour = null;
|
||||
}
|
||||
m_colourHex = ColourUtils.getHexColour( nbttagcompound );
|
||||
m_colour = ColourUtils.getColour( nbttagcompound );
|
||||
|
||||
// Overlay
|
||||
if( nbttagcompound.hasKey( "overlay_mod" ) && nbttagcompound.hasKey( "overlay_path" ) )
|
||||
@@ -779,7 +774,7 @@ public class TurtleBrain implements ITurtleAccess
|
||||
@Override
|
||||
public int getDyeColour()
|
||||
{
|
||||
return (m_colour != null) ? m_colour.ordinal() : -1;
|
||||
return m_colour != null ? m_colour.ordinal() : -1;
|
||||
}
|
||||
|
||||
public ResourceLocation getOverlay()
|
||||
@@ -807,10 +802,37 @@ public class TurtleBrain implements ITurtleAccess
|
||||
if( m_colour != newColour )
|
||||
{
|
||||
m_colour = newColour;
|
||||
m_colourHex = newColour == null ? -1 : newColour.getHex();
|
||||
m_owner.updateBlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColour( int colour )
|
||||
{
|
||||
if( colour >= 0 && colour <= 0xFFFFFF )
|
||||
{
|
||||
if( m_colourHex != colour )
|
||||
{
|
||||
m_colourHex = colour;
|
||||
m_colour = Colour.fromHex( colour );
|
||||
m_owner.updateBlock();
|
||||
}
|
||||
}
|
||||
else if( m_colourHex != -1 )
|
||||
{
|
||||
m_colourHex = -1;
|
||||
m_colour = null;
|
||||
m_owner.updateBlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColour()
|
||||
{
|
||||
return m_colourHex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITurtleUpgrade getUpgrade( @Nonnull TurtleSide side )
|
||||
{
|
||||
|
||||
@@ -8,15 +8,14 @@ package dan200.computercraft.shared.turtle.items;
|
||||
|
||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import dan200.computercraft.shared.common.IColouredItem;
|
||||
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public interface ITurtleItem extends IComputerItem
|
||||
public interface ITurtleItem extends IComputerItem, IColouredItem
|
||||
{
|
||||
ITurtleUpgrade getUpgrade( ItemStack stack, TurtleSide side );
|
||||
int getFuelLevel( ItemStack stack );
|
||||
Colour getColour( ItemStack stack );
|
||||
ResourceLocation getOverlay( ItemStack stack );
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.computer.items.ItemComputerBase;
|
||||
import dan200.computercraft.shared.turtle.blocks.ITurtleTile;
|
||||
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import dan200.computercraft.shared.util.StringUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
@@ -41,7 +40,7 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle
|
||||
setHasSubtypes( true );
|
||||
}
|
||||
|
||||
public abstract ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay );
|
||||
public abstract ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay );
|
||||
|
||||
@Override
|
||||
public void getSubItems( @Nonnull Item itemID, @Nullable CreativeTabs tabs, @Nonnull List<ItemStack> list )
|
||||
@@ -100,10 +99,10 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle
|
||||
turtle.getAccess().setFuelLevel( fuelLevel );
|
||||
|
||||
// Set colour
|
||||
Colour colour = getColour( stack );
|
||||
if( colour != null )
|
||||
int colour = getColour( stack );
|
||||
if( colour != -1 )
|
||||
{
|
||||
turtle.getAccess().setDyeColour( colour.ordinal() );
|
||||
turtle.getAccess().setColour( colour );
|
||||
}
|
||||
|
||||
// Set overlay
|
||||
@@ -172,17 +171,13 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle
|
||||
}
|
||||
}
|
||||
|
||||
// ITurtleItem implementation
|
||||
|
||||
@Override
|
||||
public abstract ITurtleUpgrade getUpgrade( ItemStack stack, TurtleSide side );
|
||||
|
||||
@Override
|
||||
public abstract Colour getColour( ItemStack stack );
|
||||
|
||||
@Override
|
||||
public abstract ResourceLocation getOverlay( ItemStack stack );
|
||||
|
||||
@Override
|
||||
public abstract int getFuelLevel( ItemStack stack );
|
||||
public ItemStack setColour( ItemStack stack, int colour )
|
||||
{
|
||||
return TurtleItemFactory.create(
|
||||
getComputerID( stack ), getLabel( stack ), colour, getFamily( stack ),
|
||||
getUpgrade( stack, TurtleSide.Left ), getUpgrade( stack, TurtleSide.Right ),
|
||||
getFuelLevel( stack ), getOverlay( stack )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.computer.items.ItemComputer;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -27,12 +26,12 @@ public class ItemTurtleLegacy extends ItemTurtleBase
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
public ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
{
|
||||
// Legacy turtles only support pickaxes and modems
|
||||
if( (leftUpgrade != null && leftUpgrade != ComputerCraft.Upgrades.diamondPickaxe ) ||
|
||||
(rightUpgrade != null && rightUpgrade != ComputerCraft.Upgrades.wirelessModem) ||
|
||||
(colour != null) || (overlay != null) )
|
||||
(colour != -1) || (overlay != null) )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -130,9 +129,9 @@ public class ItemTurtleLegacy extends ItemTurtleBase
|
||||
}
|
||||
|
||||
@Override
|
||||
public Colour getColour( ItemStack stack )
|
||||
public int getColour( ItemStack stack )
|
||||
{
|
||||
return null;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,15 +9,16 @@ package dan200.computercraft.shared.turtle.items;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import dan200.computercraft.shared.common.IColouredItem;
|
||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.util.Colour;
|
||||
import dan200.computercraft.shared.util.ColourUtils;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
public class ItemTurtleNormal extends ItemTurtleBase
|
||||
public class ItemTurtleNormal extends ItemTurtleBase implements IColouredItem
|
||||
{
|
||||
public ItemTurtleNormal( Block block )
|
||||
{
|
||||
@@ -27,7 +28,7 @@ public class ItemTurtleNormal extends ItemTurtleBase
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack create( int id, String label, Colour colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
public ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
{
|
||||
// Build the stack
|
||||
ItemStack stack = new ItemStack( this, 1, 0 );
|
||||
@@ -64,9 +65,9 @@ public class ItemTurtleNormal extends ItemTurtleBase
|
||||
{
|
||||
nbt.setInteger( "fuelLevel", fuelLevel );
|
||||
}
|
||||
if( colour != null )
|
||||
if( colour != -1 )
|
||||
{
|
||||
nbt.setInteger( "colourIndex", colour.ordinal() );
|
||||
nbt.setInteger( "colour", colour );
|
||||
}
|
||||
if( overlay != null )
|
||||
{
|
||||
@@ -151,18 +152,10 @@ public class ItemTurtleNormal extends ItemTurtleBase
|
||||
}
|
||||
|
||||
@Override
|
||||
public Colour getColour( ItemStack stack )
|
||||
public int getColour( ItemStack stack )
|
||||
{
|
||||
if( stack.hasTagCompound() )
|
||||
{
|
||||
NBTTagCompound nbt = stack.getTagCompound();
|
||||
if( nbt.hasKey( "colourIndex" ) )
|
||||
{
|
||||
int index = nbt.getInteger( "colourIndex" ) & 0xf;
|
||||
return Colour.values()[ index ];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
NBTTagCompound tag = stack.getTagCompound();
|
||||
return tag == null ? -1 : ColourUtils.getHexColour( tag );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -47,7 +47,7 @@ public class TurtleItemFactory
|
||||
return create( -1, null, turtle.getColour(), turtle.getFamily(), leftUpgrade, rightUpgrade, 0, turtle.getOverlay() );
|
||||
}
|
||||
|
||||
public static ItemStack create( int id, String label, Colour colour, ComputerFamily family, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
public static ItemStack create( int id, String label, int colour, ComputerFamily family, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay )
|
||||
{
|
||||
switch( family )
|
||||
{
|
||||
|
||||
@@ -37,7 +37,7 @@ public class TurtleRecipe implements IRecipe
|
||||
@Override
|
||||
public ItemStack getRecipeOutput()
|
||||
{
|
||||
return TurtleItemFactory.create( -1, null, null, m_family, null, null, 0, null );
|
||||
return TurtleItemFactory.create( -1, null, -1, m_family, null, null, 0, null );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,11 +84,11 @@ public class TurtleRecipe implements IRecipe
|
||||
// Construct the new stack
|
||||
if( m_family != ComputerFamily.Beginners )
|
||||
{
|
||||
return TurtleItemFactory.create( computerID, label, null, m_family, null, null, 0, null );
|
||||
return TurtleItemFactory.create( computerID, label, -1, m_family, null, null, 0, null );
|
||||
}
|
||||
else
|
||||
{
|
||||
return TurtleItemFactory.create( -1, label, null, m_family, null, null, 0, null );
|
||||
return TurtleItemFactory.create( -1, label, -1, m_family, null, null, 0, null );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public class TurtleUpgradeRecipe implements IRecipe
|
||||
@Override
|
||||
public ItemStack getRecipeOutput()
|
||||
{
|
||||
return TurtleItemFactory.create( -1, null, null, ComputerFamily.Normal, null, null, 0, null );
|
||||
return TurtleItemFactory.create( -1, null, -1, ComputerFamily.Normal, null, null, 0, null );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -154,7 +154,7 @@ public class TurtleUpgradeRecipe implements IRecipe
|
||||
int computerID = itemTurtle.getComputerID( turtle );
|
||||
String label = itemTurtle.getLabel( turtle );
|
||||
int fuelLevel = itemTurtle.getFuelLevel( turtle );
|
||||
Colour colour = itemTurtle.getColour( turtle );
|
||||
int colour = itemTurtle.getColour( turtle );
|
||||
ResourceLocation overlay = itemTurtle.getOverlay( turtle );
|
||||
return TurtleItemFactory.create( computerID, label, colour, family, upgrades[0], upgrades[1], fuelLevel, overlay );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user