Machines: Getting more of the machines implemented, still a WIP

This commit is contained in:
pahimar 2014-04-11 07:06:32 -04:00
parent f6d58abca2
commit ac14fe32ab
9 changed files with 638 additions and 3 deletions

View file

@ -0,0 +1,44 @@
package com.pahimar.ee3.block;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileAludel;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockAludel extends BlockEE implements ITileEntityProvider
{
public BlockAludel()
{
super(Material.anvil);
this.setHardness(5.0f);
this.setBlockName(Names.Blocks.ALUDEL);
this.setBlockBounds(0.10F, 0.0F, 0.10F, 0.90F, 1.0F, 0.90F);
}
@Override
public TileEntity createNewTileEntity(World var1, int var2)
{
return new TileAludel();
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
public int getRenderType()
{
return RenderIds.aludel;
}
}

View file

@ -0,0 +1,105 @@
package com.pahimar.ee3.block;
import com.pahimar.ee3.EquivalentExchange3;
import com.pahimar.ee3.reference.GuiIds;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.Particles;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileCalcinator;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.Random;
public class BlockCalcinator extends BlockEE implements ITileEntityProvider
{
public BlockCalcinator()
{
super(Material.rock);
this.setHardness(2.0f);
this.setBlockName(Names.Blocks.CALCINATOR);
this.setBlockBounds(0.1F, 0.0F, 0.1F, 0.9F, 1.0F, 0.9F);
}
@Override
public TileEntity createNewTileEntity(World var1, int var2)
{
return new TileCalcinator();
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
public int getRenderType()
{
return RenderIds.calcinator;
}
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z)
{
if ((world.getTileEntity(x, y, z) instanceof TileCalcinator) && (((TileCalcinator) world.getTileEntity(x, y, z)).getState() == 1))
{
return 15;
}
return super.getLightValue(world, x, y, z);
}
@Override
public boolean onBlockEventReceived(World par1World, int par2, int par3, int par4, int par5, int par6)
{
super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6);
TileEntity tileentity = par1World.getTileEntity(par2, par3, par4);
return tileentity != null ? tileentity.receiveClientEvent(par5, par6) : false;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
{
if (player.isSneaking())
{
return false;
}
else
{
if (!world.isRemote)
{
if (world.getTileEntity(x, y, z) instanceof TileCalcinator)
{
player.openGui(EquivalentExchange3.instance, GuiIds.CALCINATOR, world, x, y, z);
}
}
return true;
}
}
@Override
public void randomDisplayTick(World world, int x, int y, int z, Random random)
{
if (world.getTileEntity(x, y, z) instanceof TileCalcinator)
{
if (((TileCalcinator) world.getTileEntity(x, y, z)).getState() == 1)
{
// Fire pot particles
world.spawnParticle(Particles.NORMAL_SMOKE, (double) x + 0.5F, (double) y + 0.4F, (double) ((z + 0.5F) + (random.nextFloat() * 0.5F - 0.3F)), 0.0D, 0.0D, 0.0D);
world.spawnParticle(Particles.FLAME, (double) x + 0.5F, (double) y + 0.4F, (double) z + 0.5F, 0.0D, 0.0D, 0.0D);
}
}
}
}

View file

@ -0,0 +1,43 @@
package com.pahimar.ee3.block;
import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.reference.RenderIds;
import com.pahimar.ee3.tileentity.TileGlassBell;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockGlassBell extends BlockEE implements ITileEntityProvider
{
public BlockGlassBell()
{
super(Material.glass);
this.setHardness(1.0f);
this.setBlockName(Names.Blocks.GLASS_BELL);
}
@Override
public TileEntity createNewTileEntity(World var1, int var2)
{
return new TileGlassBell();
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
public int getRenderType()
{
return RenderIds.glassBell;
}
}

View file

@ -41,7 +41,7 @@ public class GuiAlchemicalChest extends GuiContainer
if (tileAlchemicalChest.getState() == 0 || tileAlchemicalChest.getState() == 1)
{
fontRendererObj.drawString(tileAlchemicalChest.hasCustomInventoryName() ? tileAlchemicalChest.getInventoryName() : StatCollector.translateToLocal(tileAlchemicalChest.getInventoryName()), 8, 6, 4210752);
fontRendererObj.drawString(StatCollector.translateToLocal(Names.Containers.CONTAINER_INVENTORY), 35, ySize - 95 + 2, 4210752);
fontRendererObj.drawString(StatCollector.translateToLocal(Names.Containers.VANILLA_INVENTORY), 35, ySize - 95 + 2, 4210752);
}
}

View file

@ -8,6 +8,9 @@ public class Names
public static final String INFUSED_WOOD = "infusedWood";
public static final String INFUSED_PLANK = "infusedPlank";
public static final String ALCHEMICAL_CHEST = "alchemicalChest";
public static final String ALUDEL = "aludel";
public static final String GLASS_BELL = "glassBell";
public static final String CALCINATOR = "calcinator";
}
public static class Items
@ -49,8 +52,14 @@ public class Names
public static class Containers
{
public static final String CONTAINER_INVENTORY = "container.inventory";
public static final String VANILLA_INVENTORY = "container.inventory";
public static final String VANILLA_CRAFTING = "container.crafting";
public static final String ALCHEMICAL_BAG = "container.ee3:" + Items.ALCHEMICAL_BAG;
public static final String ALCHEMICAL_CHEST = "container.ee3:" + Blocks.ALCHEMICAL_CHEST;
public static final String CALCINATOR_NAME = "container.ee3:" + Blocks.CALCINATOR;
public static final String ALUDEL_NAME = "container.ee3:" + Blocks.ALUDEL;
public static final String GLASS_BELL = "container.ee3:" + Blocks.GLASS_BELL;
}
}

View file

@ -0,0 +1,32 @@
package com.pahimar.ee3.reference;
public class Particles
{
/* Vanilla particle names (not necessarily all of them) */
public static final String NORMAL_SMOKE = "smoke";
public static final String LARGE_SMOKE = "largesmoke";
public static final String NORMAL_EXPLODE = "explode";
public static final String LARGE_EXPLODE = "largeexplode";
public static final String HUGE_EXPLODE = "hugeexplode";
public static final String HEART = "heart";
public static final String DEATH_SUSPEND = "deathsuspend";
public static final String SUSPEND = "suspend";
public static final String WITCH_MAGIC = "witchMagic";
public static final String BUBBLE = "bubble";
public static final String SPLASH = "splash";
public static final String SNOWBALL_POOF = "snowballpoof";
public static final String SNOW_SHOVEL = "snowshovel";
public static final String NOTE = "note";
public static final String PORTAL = "portal";
public static final String MOB_SPELL = "mobSpell";
public static final String MOB_SPELL_AMBIENT = "mobSpellAmbient";
public static final String FIREWORKS_SPARKLE = "fireworksSpark";
public static final String SLIME = "slime";
public static final String CRIT = "crit";
public static final String FLAME = "flame";
public static final String ENCHANTMENT_TABLE = "enchantmenttable";
public static final String DRIP_WATER = "dripWater";
public static final String DRIP_LAVA = "dripLava";
public static final String TOWN_AURA = "townaura";
public static final String RED_DUST = "reddust";
}

View file

@ -0,0 +1,118 @@
package com.pahimar.ee3.tileentity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
public class TileAludel extends TileEntityEE implements ISidedInventory
{
public static final int INVENTORY_SIZE = 4;
public static final int FUEL_INVENTORY_INDEX = 0;
public static final int INPUT_INVENTORY_INDEX = 1;
public static final int DUST_INVENTORY_INDEX = 2;
public static final int OUTPUT_INVENTORY_INDEX = 3;
public int deviceCookTime; // How much longer the Aludel will cook
public int fuelBurnTime; // The fuel value for the currently burning fuel
public int itemCookTime; // How long the current item has been "cooking"
public ItemStack outputItemStack;
public boolean hasGlassBell = false;
/**
* The ItemStacks that hold the items currently being used in the Aludel
*/
private ItemStack[] inventory;
public TileAludel()
{
inventory = new ItemStack[INVENTORY_SIZE];
}
@Override
public int[] getAccessibleSlotsFromSide(int var1)
{
return new int[0];
}
@Override
public boolean canInsertItem(int var1, ItemStack var2, int var3)
{
return false;
}
@Override
public boolean canExtractItem(int var1, ItemStack var2, int var3)
{
return false;
}
@Override
public int getSizeInventory()
{
return 0;
}
@Override
public ItemStack getStackInSlot(int var1)
{
return null;
}
@Override
public ItemStack decrStackSize(int var1, int var2)
{
return null;
}
@Override
public ItemStack getStackInSlotOnClosing(int var1)
{
return null;
}
@Override
public void setInventorySlotContents(int var1, ItemStack var2)
{
}
@Override
public String getInventoryName()
{
return null;
}
@Override
public boolean hasCustomInventoryName()
{
return false;
}
@Override
public int getInventoryStackLimit()
{
return 0;
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1)
{
return false;
}
@Override
public void openInventory()
{
}
@Override
public void closeInventory()
{
}
@Override
public boolean isItemValidForSlot(int var1, ItemStack var2)
{
return false;
}
}

View file

@ -0,0 +1,187 @@
package com.pahimar.ee3.tileentity;
import com.pahimar.ee3.reference.Names;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
public class TileCalcinator extends TileEntityEE implements ISidedInventory
{
public static final int INVENTORY_SIZE = 4;
public static final int FUEL_INVENTORY_INDEX = 0;
public static final int INPUT_INVENTORY_INDEX = 1;
public static final int OUTPUT_LEFT_INVENTORY_INDEX = 2;
public static final int OUTPUT_RIGHT_INVENTORY_INDEX = 3;
private static final int DEFAULT_ITEM_SUCK_COOL_DOWN = 20;
public int deviceCookTime; // How much longer the Calcinator will cook
public int fuelBurnTime; // The fuel value for the currently burning fuel
public int itemCookTime; // How long the current item has been "cooking"
public byte leftStackSize, leftStackMeta, rightStackSize, rightStackMeta;
public int itemSuckCoolDown = 0;
/**
* The ItemStacks that hold the items currently being used in the Calcinator
*/
private ItemStack[] inventory;
public TileCalcinator()
{
inventory = new ItemStack[INVENTORY_SIZE];
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
return side == ForgeDirection.DOWN.ordinal() ? new int[]{FUEL_INVENTORY_INDEX, OUTPUT_LEFT_INVENTORY_INDEX, OUTPUT_RIGHT_INVENTORY_INDEX} : new int[]{INPUT_INVENTORY_INDEX, OUTPUT_LEFT_INVENTORY_INDEX, OUTPUT_RIGHT_INVENTORY_INDEX};
}
@Override
public boolean canInsertItem(int slotIndex, ItemStack itemStack, int side)
{
return isItemValidForSlot(slotIndex, itemStack);
}
@Override
public boolean canExtractItem(int slotIndex, ItemStack itemStack, int side)
{
return slotIndex == OUTPUT_LEFT_INVENTORY_INDEX || slotIndex == OUTPUT_RIGHT_INVENTORY_INDEX;
}
@Override
public int getSizeInventory()
{
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int slotIndex)
{
// FIXME sendDustPileData();
return inventory[slotIndex];
}
@Override
public ItemStack decrStackSize(int slotIndex, int decrementAmount)
{
ItemStack itemStack = getStackInSlot(slotIndex);
if (itemStack != null)
{
if (itemStack.stackSize <= decrementAmount)
{
setInventorySlotContents(slotIndex, null);
}
else
{
itemStack = itemStack.splitStack(decrementAmount);
if (itemStack.stackSize == 0)
{
setInventorySlotContents(slotIndex, null);
}
}
}
return itemStack;
}
@Override
public ItemStack getStackInSlotOnClosing(int slotIndex)
{
ItemStack itemStack = getStackInSlot(slotIndex);
if (itemStack != null)
{
setInventorySlotContents(slotIndex, null);
}
return itemStack;
}
@Override
public void setInventorySlotContents(int slotIndex, ItemStack itemStack)
{
inventory[slotIndex] = itemStack;
if (itemStack != null && itemStack.stackSize > getInventoryStackLimit())
{
itemStack.stackSize = getInventoryStackLimit();
}
}
@Override
public String getInventoryName()
{
return this.hasCustomName() ? this.getCustomName() : Names.Containers.CALCINATOR_NAME;
}
@Override
public boolean hasCustomInventoryName()
{
return false;
}
@Override
public int getInventoryStackLimit()
{
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer)
{
return true;
}
@Override
public void openInventory()
{
// NOOP
}
@Override
public void closeInventory()
{
// NOOP
}
@Override
public boolean isItemValidForSlot(int var1, ItemStack var2)
{
return false;
}
@Override
public boolean receiveClientEvent(int eventId, int eventData)
{
if (eventId == 1)
{
this.state = (byte) eventData;
// NAME UPDATE
// this.worldObj.updateAllLightTypes(this.xCoord, this.yCoord, this.zCoord);
this.worldObj.func_147451_t(this.xCoord, this.yCoord, this.zCoord);
return true;
}
else if (eventId == 2)
{
this.leftStackSize = (byte) eventData;
return true;
}
else if (eventId == 3)
{
this.leftStackMeta = (byte) eventData;
return true;
}
else if (eventId == 4)
{
this.rightStackSize = (byte) eventData;
return true;
}
else if (eventId == 5)
{
this.rightStackMeta = (byte) eventData;
return true;
}
else
{
return super.receiveClientEvent(eventId, eventData);
}
}
}

View file

@ -0,0 +1,97 @@
package com.pahimar.ee3.tileentity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class TileGlassBell extends TileEntityEE implements IInventory
{
public static final int INVENTORY_SIZE = 1;
public static final int DISPLAY_SLOT_INVENTORY_INDEX = 0;
public ItemStack outputItemStack;
/**
* Server sync counter (once per 20 ticks)
*/
private int ticksSinceSync;
/**
* The ItemStacks that hold the items currently being used in the Glass Bell
*/
private ItemStack[] inventory;
public TileGlassBell()
{
inventory = new ItemStack[INVENTORY_SIZE];
}
@Override
public int getSizeInventory()
{
return 0;
}
@Override
public ItemStack getStackInSlot(int var1)
{
return null;
}
@Override
public ItemStack decrStackSize(int var1, int var2)
{
return null;
}
@Override
public ItemStack getStackInSlotOnClosing(int var1)
{
return null;
}
@Override
public void setInventorySlotContents(int var1, ItemStack var2)
{
}
@Override
public String getInventoryName()
{
return null;
}
@Override
public boolean hasCustomInventoryName()
{
return false;
}
@Override
public int getInventoryStackLimit()
{
return 0;
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1)
{
return false;
}
@Override
public void openInventory()
{
}
@Override
public void closeInventory()
{
}
@Override
public boolean isItemValidForSlot(int var1, ItemStack var2)
{
return false;
}
}