1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-07-01 09:33:20 +00:00

Allow changing the colour of the modem light

This now uses an integer between 0 and 15 to represent a colour, rather
than a simple on/off flag.
This commit is contained in:
SquidDev 2017-05-05 00:54:41 +01:00
parent 6020cd55b1
commit 5a4375f6ac
15 changed files with 68 additions and 64 deletions

View File

@ -23,29 +23,40 @@ public interface IPocketAccess
Entity getEntity(); Entity getEntity();
/** /**
* Get if the modem light is turned on * Get the colour of the modem light.
* *
* @return If the modem light is turned on * See {@link #setLight(int)} for the values this may return.
*
* @return The colour of the modem light.
* @see #setLight(int)
*/ */
boolean getModemLight(); int getLight();
/** /**
* Turn on/off the modem light * Set the colour of the modem light. Use {@link 0} to turn it off.
* *
* @param value If the light should be on * 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,
* 1 representing red, 2 representing green all the way up to 15 for white.
*
* @param value The colour the light should have.
* @see #getLight()
*/ */
void setModemLight( boolean value ); void setLight( int value );
/** /**
* Get the upgrade specific NBT * Get the upgrade specific NBT
* *
* @return The upgrade's NBT * @return The upgrade's NBT
* @see #updateUpgradeNBTData()
*/ */
@Nonnull @Nonnull
NBTTagCompound getUpgradeNBTData(); NBTTagCompound getUpgradeNBTData();
/** /**
* Mark the upgrade specific NBT as dirty * Mark the upgrade specific NBT as dirty
*
* @see #getUpgradeNBTData()
*/ */
void updateUpgradeNBTData(); void updateUpgradeNBTData();

View File

