Added insulation ability and color

This commit is contained in:
Calclavia 2013-12-23 00:55:08 +08:00
parent 34881cb453
commit bf0eee7058
5 changed files with 136 additions and 64 deletions

View file

@ -9,6 +9,8 @@ import net.minecraft.world.World;
import resonantinduction.multimeter.ContainerMultimeter;
import resonantinduction.multimeter.TileEntityMultimeter;
import universalelectricity.api.vector.Vector3;
import codechicken.lib.colour.Colour;
import codechicken.lib.colour.ColourRGBA;
import cpw.mods.fml.common.network.IGuiHandler;
/**
@ -31,10 +33,12 @@ public class CommonProxy implements IGuiHandler
{
return new ContainerMultimeter(player.inventory, ((TileEntityMultimeter) tileEntity));
}
/*else if (tileEntity instanceof TileEntityBattery)
{
return new ContainerBattery(player.inventory, ((TileEntityBattery) tileEntity));
}*/
/*
* else if (tileEntity instanceof TileEntityBattery)
* {
* return new ContainerBattery(player.inventory, ((TileEntityBattery) tileEntity));
* }
*/
return null;
}
@ -60,14 +64,14 @@ public class CommonProxy implements IGuiHandler
this.renderElectricShock(world, start, target, r, g, b, true);
}
public void renderElectricShock(World world, Vector3 start, Vector3 target, Vector3 color)
public void renderElectricShock(World world, Vector3 start, Vector3 target, ColourRGBA color)
{
this.renderElectricShock(world, start, target, (float) color.x, (float) color.y, (float) color.z);
this.renderElectricShock(world, start, target, color.r / 255, color.g / 255, color.b / 255);
}
public void renderElectricShock(World world, Vector3 start, Vector3 target, Vector3 color, boolean split)
public void renderElectricShock(World world, Vector3 start, Vector3 target, ColourRGBA color, boolean split)
{
this.renderElectricShock(world, start, target, (float) color.x, (float) color.y, (float) color.z, split);
this.renderElectricShock(world, start, target, color.r / 255, color.g / 255, color.b / 255, split);
}
public void renderElectricShock(World world, Vector3 start, Vector3 target)

View file

@ -20,6 +20,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe;
import org.modstats.ModstatInfo;
import org.modstats.Modstats;
import codechicken.lib.colour.ColourRGBA;
import resonantinduction.contractor.BlockEMContractor;
import resonantinduction.contractor.ItemBlockContractor;
import resonantinduction.contractor.TileEntityEMContractor;
@ -152,8 +153,7 @@ public class ResonantInduction
* Packets
*/
public static final PacketTile PACKET_TILE = new PacketTile(CHANNEL);
public static final Vector3[] DYE_COLORS = new Vector3[] { new Vector3(), new Vector3(1, 0, 0), new Vector3(0, 0.608, 0.232), new Vector3(0.588, 0.294, 0), new Vector3(0, 0, 1), new Vector3(0.5, 0, 05), new Vector3(0, 1, 1), new Vector3(0.8, 0.8, 0.8), new Vector3(0.3, 0.3, 0.3), new Vector3(1, 0.412, 0.706), new Vector3(0.616, 1, 0), new Vector3(1, 1, 0), new Vector3(0.46f, 0.932, 1), new Vector3(0.5, 0.2, 0.5), new Vector3(0.7, 0.5, 0.1), new Vector3(1, 1, 1) };
public static final ColourRGBA[] DYE_COLORS = new ColourRGBA[] { new ColourRGBA(255, 255, 255, 255), new ColourRGBA(1, 0, 0, 1d), new ColourRGBA(0, 0.608, 0.232, 1d), new ColourRGBA(0.588, 0.294, 0, 1d), new ColourRGBA(0, 0, 1, 1d), new ColourRGBA(0.5, 0, 05, 1d), new ColourRGBA(0, 1, 1, 1d), new ColourRGBA(0.8, 0.8, 0.8, 1d), new ColourRGBA(0.3, 0.3, 0.3, 1d), new ColourRGBA(1, 0.412, 0.706, 1d), new ColourRGBA(0.616, 1, 0, 1d), new ColourRGBA(1, 1, 0, 1d), new ColourRGBA(0.46f, 0.932, 1, 1d), new ColourRGBA(0.5, 0.2, 0.5, 1d), new ColourRGBA(0.7, 0.5, 0.1, 1d), new ColourRGBA(1, 1, 1, 1d) };
@EventHandler
public void preInit(FMLPreInitializationEvent evt)

View file

