diff --git a/src/main/java/ellpeck/gemification/Gemification.java b/src/main/java/ellpeck/gemification/Gemification.java index 289cb7e24..4090b293a 100644 --- a/src/main/java/ellpeck/gemification/Gemification.java +++ b/src/main/java/ellpeck/gemification/Gemification.java @@ -1,35 +1,30 @@ package ellpeck.gemification; import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.*; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; import ellpeck.gemification.blocks.InitBlocks; -import ellpeck.gemification.container.GuiHandler; import ellpeck.gemification.crafting.CrucibleCraftingManager; +import ellpeck.gemification.gen.OreGen; +import ellpeck.gemification.inventory.GuiHandler; import ellpeck.gemification.items.InitItems; import ellpeck.gemification.proxy.IProxy; -import ellpeck.gemification.tile.TileEntityCrucible; +import ellpeck.gemification.tile.TileEntityBase; +import ellpeck.gemification.util.Util; -@Mod(modid = Gemification.MOD_ID, name = Gemification.NAME, version = Gemification.VERSION) -public class Gemification { +@Mod(modid = Util.MOD_ID, name = Util.NAME, version = Util.VERSION) +public class Gemification{ - @Instance(Gemification.MOD_ID) + @Instance(Util.MOD_ID) public static Gemification instance; @SidedProxy(clientSide = "ellpeck.gemification.proxy.ClientProxy", serverSide = "ellpeck.gemification.proxy.ServerProxy") public static IProxy proxy; - public static final String MOD_ID = "gemification"; - public static final String NAME = "Gemification"; - public static final String VERSION = "1.7.10-1.0.1"; - - public static final int guiCrucible = 0; - @SuppressWarnings("unused") @EventHandler() public void preInit(FMLPreInitializationEvent event){ @@ -43,9 +38,9 @@ public class Gemification { public void init(FMLInitializationEvent event){ CrucibleCraftingManager.instance.initRecipes(); proxy.init(); - NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); - GameRegistry.registerWorldGenerator(new OreGen(), 0); - GameRegistry.registerTileEntity(TileEntityCrucible.class, Gemification.MOD_ID + "tileEntityCrucible"); + GuiHandler.init(); + OreGen.init(); + TileEntityBase.init(); } @SuppressWarnings("unused") diff --git a/src/main/java/ellpeck/gemification/blocks/BlockCrucible.java b/src/main/java/ellpeck/gemification/blocks/BlockCrucible.java index 7d7c2df4e..4fc22d4f9 100644 --- a/src/main/java/ellpeck/gemification/blocks/BlockCrucible.java +++ b/src/main/java/ellpeck/gemification/blocks/BlockCrucible.java @@ -1,10 +1,11 @@ package ellpeck.gemification.blocks; import cpw.mods.fml.client.registry.RenderingRegistry; -import ellpeck.gemification.CreativeTab; import ellpeck.gemification.Gemification; -import ellpeck.gemification.Util; +import ellpeck.gemification.creative.CreativeTab; +import ellpeck.gemification.inventory.GuiHandler; import ellpeck.gemification.tile.TileEntityCrucible; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -12,7 +13,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -35,12 +35,7 @@ public class BlockCrucible extends BlockContainer{ @SuppressWarnings("static-access") public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){ if (!world.isRemote){ - TileEntityCrucible tileCrucible = (TileEntityCrucible)world.getTileEntity(x, y, z); - if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.water_bucket && tileCrucible.currentFluid == Util.fluidNone){ - tileCrucible.currentFluid = Util.fluidWater; - if(!player.capabilities.isCreativeMode) player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(Items.bucket)); - } - else player.openGui(Gemification.instance, Gemification.guiCrucible, world, x, y, z); + player.openGui(Gemification.instance, GuiHandler.guiCrucible, world, x, y, z); } return true; } diff --git a/src/main/java/ellpeck/gemification/blocks/BlockCrucibleFire.java b/src/main/java/ellpeck/gemification/blocks/BlockCrucibleFire.java new file mode 100644 index 000000000..5d04073ec --- /dev/null +++ b/src/main/java/ellpeck/gemification/blocks/BlockCrucibleFire.java @@ -0,0 +1,96 @@ +package ellpeck.gemification.blocks; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.gemification.Gemification; +import ellpeck.gemification.creative.CreativeTab; +import ellpeck.gemification.inventory.GuiHandler; +import ellpeck.gemification.tile.TileEntityCrucibleFire; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.Random; + +public class BlockCrucibleFire extends BlockContainer{ + + protected BlockCrucibleFire(){ + super(Material.rock); + this.setBlockName("blockCrucibleFire"); + this.setCreativeTab(CreativeTab.instance); + this.setTickRandomly(true); + } + + public TileEntity createNewTileEntity(World world, int i){ + return new TileEntityCrucibleFire(); + } + + @SuppressWarnings("static-access") + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){ + if (!world.isRemote){ + player.openGui(Gemification.instance, GuiHandler.guiCrucibleFire, world, x, y, z); + } + return true; + } + + public int getRenderType(){ + return RenderingRegistry.getNextAvailableRenderId(); + } + + public boolean isOpaqueCube(){ + return false; + } + + public boolean renderAsNormalBlock(){ + return false; + } + + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = Blocks.hopper.getIcon(0, 0); + } + + public void breakBlock(World world, int x, int y, int z, Block block, int meta){ + this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, meta); + } + + public void dropInventory(World world, int x, int y, int z){ + TileEntityCrucibleFire tileEntity = (TileEntityCrucibleFire)world.getTileEntity(x, y, z); + for (int i = 0; i < tileEntity.getSizeInventory(); i++){ + ItemStack itemStack = tileEntity.getStackInSlot(i); + if (itemStack != null && itemStack.stackSize > 0){ + Random rand = new Random(); + float dX = rand.nextFloat() * 0.8F + 0.1F; + float dY = rand.nextFloat() * 0.8F + 0.1F; + float dZ = rand.nextFloat() * 0.8F + 0.1F; + EntityItem entityItem = new EntityItem(world, x + dX, y + dY, z + dZ, itemStack.copy()); + if(itemStack.hasTagCompound()) entityItem.getEntityItem().setTagCompound((NBTTagCompound)itemStack.getTagCompound().copy()); + float factor = 0.05F; + entityItem.motionX = rand.nextGaussian() * factor; + entityItem.motionY = rand.nextGaussian() * factor + 0.2F; + entityItem.motionZ = rand.nextGaussian() * factor; + world.spawnEntityInWorld(entityItem); + itemStack.stackSize = 0; + } + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World world, int x, int y, int z, Random rand){ + if(((TileEntityCrucibleFire)world.getTileEntity(x, y, z)).isBurning()){ + for(int i = 0; i < 8; i++){ + world.spawnParticle("flame", (double) x + rand.nextFloat() * 0.5F + 0.25F, (double) y + 0.55F, (double) z + rand.nextFloat() * 0.5F + 0.25F, 0.0D, 0.0D, 0.0D); + world.spawnParticle("smoke", (double) x + rand.nextFloat() * 0.5F + 0.25F, (double) y + 0.55F, (double) z + rand.nextFloat() * 0.5F + 0.25F, 0.0D, 0.0D, 0.0D); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/gemification/blocks/InitBlocks.java b/src/main/java/ellpeck/gemification/blocks/InitBlocks.java index 37479739a..a299ff722 100644 --- a/src/main/java/ellpeck/gemification/blocks/InitBlocks.java +++ b/src/main/java/ellpeck/gemification/blocks/InitBlocks.java @@ -7,14 +7,17 @@ public class InitBlocks{ public static Block oreGem; public static Block blockCrucible; + public static Block blockCrucibleFire; public static void init(){ oreGem = new OreGem(); blockCrucible = new BlockCrucible(); + blockCrucibleFire = new BlockCrucibleFire(); GameRegistry.registerBlock(oreGem, ItemBlockOreGem.class, oreGem.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockCrucible, ItemBlockCrucible.class, blockCrucible.getUnlocalizedName().substring(5)); + GameRegistry.registerBlock(blockCrucibleFire, ItemBlockCrucibleFire.class, blockCrucibleFire.getUnlocalizedName().substring(5)); } diff --git a/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucible.java b/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucible.java index 10a2b4a3a..888ed2da0 100644 --- a/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucible.java +++ b/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucible.java @@ -2,7 +2,7 @@ package ellpeck.gemification.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.gemification.Util; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; diff --git a/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucibleFire.java b/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucibleFire.java new file mode 100644 index 000000000..037afc698 --- /dev/null +++ b/src/main/java/ellpeck/gemification/blocks/ItemBlockCrucibleFire.java @@ -0,0 +1,31 @@ +package ellpeck.gemification.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.gemification.util.Util; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import java.util.List; + +public class ItemBlockCrucibleFire extends ItemBlock { + + public ItemBlockCrucibleFire(Block block){ + super(block); + setHasSubtypes(false); + } + + public String getUnlocalizedName(ItemStack stack) { + return this.getUnlocalizedName(); + } + + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + if(Util.isShiftPressed()) list.add(StatCollector.translateToLocal("tooltip." + this.getUnlocalizedName().substring(5) + ".desc")); + else list.add(Util.shiftForInfo()); + } +} diff --git a/src/main/java/ellpeck/gemification/blocks/ItemBlockOreGem.java b/src/main/java/ellpeck/gemification/blocks/ItemBlockOreGem.java index 40c8f7c5a..9176e2923 100644 --- a/src/main/java/ellpeck/gemification/blocks/ItemBlockOreGem.java +++ b/src/main/java/ellpeck/gemification/blocks/ItemBlockOreGem.java @@ -2,7 +2,7 @@ package ellpeck.gemification.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.gemification.Util; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; diff --git a/src/main/java/ellpeck/gemification/blocks/OreGem.java b/src/main/java/ellpeck/gemification/blocks/OreGem.java index f8a1a100d..c04377d68 100644 --- a/src/main/java/ellpeck/gemification/blocks/OreGem.java +++ b/src/main/java/ellpeck/gemification/blocks/OreGem.java @@ -2,10 +2,9 @@ package ellpeck.gemification.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.gemification.CreativeTab; -import ellpeck.gemification.Gemification; -import ellpeck.gemification.Util; +import ellpeck.gemification.creative.CreativeTab; import ellpeck.gemification.items.InitItems; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -58,7 +57,7 @@ public class OreGem extends Block{ @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconReg) { for (int i = 0; i < Util.gemList.size(); i++) { - textures[i] = iconReg.registerIcon(Gemification.MOD_ID + ":" + this.getUnlocalizedName().substring(5) + Util.gemList.get(i).name.substring(5)); + textures[i] = iconReg.registerIcon(Util.MOD_ID + ":" + this.getUnlocalizedName().substring(5) + Util.gemList.get(i).name.substring(5)); } } } diff --git a/src/main/java/ellpeck/gemification/blocks/models/ModelCrucibleFire.java b/src/main/java/ellpeck/gemification/blocks/models/ModelCrucibleFire.java new file mode 100644 index 000000000..47d0ccb0b --- /dev/null +++ b/src/main/java/ellpeck/gemification/blocks/models/ModelCrucibleFire.java @@ -0,0 +1,76 @@ +package ellpeck.gemification.blocks.models; + +import net.minecraft.client.model.ModelRenderer; + +public class ModelCrucibleFire extends ModelBaseG{ + public ModelRenderer floor, wallOne, wallTwo, wallThree, wallFour, supportOne, supportTwo, supportThree, supportFour, outsideSupOne, outsideSupTwo, outsideSupThree, outsideSupFour, topFloor, floorBlock; + + public ModelCrucibleFire() { + this.textureWidth = 64; + this.textureHeight = 64; + this.wallFour = new ModelRenderer(this, 0, 0); + this.wallFour.setRotationPoint(-4.5F, 15.0F, 4.5F); + this.wallFour.addBox(0.0F, 0.0F, 0.0F, 9, 3, 1); + this.outsideSupFour = new ModelRenderer(this, 0, 30); + this.outsideSupFour.setRotationPoint(-8.0F, 9.0F, 6.0F); + this.outsideSupFour.addBox(0.0F, 0.0F, 0.0F, 2, 15, 2); + this.supportFour = new ModelRenderer(this, 0, 0); + this.supportFour.setRotationPoint(3.5F, 19.0F, -4.5F); + this.supportFour.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1); + this.outsideSupThree = new ModelRenderer(this, 0, 30); + this.outsideSupThree.setRotationPoint(-8.0F, 9.0F, -8.0F); + this.outsideSupThree.addBox(0.0F, 0.0F, 0.0F, 2, 15, 2); + this.outsideSupOne = new ModelRenderer(this, 0, 30); + this.outsideSupOne.setRotationPoint(6.0F, 9.0F, 6.0F); + this.outsideSupOne.addBox(0.0F, 0.0F, 0.0F, 2, 15, 2); + this.floorBlock = new ModelRenderer(this, 0, 17); + this.floorBlock.setRotationPoint(-5.0F, 21.0F, -5.0F); + this.floorBlock.addBox(0.0F, 0.0F, 0.0F, 10, 3, 10); + this.wallOne = new ModelRenderer(this, 0, 0); + this.wallOne.setRotationPoint(4.5F, 15.0F, -5.5F); + this.wallOne.addBox(0.0F, 0.0F, 0.0F, 1, 3, 11); + this.wallTwo = new ModelRenderer(this, 0, 0); + this.wallTwo.setRotationPoint(-5.5F, 15.0F, -5.5F); + this.wallTwo.addBox(0.0F, 0.0F, 0.0F, 1, 3, 11); + this.supportOne = new ModelRenderer(this, 0, 0); + this.supportOne.setRotationPoint(3.5F, 19.0F, 3.5F); + this.supportOne.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1); + this.wallThree = new ModelRenderer(this, 0, 0); + this.wallThree.setRotationPoint(-4.5F, 15.0F, -5.5F); + this.wallThree.addBox(0.0F, 0.0F, 0.0F, 9, 3, 1); + this.outsideSupTwo = new ModelRenderer(this, 0, 30); + this.outsideSupTwo.setRotationPoint(6.0F, 9.0F, -8.0F); + this.outsideSupTwo.addBox(0.0F, 0.0F, 0.0F, 2, 15, 2); + this.floor = new ModelRenderer(this, 0, 0); + this.floor.mirror = true; + this.floor.setRotationPoint(-4.5F, 18.0F, -4.5F); + this.floor.addBox(0.0F, 0.0F, 0.0F, 9, 1, 9); + this.supportThree = new ModelRenderer(this, 0, 0); + this.supportThree.setRotationPoint(-4.5F, 19.0F, -4.5F); + this.supportThree.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1); + this.topFloor = new ModelRenderer(this, 0, 30); + this.topFloor.setRotationPoint(-8.0F, 8.0F, -8.0F); + this.topFloor.addBox(0.0F, 0.0F, 0.0F, 16, 1, 16); + this.supportTwo = new ModelRenderer(this, 0, 0); + this.supportTwo.setRotationPoint(-4.5F, 19.0F, 3.5F); + this.supportTwo.addBox(0.0F, 0.0F, 0.0F, 1, 2, 1); + } + + public void render(float f){ + this.wallFour.render(f); + this.outsideSupFour.render(f); + this.supportFour.render(f); + this.outsideSupThree.render(f); + this.outsideSupOne.render(f); + this.floorBlock.render(f); + this.wallOne.render(f); + this.wallTwo.render(f); + this.supportOne.render(f); + this.wallThree.render(f); + this.outsideSupTwo.render(f); + this.floor.render(f); + this.supportThree.render(f); + this.topFloor.render(f); + this.supportTwo.render(f); + } +} diff --git a/src/main/java/ellpeck/gemification/blocks/models/RendererCrucible.java b/src/main/java/ellpeck/gemification/blocks/models/RendererCrucible.java index 552f62718..92f36b870 100644 --- a/src/main/java/ellpeck/gemification/blocks/models/RendererCrucible.java +++ b/src/main/java/ellpeck/gemification/blocks/models/RendererCrucible.java @@ -1,6 +1,6 @@ package ellpeck.gemification.blocks.models; -import ellpeck.gemification.Gemification; +import ellpeck.gemification.util.Util; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; @@ -8,7 +8,7 @@ import org.lwjgl.opengl.GL11; public class RendererCrucible extends TileEntitySpecialRenderer{ - public static final ResourceLocation resLoc = new ResourceLocation(Gemification.MOD_ID, "textures/blocks/models/modelCrucible.png"); + public static final ResourceLocation resLoc = new ResourceLocation(Util.MOD_ID, "textures/blocks/models/modelCrucible.png"); private ModelCrucible model; public RendererCrucible(){ diff --git a/src/main/java/ellpeck/gemification/blocks/models/RendererCrucibleFire.java b/src/main/java/ellpeck/gemification/blocks/models/RendererCrucibleFire.java new file mode 100644 index 000000000..fb9fb2bce --- /dev/null +++ b/src/main/java/ellpeck/gemification/blocks/models/RendererCrucibleFire.java @@ -0,0 +1,28 @@ +package ellpeck.gemification.blocks.models; + +import ellpeck.gemification.util.Util; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class RendererCrucibleFire extends TileEntitySpecialRenderer{ + + public static final ResourceLocation resLoc = new ResourceLocation(Util.MOD_ID, "textures/blocks/models/modelCrucibleFire.png"); + private ModelCrucibleFire model; + + public RendererCrucibleFire(){ + this.model = new ModelCrucibleFire(); + } + + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + GL11.glRotatef(180, 0F, 0F, 1F); + this.bindTexture(resLoc); + GL11.glPushMatrix(); + this.model.render(0.0625F); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/ellpeck/gemification/container/GuiHandler.java b/src/main/java/ellpeck/gemification/container/GuiHandler.java deleted file mode 100644 index f25a8c462..000000000 --- a/src/main/java/ellpeck/gemification/container/GuiHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package ellpeck.gemification.container; - -import cpw.mods.fml.common.network.IGuiHandler; -import ellpeck.gemification.Gemification; -import ellpeck.gemification.tile.TileEntityCrucible; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -public class GuiHandler implements IGuiHandler { - - public Object getServerGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) { - switch (id) { - case Gemification.guiCrucible: - TileEntityCrucible tileCrucible = (TileEntityCrucible) world.getTileEntity(x, y, z); - return new ContainerCrucible(entityPlayer.inventory, tileCrucible); - - default: - return null; - } - } - - public Object getClientGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) { - switch (id) { - case Gemification.guiCrucible: - TileEntityCrucible tileCrucible = (TileEntityCrucible) world.getTileEntity(x, y, z); - return new GuiCrucible(entityPlayer.inventory, tileCrucible); - - default: - return null; - } - } -} diff --git a/src/main/java/ellpeck/gemification/crafting/CrucibleCraftingManager.java b/src/main/java/ellpeck/gemification/crafting/CrucibleCraftingManager.java index 56d749288..9163ad219 100644 --- a/src/main/java/ellpeck/gemification/crafting/CrucibleCraftingManager.java +++ b/src/main/java/ellpeck/gemification/crafting/CrucibleCraftingManager.java @@ -1,16 +1,16 @@ package ellpeck.gemification.crafting; -import java.util.ArrayList; -import java.util.HashMap; - -import ellpeck.gemification.GemType; -import ellpeck.gemification.Util; +import ellpeck.gemification.util.GemType; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import java.util.HashMap; + public class CrucibleCraftingManager{ public static final CrucibleCraftingManager instance = new CrucibleCraftingManager(); @@ -72,38 +72,45 @@ public class CrucibleCraftingManager{ stack2[i1] = null; } } - this.recipes.add(new CrucibleRecipe(stack2, output, fluidNeeded, processTimeNeeded)); } @SuppressWarnings("static-access") public ItemStack getCraftingResult(ItemStack[] slots, int minSlot, int maxSlot, GemType currentFluid){ - for (CrucibleRecipe recipe : this.recipes) { - ItemStack[] inputs = recipe.recipeItems; - int k = 0; - for (int j = 0; j < maxSlot - minSlot + 1; j++) { - if (slots[minSlot + j] != null && inputs[j] != null && slots[minSlot + j].getItem() == inputs[j].getItem()){ - if(inputs[j].getItemDamage() == 32767 || inputs[j].getItemDamage() == slots[minSlot + j].getItemDamage()) { - k++; - } - } - } - if (k == maxSlot - minSlot + 1) { - if(currentFluid == recipe.fluidNeeded) { - return recipe.recipeOutput; - } + CrucibleRecipe matchingRecipe = this.matchingRecipe(slots, minSlot, maxSlot); + if(matchingRecipe != null){ + if (currentFluid == matchingRecipe.fluidNeeded){ + return matchingRecipe.recipeOutput; } } return null; } @SuppressWarnings("static-access") - public int getProcessTimeNeeded(ItemStack stack){ - for(CrucibleRecipe recipe : this.recipes){ - if(recipe.recipeOutput == stack){ - return recipe.processTimeNeeded; - } + public int getProcessTimeNeeded(ItemStack[] slots, int minSlot, int maxSlot){ + CrucibleRecipe matchingRecipe = this.matchingRecipe(slots, minSlot, maxSlot); + if(matchingRecipe != null){ + return matchingRecipe.processTimeNeeded; } return 0; } + + @SuppressWarnings("static-access") + public CrucibleRecipe matchingRecipe(ItemStack[] slots, int minSlot, int maxSlot){ + for (CrucibleRecipe recipe : this.recipes){ + ItemStack[] inputs = recipe.recipeItems; + int k = 0; + for (int j = 0; j < maxSlot - minSlot + 1; j++){ + if (slots[minSlot + j] != null && inputs[j] != null && slots[minSlot + j].getItem() == inputs[j].getItem()){ + if(inputs[j].getItemDamage() == 32767 || inputs[j].getItemDamage() == slots[minSlot + j].getItemDamage()) { + k++; + } + } + } + if (k == maxSlot - minSlot + 1){ + return recipe; + } + } + return null; + } } \ No newline at end of file diff --git a/src/main/java/ellpeck/gemification/crafting/CrucibleRecipe.java b/src/main/java/ellpeck/gemification/crafting/CrucibleRecipe.java index decd783b2..5a5c345e8 100644 --- a/src/main/java/ellpeck/gemification/crafting/CrucibleRecipe.java +++ b/src/main/java/ellpeck/gemification/crafting/CrucibleRecipe.java @@ -1,6 +1,6 @@ package ellpeck.gemification.crafting; -import ellpeck.gemification.GemType; +import ellpeck.gemification.util.GemType; import net.minecraft.item.ItemStack; public class CrucibleRecipe{ diff --git a/src/main/java/ellpeck/gemification/CreativeTab.java b/src/main/java/ellpeck/gemification/creative/CreativeTab.java similarity index 78% rename from src/main/java/ellpeck/gemification/CreativeTab.java rename to src/main/java/ellpeck/gemification/creative/CreativeTab.java index 59746ffb5..dcf59ee74 100644 --- a/src/main/java/ellpeck/gemification/CreativeTab.java +++ b/src/main/java/ellpeck/gemification/creative/CreativeTab.java @@ -1,6 +1,7 @@ -package ellpeck.gemification; +package ellpeck.gemification.creative; import ellpeck.gemification.blocks.InitBlocks; +import ellpeck.gemification.util.Util; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -9,7 +10,7 @@ public class CreativeTab extends CreativeTabs{ public static CreativeTab instance = new CreativeTab(); public CreativeTab(){ - super(Gemification.MOD_ID); + super(Util.MOD_ID); } public Item getTabIconItem() { diff --git a/src/main/java/ellpeck/gemification/OreGen.java b/src/main/java/ellpeck/gemification/gen/OreGen.java similarity index 89% rename from src/main/java/ellpeck/gemification/OreGen.java rename to src/main/java/ellpeck/gemification/gen/OreGen.java index f33c78390..b7f42c597 100644 --- a/src/main/java/ellpeck/gemification/OreGen.java +++ b/src/main/java/ellpeck/gemification/gen/OreGen.java @@ -1,7 +1,9 @@ -package ellpeck.gemification; +package ellpeck.gemification.gen; import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.registry.GameRegistry; import ellpeck.gemification.blocks.InitBlocks; +import ellpeck.gemification.util.Util; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.world.World; @@ -48,4 +50,8 @@ public class OreGen implements IWorldGenerator { (new WorldGenMinable(block, meta, maxVeinSize, blockIn)).generate(world, random, posX, posY, posZ); } } + + public static void init(){ + GameRegistry.registerWorldGenerator(new OreGen(), 0); + } } diff --git a/src/main/java/ellpeck/gemification/inventory/GuiHandler.java b/src/main/java/ellpeck/gemification/inventory/GuiHandler.java new file mode 100644 index 000000000..599ee2eb8 --- /dev/null +++ b/src/main/java/ellpeck/gemification/inventory/GuiHandler.java @@ -0,0 +1,50 @@ +package ellpeck.gemification.inventory; + +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import ellpeck.gemification.Gemification; +import ellpeck.gemification.inventory.container.ContainerCrucible; +import ellpeck.gemification.inventory.container.ContainerCrucibleFire; +import ellpeck.gemification.inventory.gui.GuiCrucible; +import ellpeck.gemification.inventory.gui.GuiCrucibleFire; +import ellpeck.gemification.tile.TileEntityBase; +import ellpeck.gemification.tile.TileEntityCrucible; +import ellpeck.gemification.tile.TileEntityCrucibleFire; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public class GuiHandler implements IGuiHandler { + + public static final int guiCrucible = 0; + public static final int guiCrucibleFire = 1; + + public Object getServerGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) { + TileEntityBase tile = (TileEntityBase)world.getTileEntity(x, y, z); + switch (id) { + case guiCrucible: + return new ContainerCrucible(entityPlayer.inventory, (TileEntityCrucible)tile); + case guiCrucibleFire: + return new ContainerCrucibleFire(entityPlayer.inventory, (TileEntityCrucibleFire)tile); + + default: + return null; + } + } + + public Object getClientGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z) { + TileEntityBase tile = (TileEntityBase)world.getTileEntity(x, y, z); + switch (id) { + case guiCrucible: + return new GuiCrucible(entityPlayer.inventory, (TileEntityCrucible)tile); + case guiCrucibleFire: + return new GuiCrucibleFire(entityPlayer.inventory, (TileEntityCrucibleFire)tile); + + default: + return null; + } + } + + public static void init(){ + NetworkRegistry.INSTANCE.registerGuiHandler(Gemification.instance, new GuiHandler()); + } +} diff --git a/src/main/java/ellpeck/gemification/container/ContainerCrucible.java b/src/main/java/ellpeck/gemification/inventory/container/ContainerCrucible.java similarity index 79% rename from src/main/java/ellpeck/gemification/container/ContainerCrucible.java rename to src/main/java/ellpeck/gemification/inventory/container/ContainerCrucible.java index c7268013e..b93f2ffbf 100644 --- a/src/main/java/ellpeck/gemification/container/ContainerCrucible.java +++ b/src/main/java/ellpeck/gemification/inventory/container/ContainerCrucible.java @@ -1,11 +1,14 @@ -package ellpeck.gemification.container; +package ellpeck.gemification.inventory.container; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.gemification.tile.TileEntityCrucible; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.*; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnace; public class ContainerCrucible extends Container { @@ -14,6 +17,8 @@ public class ContainerCrucible extends Container { private int lastCurrentFluidID; private int lastProcessTime; private int lastProcessTimeNeeded; + private int lastBurnTime; + private int lastBurnTimeOfItem; public ContainerCrucible(InventoryPlayer inventoryPlayer, TileEntityCrucible tileCrucible) { this.tileCrucible = tileCrucible; @@ -54,6 +59,8 @@ public class ContainerCrucible extends Container { iCraft.sendProgressBarUpdate(this, 0, this.tileCrucible.currentFluidID); iCraft.sendProgressBarUpdate(this, 1, this.tileCrucible.currentProcessTime); iCraft.sendProgressBarUpdate(this, 2, this.tileCrucible.processTimeNeeded); + iCraft.sendProgressBarUpdate(this, 3, this.tileCrucible.burnTime); + iCraft.sendProgressBarUpdate(this, 4, this.tileCrucible.burnTimeOfItem); } public void detectAndSendChanges(){ @@ -64,11 +71,15 @@ public class ContainerCrucible extends Container { if (this.lastCurrentFluidID != this.tileCrucible.currentFluidID) iCraft.sendProgressBarUpdate(this, 0, this.tileCrucible.currentFluidID); if (this.lastProcessTime != this.tileCrucible.currentProcessTime) iCraft.sendProgressBarUpdate(this, 1, this.tileCrucible.currentProcessTime); if (this.lastProcessTimeNeeded != this.tileCrucible.processTimeNeeded) iCraft.sendProgressBarUpdate(this, 2, this.tileCrucible.processTimeNeeded); + if (this.lastBurnTime != this.tileCrucible.burnTime) iCraft.sendProgressBarUpdate(this, 3, this.tileCrucible.burnTime); + if (this.lastBurnTimeOfItem != this.tileCrucible.burnTimeOfItem) iCraft.sendProgressBarUpdate(this, 4, this.tileCrucible.burnTimeOfItem); } this.lastCurrentFluidID = this.tileCrucible.currentFluidID; this.lastProcessTime = this.tileCrucible.currentProcessTime; this.lastProcessTimeNeeded = this.tileCrucible.processTimeNeeded; + this.lastBurnTime = this.tileCrucible.burnTime; + this.lastBurnTimeOfItem = this.tileCrucible.burnTimeOfItem; } @SideOnly(Side.CLIENT) @@ -76,6 +87,7 @@ public class ContainerCrucible extends Container { if (par1 == 0) this.tileCrucible.currentFluidID = par2; if (par1 == 1) this.tileCrucible.currentProcessTime = par2; if (par1 == 2) this.tileCrucible.processTimeNeeded = par2; - + if (par1 == 3) this.tileCrucible.burnTime = par2; + if (par1 == 4) this.tileCrucible.burnTimeOfItem = par2; } } diff --git a/src/main/java/ellpeck/gemification/inventory/container/ContainerCrucibleFire.java b/src/main/java/ellpeck/gemification/inventory/container/ContainerCrucibleFire.java new file mode 100644 index 000000000..7c4a05a76 --- /dev/null +++ b/src/main/java/ellpeck/gemification/inventory/container/ContainerCrucibleFire.java @@ -0,0 +1,64 @@ +package ellpeck.gemification.inventory.container; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.gemification.tile.TileEntityCrucibleFire; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; + +public class ContainerCrucibleFire extends Container { + + private TileEntityCrucibleFire tileCrucibleFire; + + private int lastBurnTime; + private int lastBurnTimeOfItem; + + public ContainerCrucibleFire(InventoryPlayer inventoryPlayer, TileEntityCrucibleFire tileCrucibleFire) { + this.tileCrucibleFire = tileCrucibleFire; + + this.addSlotToContainer(new Slot(this.tileCrucibleFire, 0, 70, 9)); + + for (int i = 0; i < 3; ++i){ + for (int j = 0; j < 9; ++j){ + this.addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 34 + i * 18)); + } + } + + for (int i = 0; i < 9; ++i){ + this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 92)); + } + } + + public boolean canInteractWith(EntityPlayer player) { + return tileCrucibleFire.isUseableByPlayer(player); + } + + public void addCraftingToCrafters(ICrafting iCraft){ + super.addCraftingToCrafters(iCraft); + + iCraft.sendProgressBarUpdate(this, 0, this.tileCrucibleFire.burnTime); + iCraft.sendProgressBarUpdate(this, 1, this.tileCrucibleFire.burnTimeOfItem); + } + + public void detectAndSendChanges(){ + super.detectAndSendChanges(); + for (Object crafter : this.crafters) { + ICrafting iCraft = (ICrafting) crafter; + + if (this.lastBurnTime != this.tileCrucibleFire.burnTime) iCraft.sendProgressBarUpdate(this, 0, this.tileCrucibleFire.burnTime); + if (this.lastBurnTimeOfItem != this.tileCrucibleFire.burnTimeOfItem) iCraft.sendProgressBarUpdate(this, 1, this.tileCrucibleFire.burnTimeOfItem); + } + + this.lastBurnTime = tileCrucibleFire.burnTime; + this.lastBurnTimeOfItem = tileCrucibleFire.burnTimeOfItem; + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2){ + if (par1 == 0) this.tileCrucibleFire.burnTime = par2; + if (par1 == 1) this.tileCrucibleFire.burnTimeOfItem = par2; + } +} diff --git a/src/main/java/ellpeck/gemification/container/GuiCrucible.java b/src/main/java/ellpeck/gemification/inventory/gui/GuiCrucible.java similarity index 91% rename from src/main/java/ellpeck/gemification/container/GuiCrucible.java rename to src/main/java/ellpeck/gemification/inventory/gui/GuiCrucible.java index 32c4bf7d8..94d6f35be 100644 --- a/src/main/java/ellpeck/gemification/container/GuiCrucible.java +++ b/src/main/java/ellpeck/gemification/inventory/gui/GuiCrucible.java @@ -1,8 +1,8 @@ -package ellpeck.gemification.container; +package ellpeck.gemification.inventory.gui; -import ellpeck.gemification.Gemification; -import ellpeck.gemification.Util; +import ellpeck.gemification.inventory.container.ContainerCrucible; import ellpeck.gemification.tile.TileEntityCrucible; +import ellpeck.gemification.util.Util; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.player.InventoryPlayer; @@ -16,9 +16,9 @@ public class GuiCrucible extends GuiContainer{ private TileEntityCrucible tileCrucible; - public static final ResourceLocation resLoc = new ResourceLocation(Gemification.MOD_ID, "textures/gui/guiCrucible.png"); + public static final ResourceLocation resLoc = new ResourceLocation(Util.MOD_ID, "textures/gui/guiCrucible.png"); - public GuiCrucible(InventoryPlayer inventoryPlayer, TileEntityCrucible tileCrucible) { + public GuiCrucible(InventoryPlayer inventoryPlayer, TileEntityCrucible tileCrucible){ super(new ContainerCrucible(inventoryPlayer, tileCrucible)); this.tileCrucible = tileCrucible; @@ -36,6 +36,11 @@ public class GuiCrucible extends GuiContainer{ this.drawTexturedModalRect(guiLeft + 107, guiTop + 55, 176, 0, i, 45); } + if(this.tileCrucible.burnTime > 0 && this.tileCrucible.burnTimeOfItem > 0) { + int i = this.tileCrucible.getBurnTimeRemainingScaled(13); + this.drawTexturedModalRect(guiLeft + 141, guiTop + 21 + 12 - i, 188, 45 + 12 - i, 14, i + 1); + } + if(this.tileCrucible.currentFluidID == Util.fluidWater.ID) this.drawTexturedModalRect(guiLeft + 141, guiTop + 7, 176, 47, 12, 12); else if(this.tileCrucible.currentFluidID == Util.gemList.get(0).ID) this.drawTexturedModalRect(guiLeft + 141, guiTop + 7, 176, 59, 12, 12); else if(this.tileCrucible.currentFluidID == Util.gemList.get(1).ID) this.drawTexturedModalRect(guiLeft + 141, guiTop + 7, 188, 59, 12, 12); @@ -58,6 +63,7 @@ public class GuiCrucible extends GuiContainer{ @SuppressWarnings("static-access") public void drawScreen(int par1, int par2, float par3){ super.drawScreen(par1, par2, par3); + RenderHelper.enableGUIStandardItemLighting(); GL11.glEnable(GL11.GL_LIGHTING); itemRender.renderItemAndEffectIntoGUI(fontRendererObj, mc.getTextureManager(), tileCrucible.output, guiLeft + 112, guiTop + 65); diff --git a/src/main/java/ellpeck/gemification/inventory/gui/GuiCrucibleFire.java b/src/main/java/ellpeck/gemification/inventory/gui/GuiCrucibleFire.java new file mode 100644 index 000000000..52aeaa8b6 --- /dev/null +++ b/src/main/java/ellpeck/gemification/inventory/gui/GuiCrucibleFire.java @@ -0,0 +1,40 @@ +package ellpeck.gemification.inventory.gui; + +import ellpeck.gemification.inventory.container.ContainerCrucibleFire; +import ellpeck.gemification.tile.TileEntityCrucibleFire; +import ellpeck.gemification.util.Util; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCrucibleFire extends GuiContainer{ + + @SuppressWarnings("all") + private TileEntityCrucibleFire tileCrucibleFire; + + public static final ResourceLocation resLoc = new ResourceLocation(Util.MOD_ID, "textures/gui/guiCrucibleFire.png"); + + public GuiCrucibleFire(InventoryPlayer inventoryPlayer, TileEntityCrucibleFire tileCrucibleFire){ + super(new ContainerCrucibleFire(inventoryPlayer, tileCrucibleFire)); + this.tileCrucibleFire = tileCrucibleFire; + + this.xSize = 176; + this.ySize = 116; + } + + public void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(this.tileCrucibleFire.burnTime > 0 && this.tileCrucibleFire.burnTimeOfItem > 0) { + int i = this.tileCrucibleFire.getBurnTimeRemainingScaled(13); + this.drawTexturedModalRect(guiLeft + 96, guiTop + 10 + 12 - i, 176, 12 - i, 14, i + 1); + } + } + + public void drawScreen(int par1, int par2, float par3){ + super.drawScreen(par1, par2, par3); + } +} diff --git a/src/main/java/ellpeck/gemification/items/ItemGem.java b/src/main/java/ellpeck/gemification/items/ItemGem.java index f1cd1cee6..14d15f6dd 100644 --- a/src/main/java/ellpeck/gemification/items/ItemGem.java +++ b/src/main/java/ellpeck/gemification/items/ItemGem.java @@ -2,9 +2,8 @@ package ellpeck.gemification.items; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.gemification.CreativeTab; -import ellpeck.gemification.Gemification; -import ellpeck.gemification.Util; +import ellpeck.gemification.creative.CreativeTab; +import ellpeck.gemification.util.Util; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -59,7 +58,7 @@ public class ItemGem extends Item { @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconReg){ for (int i = 0; i < Util.gemList.size(); i++) { - textures[i] = iconReg.registerIcon(Gemification.MOD_ID + ":" + this.getUnlocalizedName().substring(5) + Util.gemList.get(i).name.substring(5)); + textures[i] = iconReg.registerIcon(Util.MOD_ID + ":" + this.getUnlocalizedName().substring(5) + Util.gemList.get(i).name.substring(5)); } } diff --git a/src/main/java/ellpeck/gemification/proxy/ClientProxy.java b/src/main/java/ellpeck/gemification/proxy/ClientProxy.java index 140c32140..83836217d 100644 --- a/src/main/java/ellpeck/gemification/proxy/ClientProxy.java +++ b/src/main/java/ellpeck/gemification/proxy/ClientProxy.java @@ -2,10 +2,9 @@ package ellpeck.gemification.proxy; import cpw.mods.fml.client.registry.ClientRegistry; import ellpeck.gemification.blocks.InitBlocks; -import ellpeck.gemification.blocks.models.ModelCrucible; -import ellpeck.gemification.blocks.models.RendererCrucible; -import ellpeck.gemification.blocks.models.RendererHoldingTileEntity; +import ellpeck.gemification.blocks.models.*; import ellpeck.gemification.tile.TileEntityCrucible; +import ellpeck.gemification.tile.TileEntityCrucibleFire; import net.minecraft.item.Item; import net.minecraftforge.client.MinecraftForgeClient; @@ -19,8 +18,11 @@ public class ClientProxy implements IProxy{ public void init() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCrucible.class, new RendererCrucible()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(InitBlocks.blockCrucible), new RendererHoldingTileEntity(new ModelCrucible(), RendererCrucible.resLoc)); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCrucibleFire.class, new RendererCrucibleFire()); + MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(InitBlocks.blockCrucibleFire), new RendererHoldingTileEntity(new ModelCrucibleFire(), RendererCrucibleFire.resLoc)); } public void postInit() { + } } diff --git a/src/main/java/ellpeck/gemification/tile/TileEntityBase.java b/src/main/java/ellpeck/gemification/tile/TileEntityBase.java index 1a92ab6b7..ac5cb633e 100644 --- a/src/main/java/ellpeck/gemification/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/gemification/tile/TileEntityBase.java @@ -1,5 +1,7 @@ package ellpeck.gemification.tile; +import cpw.mods.fml.common.registry.GameRegistry; +import ellpeck.gemification.util.Util; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -19,4 +21,8 @@ public class TileEntityBase extends TileEntity{ this.readFromNBT(packet.func_148857_g()); } + public static void init(){ + GameRegistry.registerTileEntity(TileEntityCrucible.class, Util.MOD_ID + "tileEntityCrucible"); + GameRegistry.registerTileEntity(TileEntityCrucibleFire.class, Util.MOD_ID + "tileEntityCrucibleFire"); + } } diff --git a/src/main/java/ellpeck/gemification/tile/TileEntityCrucible.java b/src/main/java/ellpeck/gemification/tile/TileEntityCrucible.java index 2ff9ace8b..a692b4087 100644 --- a/src/main/java/ellpeck/gemification/tile/TileEntityCrucible.java +++ b/src/main/java/ellpeck/gemification/tile/TileEntityCrucible.java @@ -2,20 +2,14 @@ package ellpeck.gemification.tile; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.gemification.GemType; -import ellpeck.gemification.Util; import ellpeck.gemification.blocks.InitBlocks; import ellpeck.gemification.crafting.CrucibleCraftingManager; import ellpeck.gemification.items.ItemGem; -import net.minecraft.entity.player.EntityPlayer; +import ellpeck.gemification.util.GemType; +import ellpeck.gemification.util.Util; import net.minecraft.init.Items; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityCrucible extends TileEntityInventoryBase{ @@ -32,8 +26,9 @@ public class TileEntityCrucible extends TileEntityInventoryBase{ public int currentFluidID; public int currentProcessTime; public int processTimeNeeded; + public int burnTime; + public int burnTimeOfItem; - private boolean isCrafting = false; public static ItemStack output; public TileEntityCrucible(){ @@ -48,41 +43,65 @@ public class TileEntityCrucible extends TileEntityInventoryBase{ this.slots = new ItemStack[12]; } + @SuppressWarnings("static-access") public void updateEntity(){ + boolean isCraftingFlag = this.isCrafting(); if(!worldObj.isRemote){ + if(!this.isCrafting()) this.output = CrucibleCraftingManager.instance.getCraftingResult(slots, 0, 8, currentFluid); + this.getBurnFromBelow(); this.craft(); this.addWaterByWaterSlot(); this.colorGemWater(); this.currentFluidID = this.currentFluid.ID; } + if(isCraftingFlag != this.isCrafting()){ + this.markDirty(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + + public boolean isCrafting(){ + return this.currentProcessTime > 0; } @SuppressWarnings("static-access") public void craft(){ - if(!this.isCrafting){ - this.output = CrucibleCraftingManager.instance.getCraftingResult(slots, 0, 8, currentFluid); - if (output != null) { - this.processTimeNeeded = CrucibleCraftingManager.instance.getProcessTimeNeeded(output); - for(int i = 0; i <= 8; i++){ - this.slots[i].stackSize--; - if (this.slots[i].stackSize == 0){ - this.slots[i] = slots[i].getItem().getContainerItem(slots[i]); + if(this.burnTime > 0){ + if (!this.isCrafting()){ + if (output != null && (this.slots[slotOutput] == null || this.slots[slotOutput].isItemEqual(output))) { + this.processTimeNeeded = this.currentProcessTime = CrucibleCraftingManager.instance.getProcessTimeNeeded(slots, 0, 8); + for (int i = 0; i <= 8; i++){ + this.slots[i].stackSize--; + if (this.slots[i].stackSize == 0) { + this.slots[i] = slots[i].getItem().getContainerItem(slots[i]); + } } + this.currentFluid = Util.fluidNone; + } + } + if(this.isCrafting()){ + this.currentProcessTime--; + if (this.currentProcessTime <= 0){ + if (this.slots[slotOutput] == null) this.slots[slotOutput] = output.copy(); + else if (this.slots[slotOutput].getItem() == output.getItem()) + this.slots[slotOutput].stackSize += output.stackSize; + this.output = null; + this.currentProcessTime = 0; + this.processTimeNeeded = 0; } - this.currentFluid = Util.fluidNone; - this.isCrafting = true; } } - if(this.isCrafting){ - this.currentProcessTime++; - if(this.currentProcessTime >= this.processTimeNeeded){ - if(this.slots[slotOutput] == null) this.slots[slotOutput] = output.copy(); - else if(this.slots[slotOutput].getItem() == output.getItem()) this.slots[slotOutput].stackSize += output.stackSize; - this.output = null; - this.currentProcessTime = 0; - this.processTimeNeeded = 0; - this.isCrafting = false; - } + } + + public void getBurnFromBelow(){ + TileEntity tileDown = worldObj.getTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); + if(tileDown instanceof TileEntityCrucibleFire){ + this.burnTime = ((TileEntityCrucibleFire)tileDown).burnTime; + this.burnTimeOfItem = ((TileEntityCrucibleFire)tileDown).burnTimeOfItem; + } + else{ + this.burnTime = 0; + this.burnTimeOfItem = 0; } } @@ -110,12 +129,27 @@ public class TileEntityCrucible extends TileEntityInventoryBase{ public void writeToNBT(NBTTagCompound compound){ super.writeToNBT(compound); + compound.setInteger("CurrentFluidID", this.currentFluidID); + compound.setInteger("ProcessTime", this.currentProcessTime); + compound.setInteger("ProcessTimeNeeded", this.processTimeNeeded); + + if(output != null) { + NBTTagCompound compoundOutput = new NBTTagCompound(); + compoundOutput = output.writeToNBT(compoundOutput); + compound.setTag("Output", compoundOutput); + } } + @SuppressWarnings("static-access") public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); + this.currentFluidID = compound.getInteger("CurrentFluidID"); + this.currentProcessTime = compound.getInteger("ProcessTime"); + this.processTimeNeeded = compound.getInteger("ProcessTimeNeeded"); + this.output = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("Output")); + if(this.currentFluidID == Util.fluidWater.ID) this.currentFluid = Util.fluidWater; else if(this.currentFluidID == Util.fluidNone.ID) this.currentFluid = Util.fluidNone; else this.currentFluid = Util.gemList.get(this.currentFluidID); @@ -123,6 +157,11 @@ public class TileEntityCrucible extends TileEntityInventoryBase{ @SideOnly(Side.CLIENT) public int getCraftProcessScaled(int par1){ - return this.currentProcessTime * par1 / this.processTimeNeeded; + return (this.processTimeNeeded-this.currentProcessTime) * par1 / this.processTimeNeeded; + } + + @SideOnly(Side.CLIENT) + public int getBurnTimeRemainingScaled(int i){ + return this.burnTime * i / this.burnTimeOfItem; } } diff --git a/src/main/java/ellpeck/gemification/tile/TileEntityCrucibleFire.java b/src/main/java/ellpeck/gemification/tile/TileEntityCrucibleFire.java new file mode 100644 index 000000000..27606566e --- /dev/null +++ b/src/main/java/ellpeck/gemification/tile/TileEntityCrucibleFire.java @@ -0,0 +1,73 @@ +package ellpeck.gemification.tile; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.gemification.blocks.InitBlocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; + +public class TileEntityCrucibleFire extends TileEntityInventoryBase{ + + public int burnTime; + public int burnTimeOfItem; + + public TileEntityCrucibleFire(){ + this.slots = new ItemStack[1]; + } + + public void updateEntity(){ + boolean isBurningFlag = this.isBurning(); + if(!worldObj.isRemote){ + this.burnFuel(); + } + if(isBurningFlag != this.isBurning()){ + this.markDirty(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + + public void burnFuel(){ + if(this.burnTime <= 0){ + if (this.slots[0] != null) { + this.burnTimeOfItem = this.burnTime = TileEntityFurnace.getItemBurnTime(this.slots[0]); + this.slots[0].stackSize--; + if (this.slots[0].stackSize == 0){ + this.slots[0] = slots[0].getItem().getContainerItem(slots[0]); + } + } + } + if(this.burnTime > 0){ + this.burnTime--; + if(this.burnTime <= 0){ + this.burnTimeOfItem = 0; + this.burnTime = 0; + } + } + } + + public String getInventoryName() { + return InitBlocks.blockCrucibleFire.getUnlocalizedName().substring(5); + } + + public void writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); + compound.setInteger("BurnTime", this.burnTime); + compound.setInteger("BurnTimeOfItem", this.burnTimeOfItem); + } + + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + this.burnTime = compound.getInteger("BurnTime"); + this.burnTimeOfItem = compound.getInteger("BurnTimeOfItem"); + } + + @SideOnly(Side.CLIENT) + public int getBurnTimeRemainingScaled(int i){ + return this.burnTime * i / this.burnTimeOfItem; + } + + public boolean isBurning(){ + return this.burnTime > 0; + } +} diff --git a/src/main/java/ellpeck/gemification/tile/TileEntityInventoryBase.java b/src/main/java/ellpeck/gemification/tile/TileEntityInventoryBase.java index ea74feaa2..6502d3d11 100644 --- a/src/main/java/ellpeck/gemification/tile/TileEntityInventoryBase.java +++ b/src/main/java/ellpeck/gemification/tile/TileEntityInventoryBase.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -public class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ +public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ public ItemStack slots[]; @@ -80,10 +80,6 @@ public class TileEntityInventoryBase extends TileEntityBase implements ISidedInv this.slots[i] = stack; } - public String getInventoryName() { - return null; - } - public int getSizeInventory() { return slots.length; } diff --git a/src/main/java/ellpeck/gemification/GemType.java b/src/main/java/ellpeck/gemification/util/GemType.java similarity index 88% rename from src/main/java/ellpeck/gemification/GemType.java rename to src/main/java/ellpeck/gemification/util/GemType.java index 0097c0b5f..ddaed25cb 100644 --- a/src/main/java/ellpeck/gemification/GemType.java +++ b/src/main/java/ellpeck/gemification/util/GemType.java @@ -1,4 +1,4 @@ -package ellpeck.gemification; +package ellpeck.gemification.util; public class GemType { diff --git a/src/main/java/ellpeck/gemification/Util.java b/src/main/java/ellpeck/gemification/util/Util.java similarity index 84% rename from src/main/java/ellpeck/gemification/Util.java rename to src/main/java/ellpeck/gemification/util/Util.java index 492b5e34c..4e593a4e3 100644 --- a/src/main/java/ellpeck/gemification/Util.java +++ b/src/main/java/ellpeck/gemification/util/Util.java @@ -1,4 +1,4 @@ -package ellpeck.gemification; +package ellpeck.gemification.util; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; @@ -8,6 +8,10 @@ import java.util.ArrayList; public class Util { + public static final String MOD_ID = "gemification"; + public static final String NAME = "Gemification"; + public static final String VERSION = "1.7.10-1.0.1"; + public static ArrayList gemList = new ArrayList(); public static final GemType fluidOnyx = new GemType(0, "Onyx", true); @@ -33,8 +37,7 @@ public class Util { return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); } - public static String shiftForInfo(){ - return (EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.shiftForInfo.desc")); + public static String shiftForInfo() { + return ((char)167+"2" + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.shiftForInfo.desc")); } - } diff --git a/src/main/resources/assets/gemification/textures/blocks/models/modelCrucibleFire.png b/src/main/resources/assets/gemification/textures/blocks/models/modelCrucibleFire.png new file mode 100644 index 000000000..7bb1773ae Binary files /dev/null and b/src/main/resources/assets/gemification/textures/blocks/models/modelCrucibleFire.png differ