diff --git a/src/main/java/com/pahimar/ee3/block/BlockAludel.java b/src/main/java/com/pahimar/ee3/block/BlockAludel.java new file mode 100644 index 00000000..a51284c0 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/block/BlockAludel.java @@ -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; + } +} diff --git a/src/main/java/com/pahimar/ee3/block/BlockCalcinator.java b/src/main/java/com/pahimar/ee3/block/BlockCalcinator.java new file mode 100644 index 00000000..cf1f4578 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/block/BlockCalcinator.java @@ -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); + } + } + } +} diff --git a/src/main/java/com/pahimar/ee3/block/BlockGlassBell.java b/src/main/java/com/pahimar/ee3/block/BlockGlassBell.java new file mode 100644 index 00000000..e23aeb53 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/block/BlockGlassBell.java @@ -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; + } +} diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalChest.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalChest.java index 68903a63..35ea6a30 100644 --- a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalChest.java +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalChest.java @@ -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); } } diff --git a/src/main/java/com/pahimar/ee3/reference/Names.java b/src/main/java/com/pahimar/ee3/reference/Names.java index 9a0b7922..0f47ae11 100644 --- a/src/main/java/com/pahimar/ee3/reference/Names.java +++ b/src/main/java/com/pahimar/ee3/reference/Names.java @@ -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; + } } diff --git a/src/main/java/com/pahimar/ee3/reference/Particles.java b/src/main/java/com/pahimar/ee3/reference/Particles.java new file mode 100644 index 00000000..f7b84e6e --- /dev/null +++ b/src/main/java/com/pahimar/ee3/reference/Particles.java @@ -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"; +} diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileAludel.java b/src/main/java/com/pahimar/ee3/tileentity/TileAludel.java new file mode 100644 index 00000000..426a4b6e --- /dev/null +++ b/src/main/java/com/pahimar/ee3/tileentity/TileAludel.java @@ -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; + } +} diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileCalcinator.java b/src/main/java/com/pahimar/ee3/tileentity/TileCalcinator.java new file mode 100644 index 00000000..a65dc5ee --- /dev/null +++ b/src/main/java/com/pahimar/ee3/tileentity/TileCalcinator.java @@ -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); + } + } +} diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileGlassBell.java b/src/main/java/com/pahimar/ee3/tileentity/TileGlassBell.java new file mode 100644 index 00000000..b3a14616 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/tileentity/TileGlassBell.java @@ -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; + } +}