Some work on hotplate and firebox
This commit is contained in:
parent
9a4acf902f
commit
7c0cea635d
4 changed files with 139 additions and 246 deletions
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue