Some work on hotplate and firebox

This commit is contained in:
Robert S 2014-08-09 00:41:52 -04:00
parent 9a4acf902f
commit 7c0cea635d
4 changed files with 139 additions and 246 deletions

View file

@ -16,14 +16,10 @@ import resonantinduction.archaic.crate.ItemBlockCrate
import resonantinduction.archaic.crate.TileCrate
import resonantinduction.archaic.engineering.ItemHammer
import resonantinduction.archaic.engineering.TileEngineeringTable
import resonantinduction.archaic.filter.BlockImprinter
import resonantinduction.archaic.firebox.BlockHotPlate
import resonantinduction.archaic.firebox.TileFirebox
import resonantinduction.archaic.firebox.TileHotPlate
import resonantinduction.archaic.fluid.grate.TileGrate
import resonantinduction.archaic.fluid.tank.TileTank
import resonantinduction.archaic.process.BlockCastingMold
import resonantinduction.archaic.process.BlockMillstone
import resonantinduction.archaic.process.TileCastingMold
import resonantinduction.archaic.process.TileMillstone
import resonantinduction.core.Reference
@ -69,28 +65,28 @@ class Archaic {
def preInit( evt : FMLPreInitializationEvent ) {
NetworkRegistry.instance().registerGuiHandler( this, proxy )
Settings.config.load()
ArchaicBlocks.blockEngineeringTable = contentRegistry.newBlock(TileEngineeringTable.class)
ArchaicBlocks.blockCrate = contentRegistry.createBlock( classOf[ BlockCrate ], classOf[ ItemBlockCrate ], classOf[ TileCrate ] )
ArchaicBlocks.blockImprinter = contentRegistry.createTile( classOf[ BlockImprinter ], classOf[ TileImprinter ] )
ArchaicBlocks.blockEngineeringTable = contentRegistry.newBlock(classOf[ TileEngineeringTable])
ArchaicBlocks.blockCrate = contentRegistry.newBlock( classOf[ BlockCrate ], classOf[ ItemBlockCrate ], classOf[ TileCrate ] )
ArchaicBlocks.blockImprinter = contentRegistry.newBlock(classOf[ TileImprinter ] )
ArchaicBlocks.blockTurntable = contentRegistry.newBlock( classOf[ TileTurntable ] )
ArchaicBlocks.blockFirebox = contentRegistry.createBlock( classOf[ BlockFirebox ], null, classOf[ TileFirebox ] )
ArchaicBlocks.blockHotPlate = contentRegistry.createTile( classOf[ BlockHotPlate ], classOf[ TileHotPlate ] )
ArchaicBlocks.blockMillstone = contentRegistry.createTile( classOf[ BlockMillstone ], classOf[ TileMillstone ] )
ArchaicBlocks.blockCast = contentRegistry.createTile( classOf[ BlockCastingMold ], classOf[ TileCastingMold ] )
ArchaicBlocks.blockFirebox = contentRegistry.newBlock(classOf[ TileFirebox ] )
ArchaicBlocks.blockHotPlate = contentRegistry.newBlock(classOf[ TileHotPlate ] )
ArchaicBlocks.blockMillstone = contentRegistry.newBlock( classOf[ TileMillstone ] )
ArchaicBlocks.blockCast = contentRegistry.newBlock( classOf[ TileCastingMold ] )
ArchaicBlocks.blockGutter = contentRegistry.newBlock( classOf[ TileGutter ] )
ArchaicBlocks.blockGrate = contentRegistry.newBlock( classOf[ TileGrate ] )
ArchaicBlocks.blockFilter = contentRegistry.newBlock( classOf[ TileFilter ] )
ArchaicBlocks.blockTank = contentRegistry.newBlock( classOf[ TileTank ] )
ArchaicItems.itemHandCrank = contentRegistry.createItem( classOf[ ItemHandCrank ] )
ArchaicItems.itemImprint = contentRegistry.createItem( classOf[ ItemImprint ] )
ArchaicItems.itemHammer = contentRegistry.createItem( classOf[ ItemHammer ] )
ArchaicItems.itemHandCrank = contentRegistry.newItem( classOf[ ItemHandCrank ] )
ArchaicItems.itemImprint = contentRegistry.newItem( classOf[ ItemImprint ] )
ArchaicItems.itemHammer = contentRegistry.newItem( classOf[ ItemHammer ] )
Settings.config.save()
proxy.preInit()
}
@EventHandler
def init( evt : FMLInitializationEvent ) {
Settings.setModMetadata( metadata, ID, NAME, ResonantInduction.ID )
//Settings.setModMetadata( metadata, ID, NAME, ResonantInduction.ID )
proxy.init()
}

View file

@ -1,168 +0,0 @@
package resonantinduction.archaic.firebox;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import resonant.lib.prefab.block.BlockTile;
import resonantinduction.core.Reference;
import universalelectricity.api.vector.Vector2;
import universalelectricity.core.transform.vector.Vector3;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockHotPlate extends BlockTile
{
private IIcon topElectric;
public BlockHotPlate(int id)
{
super(id, Material.rock);
setBlockBounds(0, 0, 0, 1, 0.2f, 1);
setTickRandomly(true);
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconReg)
{
super.registerIcons(iconReg);
topElectric = iconReg.registerIcon(Reference.PREFIX + "electricHotPlate");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta)
{
return meta == 1 ? topElectric : blockIcon;
}
@Override
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof TileHotPlate)
{
TileHotPlate tile = (TileHotPlate) tileEntity;
extractItem(tile, 0, player);
}
}
@Override
public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof TileHotPlate)
{
TileHotPlate tile = (TileHotPlate) tileEntity;
if (!world.isRemote)
{
Vector2 hitVector = new Vector2(hitX, hitZ);
final double regionLength = 1d / 2d;
/**
* Crafting Matrix
*/
matrix:
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
Vector2 check = new Vector2(j, k).scale(regionLength);
if (check.distance(hitVector) < regionLength)
{
int slotID = j * 2 + k;
interactCurrentItem(tile, slotID, player);
break matrix;
}
}
}
tile.onInventoryChanged();
}
return true;
}
return false;
}
@Override
public void randomDisplayTick(World world, int x, int y, int z, Random random)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof TileHotPlate)
{
TileHotPlate tile = (TileHotPlate) tileEntity;
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
int i = j * 2 + k;
if (tile.getStackInSlot(i) != null && tile.getSmeltTime(i) > 0)
{
int maxSmelt = TileHotPlate.MAX_SMELT_TIME * tile.getStackInSlot(i).stackSize;
int maxParticles = (int) (((double) (maxSmelt - tile.getSmeltTime(i)) / (double) maxSmelt) * 30);
for (int spawn = 0; spawn < maxParticles; spawn++)
{
Vector3 particlePosition = new Vector3(x, y, z).add((double) (i / 2) / ((double) 2) + (0.5 / (2)), 0.2, (double) (i % 2) / ((double) 2) + (0.5 / (2)));
particlePosition.add(new Vector3((random.nextFloat() - 0.5) * 0.2, (random.nextFloat() - 0.5) * 0.2, (random.nextFloat() - 0.5) * 0.2));
world.spawnParticle("smoke", particlePosition.x, particlePosition.y, particlePosition.z, 0.0D, 0.0D, 0.0D);
}
Vector3 particlePosition = new Vector3(x, y, z).add((double) (i / 2) / ((double) 2) + (0.5 / (2)), 0.2, (double) (i % 2) / ((double) 2) + (0.5 / (2)));
world.spawnParticle("flame", particlePosition.x, particlePosition.y, particlePosition.z, 0.0D, 0.01D, 0.0D);
}
}
}
}
}
@Override
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity par5Entity)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof TileHotPlate)
{
TileHotPlate tile = (TileHotPlate) tileEntity;
if (tile.isSmelting())
{
par5Entity.attackEntityFrom(DamageSource.inFire, 1);
}
}
}
@Override
public TileEntity createNewTileEntity(World world)
{
return new TileHotPlate();
}
}

