diff --git a/bin/minecraft/obsidian/CombinerFront.png b/bin/minecraft/obsidian/CombinerFront.png new file mode 100644 index 000000000..b55eb106b Binary files /dev/null and b/bin/minecraft/obsidian/CombinerFront.png differ diff --git a/bin/minecraft/obsidian/CompressorFront.png b/bin/minecraft/obsidian/CompressorFront.png new file mode 100644 index 000000000..45dc2ebb3 Binary files /dev/null and b/bin/minecraft/obsidian/CompressorFront.png differ diff --git a/bin/minecraft/obsidian/ElementizerBack.png b/bin/minecraft/obsidian/ElementizerBack.png new file mode 100644 index 000000000..1561788e0 Binary files /dev/null and b/bin/minecraft/obsidian/ElementizerBack.png differ diff --git a/bin/minecraft/obsidian/ElementizerFront.png b/bin/minecraft/obsidian/ElementizerFront.png new file mode 100644 index 000000000..0334baa45 Binary files /dev/null and b/bin/minecraft/obsidian/ElementizerFront.png differ diff --git a/bin/minecraft/obsidian/ElementizerSide.png b/bin/minecraft/obsidian/ElementizerSide.png new file mode 100644 index 000000000..2eb72116d Binary files /dev/null and b/bin/minecraft/obsidian/ElementizerSide.png differ diff --git a/bin/minecraft/obsidian/terrain.png b/bin/minecraft/obsidian/terrain.png index 6da867b24..136841d07 100755 Binary files a/bin/minecraft/obsidian/terrain.png and b/bin/minecraft/obsidian/terrain.png differ diff --git a/src/common/net/uberkat/obsidian/api/IElectricMachine.java b/src/common/net/uberkat/obsidian/api/IElectricMachine.java index e20480321..8df3eec27 100644 --- a/src/common/net/uberkat/obsidian/api/IElectricMachine.java +++ b/src/common/net/uberkat/obsidian/api/IElectricMachine.java @@ -2,6 +2,8 @@ package net.uberkat.obsidian.api; import java.util.List; +import dan200.computer.api.IPeripheral; + import ic2.api.IWrenchable; import net.minecraft.src.*; import net.minecraftforge.common.ISidedInventory; @@ -11,7 +13,7 @@ import net.minecraftforge.common.ISidedInventory; * @author AidanBrady * */ -public interface IElectricMachine extends IInventory, ISidedInventory, IWrenchable, INetworkedMachine +public interface IElectricMachine extends IInventory, ISidedInventory, IWrenchable, INetworkedMachine, IPeripheral { /** * Update call for machines. Use instead of updateEntity() - it's called every tick. diff --git a/src/common/net/uberkat/obsidian/api/IEnergizedItem.java b/src/common/net/uberkat/obsidian/api/IEnergizedItem.java index 092ed6a71..3e1492ba9 100644 --- a/src/common/net/uberkat/obsidian/api/IEnergizedItem.java +++ b/src/common/net/uberkat/obsidian/api/IEnergizedItem.java @@ -50,10 +50,4 @@ public interface IEnergizedItem * @return leftover energy */ public int discharge(ItemStack itemstack, int amount); - - /** - * Whether or not this item's energy can be used. - * @return if energy can be used - */ - public boolean canCharge(); } diff --git a/src/common/net/uberkat/obsidian/common/BlockMachine.java b/src/common/net/uberkat/obsidian/common/BlockMachine.java index 86683f872..443833d42 100644 --- a/src/common/net/uberkat/obsidian/common/BlockMachine.java +++ b/src/common/net/uberkat/obsidian/common/BlockMachine.java @@ -3,6 +3,7 @@ package net.uberkat.obsidian.common; import java.util.List; import java.util.Random; +import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; import net.minecraft.src.*; @@ -166,7 +167,8 @@ public class BlockMachine extends BlockContainer { if(side == tileEntity.facing) { - return isActive(world, x, y, z) ? tileEntity.textureIndex + 32 : 14; + return isActive(world, x, y, z) ? ObsidianIngots.ANIMATED_TEXTURE_INDEX : 14; + } else { return 2; @@ -176,7 +178,7 @@ public class BlockMachine extends BlockContainer { if(side == tileEntity.facing) { - return isActive(world, x, y, z) ? tileEntity.textureIndex + 48 : 15; + return isActive(world, x, y, z) ? ObsidianIngots.ANIMATED_TEXTURE_INDEX+1 : 15; } else { return 2; @@ -201,14 +203,14 @@ public class BlockMachine extends BlockContainer else { if(side == tileEntity.facing) { - return isActive(world, x, y, z) ? tileEntity.textureIndex + 64 : 16; + return isActive(world, x, y, z) ? ObsidianIngots.ANIMATED_TEXTURE_INDEX+2 : 16; } else if(side == ForgeDirection.getOrientation(tileEntity.facing).getOpposite().ordinal()) { - return isActive(world, x, y, z) ? tileEntity.textureIndex + 80 : 17; + return isActive(world, x, y, z) ? ObsidianIngots.ANIMATED_TEXTURE_INDEX+3 : 17; } else { - return isActive(world, x, y, z) ? tileEntity.textureIndex + 96 : 19; + return isActive(world, x, y, z) ? ObsidianIngots.ANIMATED_TEXTURE_INDEX+4 : 19; } } } diff --git a/src/common/net/uberkat/obsidian/common/ContainerAdvancedElectricMachine.java b/src/common/net/uberkat/obsidian/common/ContainerAdvancedElectricMachine.java index 1a5a36fb8..218189d9b 100644 --- a/src/common/net/uberkat/obsidian/common/ContainerAdvancedElectricMachine.java +++ b/src/common/net/uberkat/obsidian/common/ContainerAdvancedElectricMachine.java @@ -75,7 +75,7 @@ public class ContainerAdvancedElectricMachine extends Container } else if(slotStack.itemID == Item.redstone.shiftedIndex) { - if(slotID != 3) + if(slotID != 3 && slotID != 0) { if(!mergeItemStack(slotStack, 3, 4, false)) { @@ -94,7 +94,7 @@ public class ContainerAdvancedElectricMachine extends Container } else if(slotID == 3) { - if(!mergeItemStack(slotStack, 3, 4, false)) + if(!mergeItemStack(slotStack, 0, 1, false)) { return null; } diff --git a/src/common/net/uberkat/obsidian/common/ObsidianHooks.java b/src/common/net/uberkat/obsidian/common/ObsidianHooks.java index 57dc4dc4f..aa0cc5ee3 100644 --- a/src/common/net/uberkat/obsidian/common/ObsidianHooks.java +++ b/src/common/net/uberkat/obsidian/common/ObsidianHooks.java @@ -35,7 +35,7 @@ public class ObsidianHooks IC2GoldDust = getIC2Item("goldDust"); Ic2Recipes.addMaceratorRecipe(new ItemStack(ObsidianIngots.OreBlock, 1, 0), new ItemStack(ObsidianIngots.PlatinumDust, 2)); - Ic2Recipes.addMatterAmplifier(ObsidianIngots.EnrichedAlloy, 80000); + Ic2Recipes.addMatterAmplifier(ObsidianIngots.EnrichedAlloy, 100000); System.out.println("[ObsidianIngots] Hooked into IC2 successfully."); } diff --git a/src/common/net/uberkat/obsidian/common/ObsidianIngots.java b/src/common/net/uberkat/obsidian/common/ObsidianIngots.java index 315ba2b0f..13afaa920 100644 --- a/src/common/net/uberkat/obsidian/common/ObsidianIngots.java +++ b/src/common/net/uberkat/obsidian/common/ObsidianIngots.java @@ -38,7 +38,7 @@ import cpw.mods.fml.common.registry.TickRegistry; * @author AidanBrady * */ -@Mod(modid = "ObsidianIngots", name = "Obsidian Ingots", version = "4.2.1") +@Mod(modid = "ObsidianIngots", name = "Obsidian Ingots", version = "4.2.2") @NetworkMod(channels = { "ObsidianIngots" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class) public class ObsidianIngots { @@ -214,6 +214,8 @@ public class ObsidianIngots /** Total ticks passed since thePlayer joined theWorld */ public static int ticksPassed = 0; + public static int ANIMATED_TEXTURE_INDEX = 240; + /** * Adds all in-game crafting and smelting recipes. */ diff --git a/src/common/net/uberkat/obsidian/common/TileEntityAdvancedElectricMachine.java b/src/common/net/uberkat/obsidian/common/TileEntityAdvancedElectricMachine.java index 8c9e1a103..723f61ac0 100644 --- a/src/common/net/uberkat/obsidian/common/TileEntityAdvancedElectricMachine.java +++ b/src/common/net/uberkat/obsidian/common/TileEntityAdvancedElectricMachine.java @@ -7,6 +7,8 @@ import universalelectricity.implement.IItemElectric; import com.google.common.io.ByteArrayDataInput; +import dan200.computer.api.IComputerAccess; + import ic2.api.ElectricItem; import ic2.api.EnergyNet; import ic2.api.IElectricItem; @@ -138,7 +140,7 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM } } - if(canOperate() && inventory[1] != null && secondaryEnergyStored == 0) + if(inventory[1] != null && secondaryEnergyStored == 0) { int fuelTicks = getFuelTicks(inventory[1]); if(fuelTicks > 0) @@ -264,6 +266,11 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM { return false; } + + if(secondaryEnergyStored < SECONDARY_ENERGY_PER_TICK) + { + return false; + } ItemStack itemstack = RecipeHandler.getOutput(inventory[0], false, getRecipes()); @@ -483,4 +490,45 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM { return operatingTicks*i / TICKS_REQUIRED; } + + public String getType() + { + return "Advanced Electric Machine"; + } + + public String[] getMethodNames() + { + return new String[] {"getStored", "getSecondaryStored", "getProgress", "isActive", "facing", "canOperate"}; + } + + public Object[] callMethod(IComputerAccess computer, int method, Object[] arguments) throws Exception + { + switch(method) + { + case 0: + return new Object[] {energyStored}; + case 1: + return new Object[] {secondaryEnergyStored}; + case 2: + return new Object[] {operatingTicks}; + case 3: + return new Object[] {isActive}; + case 4: + return new Object[] {facing}; + case 5: + return new Object[] {canOperate()}; + default: + System.err.println("[ObsidianIngots] Attempted to call unknown method with computer ID " + computer.getID()); + return null; + } + } + + public boolean canAttachToSide(int side) + { + return true; + } + + public void attach(IComputerAccess computer, String computerSide) {} + + public void detach(IComputerAccess computer) {} } diff --git a/src/common/net/uberkat/obsidian/common/TileEntityBasicMachine.java b/src/common/net/uberkat/obsidian/common/TileEntityBasicMachine.java index bb7ed2262..31c7ac17f 100644 --- a/src/common/net/uberkat/obsidian/common/TileEntityBasicMachine.java +++ b/src/common/net/uberkat/obsidian/common/TileEntityBasicMachine.java @@ -17,12 +17,6 @@ public abstract class TileEntityBasicMachine extends TileEntity implements IElec /** The direction this block is facing. */ public int facing; - /** A timer used to update the block's texture. */ - public int textureTick = 0; - - /** An integer that cycles between 0-15, used to update the block's texture. */ - public int textureIndex = 0; - /** A timer used to send packets to clients. */ public int packetTick = 0; @@ -57,11 +51,6 @@ public abstract class TileEntityBasicMachine extends TileEntity implements IElec onUpdate(); - if(worldObj.isRemote) - { - updateTexture(); - } - if(!worldObj.isRemote) { if(packetTick == 5) @@ -76,17 +65,6 @@ public abstract class TileEntityBasicMachine extends TileEntity implements IElec packetTick++; } } - - @SideOnly(Side.CLIENT) - public void updateTexture() - { - if(textureTick % 5 == 0) - { - textureIndex = (++textureIndex)%15; - worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); - } - textureTick++; - } public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side) { diff --git a/src/common/net/uberkat/obsidian/common/TileEntityElectricMachine.java b/src/common/net/uberkat/obsidian/common/TileEntityElectricMachine.java index 9ca460469..6311c9953 100644 --- a/src/common/net/uberkat/obsidian/common/TileEntityElectricMachine.java +++ b/src/common/net/uberkat/obsidian/common/TileEntityElectricMachine.java @@ -7,6 +7,8 @@ import universalelectricity.implement.IItemElectric; import com.google.common.io.ByteArrayDataInput; +import dan200.computer.api.IComputerAccess; + import ic2.api.ElectricItem; import ic2.api.EnergyNet; import ic2.api.IElectricItem; @@ -417,4 +419,43 @@ public abstract class TileEntityElectricMachine extends TileEntityBasicMachine { return operatingTicks*i / TICKS_REQUIRED; } + + public String getType() + { + return "Electric Machine"; + } + + public String[] getMethodNames() + { + return new String[] {"getStored", "getProgress", "isActive", "facing", "canOperate"}; + } + + public Object[] callMethod(IComputerAccess computer, int method, Object[] arguments) throws Exception + { + switch(method) + { + case 0: + return new Object[] {energyStored}; + case 1: + return new Object[] {operatingTicks}; + case 2: + return new Object[] {isActive}; + case 3: + return new Object[] {facing}; + case 4: + return new Object[] {canOperate()}; + default: + System.err.println("[ObsidianIngots] Attempted to call unknown method with computer ID " + computer.getID()); + return null; + } + } + + public boolean canAttachToSide(int side) + { + return true; + } + + public void attach(IComputerAccess computer, String computerSide) {} + + public void detach(IComputerAccess computer) {} } diff --git a/src/common/net/uberkat/obsidian/common/TileEntityPowerUnit.java b/src/common/net/uberkat/obsidian/common/TileEntityPowerUnit.java index c4a1fe80d..780466540 100644 --- a/src/common/net/uberkat/obsidian/common/TileEntityPowerUnit.java +++ b/src/common/net/uberkat/obsidian/common/TileEntityPowerUnit.java @@ -26,6 +26,9 @@ import buildcraft.api.core.Orientations; import com.google.common.io.ByteArrayDataInput; +import dan200.computer.api.IComputerAccess; +import dan200.computer.api.IPeripheral; + import ic2.api.Direction; import ic2.api.ElectricItem; import ic2.api.EnergyNet; @@ -40,7 +43,7 @@ import net.minecraftforge.common.ISidedInventory; import net.uberkat.obsidian.api.IEnergizedItem; import net.uberkat.obsidian.api.INetworkedMachine; -public class TileEntityPowerUnit extends TileEntityDisableable implements IInventory, ISidedInventory, INetworkedMachine, IWrenchable, IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IElectricityStorage, IElectricityReceiver +public class TileEntityPowerUnit extends TileEntityDisableable implements IInventory, ISidedInventory, INetworkedMachine, IWrenchable, IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IElectricityStorage, IElectricityReceiver, IPeripheral { public ItemStack[] inventory = new ItemStack[2]; @@ -90,32 +93,6 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven } } - public Packet getDescriptionPacket() - { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - DataOutputStream output = new DataOutputStream(bytes); - - try { - output.writeInt(EnumPacketType.TILE_ENTITY.id); - output.writeInt(xCoord); - output.writeInt(yCoord); - output.writeInt(zCoord); - output.writeInt(facing); - output.writeInt(energyStored); - } catch (IOException e) - { - System.err.println("[ObsidianIngots] Error while writing tile entity packet."); - e.printStackTrace(); - } - - Packet250CustomPayload packet = new Packet250CustomPayload(); - packet.channel = "ObsidianIngots"; - packet.data = bytes.toByteArray(); - packet.length = packet.data.length; - - return packet; - } - public void updateEntity() { if(!worldObj.isRemote) @@ -230,7 +207,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven if(connector != null && connector instanceof TileEntityConductor) { double wattsNeeded = ElectricityManager.instance.getElectricityRequired(((IConductor)connector).getConnectionID()); - double transferAmps = Math.max(Math.min(Math.min(ElectricInfo.getAmps(wattsNeeded, getVoltage()), ElectricInfo.getAmpsFromWattHours(energyStored*UniversalElectricity.IC2_RATIO, getVoltage()) ), 15), 0); + double transferAmps = Math.max(Math.min(Math.min(ElectricInfo.getAmps(wattsNeeded, getVoltage()), ElectricInfo.getAmpsFromWattHours(energyStored*UniversalElectricity.IC2_RATIO, getVoltage())), 15), 0); ElectricityManager.instance.produceElectricity(this, (IConductor)connector, transferAmps, getVoltage()); setEnergy(energyStored - (int)(ElectricInfo.getWattHours(transferAmps, getVoltage())*UniversalElectricity.Wh_IC2_RATIO)); } @@ -560,4 +537,37 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven { return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this ? false : var1.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D; } + + public String getType() + { + return getInvName(); + } + + public String[] getMethodNames() + { + return new String[] {"getStored", "getOutput"}; + } + + public Object[] callMethod(IComputerAccess computer, int method, Object[] arguments) throws Exception + { + switch(method) + { + case 0: + return new Object[] {energyStored}; + case 1: + return new Object[] {output}; + default: + System.err.println("[ObsidianIngots] Attempted to call unknown method with computer ID " + computer.getID()); + return null; + } + } + + public boolean canAttachToSide(int side) + { + return true; + } + + public void attach(IComputerAccess computer, String computerSide) {} + + public void detach(IComputerAccess computer) {} } diff --git a/src/minecraft/net/uberkat/obsidian/client/ClientProxy.java b/src/minecraft/net/uberkat/obsidian/client/ClientProxy.java index da5b95b9d..a3c0436fa 100644 --- a/src/minecraft/net/uberkat/obsidian/client/ClientProxy.java +++ b/src/minecraft/net/uberkat/obsidian/client/ClientProxy.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.Properties; import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.TextureFXManager; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.Side; @@ -49,12 +50,26 @@ public class ClientProxy extends CommonProxy public void registerRenderInformation() { System.out.println("[ObsidianIngots] Beginning render initiative..."); + //Preload block/item textures MinecraftForgeClient.preloadTexture("/obsidian/items.png"); MinecraftForgeClient.preloadTexture("/obsidian/terrain.png"); - MinecraftForgeClient.preloadTexture("/obsidian/Compressor.png"); - MinecraftForgeClient.preloadTexture("/obsidian/Combiner.png"); - MinecraftForgeClient.preloadTexture("/obsidian/Elementizer.png"); + MinecraftForgeClient.preloadTexture("/obsidian/CompressorFront.png"); + MinecraftForgeClient.preloadTexture("/obsidian/CombinerFront.png"); + MinecraftForgeClient.preloadTexture("/obsidian/ElementizerFront.png"); + MinecraftForgeClient.preloadTexture("/obsidian/ElementizerBack.png"); + MinecraftForgeClient.preloadTexture("/obsidian/ElementizerSide.png"); + + //Register animated TextureFX for machines + try { + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/obsidian/CompressorFront.png", ObsidianIngots.ANIMATED_TEXTURE_INDEX)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/obsidian/CombinerFront.png", ObsidianIngots.ANIMATED_TEXTURE_INDEX+1)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/obsidian/ElementizerFront.png", ObsidianIngots.ANIMATED_TEXTURE_INDEX+2)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/obsidian/ElementizerBack.png", ObsidianIngots.ANIMATED_TEXTURE_INDEX+3)); + TextureFXManager.instance().addAnimation(new TextureAnimatedFX("/obsidian/ElementizerSide.png", ObsidianIngots.ANIMATED_TEXTURE_INDEX+4)); + } catch (IOException e) { + System.err.println("[ObsidianIngots] Error registering animation with FML: " + e.getMessage()); + } //Register entity rendering handlers RenderingRegistry.registerEntityRenderingHandler(EntityObsidianTNT.class, new RenderObsidianTNT()); diff --git a/src/minecraft/net/uberkat/obsidian/client/TextureAnimatedFX.java b/src/minecraft/net/uberkat/obsidian/client/TextureAnimatedFX.java new file mode 100644 index 000000000..c893e9699 --- /dev/null +++ b/src/minecraft/net/uberkat/obsidian/client/TextureAnimatedFX.java @@ -0,0 +1,33 @@ +package net.uberkat.obsidian.client; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; + +import javax.imageio.ImageIO; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.TextureFXManager; +import cpw.mods.fml.client.registry.RenderingRegistry; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.ModLoader; +import net.minecraft.src.ModTextureAnimation; +import net.minecraft.src.RenderEngine; + +public class TextureAnimatedFX extends ModTextureAnimation +{ + public TextureAnimatedFX(String texture, int index) throws IOException + { + super(index, 1, texture, TextureFXManager.instance().loadImageFromTexturePack(FMLClientHandler.instance().getClient().renderEngine, texture), 5); + } + + public void bindImage(RenderEngine renderengine) + { + //Binds texture with GL11 to use specific icon index. + GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, renderengine.getTexture("/obsidian/terrain.png")); + } +}