@ -214,7 +214,7 @@ public class TileEntityTesla extends TileEntityElectrical implements ITesla, IPa
}
double distance = topTeslaVector.distance(targetVector);
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).translate(new Vector3(0.5)), targetVector.translate(new Vector3(0.5)), (float) ResonantInduction.DYE_COLORS[this.dyeID].x, (float) ResonantInduction.DYE_COLORS[this.dyeID].y, (float) ResonantInduction.DYE_COLORS[this.dyeID].z);
ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).translate(new Vector3(0.5)), targetVector.translate(new Vector3(0.5)), (float) ResonantInduction.DYE_COLORS[this.dyeID].r / 255, (float) ResonantInduction.DYE_COLORS[this.dyeID].g / 255, (float) ResonantInduction.DYE_COLORS[this.dyeID].b / 255);
this.transfer(tesla, Math.min(transferEnergy, TRANSFER_CAP));

View file

@ -24,7 +24,8 @@ import codechicken.lib.data.MCDataOutput;
public abstract class PartAdvancedWire extends PartConductor
{
public static final int DEFAULT_COLOR = 16;
public int dyeID = DEFAULT_COLOR;
public int color = DEFAULT_COLOR;
public EnumWireMaterial material = EnumWireMaterial.COPPER;
public boolean isInsulated = false;
@ -39,8 +40,9 @@ public abstract class PartAdvancedWire extends PartConductor
{
PartFlatWire wire = (PartFlatWire) obj;
if (wire.getMaterial() == getMaterial())
if (this.getMaterial() == wire.getMaterial())
{
System.out.println("COMMON");
if (this.isInsulated() && wire.isInsulated())
{
return this.getColor() == wire.getColor();
@ -97,14 +99,26 @@ public abstract class PartAdvancedWire extends PartConductor
public void setInsulated(boolean insulated)
{
this.isInsulated = insulated;
this.dyeID = DEFAULT_COLOR;
this.color = DEFAULT_COLOR;
if (!this.world().isRemote)
{
tile().notifyPartChange(this);
this.sendInsulationUpdate();
}
}
public void setInsulated(int dyeColour)
{
isInsulated = true;
dyeID = dyeColour;
tile().notifyPartChange(this);
this.isInsulated = true;
this.color = dyeColour;
if (!this.world().isRemote)
{
tile().notifyPartChange(this);
this.sendInsulationUpdate();
this.sendColorUpdate();
}
}
public boolean isInsulated()
@ -112,51 +126,78 @@ public abstract class PartAdvancedWire extends PartConductor
return this.isInsulated;
}
public void sendInsulationUpdate()
{
tile().getWriteStream(this).writeByte(1).writeBoolean(this.isInsulated);
}
/**
* Wire Coloring Methods
*/
public int getColor()
{
return this.isInsulated ? this.dyeID : -1;
return this.isInsulated ? this.color : -1;
}
public void setColor(int dye)
{
this.dyeID = dye;
if (this.isInsulated)
{
this.color = dye;
if (!this.world().isRemote)
{
tile().notifyPartChange(this);
this.sendColorUpdate();
}
}
}
public void sendColorUpdate()
{
tile().getWriteStream(this).writeByte(2).writeInt(this.color);
}
/**
* Changes the wire's color.
*/
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack itemStack)
{
if (item != null)
if (itemStack != null)
{
if (item.itemID == Item.dyePowder.itemID && isInsulated())
if (itemStack.itemID == Item.dyePowder.itemID && this.isInsulated())
{
setColor(item.getItemDamage());
this.setColor(itemStack.getItemDamage());
return true;
}
else if (item.itemID == Block.cloth.blockID)
else if (itemStack.itemID == Block.cloth.blockID)
{
if (isInsulated() && !world().isRemote)
if (this.isInsulated())
{
tile().dropItems(Collections.singletonList(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(dyeID))));
}
if (!world().isRemote)
{
tile().dropItems(Collections.singletonList(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(color))));
}
setInsulated(BlockColored.getDyeFromBlock(item.getItemDamage()));
player.inventory.decrStackSize(player.inventory.currentItem, 1);
return true;
this.setInsulated(false);
return true;
}
else
{
this.setInsulated(BlockColored.getDyeFromBlock(itemStack.getItemDamage()));
player.inventory.decrStackSize(player.inventory.currentItem, 1);
return true;
}
}
else if ((item.itemID == Item.shears.itemID || item.getItem() instanceof ItemShears) && isInsulated())
else if ((itemStack.itemID == Item.shears.itemID || itemStack.getItem() instanceof ItemShears) && isInsulated())
{
if (!world().isRemote)
{
tile().dropItems(Collections.singletonList(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(dyeID))));
tile().dropItems(Collections.singletonList(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(color))));
}
setInsulated(false);
this.setInsulated(false);
return true;
}
}
@ -177,7 +218,7 @@ public abstract class PartAdvancedWire extends PartConductor
if (this.isInsulated)
{
drops.add(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(dyeID)));
drops.add(new ItemStack(Block.cloth, 1, BlockColored.getBlockFromDye(color)));
}
return drops;
@ -193,7 +234,7 @@ public abstract class PartAdvancedWire extends PartConductor
public void readDesc(MCDataInput packet)
{
this.setMaterial(packet.readByte());
this.dyeID = packet.readByte();
this.color = packet.readByte();
this.isInsulated = packet.readBoolean();
}
@ -201,17 +242,32 @@ public abstract class PartAdvancedWire extends PartConductor
public void writeDesc(MCDataOutput packet)
{
packet.writeByte((byte) this.getMaterialID());
packet.writeByte((byte) this.dyeID);
packet.writeByte((byte) this.color);
packet.writeBoolean(this.isInsulated);
}
public void read(MCDataInput packet, int packetID)
{
switch (packetID)
{
case 1:
this.isInsulated = packet.readBoolean();
this.tile().markRender();
break;
case 2:
this.color = packet.readInt();
this.tile().markRender();
break;
}
}
@Override
public void save(NBTTagCompound nbt)
{
super.save(nbt);
nbt.setInteger("typeID", getMaterialID());
nbt.setBoolean("isInsulated", isInsulated);
nbt.setInteger("dyeID", dyeID);
nbt.setInteger("dyeID", color);
}
@Override
@ -220,7 +276,7 @@ public abstract class PartAdvancedWire extends PartConductor
super.load(nbt);
setMaterial(nbt.getInteger("typeID"));
this.isInsulated = nbt.getBoolean("isInsulated");
this.dyeID = nbt.getInteger("dyeID");
this.color = nbt.getInteger("dyeID");
}
}