@ -25,6 +25,7 @@
import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon; import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon;
import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle;
import dan200.computercraft.shared.turtle.entity.TurtleVisionCamera; import dan200.computercraft.shared.turtle.entity.TurtleVisionCamera;
import dan200.computercraft.shared.util.Colour;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@ -53,7 +54,6 @@
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
@ -117,19 +117,14 @@ public ModelResourceLocation getModelLocation( ItemStack stack )
private ModelResourceLocation pocket_computer_off = new ModelResourceLocation( "computercraft:pocketComputer", "inventory" ); private ModelResourceLocation pocket_computer_off = new ModelResourceLocation( "computercraft:pocketComputer", "inventory" );
private ModelResourceLocation pocket_computer_on = new ModelResourceLocation( "computercraft:pocket_computer_on", "inventory" ); private ModelResourceLocation pocket_computer_on = new ModelResourceLocation( "computercraft:pocket_computer_on", "inventory" );
private ModelResourceLocation pocket_computer_blinking = new ModelResourceLocation( "computercraft:pocket_computer_blinking", "inventory" ); private ModelResourceLocation pocket_computer_blinking = new ModelResourceLocation( "computercraft:pocket_computer_blinking", "inventory" );
private ModelResourceLocation pocket_computer_on_modem_on = new ModelResourceLocation( "computercraft:pocket_computer_on_modem_on", "inventory" );
private ModelResourceLocation pocket_computer_blinking_modem_on = new ModelResourceLocation( "computercraft:pocket_computer_blinking_modem_on", "inventory" );
private ModelResourceLocation advanced_pocket_computer_off = new ModelResourceLocation( "computercraft:advanced_pocket_computer_off", "inventory" ); private ModelResourceLocation advanced_pocket_computer_off = new ModelResourceLocation( "computercraft:advanced_pocket_computer_off", "inventory" );
private ModelResourceLocation advanced_pocket_computer_on = new ModelResourceLocation( "computercraft:advanced_pocket_computer_on", "inventory" ); private ModelResourceLocation advanced_pocket_computer_on = new ModelResourceLocation( "computercraft:advanced_pocket_computer_on", "inventory" );
private ModelResourceLocation advanced_pocket_computer_blinking = new ModelResourceLocation( "computercraft:advanced_pocket_computer_blinking", "inventory" ); private ModelResourceLocation advanced_pocket_computer_blinking = new ModelResourceLocation( "computercraft:advanced_pocket_computer_blinking", "inventory" );
private ModelResourceLocation advanced_pocket_computer_on_modem_on = new ModelResourceLocation( "computercraft:advanced_pocket_computer_on_modem_on", "inventory" );
private ModelResourceLocation advanced_pocket_computer_blinking_modem_on = new ModelResourceLocation( "computercraft:advanced_pocket_computer_blinking_modem_on", "inventory" );
@Override @Override
public ModelResourceLocation getModelLocation( ItemStack stack ) public ModelResourceLocation getModelLocation( ItemStack stack )
{ {
ItemPocketComputer itemPocketComputer = (ItemPocketComputer)stack.getItem(); ItemPocketComputer itemPocketComputer = (ItemPocketComputer)stack.getItem();
boolean modemOn = itemPocketComputer.getLightState( stack );
switch( itemPocketComputer.getFamily( stack ) ) switch( itemPocketComputer.getFamily( stack ) )
{ {
case Advanced: case Advanced:
@ -143,11 +138,11 @@ public ModelResourceLocation getModelLocation( ItemStack stack )
} }
case On: case On:
{ {
return modemOn ? advanced_pocket_computer_on_modem_on : advanced_pocket_computer_on; return advanced_pocket_computer_on;
} }
case Blinking: case Blinking:
{ {
return modemOn ? advanced_pocket_computer_blinking_modem_on : advanced_pocket_computer_blinking; return advanced_pocket_computer_blinking;
} }
} }
} }
@ -163,24 +158,36 @@ public ModelResourceLocation getModelLocation( ItemStack stack )
} }
case On: case On:
{ {
return modemOn ? pocket_computer_on_modem_on : pocket_computer_on; return pocket_computer_on;
} }
case Blinking: case Blinking:
{ {
return modemOn ? pocket_computer_blinking_modem_on : pocket_computer_blinking; return pocket_computer_blinking;
} }
} }
} }
} }
} }
}, new String[] { }, new String[] {
"pocketComputer", "pocket_computer_on", "pocket_computer_blinking", "pocket_computer_on_modem_on", "pocket_computer_blinking_modem_on", "pocketComputer", "pocket_computer_on", "pocket_computer_blinking",
"advanced_pocket_computer_off", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking", "advanced_pocket_computer_on_modem_on", "advanced_pocket_computer_blinking_modem_on", "advanced_pocket_computer_off", "advanced_pocket_computer_on", "advanced_pocket_computer_blinking",
} ); } );
// Setup // Setup
mc.getItemColors().registerItemColorHandler(new DiskColorHandler(ComputerCraft.Items.disk), ComputerCraft.Items.disk); mc.getItemColors().registerItemColorHandler( new DiskColorHandler( ComputerCraft.Items.disk ), ComputerCraft.Items.disk );
mc.getItemColors().registerItemColorHandler(new DiskColorHandler(ComputerCraft.Items.diskExpanded), ComputerCraft.Items.diskExpanded); mc.getItemColors().registerItemColorHandler( new DiskColorHandler( ComputerCraft.Items.diskExpanded ), ComputerCraft.Items.diskExpanded );
mc.getItemColors().registerItemColorHandler( new IItemColor()
{
@Override
public int getColorFromItemstack( ItemStack stack, int layout )
{
if( layout != 1 ) return 0xFFFFFF;
Colour colour = Colour.fromInt( ComputerCraft.Items.pocketComputer.getLightState( stack ) );
return colour == null ? Colour.Black.getHex() : colour.getHex();
}
}, ComputerCraft.Items.pocketComputer );
// Setup renderers // Setup renderers
ClientRegistry.bindTileEntitySpecialRenderer( TileMonitor.class, new TileEntityMonitorRenderer() ); ClientRegistry.bindTileEntitySpecialRenderer( TileMonitor.class, new TileEntityMonitorRenderer() );

View File

@ -40,18 +40,21 @@ public Entity getEntity()
} }
@Override @Override
public boolean getModemLight() public int getLight()
{ {
return getUserData().getBoolean( "modemLight" ); int value = getUserData().getInteger( "modemLight" );
return value >= 0 && value <= 15 ? value : 0;
} }
@Override @Override
public void setModemLight( boolean value ) public void setLight( int value )
{ {
if( value < 0 || value > 15 ) throw new IllegalArgumentException( "Colour out of bounds" );
NBTTagCompound tag = getUserData(); NBTTagCompound tag = getUserData();
if( tag.getBoolean( "modemLight" ) != value ) if( tag.getInteger( "modemLight" ) != value )
{ {
tag.setBoolean( "modemLight", value ); tag.setInteger( "modemLight", value );
updateUserData(); updateUserData();
} }
} }
@ -117,11 +120,13 @@ public Map<ResourceLocation, IPeripheral> getUpgrades()
} }
} }
public ItemStack getStack() { public ItemStack getStack()
{
return m_stack; return m_stack;
} }
public IPocketUpgrade getUpgrade() { public IPocketUpgrade getUpgrade()
{
return m_upgrade; return m_upgrade;
} }