View file

@ -1,12 +1,20 @@
package resonantinduction.archaic.firebox;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import resonant.engine.grid.thermal.BoilEvent;
import resonant.engine.grid.thermal.ThermalPhysics;
import resonant.lib.network.discriminator.PacketAnnotation;
import resonant.lib.network.discriminator.PacketTile;
import resonant.lib.network.discriminator.PacketType;
import resonant.lib.network.handle.IPacketReceiver;
import resonantinduction.archaic.Archaic;
import resonantinduction.archaic.fluid.gutter.TileGutter;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.util.ForgeDirection;
@ -18,21 +26,13 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import resonant.lib.network.IPacketReceiver;
import resonant.lib.network.Synced;
import resonant.lib.prefab.tile.TileElectricalInventory;
import resonant.lib.thermal.BoilEvent;
import resonant.lib.thermal.ThermalPhysics;
import resonantinduction.archaic.Archaic;
import resonantinduction.archaic.fluid.gutter.TileGutter;
import resonantinduction.archaic.Archaic;
import resonantinduction.archaic.fluid.gutter.TileGutter;
import resonantinduction.core.CoreContent;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.resource.ResourceGenerator;
import resonantinduction.core.resource.TileMaterial;
import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.core.transform.vector.Vector3;
import resonant.lib.content.prefab.java.TileElectricInventory;
import com.google.common.io.ByteArrayDataInput;
/**
@ -40,7 +40,7 @@ import com.google.common.io.ByteArrayDataInput;
*
* @author Calclavia
*/
public class TileFirebox extends TileElectricalInventory implements IPacketReceiver, IFluidHandler
public class TileFirebox extends TileElectricInventory implements IPacketReceiver, IFluidHandler
{
/**
* 1KG of coal ~= 24MJ
@ -58,12 +58,14 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
public TileFirebox()
{
energy = new EnergyStorageHandler(POWER, (POWER * 2) / 20);
super(Material.rock);
setCapacity(POWER);
setMaxTransfer((POWER * 2) / 20);
setIO(ForgeDirection.UP, 0);
}
@Override
public void updateEntity()
public void update()
{
if (!worldObj.isRemote)
{
@ -81,9 +83,9 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
else if (isElectrical() && energy.checkExtract())
else if (isElectrical() && energy().checkExtract())
{
energy.extractEnergy();
energy().extractEnergy();
if (burnTime == 0)
{
@ -102,13 +104,13 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
}
}
int blockID = worldObj.getBlockId(xCoord, yCoord + 1, zCoord);
Block block = worldObj.getBlock(xCoord, yCoord + 1, zCoord);
if (burnTime > 0)
{
if (blockID == 0 && blockID != Block.fire.blockID)
if (block == null)
{
worldObj.setBlock(xCoord, yCoord + 1, zCoord, Block.fire.blockID);
worldObj.setBlock(xCoord, yCoord + 1, zCoord, Blocks.fire);
}
/**
@ -117,7 +119,7 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
heatEnergy += POWER / 20;
boolean usedHeat = false;
if (blockID == ResonantInduction.blockDust.blockID || blockID == ResonantInduction.blockRefinedDust.blockID)
if (block == CoreContent.blockDust()|| block == CoreContent.blockRefinedDust())
{
usedHeat = true;
@ -125,27 +127,27 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
if (dustTile instanceof TileMaterial)
{
String name = ((TileMaterial) dustTile).name;
String name = ((TileMaterial) dustTile).name();
int meta = worldObj.getBlockMetadata(xCoord, yCoord + 1, zCoord);
if (heatEnergy >= getMeltIronEnergy(((meta + 1) / 7f) * 1000))
{
int volumeMeta = blockID == ResonantInduction.blockRefinedDust.blockID ? meta : meta / 2;
int volumeMeta = block == CoreContent.blockRefinedDust() ? meta : meta / 2;
worldObj.setBlock(xCoord, yCoord + 1, zCoord, ResourceGenerator.getMolten(name).blockID, volumeMeta, 3);
worldObj.setBlock(xCoord, yCoord + 1, zCoord, ResourceGenerator.getMolten(name), volumeMeta, 3);
TileEntity tile = worldObj.getTileEntity(xCoord, yCoord + 1, zCoord);
if (tile instanceof TileMaterial)
{
((TileMaterial) tile).name = name;
((TileMaterial) tile).name_$eq(name);
}
heatEnergy = 0;
}
}
}
else if (blockID == Block.waterStill.blockID)
else if (block == Blocks.water)
{
usedHeat = true;
int volume = 100;
@ -161,13 +163,13 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
if (boiledVolume >= FluidContainerRegistry.BUCKET_VOLUME)
{
boiledVolume = 0;
worldObj.setBlock(xCoord, yCoord + 1, zCoord, 0);
worldObj.setBlockToAir(xCoord, yCoord + 1, zCoord);
}
heatEnergy = 0;
}
}
else if (blockID == Archaic.blockGutter.blockID)
else if (block == Archaic.blockGutter())
{
TileEntity tileEntity = worldObj.getTileEntity(xCoord, yCoord + 1, zCoord);
@ -195,9 +197,9 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
if (--burnTime == 0)
{
if (blockID == Block.fire.blockID)
if (block == Blocks.fire)
{
worldObj.setBlock(xCoord, yCoord + 1, zCoord, 0);
worldObj.setBlockToAir(xCoord, yCoord + 1, zCoord);
}
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
@ -224,12 +226,6 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
return (long) (ThermalPhysics.getEnergyForTemperatureChange(mass, 450, temperatureChange) + ThermalPhysics.getEnergyForStateChange(mass, 272000));
}
@Override
public boolean canConnect(ForgeDirection direction, Object obj)
{
return isElectrical() && super.canConnect(direction, obj);
}
public boolean isElectrical()
{
return this.getBlockMetadata() == 1;
@ -252,15 +248,15 @@ public class TileFirebox extends TileElectricalInventory implements IPacketRecei
}
@Override
public Packet getDescriptionPacket()
public PacketAnnotation getDescPacket()
{
return ResonantInduction.PACKET_ANNOTATION.getPacket(this);
return new PacketAnnotation(this);
}
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
{
this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord);
public void read(ByteBuf data, EntityPlayer player, PacketType type)
{
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
@Override

View file

@ -3,19 +3,30 @@ package resonantinduction.archaic.firebox;
import java.util.ArrayList;
import java.util.List;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet;
import net.minecraft.tileentity.TileEntity;
import resonant.lib.network.IPacketReceiver;
import resonant.lib.network.IPacketSender;
import resonant.lib.network.PacketHandler;
import resonant.lib.prefab.tile.TileExternalInventory;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import resonant.content.spatial.block.SpatialBlock;
import resonant.lib.network.discriminator.PacketTile;
import resonant.lib.network.discriminator.PacketType;
import resonant.lib.network.handle.IPacketReceiver;
import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction;
import resonant.lib.content.prefab.java.TileInventory;
import com.google.common.io.ByteArrayDataInput;
import universalelectricity.core.transform.region.Cuboid;
import universalelectricity.core.transform.vector.Vector2;
import universalelectricity.core.transform.vector.Vector3;
/**
* For smelting items.
@ -23,7 +34,7 @@ import com.google.common.io.ByteArrayDataInput;
* @author Calclavia
*
*/
public class TileHotPlate extends TileExternalInventory implements IPacketSender, IPacketReceiver
public class TileHotPlate extends TileInventory implements IPacketReceiver
{
private final int POWER = 50000;
public final int[] smeltTime = new int[] { 0, 0, 0, 0 };
@ -32,17 +43,21 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
public TileHotPlate()
{
maxSlots = 4;
super(Material.iron);
setSizeInventory(4);
bounds(new Cuboid(0, 0, 0, 1, 0.2f, 1));
normalRender(false);
isOpaqueCube(false);
}
@Override
public void updateEntity()
public void update()
{
if (canRun())
{
boolean didSmelt = false;
for (int i = 0; i < maxSlots; i++)
for (int i = 0; i < getSizeInventory(); i++)
{
if (canSmelt(this.getStackInSlot(i)))
{
@ -82,15 +97,15 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
}
}
@Override
public void onInventoryChanged()
{
super.onInventoryChanged();
//super.onInventoryChanged();
/**
* Update cache calculation.
*/
for (int i = 0; i < maxSlots; i++)
for (int i = 0; i < getSizeInventory(); i++)
{
if (getStackInSlot(i) != null)
{
@ -139,7 +154,7 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
public boolean isSmelting()
{
for (int i = 0; i < maxSlots; i++)
for (int i = 0; i < getSizeInventory(); i++)
{
if (getSmeltTime(i) > 0)
{
@ -158,13 +173,13 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
@Override
public boolean isItemValidForSlot(int i, ItemStack itemStack)
{
return i < maxSlots && canSmelt(itemStack);
return i < getSizeInventory() && canSmelt(itemStack);
}
@Override
public Packet getDescriptionPacket()
public PacketTile getDescPacket()
{
return ResonantInduction.PACKET_TILE.getPacket(this, this.getPacketData(0).toArray());
return new PacketTile(this, this.getPacketData(0).toArray());
}
/**
@ -172,7 +187,6 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
* 2 - Energy Update
* 3 - Tesla Beam
*/
@Override
public List getPacketData(int type)
{
List list = new ArrayList();
@ -183,12 +197,12 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
}
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
public void read(ByteBuf data, EntityPlayer player, PacketType type)
{
try
{
this.readFromNBT(PacketHandler.readNBTTagCompound(data));
this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord);
this.readFromNBT(ByteBufUtils.readTag(data));
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
catch (Exception e)
{
@ -200,7 +214,7 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
for (int i = 0; i < maxSlots; i++)
for (int i = 0; i < getSizeInventory(); i++)
smeltTime[i] = nbt.getInteger("smeltTime" + i);
}
@ -208,8 +222,63 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
for (int i = 0; i < maxSlots; i++)
for (int i = 0; i < getSizeInventory(); i++)
nbt.setInteger("smeltTime" + i, smeltTime[i]);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconReg)
{
super.registerIcons(iconReg);
SpatialBlock.icon().put("electricHotPlate", iconReg.registerIcon(Reference.prefix() + "electricHotPlate"));
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta)
{
return meta == 1 ? SpatialBlock.icon().get("electricHotPlate") : SpatialBlock.icon().get("HotPlate");
}
@Override
public void click(EntityPlayer player)
{
if (server()) {
extractItem(this, 0, player);
}
}
@Override
public boolean use(EntityPlayer player, int side, Vector3 hit)
{
if (server())
{
Vector2 hitVector = new Vector2(hit.x(), hit.z());
final double regionLength = 1d / 2d;
/**
* Crafting Matrix
*/
matrix:
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
Vector2 check = new Vector2(j, k).multiply(regionLength);
if (check.distance(hitVector) < regionLength)
{
int slotID = j * 2 + k;
interactCurrentItem(this, slotID, player);
break matrix;
}
}
}
onInventoryChanged();
}
return true;
}
}