v4.2.2 Beta #1
*Fixed redstone advanced machine container bug. *Removed unused methods from IEnergizedItem. *Added 'IPeripheral' CC support to IElectricMachine. *Removed tile entity-based texture system. *Fixed advanced electric machine active update. *Moved to TextureFX for machine animations. *Removed old textures from terrain.png and added new pictures for all animations. *Added CC support for machines and power units. *Removed texture preloads for non-existant textures. *Bumped version to 4.2.2!
BIN
bin/minecraft/obsidian/CombinerFront.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
bin/minecraft/obsidian/CompressorFront.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
bin/minecraft/obsidian/ElementizerBack.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
bin/minecraft/obsidian/ElementizerFront.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
bin/minecraft/obsidian/ElementizerSide.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 9.4 KiB |
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.");
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|