From 7c0cea635d197c8c21ea49f256abf676c50c8207 Mon Sep 17 00:00:00 2001 From: Robert S Date: Sat, 9 Aug 2014 00:41:52 -0400 Subject: [PATCH] Some work on hotplate and firebox --- .../resonantinduction/archaic/Archaic.scala | 26 ++- .../archaic/firebox/BlockHotPlate.java | 168 ------------------ .../archaic/firebox/TileFirebox.java | 76 ++++---- .../archaic/firebox/TileHotPlate.java | 115 +++++++++--- 4 files changed, 139 insertions(+), 246 deletions(-) delete mode 100644 src/main/scala/resonantinduction/archaic/firebox/BlockHotPlate.java diff --git a/src/main/scala/resonantinduction/archaic/Archaic.scala b/src/main/scala/resonantinduction/archaic/Archaic.scala index e614ea340..6c517fa6b 100644 --- a/src/main/scala/resonantinduction/archaic/Archaic.scala +++ b/src/main/scala/resonantinduction/archaic/Archaic.scala @@ -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() } diff --git a/src/main/scala/resonantinduction/archaic/firebox/BlockHotPlate.java b/src/main/scala/resonantinduction/archaic/firebox/BlockHotPlate.java deleted file mode 100644 index 2e63031f3..000000000 --- a/src/main/scala/resonantinduction/archaic/firebox/BlockHotPlate.java +++ /dev/null @@ -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(); - } -} diff --git a/src/main/scala/resonantinduction/archaic/firebox/TileFirebox.java b/src/main/scala/resonantinduction/archaic/firebox/TileFirebox.java index acb8e1ec8..1dfb6ef9a 100644 --- a/src/main/scala/resonantinduction/archaic/firebox/TileFirebox.java +++ b/src/main/scala/resonantinduction/archaic/firebox/TileFirebox.java @@ -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 diff --git a/src/main/scala/resonantinduction/archaic/firebox/TileHotPlate.java b/src/main/scala/resonantinduction/archaic/firebox/TileHotPlate.java index 6a1893ccb..de37d7b49 100644 --- a/src/main/scala/resonantinduction/archaic/firebox/TileHotPlate.java +++ b/src/main/scala/resonantinduction/archaic/firebox/TileHotPlate.java @@ -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; + } }