View File

@ -32,6 +32,8 @@
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List; import java.util.List;
@ -433,6 +435,7 @@ private void setSessionID( ItemStack stack, int sessionID )
stack.getTagCompound().setInteger( "sessionID", sessionID ); stack.getTagCompound().setInteger( "sessionID", sessionID );
} }
@SideOnly(Side.CLIENT)
public ComputerState getState( ItemStack stack ) public ComputerState getState( ItemStack stack )
{ {
ClientComputer computer = getClientComputer( stack ); ClientComputer computer = getClientComputer( stack );
@ -443,18 +446,19 @@ public ComputerState getState( ItemStack stack )
return ComputerState.Off; return ComputerState.Off;
} }
public boolean getLightState( ItemStack stack ) @SideOnly(Side.CLIENT)
public int getLightState( ItemStack stack )
{ {
ClientComputer computer = getClientComputer( stack ); ClientComputer computer = getClientComputer( stack );
if( computer != null && computer.isOn() ) if( computer != null && computer.isOn() )
{ {
NBTTagCompound computerNBT = computer.getUserData(); NBTTagCompound computerNBT = computer.getUserData();
if( computerNBT != null && computerNBT.getBoolean( "modemLight" ) ) if( computerNBT != null )
{ {
return true; return computerNBT.getInteger( "modemLight" );
} }
} }
return false; return 0;
} }
public static IPocketUpgrade getUpgrade( ItemStack stack ) public static IPocketUpgrade getUpgrade( ItemStack stack )

View File

@ -5,6 +5,7 @@
import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.api.pocket.IPocketUpgrade;
import dan200.computercraft.shared.peripheral.PeripheralType; import dan200.computercraft.shared.peripheral.PeripheralType;
import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory;
import dan200.computercraft.shared.util.Colour;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -76,7 +77,7 @@ else if( entity != null )
modem.setLocation( entity.getEntityWorld(), entity.posX, entity.posY, entity.posZ ); modem.setLocation( entity.getEntityWorld(), entity.posX, entity.posY, entity.posZ );
} }
access.setModemLight( modem.isActive() ); access.setLight( modem.isActive() ? Colour.Red.ordinal() : Colour.Black.ordinal() );
} }
} }

View File

@ -1,6 +1,7 @@
{ {
"parent": "item/generated", "parent": "item/generated",
"textures": { "textures": {
"layer0": "computercraft:items/pocketComputerBlinkAdvanced" "layer0": "computercraft:items/pocketComputerBlinkAdvanced",
"layer1": "computercraft:items/pocketComputerLight"
} }
} }

View File

@ -1,7 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "computercraft:items/pocketComputerBlinkAdvanced",
"layer1": "computercraft:items/pocketComputerModemLight"
}
}

View File

@ -1,6 +1,7 @@
{ {
"parent": "item/generated", "parent": "item/generated",
"textures": { "textures": {
"layer0": "computercraft:items/pocketComputerOnAdvanced" "layer0": "computercraft:items/pocketComputerOnAdvanced",
"layer1": "computercraft:items/pocketComputerLight"
} }
} }

View File

@ -1,7 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "computercraft:items/pocketComputerOnAdvanced",
"layer1": "computercraft:items/pocketComputerModemLight"
}
}

View File

@ -1,6 +1,7 @@
{ {
"parent": "item/generated", "parent": "item/generated",
"textures": { "textures": {
"layer0": "computercraft:items/pocketComputerBlink" "layer0": "computercraft:items/pocketComputerBlink",
"layer1": "computercraft:items/pocketComputerLight"
} }
} }

View File

@ -1,7 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "computercraft:items/pocketComputerBlink",
"layer1": "computercraft:items/pocketComputerModemLight"
}
}

View File

@ -1,6 +1,7 @@
{ {
"parent": "item/generated", "parent": "item/generated",
"textures": { "textures": {
"layer0": "computercraft:items/pocketComputerOn" "layer0": "computercraft:items/pocketComputerOn",
"layer1": "computercraft:items/pocketComputerLight"
} }
} }

View File

@ -1,7 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "computercraft:items/pocketComputerOn",
"layer1": "computercraft:items/pocketComputerModemLight"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 B