View file

@ -4,6 +4,7 @@ import java.util.Arrays;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemDye;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -13,10 +14,12 @@ import net.minecraftforge.common.ForgeDirection;
import org.lwjgl.opengl.GL11;
import resonantinduction.ResonantInduction;
import resonantinduction.Utility;
import resonantinduction.wire.EnumWireMaterial;
import resonantinduction.wire.render.RenderFlatWire;
import codechicken.lib.colour.Colour;
import codechicken.lib.colour.ColourRGBA;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput;
import codechicken.lib.lighting.LazyLightMatrix;
@ -101,7 +104,7 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
public void preparePlacement(int side, int meta)
{
this.side = (byte) (side ^ 1);
this.material = EnumWireMaterial.values()[meta];
this.setMaterial(meta);
}
/**
@ -145,6 +148,7 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
read(packet, packet.readUByte());
}
@Override
public void read(MCDataInput packet, int packetID)
{
if (packetID == 0)
@ -152,6 +156,10 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
this.connMap = packet.readInt();
tile().markRender();
}
else
{
super.read(packet, packetID);
}
}
public void sendConnUpdate()
@ -237,7 +245,6 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
{
if (!world().isRemote)
{
boolean changed = updateInternalConnections();
if (updateOpenConnections())
@ -294,29 +301,13 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
*/
for (byte r = 0; r < 4; r++)
{
if (!maskOpen(r))
{
continue;
}
int absDir = Rotation.rotateSide(this.side, r);
this.setExternalConnection(absDir);
}
// Connect to the face of the block the wire is placed on.
this.setExternalConnection(this.side);
for (byte r = 0; r < 4; r++)
{
int absDir = Rotation.rotateSide(this.side, r);
// Check straight ahead.
if (tile().partMap(PartMap.edgeBetween(absDir, this.side)) == null)
{
TMultiPart tp = tile().partMap(absDir);
if (this.canConnectTo(tp))
{
this.connections[absDir] = tp;
this.getNetwork().merge(((PartFlatWire) tp).getNetwork());
continue;
}
}
// Check Corner
BlockCoord cornerPos = new BlockCoord(tile());
@ -338,11 +329,32 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
this.getNetwork().merge(((PartFlatWire) tp).getNetwork());
}
}
}
for (byte r = 0; r < 4; r++)
{
int absDir = Rotation.rotateSide(this.side, r);
// Check straight ahead.
if (tile().partMap(PartMap.edgeBetween(absDir, this.side)) == null)
{
TMultiPart tp = tile().partMap(absDir);
if (this.canConnectTo(tp))
{
this.connections[absDir] = tp;
this.getNetwork().merge(((PartFlatWire) tp).getNetwork());
continue;
}
}
// Cannot find any wire connections on this side. Set null.
this.connections[absDir] = null;
}
// Connect to the face of the block the wire is placed on.
this.setExternalConnection(this.side);
this.getNetwork().reconstruct();
}
@ -541,14 +553,14 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
{
TMultiPart tp = t.partMap(absDir ^ 1);
if (tp instanceof PartFlatWire)
if (canConnectTo(tp))
{
boolean b = ((PartFlatWire) tp).connectCorner(this, Rotation.rotationTo(absDir ^ 1, side ^ 1));
if (b)
{
// let them connect to us
if (tp instanceof PartFlatWire && !renderThisCorner((PartFlatWire) tp))
if (!renderThisCorner((PartFlatWire) tp))
{
return 1;
}
@ -785,7 +797,7 @@ public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormal
public Colour getColour()
{
return this.getMaterial().color;
return this.isInsulated ? ResonantInduction.DYE_COLORS[this.color] : this.getMaterial().color;
}
public boolean useStaticRenderer()