From fd15ae499c11112c282a93c6cf342bc88698e8ac Mon Sep 17 00:00:00 2001 From: Alkalus Date: Mon, 20 Nov 2017 16:48:02 +1000 Subject: + Added a faster TC Alchemical Furnace. + Added a Wither-Proof block. % Tweaked Grindle GUI. --- .../xmod/thaumcraft/common/HANDLER_Thaumcraft.java | 27 ++ .../common/block/BlockFastAlchemyFurnace.java | 94 +++++ .../thaumcraft/common/block/TC_BlockHandler.java | 13 + .../common/tile/TileFastAlchemyFurnace.java | 426 +++++++++++++++++++++ 4 files changed, 560 insertions(+) create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/HANDLER_Thaumcraft.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java (limited to 'src/Java/gtPlusPlus/xmod/thaumcraft') diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/HANDLER_Thaumcraft.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/HANDLER_Thaumcraft.java new file mode 100644 index 0000000000..7c5d2407cd --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/HANDLER_Thaumcraft.java @@ -0,0 +1,27 @@ +package gtPlusPlus.xmod.thaumcraft.common; + +import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.xmod.thaumcraft.common.block.TC_BlockHandler; + +public class HANDLER_Thaumcraft { + + public static void preInit(){ + if (LoadedMods.Thaumcraft){ + TC_BlockHandler.run(); + } + } + + public static void init(){ + if (LoadedMods.Thaumcraft){ + + } + } + + public static void postInit(){ + if (LoadedMods.Thaumcraft){ + + } + } + + +} diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java new file mode 100644 index 0000000000..3d570dfe7e --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java @@ -0,0 +1,94 @@ +package gtPlusPlus.xmod.thaumcraft.common.block; + +import java.util.Random; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import thaumcraft.common.blocks.BlockAlchemyFurnace; + +public class BlockFastAlchemyFurnace extends BlockAlchemyFurnace { + + public BlockFastAlchemyFurnace() { + this.setCreativeTab(AddToCreativeTab.tabMachines); + this.setBlockName("blockFastAlchemyFurnace"); + GameRegistry.registerBlock(this, "blockFastAlchemyFurnace"); + LanguageRegistry.addName(this, "Upgraded Alchemical Furnace"); + } + + public int func_149692_a(int metadata) { + if ((metadata == 1) || (metadata == 4)) + return 3; + if (metadata == 3) + return 9; + if (metadata == 2) + return 1; + return 0; + } + + public TileEntity createTileEntity(World world, int metadata) { + if (metadata == 0){ + return new TileFastAlchemyFurnace(); + } + return null; + } + + public int getLightValue(IBlockAccess world, int x, int y, int z){ + Block block = world.getBlock(x, y, z); + if (block != this) + { + return block.getLightValue(world, x, y, z); + } + return getLightValue(); + } + + /*public int func_149736_g(World world, int x, int y, int z, int rs) { + + }*/ + + public TileEntity func_149915_a(World var1, int md) { + return null; + } + + /* public void func_149749_a(World world, int x, int y, int z, Block bl, int md) { + + }*/ + + @SideOnly(Side.CLIENT) + public void func_149734_b(final World world, final int x, final int y, final int z, final Random rand) { + /*final int meta = world.func_72805_g(x, y, z); + if (meta == 0) { + final TileAlchemyFurnaceAdvanced tile = (TileAlchemyFurnaceAdvanced) world.func_147438_o(x, y, z); + if (tile != null && tile.vis > 0) { + final FXSlimyBubble ef = new FXSlimyBubble(world, (double) (x + rand.nextFloat()), (double) (y + 1), + (double) (z + rand.nextFloat()), 0.06f + rand.nextFloat() * 0.06f); + ef.func_82338_g(0.8f); + ef.func_70538_b(0.6f - rand.nextFloat() * 0.2f, 0.0f, 0.6f + rand.nextFloat() * 0.2f); + ParticleEngine.instance.addEffect(world, (EntityFX) ef); + if (rand.nextInt(50) == 0) { + final double var21 = x + rand.nextFloat(); + final double var22 = y + this.field_149756_F; + final double var23 = z + rand.nextFloat(); + world.func_72980_b(var21, var22, var23, "liquid.lavapop", 0.1f + rand.nextFloat() * 0.1f, + 0.9f + rand.nextFloat() * 0.15f, false); + } + final int q = rand.nextInt(2); + final int w = rand.nextInt(2); + final FXSlimyBubble ef2 = new FXSlimyBubble(world, x - 0.6 + rand.nextFloat() * 0.2 + q * 2, + (double) (y + 2), z - 0.6 + rand.nextFloat() * 0.2 + w * 2, 0.06f + rand.nextFloat() * 0.06f); + ef2.func_82338_g(0.8f); + ef2.func_70538_b(0.6f - rand.nextFloat() * 0.2f, 0.0f, 0.6f + rand.nextFloat() * 0.2f); + ParticleEngine.instance.addEffect(world, (EntityFX) ef2); + } + } + super.func_149734_b(world, x, y, z, rand);*/ + } + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java new file mode 100644 index 0000000000..fade8601f0 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java @@ -0,0 +1,13 @@ +package gtPlusPlus.xmod.thaumcraft.common.block; + +import net.minecraft.block.Block; + +public class TC_BlockHandler { + + static Block blockFurnace; + + public static void run(){ + blockFurnace = new BlockFastAlchemyFurnace(); + } + +} diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java new file mode 100644 index 0000000000..226c7cf393 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java @@ -0,0 +1,426 @@ +package gtPlusPlus.xmod.thaumcraft.common.tile; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.world.EnumSkyBlock; +import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; +import thaumcraft.common.tiles.TileAlchemyFurnace; +import thaumcraft.common.tiles.TileAlembic; +import thaumcraft.common.tiles.TileBellows; + +public class TileFastAlchemyFurnace extends TileAlchemyFurnace { + private static final int[] slots_bottom = {1}; + private static final int[] slots_top = new int[0]; + private static final int[] slots_sides = {0}; + public AspectList aspects; + public int vis; + private int maxVis; + public int smeltTime; + int bellows; + boolean speedBoost; + private ItemStack[] furnaceItemStacks; + public int furnaceBurnTime; + public int currentItemBurnTime; + public int furnaceCookTime; + private String customName; + int count; + + public TileFastAlchemyFurnace() { + this.aspects = new AspectList(); + + this.maxVis = 100; + this.smeltTime = 25; + this.bellows = -1; + this.speedBoost = false; + + this.furnaceItemStacks = new ItemStack[2]; + + this.count = 0; + } + + public int func_70302_i_() { + return this.furnaceItemStacks.length; + } + + public ItemStack func_70301_a(int par1) { + return this.furnaceItemStacks[par1]; + } + + public ItemStack func_70298_a(int par1, int par2) { + if (this.furnaceItemStacks[par1] != null) { + if (this.furnaceItemStacks[par1].stackSize <= par2) { + ItemStack itemstack = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return itemstack; + } + + ItemStack itemstack = this.furnaceItemStacks[par1].splitStack(par2); + + if (this.furnaceItemStacks[par1].stackSize == 0) { + this.furnaceItemStacks[par1] = null; + } + + return itemstack; + } + + return null; + } + + public ItemStack func_70304_b(int par1) { + if (this.furnaceItemStacks[par1] != null) { + ItemStack itemstack = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return itemstack; + } + + return null; + } + + public void func_70299_a(int par1, ItemStack par2ItemStack) { + this.furnaceItemStacks[par1] = par2ItemStack; + + if ((par2ItemStack == null) || (par2ItemStack.stackSize <= func_70297_j_())) + return; + par2ItemStack.stackSize = func_70297_j_(); + } + + public String func_145825_b() { + return ((func_145818_k_()) ? this.customName : "container.alchemyfurnace"); + } + + public boolean func_145818_k_() { + return ((this.customName != null) && (this.customName.length() > 0)); + } + + public void setGuiDisplayName(String par1Str) { + this.customName = par1Str; + } + + public void readCustomNBT(NBTTagCompound nbttagcompound) { + this.furnaceBurnTime = nbttagcompound.getShort("BurnTime"); + this.vis = nbttagcompound.getShort("Vis"); + } + + public void writeCustomNBT(NBTTagCompound nbttagcompound) { + nbttagcompound.setShort("BurnTime", (short) this.furnaceBurnTime); + nbttagcompound.setShort("Vis", (short) this.vis); + } + + public void func_145839_a(NBTTagCompound nbtCompound) { + super.func_145839_a(nbtCompound); + NBTTagList nbttaglist = nbtCompound.getTagList("Items", 10); + this.furnaceItemStacks = new ItemStack[func_70302_i_()]; + + for (int i = 0; i < nbttaglist.tagCount(); ++i) { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + byte b0 = nbttagcompound1.getByte("Slot"); + + if ((b0 < 0) || (b0 >= this.furnaceItemStacks.length)) + continue; + this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + + this.speedBoost = nbtCompound.getBoolean("speedBoost"); + this.furnaceCookTime = nbtCompound.getShort("CookTime"); + this.currentItemBurnTime = TileEntityFurnace.getItemBurnTime(this.furnaceItemStacks[1]); + + if (nbtCompound.hasKey("CustomName")) { + this.customName = nbtCompound.getString("CustomName"); + } + + this.aspects.readFromNBT(nbtCompound); + this.vis = this.aspects.visSize(); + } + + public void func_145841_b(NBTTagCompound nbtCompound) { + super.func_145841_b(nbtCompound); + nbtCompound.setBoolean("speedBoost", this.speedBoost); + nbtCompound.setShort("CookTime", (short) this.furnaceCookTime); + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.furnaceItemStacks.length; ++i) { + if (this.furnaceItemStacks[i] == null) + continue; + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + this.furnaceItemStacks[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + + nbtCompound.setTag("Items", nbttaglist); + + if (func_145818_k_()) { + nbtCompound.setString("CustomName", this.customName); + } + + this.aspects.writeToNBT(nbtCompound); + } + + public int func_70297_j_() { + return 64; + } + + @SideOnly(Side.CLIENT) + public int getCookProgressScaled(int par1) { + if (this.smeltTime <= 0) + this.smeltTime = 1; + return (this.furnaceCookTime * par1 / this.smeltTime); + } + + @SideOnly(Side.CLIENT) + public int getContentsScaled(int par1) { + return (this.vis * par1 / this.maxVis); + } + + @SideOnly(Side.CLIENT) + public int getBurnTimeRemainingScaled(int par1) { + if (this.currentItemBurnTime == 0) { + this.currentItemBurnTime = 200; + } + + return (this.furnaceBurnTime * par1 / this.currentItemBurnTime); + } + + public boolean isBurning() { + return (this.furnaceBurnTime > 0); + } + + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + super.onDataPacket(net, pkt); + if (this.worldObj != null) + this.worldObj.updateLightByType(EnumSkyBlock.Block, this.xCoord, this.yCoord, + this.zCoord); + } + + public boolean canUpdate() { + return true; + } + + public void func_145845_h() { + boolean flag = this.furnaceBurnTime > 0; + boolean flag1 = false; + this.count += 1; + if (this.furnaceBurnTime > 0) { + this.furnaceBurnTime -= 1; + } + + if (!(this.worldObj.isRemote)) { + if (this.bellows < 0) + getBellows(); + + if ((this.count % ((this.speedBoost) ? 20 : 40) == 0) && (this.aspects.size() > 0)) { + AspectList exlude = new AspectList(); + int deep = 0; + TileEntity tile = null; + while (deep < 5) { + ++deep; + tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, + this.zCoord); + if (!(tile instanceof TileAlembic)) + break; + TileAlembic alembic = (TileAlembic) tile; + if ((alembic.aspect != null) && (alembic.amount < alembic.maxAmount) + && (this.aspects.getAmount(alembic.aspect) > 0)) { + takeFromContainer(alembic.aspect, 1); + alembic.addToContainer(alembic.aspect, 1); + exlude.merge(alembic.aspect, 1); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, + this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, + this.zCoord); + } + tile = null; + } + + deep = 0; + while (deep < 5) { + ++deep; + tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, + this.zCoord); + if (!(tile instanceof TileAlembic)) + break; + TileAlembic alembic = (TileAlembic) tile; + if ((alembic.aspect == null) || (alembic.amount == 0)) + ; + Aspect as = null; + if (alembic.aspectFilter == null) { + as = takeRandomAspect(exlude); + } else if (takeFromContainer(alembic.aspectFilter, 1)) { + as = alembic.aspectFilter; + } + + if (as != null) { + alembic.addToContainer(as, 1); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, + this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, + this.zCoord); + break; + } + + } + + } + + if ((this.furnaceBurnTime == 0) && (canSmelt())) { + this.currentItemBurnTime = (this.furnaceBurnTime = TileEntityFurnace + .getItemBurnTime(this.furnaceItemStacks[1])); + + if (this.furnaceBurnTime > 0) { + flag1 = true; + this.speedBoost = false; + + if (this.furnaceItemStacks[1] != null) { + if (this.furnaceItemStacks[1].isItemEqual(new ItemStack(ConfigItems.itemResource, 1, 0))) { + this.speedBoost = true; + } + this.furnaceItemStacks[1].stackSize -= 1; + + if (this.furnaceItemStacks[1].stackSize == 0) { + this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem() + .getContainerItem(this.furnaceItemStacks[1]); + } + } + } + } + + if ((isBurning()) && (canSmelt())) { + this.furnaceCookTime += 1; + + if (this.furnaceCookTime >= this.smeltTime) { + this.furnaceCookTime = 0; + smeltItem(); + flag1 = true; + } + } else { + this.furnaceCookTime = 0; + } + + if (flag != this.furnaceBurnTime > 0) { + flag1 = true; + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + } + + if (!(flag1)) + return; + markDirty(); + } + + private boolean canSmelt() { + if (this.furnaceItemStacks[0] == null) { + return false; + } + + AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); + al = ThaumcraftCraftingManager.getBonusTags(this.furnaceItemStacks[0], al); + + if ((al == null) || (al.size() == 0)) + return false; + int vs = al.visSize(); + if (vs > this.maxVis - this.vis) + return false; + this.smeltTime = (int) (vs * 10 * (1.0F - (0.125F * this.bellows))); + return true; + } + + public void getBellows() { + this.bellows = TileBellows.getBellows(this.worldObj, this.xCoord, this.yCoord, + this.zCoord, ForgeDirection.VALID_DIRECTIONS); + } + + public void smeltItem() { + if (!(canSmelt())) { + return; + } + AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); + al = ThaumcraftCraftingManager.getBonusTags(this.furnaceItemStacks[0], al); + + for (Aspect a : al.getAspects()) { + this.aspects.add(a, al.getAmount(a)); + } + + this.vis = this.aspects.visSize(); + + this.furnaceItemStacks[0].stackSize -= 1; + + if (this.furnaceItemStacks[0].stackSize > 0) + return; + this.furnaceItemStacks[0] = null; + } + + public static boolean isItemFuel(ItemStack par0ItemStack) { + return (TileEntityFurnace.getItemBurnTime(par0ItemStack) > 0); + } + + public boolean func_70300_a(EntityPlayer par1EntityPlayer) { + return (this.worldObj.getTileEntity(this.xCoord, this.yCoord, + this.zCoord) == this); + } + + public void func_70295_k_() { + } + + public void func_70305_f() { + } + + public boolean func_94041_b(int par1, ItemStack par2ItemStack) { + if (par1 == 0) { + AspectList al = ThaumcraftCraftingManager.getObjectTags(par2ItemStack); + al = ThaumcraftCraftingManager.getBonusTags(par2ItemStack, al); + if ((al != null) && (al.size() > 0)) + return true; + } + return ((par1 == 1) ? isItemFuel(par2ItemStack) : false); + } + + public int[] func_94128_d(int par1) { + return ((par1 == 1) ? slots_top : (par1 == 0) ? slots_bottom : slots_sides); + } + + public boolean func_102007_a(int par1, ItemStack par2ItemStack, int par3) { + return ((par3 == 1) ? false : func_94041_b(par1, par2ItemStack)); + } + + public boolean func_102008_b(int par1, ItemStack par2ItemStack, int par3) { + return ((par3 != 0) || (par1 != 1) || (par2ItemStack.getItem() == Items.bucket)); + } + + public Aspect takeRandomAspect(AspectList exlude) { + if (this.aspects.size() > 0) { + AspectList temp = this.aspects.copy(); + if (exlude.size() > 0) + for (Aspect a : exlude.getAspects()) + temp.remove(a); + if (temp.size() > 0) { + Aspect tag = temp.getAspects()[this.worldObj.rand.nextInt(temp.getAspects().length)]; + this.aspects.remove(tag, 1); + this.vis -= 1; + return tag; + } + } + return null; + } + + public boolean takeFromContainer(Aspect tag, int amount) { + if ((this.aspects != null) && (this.aspects.getAmount(tag) >= amount)) { + this.aspects.remove(tag, amount); + this.vis -= amount; + return true; + } + return false; + } +} \ No newline at end of file -- cgit From e480daed410bd80d5eda9abbd37f7bd96021e911 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Mon, 20 Nov 2017 20:19:10 +1000 Subject: $ Fixed the Upgraded Alchemical Furnace being built from heavily obfuscated code. % Adjusted Wither Guard recipe to now output 32x per craft, at the added cost of a Netherstar per craft. % Small formatting changes. --- src/Java/gtPlusPlus/core/handler/GuiHandler.java | 24 +- .../gtPlusPlus/core/recipe/RECIPES_General.java | 41 +-- src/Java/gtPlusPlus/core/util/item/ItemUtils.java | 45 +-- .../common/block/BlockFastAlchemyFurnace.java | 254 +++++++++++--- .../common/tile/TileFastAlchemyFurnace.java | 388 +++++++++++---------- 5 files changed, 461 insertions(+), 291 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/thaumcraft') diff --git a/src/Java/gtPlusPlus/core/handler/GuiHandler.java b/src/Java/gtPlusPlus/core/handler/GuiHandler.java index 124b01a2c0..6791289f9f 100644 --- a/src/Java/gtPlusPlus/core/handler/GuiHandler.java +++ b/src/Java/gtPlusPlus/core/handler/GuiHandler.java @@ -3,12 +3,24 @@ package gtPlusPlus.core.handler; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; import gtPlusPlus.GTplusplus; -import gtPlusPlus.core.container.*; +import gtPlusPlus.core.container.Container_BackpackBase; +import gtPlusPlus.core.container.Container_FishTrap; +import gtPlusPlus.core.container.Container_Grindle; +import gtPlusPlus.core.container.Container_ModularityTable; +import gtPlusPlus.core.container.Container_ProjectTable; +import gtPlusPlus.core.container.Container_TradeTable; +import gtPlusPlus.core.container.Container_Workbench; +import gtPlusPlus.core.container.Container_WorkbenchAdvanced; import gtPlusPlus.core.gui.beta.Gui_ID_Registry; import gtPlusPlus.core.gui.beta.MU_GuiId; import gtPlusPlus.core.gui.item.GuiBaseBackpack; import gtPlusPlus.core.gui.item.GuiBaseGrindle; -import gtPlusPlus.core.gui.machine.*; +import gtPlusPlus.core.gui.machine.GUI_FishTrap; +import gtPlusPlus.core.gui.machine.GUI_ModularityTable; +import gtPlusPlus.core.gui.machine.GUI_ProjectTable; +import gtPlusPlus.core.gui.machine.GUI_TradeTable; +import gtPlusPlus.core.gui.machine.GUI_Workbench; +import gtPlusPlus.core.gui.machine.GUI_WorkbenchAdvanced; import gtPlusPlus.core.interfaces.IGuiManager; import gtPlusPlus.core.inventories.BaseInventoryBackpack; import gtPlusPlus.core.inventories.BaseInventoryGrindle; @@ -34,8 +46,8 @@ public class GuiHandler implements IGuiHandler { public static final int GUI5 = 4; //Workbench Adv public static final int GUI6 = 5; //Fish trap public static final int GUI7 = 6; //Trade table - public static final int GUI8 = 7; // - public static final int GUI9 = 8; // + public static final int GUI8 = 7; //Alchemical Furnace + public static final int GUI9 = 8; //Grindle @@ -83,7 +95,7 @@ public class GuiHandler implements IGuiHandler { return new Container_TradeTable(player.inventory, (TileEntityTradeTable)te); } } - + if (ID == GUI9){ return new Container_Grindle(player, player.inventory, new BaseInventoryGrindle(player.getHeldItem())); } @@ -132,7 +144,7 @@ public class GuiHandler implements IGuiHandler { return new GUI_TradeTable(player.inventory, (TileEntityTradeTable)te, ((TileEntityBase) te).getOwner()); } } - + if (ID == GUI9){ return new GuiBaseGrindle(new Container_Grindle(player, player.inventory, new BaseInventoryGrindle(player.getHeldItem()))); } diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java index e9a2ee86b4..f5f793da77 100644 --- a/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java +++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_General.java @@ -1,28 +1,19 @@ package gtPlusPlus.core.recipe; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.fluid.FluidUtils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.recipe.RecipeUtils; -import gtPlusPlus.core.util.reflect.AddGregtechRecipe; -import gtPlusPlus.core.world.darkworld.Dimension_DarkWorld; import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; public class RECIPES_General { @@ -102,18 +93,18 @@ public class RECIPES_General { "stickWood", "treeSapling", "stickWood", "stickWood", "dustBone", "stickWood", ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Rainforest))){ - Utils.LOG_INFO("Added a recipe for Rainforest oak Saplings."); + Utils.LOG_INFO("Added a recipe for Rainforest oak Saplings."); } //Iron bars - ItemStack ironBars = ItemUtils.getItemStack("minecraft:iron_bars", 1); + final ItemStack ironBars = ItemUtils.getItemStack("minecraft:iron_bars", 1); //Fish Trap if (RecipeUtils.recipeBuilder( ironBars, ironBars, ironBars, ironBars, "frameGtWroughtIron", ironBars, ironBars, ironBars, ironBars, ItemUtils.getSimpleStack(ModBlocks.blockFishTrap))){ - Utils.LOG_INFO("Added a recipe for the Fish Trap."); + Utils.LOG_INFO("Added a recipe for the Fish Trap."); } //Alkalus Coin @@ -122,31 +113,31 @@ public class RECIPES_General { "gemFlawlessRuby", ItemList.Credit_Greg_Naquadah.get(1), "gemFlawlessSapphire", "gemExquisiteEmerald", "gemFlawlessEmerald", "gemExquisiteSapphire", ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk))){ - Utils.LOG_INFO("Added a recipe for The Alkalus Disk."); + Utils.LOG_INFO("Added a recipe for The Alkalus Disk."); } - String fancyGems[] = new String[]{"gemExquisiteDiamond", "gemExquisiteEmerald", "gemExquisiteRuby", "gemExquisiteSapphire"}; - ItemStack gemShards[] = new ItemStack[]{ItemUtils.simpleMetaStack(ModItems.itemGemShards, 0, 1), + final String fancyGems[] = new String[]{"gemExquisiteDiamond", "gemExquisiteEmerald", "gemExquisiteRuby", "gemExquisiteSapphire"}; + final ItemStack gemShards[] = new ItemStack[]{ItemUtils.simpleMetaStack(ModItems.itemGemShards, 0, 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 1, 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 2, 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 3, 1)}; - + int l=0; - for (String gem : fancyGems){ + for (final String gem : fancyGems){ GameRegistry.addShapelessRecipe( gemShards[l], ItemUtils.getItemStackOfAmountFromOreDict(gem, 1), new ItemStack(ModItems.itemAlkalusDisk, 1, OreDictionary.WILDCARD_VALUE)); l++; } - + RecipeUtils.addShapedGregtechRecipe( "stickBlackSteel", "plateTungstenSteel", "stickBlackSteel", - "plateTungstenSteel", "blockIron", "plateTungstenSteel", - "stickBlackSteel", "plateTungstenSteel", "stickBlackSteel", - ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard)); + "plateTungstenSteel", ItemUtils.getSimpleStack(Items.nether_star), "plateTungstenSteel", + "stickBlackSteel", "plateTungstenSteel", "stickBlackSteel", + ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard, 32)); - //Alkalus Coin + //Alkalus Coin /*AddGregtechRecipe.addAssemblylineRecipe( ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk), 288000, @@ -160,16 +151,16 @@ public class RECIPES_General { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 16L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 16L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 16L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NiobiumTitanium, 2L)}, + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NiobiumTitanium, 2L)}, new FluidStack[]{ Materials.Osmium.getMolten(144*32), Materials.Europium.getFluid(144*8)}, ItemUtils.getSimpleStack(Dimension_DarkWorld.portalItem), 30*20*60, 100000);*/ - - } } +} + diff --git a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java index 337e301414..3680dfb59d 100644 --- a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java +++ b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java @@ -42,6 +42,9 @@ public class ItemUtils { public static ItemStack getSimpleStack(final Block x){ return getSimpleStack(Item.getItemFromBlock(x), 1); } + public static ItemStack getSimpleStack(final Block x, final int i){ + return getSimpleStack(Item.getItemFromBlock(x), i); + } public static ItemStack getSimpleStack(final Item x, final int i){ try { final ItemStack r = new ItemStack(x, i); @@ -61,8 +64,8 @@ public class ItemUtils { } public static final int WILDCARD_VALUE = Short.MAX_VALUE; - public static ItemStack getWildcardStack(Item x){ - ItemStack y = new ItemStack(x, 1, WILDCARD_VALUE); + public static ItemStack getWildcardStack(final Item x){ + final ItemStack y = new ItemStack(x, 1, WILDCARD_VALUE); return y; } @@ -265,8 +268,8 @@ public class ItemUtils { //Adds a check to grab dusts using GT methodology if possible. ItemStack returnValue = null; if (oredictName.toLowerCase().contains("dust")){ - String MaterialName = oredictName.toLowerCase().replace("dust", ""); - Materials m = Materials.get(MaterialName); + final String MaterialName = oredictName.toLowerCase().replace("dust", ""); + final Materials m = Materials.get(MaterialName); returnValue = getGregtechDust(m, amount); if (returnValue != null){ return returnValue; @@ -284,7 +287,7 @@ public class ItemUtils { Utils.LOG_WARNING(oredictName+" was not valid."); return null; } - catch (Throwable t){ + catch (final Throwable t){ return null; } } @@ -317,7 +320,7 @@ public class ItemUtils { return output; } - public static Item generateSpecialUsePlate(String internalName, String displayName, short[] rgb, int radioactivity){ + public static Item generateSpecialUsePlate(final String internalName, final String displayName, final short[] rgb, final int radioactivity){ return new BaseItemPlate_OLD(internalName, displayName, Utils.rgbtoHexValue(rgb[0], rgb[1], rgb[2]), radioactivity); } @@ -344,7 +347,7 @@ public class ItemUtils { public static MultiPickaxeBase generateMultiPick(final boolean GT_Durability, final Materials material){ final ToolMaterial customMaterial = Utils.generateToolMaterialFromGT(material); - int enchantLevel = material.mEnchantmentToolsLevel; + final int enchantLevel = material.mEnchantmentToolsLevel; final Object enchant = new Pair(material.mEnchantmentTools, enchantLevel); return generateMultiPick(GT_Durability, customMaterial, material.mDefaultLocalName, material.mDurability, material.mRGBa, enchant); } @@ -575,24 +578,24 @@ public class ItemUtils { return outputs; } - private static String getModId(Item item) { + private static String getModId(final Item item) { try { - GameRegistry.UniqueIdentifier id = GameRegistry.findUniqueIdentifierFor(item); - String modname = (id.modId == null ? id.name : id.modId); - return id == null || id.modId.equals("") ? "minecraft" : modname; - } catch (Throwable t){ + final GameRegistry.UniqueIdentifier id = GameRegistry.findUniqueIdentifierFor(item); + final String modname = (id.modId == null ? id.name : id.modId); + return (id == null) || id.modId.equals("") ? "minecraft" : modname; + } catch (final Throwable t){ try { - UniqueIdentifier t2 = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)); - String modname = (t2.modId == null ? t2.name : t2.modId); - return t2 == null || t2.modId.equals("") ? "minecraft" : modname; + final UniqueIdentifier t2 = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)); + final String modname = (t2.modId == null ? t2.name : t2.modId); + return (t2 == null) || t2.modId.equals("") ? "minecraft" : modname; } - catch (Throwable t3){ + catch (final Throwable t3){ return "bad modid"; } } } - public static String getModId(ItemStack key) { + public static String getModId(final ItemStack key) { return getModId(key.getItem()); } @@ -602,13 +605,13 @@ public class ItemUtils { if (!oreDictList.isEmpty()){ ItemStack returnvalue; for (int xrc=0;xrc 0) { - final FXSlimyBubble ef = new FXSlimyBubble(world, (double) (x + rand.nextFloat()), (double) (y + 1), - (double) (z + rand.nextFloat()), 0.06f + rand.nextFloat() * 0.06f); - ef.func_82338_g(0.8f); - ef.func_70538_b(0.6f - rand.nextFloat() * 0.2f, 0.0f, 0.6f + rand.nextFloat() * 0.2f); - ParticleEngine.instance.addEffect(world, (EntityFX) ef); - if (rand.nextInt(50) == 0) { - final double var21 = x + rand.nextFloat(); - final double var22 = y + this.field_149756_F; - final double var23 = z + rand.nextFloat(); - world.func_72980_b(var21, var22, var23, "liquid.lavapop", 0.1f + rand.nextFloat() * 0.1f, - 0.9f + rand.nextFloat() * 0.15f, false); + public void randomDisplayTick(final World w, final int i, final int j, final int k, final Random r) { + final TileEntity te = w.getTileEntity(i, j, k); + if ((te != null) && (te instanceof TileFastAlchemyFurnace) && ((TileFastAlchemyFurnace) te).isBurning()) { + final float f = i + 0.5f; + final float f2 = j + 0.2f + ((r.nextFloat() * 5.0f) / 16.0f); + final float f3 = k + 0.5f; + final float f4 = 0.52f; + final float f5 = (r.nextFloat() * 0.5f) - 0.25f; + w.spawnParticle("smoke", f - f4, f2, f3 + f5, 0.0, 0.0, 0.0); + w.spawnParticle("flame", f - f4, f2, f3 + f5, 0.0, 0.0, 0.0); + w.spawnParticle("smoke", f + f4, f2, f3 + f5, 0.0, 0.0, 0.0); + w.spawnParticle("flame", f + f4, f2, f3 + f5, 0.0, 0.0, 0.0); + w.spawnParticle("smoke", f + f5, f2, f3 - f4, 0.0, 0.0, 0.0); + w.spawnParticle("flame", f + f5, f2, f3 - f4, 0.0, 0.0, 0.0); + w.spawnParticle("smoke", f + f5, f2, f3 + f4, 0.0, 0.0, 0.0); + w.spawnParticle("flame", f + f5, f2, f3 + f4, 0.0, 0.0, 0.0); + } + } + + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister ir) { + this.iconPedestal[0] = ir.registerIcon("thaumcraft:pedestal_side"); + this.iconPedestal[1] = ir.registerIcon("thaumcraft:pedestal_top"); + this.iconFurnace[0] = ir.registerIcon("thaumcraft:al_furnace_side"); + this.iconFurnace[1] = ir.registerIcon("thaumcraft:al_furnace_top"); + this.iconFurnace[2] = ir.registerIcon("thaumcraft:al_furnace_front_off"); + this.iconFurnace[3] = ir.registerIcon("thaumcraft:al_furnace_front_on"); + this.iconFurnace[4] = ir.registerIcon("thaumcraft:al_furnace_top_filled"); + } + + @Override + public int getRenderType() { + return ConfigBlocks.blockStoneDeviceRI; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public IIcon getIcon(final int side, final int md) { + if (md == 0) { + if (side == 1) { + return this.iconFurnace[1]; + } + if (side > 1) { + return this.iconFurnace[2]; + } + } else if (md == 1) { + if (side <= 1) { + return this.iconPedestal[1]; + } + if (side > 1) { + return this.iconPedestal[0]; + } + } + return this.iconPedestal[1]; + } + + @Override + public IIcon getIcon(final IBlockAccess iblockaccess, final int i, final int j, final int k, final int side) { + final int metadata = iblockaccess.getBlockMetadata(i, j, k); + if (metadata == 0) { + final TileEntity te = iblockaccess.getTileEntity(i, j, k); + if (side == 1) { + if ((te != null) && (te instanceof TileFastAlchemyFurnace) && (((TileFastAlchemyFurnace) te).vis > 0)) { + return this.iconFurnace[4]; + } + return this.iconFurnace[1]; + } else if (side > 1) { + if ((te != null) && (te instanceof TileFastAlchemyFurnace) && ((TileFastAlchemyFurnace) te).isBurning()) { + return this.iconFurnace[3]; } - final int q = rand.nextInt(2); - final int w = rand.nextInt(2); - final FXSlimyBubble ef2 = new FXSlimyBubble(world, x - 0.6 + rand.nextFloat() * 0.2 + q * 2, - (double) (y + 2), z - 0.6 + rand.nextFloat() * 0.2 + w * 2, 0.06f + rand.nextFloat() * 0.06f); - ef2.func_82338_g(0.8f); - ef2.func_70538_b(0.6f - rand.nextFloat() * 0.2f, 0.0f, 0.6f + rand.nextFloat() * 0.2f); - ParticleEngine.instance.addEffect(world, (EntityFX) ef2); + return this.iconFurnace[2]; } + } else if ((metadata == 1) || (metadata == 5) || (metadata == 8) || (metadata == 12)) { + return super.getIcon(iblockaccess, i, j, k, side); } - super.func_149734_b(world, x, y, z, rand);*/ + return this.iconFurnace[0]; } } \ No newline at end of file diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java index 226c7cf393..ec39e7f4af 100644 --- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java @@ -22,12 +22,12 @@ import thaumcraft.common.tiles.TileAlembic; import thaumcraft.common.tiles.TileBellows; public class TileFastAlchemyFurnace extends TileAlchemyFurnace { - private static final int[] slots_bottom = {1}; - private static final int[] slots_top = new int[0]; - private static final int[] slots_sides = {0}; + private static final int[] slots_bottom; + private static final int[] slots_top; + private static final int[] slots_sides; public AspectList aspects; public int vis; - private int maxVis; + private final int maxVis; public int smeltTime; int bellows; boolean speedBoost; @@ -40,255 +40,247 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { public TileFastAlchemyFurnace() { this.aspects = new AspectList(); - - this.maxVis = 100; - this.smeltTime = 25; + this.maxVis = 150; + this.smeltTime = 100; this.bellows = -1; - this.speedBoost = false; - + this.speedBoost = true; this.furnaceItemStacks = new ItemStack[2]; - this.count = 0; } - public int func_70302_i_() { + @Override + public int getSizeInventory() { return this.furnaceItemStacks.length; } - public ItemStack func_70301_a(int par1) { + @Override + public ItemStack getStackInSlot(final int par1) { return this.furnaceItemStacks[par1]; } - public ItemStack func_70298_a(int par1, int par2) { - if (this.furnaceItemStacks[par1] != null) { - if (this.furnaceItemStacks[par1].stackSize <= par2) { - ItemStack itemstack = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return itemstack; - } - - ItemStack itemstack = this.furnaceItemStacks[par1].splitStack(par2); - - if (this.furnaceItemStacks[par1].stackSize == 0) { - this.furnaceItemStacks[par1] = null; - } - + @Override + public ItemStack decrStackSize(final int par1, final int par2) { + if (this.furnaceItemStacks[par1] == null) { + return null; + } + if (this.furnaceItemStacks[par1].stackSize <= par2) { + final ItemStack itemstack = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; return itemstack; } - - return null; + final ItemStack itemstack = this.furnaceItemStacks[par1].splitStack(par2); + if (this.furnaceItemStacks[par1].stackSize == 0) { + this.furnaceItemStacks[par1] = null; + } + return itemstack; } - public ItemStack func_70304_b(int par1) { + @Override + public ItemStack getStackInSlotOnClosing(final int par1) { if (this.furnaceItemStacks[par1] != null) { - ItemStack itemstack = this.furnaceItemStacks[par1]; + final ItemStack itemstack = this.furnaceItemStacks[par1]; this.furnaceItemStacks[par1] = null; return itemstack; } - return null; } - public void func_70299_a(int par1, ItemStack par2ItemStack) { + @Override + public void setInventorySlotContents(final int par1, final ItemStack par2ItemStack) { this.furnaceItemStacks[par1] = par2ItemStack; - - if ((par2ItemStack == null) || (par2ItemStack.stackSize <= func_70297_j_())) - return; - par2ItemStack.stackSize = func_70297_j_(); + if ((par2ItemStack != null) && (par2ItemStack.stackSize > this.getInventoryStackLimit())) { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } } - public String func_145825_b() { - return ((func_145818_k_()) ? this.customName : "container.alchemyfurnace"); + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.alchemyfurnace"; } - public boolean func_145818_k_() { - return ((this.customName != null) && (this.customName.length() > 0)); + @Override + public boolean hasCustomInventoryName() { + return (this.customName != null) && (this.customName.length() > 0); } - public void setGuiDisplayName(String par1Str) { + @Override + public void setGuiDisplayName(final String par1Str) { this.customName = par1Str; } - public void readCustomNBT(NBTTagCompound nbttagcompound) { + @Override + public void readCustomNBT(final NBTTagCompound nbttagcompound) { this.furnaceBurnTime = nbttagcompound.getShort("BurnTime"); this.vis = nbttagcompound.getShort("Vis"); } - public void writeCustomNBT(NBTTagCompound nbttagcompound) { + @Override + public void writeCustomNBT(final NBTTagCompound nbttagcompound) { nbttagcompound.setShort("BurnTime", (short) this.furnaceBurnTime); nbttagcompound.setShort("Vis", (short) this.vis); } - public void func_145839_a(NBTTagCompound nbtCompound) { - super.func_145839_a(nbtCompound); - NBTTagList nbttaglist = nbtCompound.getTagList("Items", 10); - this.furnaceItemStacks = new ItemStack[func_70302_i_()]; - + @Override + public void readFromNBT(final NBTTagCompound nbtCompound) { + super.readFromNBT(nbtCompound); + final NBTTagList nbttaglist = nbtCompound.getTagList("Items", 10); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); ++i) { - NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); - byte b0 = nbttagcompound1.getByte("Slot"); - - if ((b0 < 0) || (b0 >= this.furnaceItemStacks.length)) - continue; - this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + final NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + final byte b0 = nbttagcompound1.getByte("Slot"); + if ((b0 >= 0) && (b0 < this.furnaceItemStacks.length)) { + this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } } - this.speedBoost = nbtCompound.getBoolean("speedBoost"); this.furnaceCookTime = nbtCompound.getShort("CookTime"); this.currentItemBurnTime = TileEntityFurnace.getItemBurnTime(this.furnaceItemStacks[1]); - if (nbtCompound.hasKey("CustomName")) { this.customName = nbtCompound.getString("CustomName"); } - this.aspects.readFromNBT(nbtCompound); this.vis = this.aspects.visSize(); } - public void func_145841_b(NBTTagCompound nbtCompound) { - super.func_145841_b(nbtCompound); + @Override + public void writeToNBT(final NBTTagCompound nbtCompound) { + super.writeToNBT(nbtCompound); nbtCompound.setBoolean("speedBoost", this.speedBoost); nbtCompound.setShort("CookTime", (short) this.furnaceCookTime); - NBTTagList nbttaglist = new NBTTagList(); - + final NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.furnaceItemStacks.length; ++i) { - if (this.furnaceItemStacks[i] == null) - continue; - NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.setByte("Slot", (byte) i); - this.furnaceItemStacks[i].writeToNBT(nbttagcompound1); - nbttaglist.appendTag(nbttagcompound1); + if (this.furnaceItemStacks[i] != null) { + final NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + this.furnaceItemStacks[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } } - nbtCompound.setTag("Items", nbttaglist); - - if (func_145818_k_()) { + if (this.hasCustomInventoryName()) { nbtCompound.setString("CustomName", this.customName); } - this.aspects.writeToNBT(nbtCompound); } - public int func_70297_j_() { + @Override + public int getInventoryStackLimit() { return 64; } + @Override @SideOnly(Side.CLIENT) - public int getCookProgressScaled(int par1) { - if (this.smeltTime <= 0) + public int getCookProgressScaled(final int par1) { + if (this.smeltTime <= 0) { this.smeltTime = 1; - return (this.furnaceCookTime * par1 / this.smeltTime); + } + return (this.furnaceCookTime * par1) / this.smeltTime; } + @Override @SideOnly(Side.CLIENT) - public int getContentsScaled(int par1) { - return (this.vis * par1 / this.maxVis); + public int getContentsScaled(final int par1) { + return (this.vis * par1) / this.maxVis; } + @Override @SideOnly(Side.CLIENT) - public int getBurnTimeRemainingScaled(int par1) { + public int getBurnTimeRemainingScaled(final int par1) { if (this.currentItemBurnTime == 0) { this.currentItemBurnTime = 200; } - - return (this.furnaceBurnTime * par1 / this.currentItemBurnTime); + return (this.furnaceBurnTime * par1) / this.currentItemBurnTime; } + @Override public boolean isBurning() { - return (this.furnaceBurnTime > 0); + return this.furnaceBurnTime > 0; } - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + @Override + public void onDataPacket(final NetworkManager net, final S35PacketUpdateTileEntity pkt) { super.onDataPacket(net, pkt); - if (this.worldObj != null) - this.worldObj.updateLightByType(EnumSkyBlock.Block, this.xCoord, this.yCoord, - this.zCoord); + if (this.worldObj != null) { + this.worldObj.updateLightByType(EnumSkyBlock.Block, this.xCoord, this.yCoord, this.zCoord); + } } + @Override public boolean canUpdate() { return true; } - public void func_145845_h() { - boolean flag = this.furnaceBurnTime > 0; - boolean flag1 = false; - this.count += 1; + @Override + public void updateEntity() { + final boolean flag = this.furnaceBurnTime > 0; + boolean flag2 = false; + ++this.count; if (this.furnaceBurnTime > 0) { - this.furnaceBurnTime -= 1; + --this.furnaceBurnTime; } - - if (!(this.worldObj.isRemote)) { - if (this.bellows < 0) - getBellows(); - - if ((this.count % ((this.speedBoost) ? 20 : 40) == 0) && (this.aspects.size() > 0)) { - AspectList exlude = new AspectList(); + if (!this.worldObj.isRemote) { + if (this.bellows < 0) { + this.getBellows(); + } + if (((this.count % (this.speedBoost ? 10 : 20)) == 0) && (this.aspects.size() > 0)) { + final AspectList exlude = new AspectList(); int deep = 0; TileEntity tile = null; while (deep < 5) { ++deep; - tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, - this.zCoord); - if (!(tile instanceof TileAlembic)) + tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, this.zCoord); + if (!(tile instanceof TileAlembic)) { break; - TileAlembic alembic = (TileAlembic) tile; + } + final TileAlembic alembic = (TileAlembic) tile; if ((alembic.aspect != null) && (alembic.amount < alembic.maxAmount) && (this.aspects.getAmount(alembic.aspect) > 0)) { - takeFromContainer(alembic.aspect, 1); + this.takeFromContainer(alembic.aspect, 1); alembic.addToContainer(alembic.aspect, 1); exlude.merge(alembic.aspect, 1); - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, - this.zCoord); - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, - this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, this.zCoord); } tile = null; } - deep = 0; while (deep < 5) { ++deep; - tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, - this.zCoord); - if (!(tile instanceof TileAlembic)) + tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, this.zCoord); + if (!(tile instanceof TileAlembic)) { break; - TileAlembic alembic = (TileAlembic) tile; - if ((alembic.aspect == null) || (alembic.amount == 0)) - ; + } + final TileAlembic alembic = (TileAlembic) tile; + if ((alembic.aspect != null) && (alembic.amount != 0)) { + continue; + } Aspect as = null; if (alembic.aspectFilter == null) { - as = takeRandomAspect(exlude); - } else if (takeFromContainer(alembic.aspectFilter, 1)) { + as = this.takeRandomAspect(exlude); + } else if (this.takeFromContainer(alembic.aspectFilter, 1)) { as = alembic.aspectFilter; } - if (as != null) { alembic.addToContainer(as, 1); - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, - this.zCoord); - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, - this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord + deep, this.zCoord); break; } - } - } - - if ((this.furnaceBurnTime == 0) && (canSmelt())) { - this.currentItemBurnTime = (this.furnaceBurnTime = TileEntityFurnace - .getItemBurnTime(this.furnaceItemStacks[1])); - + if ((this.furnaceBurnTime == 0) && this.canSmelt()) { + final int itemBurnTime = TileEntityFurnace.getItemBurnTime(this.furnaceItemStacks[1]); + this.furnaceBurnTime = itemBurnTime; + this.currentItemBurnTime = itemBurnTime; if (this.furnaceBurnTime > 0) { - flag1 = true; + flag2 = true; this.speedBoost = false; - if (this.furnaceItemStacks[1] != null) { if (this.furnaceItemStacks[1].isItemEqual(new ItemStack(ConfigItems.itemResource, 1, 0))) { this.speedBoost = true; } - this.furnaceItemStacks[1].stackSize -= 1; - + final ItemStack itemStack = this.furnaceItemStacks[1]; + --itemStack.stackSize; if (this.furnaceItemStacks[1].stackSize == 0) { this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem() .getContainerItem(this.furnaceItemStacks[1]); @@ -296,126 +288,134 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { } } } - - if ((isBurning()) && (canSmelt())) { - this.furnaceCookTime += 1; - + if (this.isBurning() && this.canSmelt()) { + ++this.furnaceCookTime; if (this.furnaceCookTime >= this.smeltTime) { this.furnaceCookTime = 0; - smeltItem(); - flag1 = true; + this.smeltItem(); + flag2 = true; } } else { this.furnaceCookTime = 0; } - - if (flag != this.furnaceBurnTime > 0) { - flag1 = true; + if (flag != (this.furnaceBurnTime > 0)) { + flag2 = true; this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } } - - if (!(flag1)) - return; - markDirty(); + if (flag2) { + this.markDirty(); + } } private boolean canSmelt() { if (this.furnaceItemStacks[0] == null) { return false; } - AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); al = ThaumcraftCraftingManager.getBonusTags(this.furnaceItemStacks[0], al); - - if ((al == null) || (al.size() == 0)) + if ((al == null) || (al.size() == 0)) { return false; - int vs = al.visSize(); - if (vs > this.maxVis - this.vis) + } + final int vs = al.visSize(); + if (vs > (this.maxVis - this.vis)) { return false; - this.smeltTime = (int) (vs * 10 * (1.0F - (0.125F * this.bellows))); + } + this.smeltTime = (int) (vs * 10 * (1.0f - (0.125f * this.bellows))); return true; } + @Override public void getBellows() { - this.bellows = TileBellows.getBellows(this.worldObj, this.xCoord, this.yCoord, - this.zCoord, ForgeDirection.VALID_DIRECTIONS); + this.bellows = TileBellows.getBellows(this.worldObj, this.xCoord, this.yCoord, this.zCoord, + ForgeDirection.VALID_DIRECTIONS); } + @Override public void smeltItem() { - if (!(canSmelt())) { - return; - } - AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); - al = ThaumcraftCraftingManager.getBonusTags(this.furnaceItemStacks[0], al); - - for (Aspect a : al.getAspects()) { - this.aspects.add(a, al.getAmount(a)); + if (this.canSmelt()) { + AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); + al = ThaumcraftCraftingManager.getBonusTags(this.furnaceItemStacks[0], al); + for (final Aspect a : al.getAspects()) { + this.aspects.add(a, al.getAmount(a)); + } + this.vis = this.aspects.visSize(); + final ItemStack itemStack = this.furnaceItemStacks[0]; + --itemStack.stackSize; + if (this.furnaceItemStacks[0].stackSize <= 0) { + this.furnaceItemStacks[0] = null; + } } - - this.vis = this.aspects.visSize(); - - this.furnaceItemStacks[0].stackSize -= 1; - - if (this.furnaceItemStacks[0].stackSize > 0) - return; - this.furnaceItemStacks[0] = null; } - public static boolean isItemFuel(ItemStack par0ItemStack) { - return (TileEntityFurnace.getItemBurnTime(par0ItemStack) > 0); + public static boolean isItemFuel(final ItemStack par0ItemStack) { + return TileEntityFurnace.getItemBurnTime(par0ItemStack) > 0; } - public boolean func_70300_a(EntityPlayer par1EntityPlayer) { - return (this.worldObj.getTileEntity(this.xCoord, this.yCoord, - this.zCoord) == this); + @Override + public boolean isUseableByPlayer(final EntityPlayer par1EntityPlayer) { + return (this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) == this) + && (par1EntityPlayer.getDistanceSq(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5) <= 64.0); } - public void func_70295_k_() { + @Override + public void openInventory() { } - public void func_70305_f() { + @Override + public void closeInventory() { } - public boolean func_94041_b(int par1, ItemStack par2ItemStack) { + @Override + public boolean isItemValidForSlot(final int par1, final ItemStack par2ItemStack) { if (par1 == 0) { AspectList al = ThaumcraftCraftingManager.getObjectTags(par2ItemStack); al = ThaumcraftCraftingManager.getBonusTags(par2ItemStack, al); - if ((al != null) && (al.size() > 0)) + if ((al != null) && (al.size() > 0)) { return true; + } } - return ((par1 == 1) ? isItemFuel(par2ItemStack) : false); + return (par1 == 1) && isItemFuel(par2ItemStack); } - public int[] func_94128_d(int par1) { - return ((par1 == 1) ? slots_top : (par1 == 0) ? slots_bottom : slots_sides); + @Override + public int[] getAccessibleSlotsFromSide(final int par1) { + return (par1 == 0) + ? TileFastAlchemyFurnace.slots_bottom + : ((par1 == 1) ? TileFastAlchemyFurnace.slots_top : TileFastAlchemyFurnace.slots_sides); } - public boolean func_102007_a(int par1, ItemStack par2ItemStack, int par3) { - return ((par3 == 1) ? false : func_94041_b(par1, par2ItemStack)); + @Override + public boolean canInsertItem(final int par1, final ItemStack par2ItemStack, final int par3) { + return (par3 != 1) && this.isItemValidForSlot(par1, par2ItemStack); } - public boolean func_102008_b(int par1, ItemStack par2ItemStack, int par3) { - return ((par3 != 0) || (par1 != 1) || (par2ItemStack.getItem() == Items.bucket)); + @Override + public boolean canExtractItem(final int par1, final ItemStack par2ItemStack, final int par3) { + return (par3 != 0) || (par1 != 1) || (par2ItemStack.getItem() == Items.bucket); } - public Aspect takeRandomAspect(AspectList exlude) { + @Override + public Aspect takeRandomAspect(final AspectList exlude) { if (this.aspects.size() > 0) { - AspectList temp = this.aspects.copy(); - if (exlude.size() > 0) - for (Aspect a : exlude.getAspects()) + final AspectList temp = this.aspects.copy(); + if (exlude.size() > 0) { + for (final Aspect a : exlude.getAspects()) { temp.remove(a); + } + } if (temp.size() > 0) { - Aspect tag = temp.getAspects()[this.worldObj.rand.nextInt(temp.getAspects().length)]; + final Aspect tag = temp.getAspects()[this.worldObj.rand.nextInt(temp.getAspects().length)]; this.aspects.remove(tag, 1); - this.vis -= 1; + --this.vis; return tag; } } return null; } - public boolean takeFromContainer(Aspect tag, int amount) { + @Override + public boolean takeFromContainer(final Aspect tag, final int amount) { if ((this.aspects != null) && (this.aspects.getAmount(tag) >= amount)) { this.aspects.remove(tag, amount); this.vis -= amount; @@ -423,4 +423,10 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { } return false; } + + static { + slots_bottom = new int[]{1}; + slots_top = new int[0]; + slots_sides = new int[]{0}; + } } \ No newline at end of file -- cgit From 9d52b3d41d6dfdfb2e61cd59510b3a1d61925a16 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Mon, 20 Nov 2017 23:21:15 +1000 Subject: + Added the Upgraded Arcane Alembic.$ Fixed the Upgraded Alchemy Furnace GUI. % Tried to make the 'Upgraded' Alembic & Furnace work better with the vanilla TC versions. $ Fixed the Upgraded Alchemy Furnace causing the tesselator to throw issues. $ Fixes to the Upgraded Arcane Alembic. --- src/Java/gtPlusPlus/core/handler/GuiHandler.java | 9 + .../core/item/base/itemblock/ItemBlockBase.java | 21 -- .../item/base/itemblock/ItemBlockEntityBase.java | 23 ++ .../item/base/itemblock/ItemBlockTileEntity.java | 43 --- .../core/tileentities/ModTileEntities.java | 9 +- .../thaumcraft/common/ItemBlockThaumcraft.java | 34 ++ .../common/block/BlockFastAlchemyFurnace.java | 22 +- .../common/block/BlockFastArcaneAlembic.java | 373 +++++++++++++++++++++ .../thaumcraft/common/block/TC_BlockHandler.java | 10 +- .../common/tile/TileFastAlchemyFurnace.java | 17 +- .../common/tile/TileFastArcaneAlembic.java | 258 ++++++++++++++ .../gui/ContainerFastAlchemyFurnace.java | 143 ++++++++ .../xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java | 45 +++ 13 files changed, 914 insertions(+), 93 deletions(-) delete mode 100644 src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java create mode 100644 src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java delete mode 100644 src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java create mode 100644 src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java (limited to 'src/Java/gtPlusPlus/xmod/thaumcraft') diff --git a/src/Java/gtPlusPlus/core/handler/GuiHandler.java b/src/Java/gtPlusPlus/core/handler/GuiHandler.java index 6791289f9f..cf7c90eca5 100644 --- a/src/Java/gtPlusPlus/core/handler/GuiHandler.java +++ b/src/Java/gtPlusPlus/core/handler/GuiHandler.java @@ -32,6 +32,9 @@ import gtPlusPlus.core.tileentities.machines.TileEntityTradeTable; import gtPlusPlus.core.tileentities.machines.TileEntityWorkbench; import gtPlusPlus.core.tileentities.machines.TileEntityWorkbenchAdvanced; import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; +import gtPlusPlus.xmod.thaumcraft.gui.ContainerFastAlchemyFurnace; +import gtPlusPlus.xmod.thaumcraft.gui.GuiFastAlchemyFurnace; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; @@ -94,6 +97,9 @@ public class GuiHandler implements IGuiHandler { else if (ID == GUI7){ return new Container_TradeTable(player.inventory, (TileEntityTradeTable)te); } + else if (ID == GUI8){ + return new ContainerFastAlchemyFurnace(player.inventory, (TileFastAlchemyFurnace)te); + } } if (ID == GUI9){ @@ -143,6 +149,9 @@ public class GuiHandler implements IGuiHandler { else if (ID == GUI7){ return new GUI_TradeTable(player.inventory, (TileEntityTradeTable)te, ((TileEntityBase) te).getOwner()); } + else if (ID == GUI8){ + return new GuiFastAlchemyFurnace(player.inventory, (TileFastAlchemyFurnace)te); + } } if (ID == GUI9){ diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java deleted file mode 100644 index 372539ca7d..0000000000 --- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockBase.java +++ /dev/null @@ -1,21 +0,0 @@ -package gtPlusPlus.core.item.base.itemblock; - -import gtPlusPlus.core.creative.AddToCreativeTab; -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemBlockBase extends ItemBlock { - - public ItemBlockBase(final Block block) { - super(block); - this.setCreativeTab(AddToCreativeTab.tabBlock); - } - - @Override - public int getColorFromItemStack(final ItemStack p_82790_1_, final int p_82790_2_) { - return super.getColorFromItemStack(p_82790_1_, p_82790_2_); - } - - -} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java new file mode 100644 index 0000000000..43a37b423c --- /dev/null +++ b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockEntityBase.java @@ -0,0 +1,23 @@ +package gtPlusPlus.core.item.base.itemblock; + +import gtPlusPlus.core.creative.AddToCreativeTab; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockEntityBase extends ItemBlock { + + public ItemBlockEntityBase(final Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(AddToCreativeTab.tabMachines); + } + + @Override + public int getColorFromItemStack(final ItemStack p_82790_1_, final int p_82790_2_) { + return super.getColorFromItemStack(p_82790_1_, p_82790_2_); + } + + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java deleted file mode 100644 index 7a5f20833f..0000000000 --- a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockTileEntity.java +++ /dev/null @@ -1,43 +0,0 @@ -package gtPlusPlus.core.item.base.itemblock; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemBlockTileEntity extends ItemBlock{ - - String[] description; - - public ItemBlockTileEntity(final Block block) { - super(block); - } - - @Override - public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { - for (int i =0; i< this.description.length; i++){ - if (!this.description[i].equals("")){ - list.add(this.description[i]); - } - } - - - super.addInformation(stack, aPlayer, list, bool); - } - - @Override - public void onUpdate(final ItemStack iStack, final World world, final Entity entityHolding, final int p_77663_4_, final boolean p_77663_5_) { - - } - - public void setDecription(final String[] description){ - for (int i =0; i< description.length; i++){ - this.description[i] = description[i]; - } - } - -} diff --git a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java index 6dd948bcd1..83d274473c 100644 --- a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java +++ b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java @@ -1,13 +1,18 @@ package gtPlusPlus.core.tileentities; import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.core.tileentities.general.*; +import gtPlusPlus.core.tileentities.general.TileEntityFirepit; +import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; +import gtPlusPlus.core.tileentities.general.TileEntityHeliumGenerator; +import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid; import gtPlusPlus.core.tileentities.machines.TileEntityModularityTable; import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; import gtPlusPlus.core.tileentities.machines.TileEntityTradeTable; import gtPlusPlus.core.tileentities.machines.TileEntityWorkbench; import gtPlusPlus.core.tileentities.machines.TileEntityWorkbenchAdvanced; import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastArcaneAlembic; public class ModTileEntities { @@ -30,6 +35,8 @@ public class ModTileEntities { GameRegistry.registerTileEntity(TileEntityProjectTable.class, "TileProjectTable"); GameRegistry.registerTileEntity(TileEntityTradeTable.class, "TileTradeTable"); GameRegistry.registerTileEntity(TileEntityModularityTable.class, "TileEntityModularityTable"); + GameRegistry.registerTileEntity(TileFastAlchemyFurnace.class, "TileFastAlchemyFurnace"); + GameRegistry.registerTileEntity(TileFastArcaneAlembic.class, "TileFastArcaneAlembic"); } diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java new file mode 100644 index 0000000000..465f443906 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/ItemBlockThaumcraft.java @@ -0,0 +1,34 @@ +package gtPlusPlus.xmod.thaumcraft.common; + +import gtPlusPlus.core.item.base.itemblock.ItemBlockEntityBase; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBlockThaumcraft extends ItemBlockEntityBase{ + + public ItemBlockThaumcraft(final Block block) { + super(block); + } + + @Override + public int getMetadata(final int par1) { + return par1; + } + + @Override + public String getUnlocalizedName(final ItemStack par1ItemStack) { + return super.getUnlocalizedName() + "." + par1ItemStack.getItemDamage(); + } + + public boolean placeBlockAt(final ItemStack stack, final EntityPlayer player, final World world, final int x, + final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ, + final int metadata) { + final boolean ret = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); + return ret; + } + + + +} diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java index eee996f6f9..bf4a61cfc9 100644 --- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastAlchemyFurnace.java @@ -10,12 +10,14 @@ import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.GTplusplus; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.handler.GuiHandler; +import gtPlusPlus.xmod.thaumcraft.common.ItemBlockThaumcraft; import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; 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.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.tileentity.TileEntity; @@ -24,17 +26,15 @@ import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import thaumcraft.common.Thaumcraft; -import thaumcraft.common.blocks.BlockStoneDevice; -import thaumcraft.common.config.ConfigBlocks; import thaumcraft.common.lib.utils.InventoryUtils; -public class BlockFastAlchemyFurnace extends BlockStoneDevice { +public class BlockFastAlchemyFurnace extends BlockContainer { public IIcon[] iconFurnace; public IIcon[] iconPedestal; public BlockFastAlchemyFurnace() { + super(Material.iron); this.iconFurnace = new IIcon[5]; this.iconPedestal = new IIcon[2]; this.setCreativeTab(AddToCreativeTab.tabMachines); @@ -43,7 +43,7 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice { this.setResistance(25.0f); this.setStepSound(Block.soundTypeStone); this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); - GameRegistry.registerBlock(this, "blockFastAlchemyFurnace"); + GameRegistry.registerBlock(this, ItemBlockThaumcraft.class, "blockFastAlchemyFurnace"); LanguageRegistry.addName(this, "Upgraded Alchemical Furnace"); } @@ -122,13 +122,13 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice { @Override public boolean onBlockEventReceived(final World par1World, final int par2, final int par3, final int par4, final int par5, final int par6) { - if (par5 == 1) { + /*if (par5 == 1) { if (par1World.isRemote) { Thaumcraft.proxy.blockSparkle(par1World, par2, par3, par4, 11960575, 2); par1World.playAuxSFX(2001, par2, par3, par4, Block.getIdFromBlock(Blocks.stonebrick) + 0); } return true; - } + }*/ return super.onBlockEventReceived(par1World, par2, par3, par4, par5, par6); } @@ -192,10 +192,10 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice { this.iconFurnace[4] = ir.registerIcon("thaumcraft:al_furnace_top_filled"); } - @Override + /*@Override public int getRenderType() { return ConfigBlocks.blockStoneDeviceRI; - } + }*/ @Override public boolean isOpaqueCube() { @@ -243,8 +243,6 @@ public class BlockFastAlchemyFurnace extends BlockStoneDevice { } return this.iconFurnace[2]; } - } else if ((metadata == 1) || (metadata == 5) || (metadata == 8) || (metadata == 12)) { - return super.getIcon(iblockaccess, i, j, k, side); } return this.iconFurnace[0]; } diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java new file mode 100644 index 0000000000..04c0673b49 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/BlockFastArcaneAlembic.java @@ -0,0 +1,373 @@ +package gtPlusPlus.xmod.thaumcraft.common.block; + +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.xmod.thaumcraft.common.ItemBlockThaumcraft; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastArcaneAlembic; +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.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.IEssentiaContainerItem; +import thaumcraft.common.blocks.ItemJarFilled; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.lib.utils.InventoryUtils; + +public class BlockFastArcaneAlembic extends BlockContainer { + public IIcon[] icon; + public IIcon iconGlow; + private final int delay; + + public BlockFastArcaneAlembic() { + super(Material.iron); + this.icon = new IIcon[23]; + this.delay = 0; + this.setStepSound(Block.soundTypeMetal); + this.setCreativeTab(AddToCreativeTab.tabMachines); + this.setBlockName("blockFastArcaneAlembic"); + this.setHardness(3.0f); + this.setResistance(25.0f); + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + GameRegistry.registerBlock(this, ItemBlockThaumcraft.class, "blockFastArcaneAlembic"); + LanguageRegistry.addName(this, "Upgraded Arcane Alembic"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister ir) { + this.icon[0] = ir.registerIcon("thaumcraft:metalbase"); + for (int a = 1; a <= 6; ++a) { + this.icon[a] = ir.registerIcon("thaumcraft:crucible" + a); + } + this.icon[7] = ir.registerIcon("thaumcraft:goldbase"); + this.iconGlow = ir.registerIcon("thaumcraft:animatedglow"); + } + + @Override + public IIcon getIcon(final int i, final int md) { + return ((md == 0) || (md == 1) || (md == 5) || (md == 6)) ? this.icon[0] : this.icon[7]; + } + + @Override + public IIcon getIcon(final IBlockAccess iblockaccess, final int i, final int j, final int k, final int side) { + if (side == 1) { + return this.icon[1]; + } + if (side == 0) { + return this.icon[2]; + } + return this.icon[3]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(final Item par1, final CreativeTabs par2CreativeTabs, final List par3List) { + par3List.add(new ItemStack(par1, 1, 1)); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onEntityCollidedWithBlock(final World world, final int i, final int j, final int k, + final Entity entity) { + if (!world.isRemote) { + + } + } + + @Override + public void addCollisionBoxesToList(final World world, final int i, final int j, final int k, + final AxisAlignedBB axisalignedbb, final List arraylist, final Entity par7Entity) { + this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + super.addCollisionBoxesToList(world, i, j, k, axisalignedbb, arraylist, par7Entity); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(final World w, final int i, final int j, final int k, final Random r) { + + } + + @Override + public int damageDropped(final int metadata) { + return metadata; + } + + @Override + public TileEntity createTileEntity(final World world, final int metadata) { + + if (metadata == 1) { + return new TileFastArcaneAlembic(); + } + return super.createTileEntity(world, metadata); + } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(final World world, final int x, final int y, final int z, final int rs) { + final TileEntity te = world.getTileEntity(x, y, z); + if ((te != null) && (te instanceof TileFastArcaneAlembic)) { + final float r = ((TileFastArcaneAlembic) te).amount / ((TileFastArcaneAlembic) te).maxAmount; + return MathHelper.floor_float(r * 14.0f) + ((((TileFastArcaneAlembic) te).amount > 0) ? 1 : 0); + } + return 0; + } + + @Override + public TileEntity createNewTileEntity(final World var1, final int md) { + return null; + } + + @Override + public void onNeighborBlockChange(final World world, final int x, final int y, final int z, final Block nbid) { + final TileEntity te = world.getTileEntity(x, y, z); + if (!world.isRemote) { + if ((te != null) && (te instanceof TileFastArcaneAlembic)) { + world.markBlockForUpdate(x, y, z); + } + } + super.onNeighborBlockChange(world, x, y, z, nbid); + } + + @Override + public void breakBlock(final World par1World, final int par2, final int par3, final int par4, final Block par5, + final int par6) { + InventoryUtils.dropItems(par1World, par2, par3, par4); + final TileEntity te = par1World.getTileEntity(par2, par3, par4); + if ((te != null) && (te instanceof TileFastArcaneAlembic) && (((TileFastArcaneAlembic) te).aspectFilter != null)) { + par1World.spawnEntityInWorld(new EntityItem(par1World, par2 + 0.5f, + par3 + 0.5f, par4 + 0.5f, new ItemStack(ConfigItems.itemResource, 1, 13))); + } + super.breakBlock(par1World, par2, par3, par4, par5, par6); + } + + @Override + public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, + final int side, final float par7, final float par8, final float par9) { + final int metadata = world.getBlockMetadata(x, y, z); + + if ((metadata == 1) && !world.isRemote && !player.isSneaking() && (player.getHeldItem() == null)) { + final TileEntity te2 = world.getTileEntity(x, y, z); + if ((te2 != null) && (te2 instanceof TileFastArcaneAlembic)) { + final TileFastArcaneAlembic tile2 = (TileFastArcaneAlembic) te2; + String msg = ""; + if ((tile2.aspect == null) || (tile2.amount == 0)) { + msg = StatCollector.translateToLocal("tile.alembic.msg.1"); + } else if (tile2.amount < (tile2.maxAmount * 0.4)) { + msg = StatCollector.translateToLocal("tile.alembic.msg.2"); + } else if (tile2.amount < (tile2.maxAmount * 0.8)) { + msg = StatCollector.translateToLocal("tile.alembic.msg.3"); + } else if (tile2.amount < tile2.maxAmount) { + msg = StatCollector.translateToLocal("tile.alembic.msg.4"); + } else if (tile2.amount == tile2.maxAmount) { + msg = StatCollector.translateToLocal("tile.alembic.msg.5"); + } + player.addChatMessage(new ChatComponentTranslation("ยง3" + msg, new Object[0])); + world.playSoundEffect(x, y, z, "thaumcraft:alembicknock", 0.2f, 1.0f); + } + } + if (metadata == 1) { + final TileEntity te2 = world.getTileEntity(x, y, z); + if ((te2 != null) && (te2 instanceof TileFastArcaneAlembic)) { + if (player.isSneaking() && (((TileFastArcaneAlembic) te2).aspectFilter != null)) { + ((TileFastArcaneAlembic) te2).aspectFilter = null; + world.markBlockForUpdate(x, y, z); + te2.markDirty(); + if (world.isRemote) { + world.playSound(x + 0.5f, y + 0.5f, z + 0.5f, + "thaumcraft:page", 1.0f, 1.1f, false); + } else { + final ForgeDirection fd = ForgeDirection.getOrientation(side); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5f + (fd.offsetX / 3.0f), + y + 0.5f, z + 0.5f + (fd.offsetZ / 3.0f), + new ItemStack(ConfigItems.itemResource, 1, 13))); + } + return true; + } + if (player.isSneaking() && (player.getHeldItem() == null)) { + ((TileFastArcaneAlembic) te2).amount = 0; + ((TileFastArcaneAlembic) te2).aspect = null; + if (world.isRemote) { + world.playSound(x + 0.5f, y + 0.5f, z + 0.5f, + "thaumcraft:alembicknock", 0.2f, 1.0f, false); + world.playSound(x + 0.5f, y + 0.5f, z + 0.5f, + "game.neutral.swim", 0.5f, + 1.0f + ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.3f), false); + } + } else if ((player.getHeldItem() != null) && (((TileFastArcaneAlembic) te2).aspectFilter == null) + && (player.getHeldItem().getItem() == ConfigItems.itemResource) + && (player.getHeldItem().getItemDamage() == 13)) { + if ((((TileFastArcaneAlembic) te2).amount == 0) && (((IEssentiaContainerItem) player.getHeldItem().getItem()) + .getAspects(player.getHeldItem()) == null)) { + return true; + } + if ((((TileFastArcaneAlembic) te2).amount == 0) && (((IEssentiaContainerItem) player.getHeldItem().getItem()) + .getAspects(player.getHeldItem()) != null)) { + ((TileFastArcaneAlembic) te2).aspect = ((IEssentiaContainerItem) player.getHeldItem().getItem()) + .getAspects(player.getHeldItem()).getAspects()[0]; + } + final ItemStack heldItem = player.getHeldItem(); + --heldItem.stackSize; + ((TileFastArcaneAlembic) te2).aspectFilter = ((TileFastArcaneAlembic) te2).aspect; + world.markBlockForUpdate(x, y, z); + te2.markDirty(); + if (world.isRemote) { + world.playSound(x + 0.5f, y + 0.5f, z + 0.5f, + "thaumcraft:page", 1.0f, 0.9f, false); + } + return true; + } else if ((player.getHeldItem() != null) && (((TileFastArcaneAlembic) te2).amount > 0) + && ((player.getHeldItem().getItem() == ConfigItems.itemJarFilled) + || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 0)) + || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 3)))) { + boolean doit = false; + ItemStack drop = null; + if (player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 0)) + || player.getHeldItem().isItemEqual(new ItemStack(ConfigBlocks.blockJar, 1, 3))) { + drop = new ItemStack(ConfigItems.itemJarFilled, 1, player.getHeldItem().getItemDamage()); + doit = true; + ((ItemJarFilled) drop.getItem()).setAspects(drop, + new AspectList().add(((TileFastArcaneAlembic) te2).aspect, ((TileFastArcaneAlembic) te2).amount)); + ((TileFastArcaneAlembic) te2).amount = 0; + ((TileFastArcaneAlembic) te2).aspect = null; + final ItemStack heldItem2 = player.getHeldItem(); + --heldItem2.stackSize; + if (!player.inventory.addItemStackToInventory(drop) && !world.isRemote) { + world.spawnEntityInWorld( + new EntityItem(world, player.posX, player.posY, player.posZ, drop)); + } + } else { + drop = player.getHeldItem(); + if (((((ItemJarFilled) drop.getItem()).getAspects(drop) == null) + || (((ItemJarFilled) drop.getItem()).getAspects(drop).visSize() == 0) + || (((ItemJarFilled) drop.getItem()).getAspects(drop) + .getAmount(((TileFastArcaneAlembic) te2).aspect) > 0)) + && ((((ItemJarFilled) drop.getItem()).getFilter(drop) == null) + || (((ItemJarFilled) drop.getItem()) + .getFilter(drop) == ((TileFastArcaneAlembic) te2).aspect))) { + int amount = Math.min( + (((ItemJarFilled) drop.getItem()).getAspects(drop) == null) + ? 64 + : (64 - ((ItemJarFilled) drop.getItem()).getAspects(drop).visSize()), + ((TileFastArcaneAlembic) te2).amount); + if (drop.getItemDamage() == 3) { + amount = ((TileFastArcaneAlembic) te2).amount; + } + if (amount > 0) { + final TileFastArcaneAlembic TileFastArcaneAlembic = (TileFastArcaneAlembic) te2; + TileFastArcaneAlembic.amount -= amount; + AspectList as = ((ItemJarFilled) drop.getItem()).getAspects(drop); + if (as == null) { + as = new AspectList(); + } + as.add(((TileFastArcaneAlembic) te2).aspect, amount); + if (as.getAmount(((TileFastArcaneAlembic) te2).aspect) > 64) { + final int q = as.getAmount(((TileFastArcaneAlembic) te2).aspect) - 64; + as.reduce(((TileFastArcaneAlembic) te2).aspect, q); + } + ((ItemJarFilled) drop.getItem()).setAspects(drop, as); + if (((TileFastArcaneAlembic) te2).amount <= 0) { + ((TileFastArcaneAlembic) te2).aspect = null; + } + doit = true; + player.setCurrentItemOrArmor(0, drop); + } + } + } + if (doit) { + te2.markDirty(); + world.markBlockForUpdate(x, y, z); + if (world.isRemote) { + world.playSound(x + 0.5f, y + 0.5f, z + 0.5f, + "game.neutral.swim", 0.5f, + 1.0f + ((world.rand.nextFloat() - world.rand.nextFloat()) * 0.3f), false); + } + } + return true; + } + } + } + + if (world.isRemote) { + return true; + } + + return super.onBlockActivated(world, x, y, z, player, side, par7, par8, par9); + } + + public void onPoweredBlockChange(final World par1World, final int par2, final int par3, final int par4, + final boolean flag) { + final int l = par1World.getBlockMetadata(par2, par3, par4); + if ((l == 5) && flag) { + par1World.setBlockMetadataWithNotify(par2, par3, par4, 6, 2); + par1World.playAuxSFXAtEntity((EntityPlayer) null, 1003, par2, par3, par4, 0); + } else if ((l == 6) && !flag) { + par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2); + par1World.playAuxSFXAtEntity((EntityPlayer) null, 1003, par2, par3, par4, 0); + } + } + + @Override + public void onBlockPlacedBy(final World world, final int par2, final int par3, final int par4, + final EntityLivingBase ent, final ItemStack stack) { + final int l = MathHelper.floor_double(((ent.rotationYaw * 4.0f) / 360.0f) + 0.5) & 0x3; + if (stack.getItemDamage() == 1) { + final TileEntity tile = world.getTileEntity(par2, par3, par4); + if (tile instanceof TileFastArcaneAlembic) { + if (l == 0) { + ((TileFastArcaneAlembic) tile).facing = 2; + } + if (l == 1) { + ((TileFastArcaneAlembic) tile).facing = 5; + } + if (l == 2) { + ((TileFastArcaneAlembic) tile).facing = 3; + } + if (l == 3) { + ((TileFastArcaneAlembic) tile).facing = 4; + } + } + } + } + + @Override + public int getLightValue(final IBlockAccess world, final int x, final int y, final int z) { + return super.getLightValue(world, x, y, z); + } +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java index fade8601f0..0b8d18f7d2 100644 --- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/block/TC_BlockHandler.java @@ -4,10 +4,12 @@ import net.minecraft.block.Block; public class TC_BlockHandler { - static Block blockFurnace; - + public static Block blockFastAlchemyFurnace; + public static Block blockFastArcaneAlembic; + public static void run(){ - blockFurnace = new BlockFastAlchemyFurnace(); + blockFastAlchemyFurnace = new BlockFastAlchemyFurnace(); + blockFastArcaneAlembic = new BlockFastArcaneAlembic(); } - + } diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java index ec39e7f4af..756578a536 100644 --- a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastAlchemyFurnace.java @@ -4,6 +4,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; 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; @@ -13,15 +14,15 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.api.TileThaumcraft; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; import thaumcraft.common.config.ConfigItems; import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; -import thaumcraft.common.tiles.TileAlchemyFurnace; import thaumcraft.common.tiles.TileAlembic; import thaumcraft.common.tiles.TileBellows; -public class TileFastAlchemyFurnace extends TileAlchemyFurnace { +public class TileFastAlchemyFurnace extends TileThaumcraft implements ISidedInventory { private static final int[] slots_bottom; private static final int[] slots_top; private static final int[] slots_sides; @@ -103,7 +104,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return (this.customName != null) && (this.customName.length() > 0); } - @Override public void setGuiDisplayName(final String par1Str) { this.customName = par1Str; } @@ -168,7 +168,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return 64; } - @Override @SideOnly(Side.CLIENT) public int getCookProgressScaled(final int par1) { if (this.smeltTime <= 0) { @@ -177,13 +176,11 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return (this.furnaceCookTime * par1) / this.smeltTime; } - @Override @SideOnly(Side.CLIENT) public int getContentsScaled(final int par1) { return (this.vis * par1) / this.maxVis; } - @Override @SideOnly(Side.CLIENT) public int getBurnTimeRemainingScaled(final int par1) { if (this.currentItemBurnTime == 0) { @@ -192,7 +189,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return (this.furnaceBurnTime * par1) / this.currentItemBurnTime; } - @Override public boolean isBurning() { return this.furnaceBurnTime > 0; } @@ -229,9 +225,10 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { while (deep < 5) { ++deep; tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + deep, this.zCoord); - if (!(tile instanceof TileAlembic)) { + if (!(tile instanceof TileAlembic) || !(tile instanceof TileFastArcaneAlembic)) { break; } + final TileAlembic alembic = (TileAlembic) tile; if ((alembic.aspect != null) && (alembic.amount < alembic.maxAmount) && (this.aspects.getAmount(alembic.aspect) > 0)) { @@ -325,13 +322,11 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return true; } - @Override public void getBellows() { this.bellows = TileBellows.getBellows(this.worldObj, this.xCoord, this.yCoord, this.zCoord, ForgeDirection.VALID_DIRECTIONS); } - @Override public void smeltItem() { if (this.canSmelt()) { AspectList al = ThaumcraftCraftingManager.getObjectTags(this.furnaceItemStacks[0]); @@ -395,7 +390,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return (par3 != 0) || (par1 != 1) || (par2ItemStack.getItem() == Items.bucket); } - @Override public Aspect takeRandomAspect(final AspectList exlude) { if (this.aspects.size() > 0) { final AspectList temp = this.aspects.copy(); @@ -414,7 +408,6 @@ public class TileFastAlchemyFurnace extends TileAlchemyFurnace { return null; } - @Override public boolean takeFromContainer(final Aspect tag, final int amount) { if ((this.aspects != null) && (this.aspects.getAmount(tag) >= amount)) { this.aspects.remove(tag, amount); diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java new file mode 100644 index 0000000000..b89f9a4229 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/common/tile/TileFastArcaneAlembic.java @@ -0,0 +1,258 @@ +package gtPlusPlus.xmod.thaumcraft.common.tile; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.xmod.thaumcraft.common.block.TC_BlockHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.tiles.TileAlembic; + +public class TileFastArcaneAlembic extends TileAlembic { + public Aspect aspect; + public Aspect aspectFilter; + public int amount; + public int maxAmount; + public int facing; + public boolean aboveAlembic; + public boolean aboveFurnace; + ForgeDirection fd; + + public TileFastArcaneAlembic() { + this.aspectFilter = null; + this.amount = 0; + this.maxAmount = 64; + this.facing = 2; + this.aboveAlembic = false; + this.aboveFurnace = false; + this.fd = null; + } + + @Override + public AspectList getAspects() { + return (this.aspect != null) ? new AspectList().add(this.aspect, this.amount) : new AspectList(); + } + + @Override + public void setAspects(final AspectList aspects) { + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() { + return AxisAlignedBB.getBoundingBox(this.xCoord - 1, this.yCoord, + this.zCoord - 1, this.xCoord + 2, this.yCoord + 1, + this.zCoord + 2); + } + + @Override + public void readCustomNBT(final NBTTagCompound nbttagcompound) { + this.facing = nbttagcompound.getByte("facing"); + this.aspectFilter = Aspect.getAspect(nbttagcompound.getString("AspectFilter")); + final String tag = nbttagcompound.getString("aspect"); + if (tag != null) { + this.aspect = Aspect.getAspect(tag); + } + this.amount = nbttagcompound.getShort("amount"); + this.fd = ForgeDirection.getOrientation(this.facing); + } + + @Override + public void writeCustomNBT(final NBTTagCompound nbttagcompound) { + if (this.aspect != null) { + nbttagcompound.setString("aspect", this.aspect.getTag()); + } + if (this.aspectFilter != null) { + nbttagcompound.setString("AspectFilter", this.aspectFilter.getTag()); + } + nbttagcompound.setShort("amount", (short) this.amount); + nbttagcompound.setByte("facing", (byte) this.facing); + } + + @Override + public boolean canUpdate() { + return false; + } + + @Override + public int addToContainer(final Aspect tt, int am) { + if (((this.amount < this.maxAmount) && (tt == this.aspect)) || (this.amount == 0)) { + this.aspect = tt; + final int added = Math.min(am, this.maxAmount - this.amount); + this.amount += added; + am -= added; + } + this.markDirty(); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + return am; + } + + @Override + public boolean takeFromContainer(final Aspect tt, final int am) { + if ((this.amount == 0) || (this.aspect == null)) { + this.aspect = null; + this.amount = 0; + } + if ((this.aspect != null) && (this.amount >= am) && (tt == this.aspect)) { + this.amount -= am; + if (this.amount <= 0) { + this.aspect = null; + this.amount = 0; + } + this.markDirty(); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + return true; + } + return false; + } + + @Override + public boolean doesContainerContain(final AspectList ot) { + return (this.amount > 0) && (this.aspect != null) && (ot.getAmount(this.aspect) > 0); + } + + @Override + public boolean doesContainerContainAmount(final Aspect tt, final int am) { + return (this.amount >= am) && (tt == this.aspect); + } + + @Override + public int containerContains(final Aspect tt) { + return (tt == this.aspect) ? this.amount : 0; + } + + @Override + public boolean doesContainerAccept(final Aspect tag) { + return true; + } + + @Override + public boolean takeFromContainer(final AspectList ot) { + return false; + } + + @Override + public void getAppearance() { + this.aboveAlembic = false; + this.aboveFurnace = false; + if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == ConfigBlocks.blockStoneDevice) + && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 0)) { + this.aboveFurnace = true; + } + else if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == TC_BlockHandler.blockFastAlchemyFurnace) + && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 0)) { + this.aboveFurnace = true; + } + + if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == ConfigBlocks.blockMetalDevice) + && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == this + .getBlockMetadata())) { + this.aboveAlembic = true; + } + else if ((this.worldObj.getBlock(this.xCoord, this.yCoord - 1, this.zCoord) == TC_BlockHandler.blockFastArcaneAlembic) + && (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) == 1)) { + this.aboveAlembic = true; + } + } + + @Override + public void onDataPacket(final NetworkManager net, final S35PacketUpdateTileEntity pkt) { + super.onDataPacket(net, pkt); + this.getAppearance(); + } + + @Override + public int onWandRightClick(final World world, final ItemStack wandstack, final EntityPlayer player, final int x, + final int y, final int z, final int side, final int md) { + if (side <= 1) { + return 0; + } + this.facing = side; + this.fd = ForgeDirection.getOrientation(this.facing); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + player.swingItem(); + this.markDirty(); + return 0; + } + + @Override + public ItemStack onWandRightClick(final World world, final ItemStack wandstack, final EntityPlayer player) { + return null; + } + + @Override + public void onUsingWandTick(final ItemStack wandstack, final EntityPlayer player, final int count) { + } + + @Override + public void onWandStoppedUsing(final ItemStack wandstack, final World world, final EntityPlayer player, + final int count) { + } + + @Override + public boolean isConnectable(final ForgeDirection face) { + return (face != ForgeDirection.getOrientation(this.facing)) && (face != ForgeDirection.DOWN); + } + + @Override + public boolean canInputFrom(final ForgeDirection face) { + return false; + } + + @Override + public boolean canOutputTo(final ForgeDirection face) { + return (face != ForgeDirection.getOrientation(this.facing)) && (face != ForgeDirection.DOWN); + } + + @Override + public void setSuction(final Aspect aspect, final int amount) { + } + + @Override + public Aspect getSuctionType(final ForgeDirection loc) { + return null; + } + + @Override + public int getSuctionAmount(final ForgeDirection loc) { + return 0; + } + + @Override + public Aspect getEssentiaType(final ForgeDirection loc) { + return this.aspect; + } + + @Override + public int getEssentiaAmount(final ForgeDirection loc) { + return this.amount; + } + + @Override + public int takeEssentia(final Aspect aspect, final int amount, final ForgeDirection face) { + return (this.canOutputTo(face) && this.takeFromContainer(aspect, amount)) ? amount : 0; + } + + @Override + public int addEssentia(final Aspect aspect, final int amount, final ForgeDirection loc) { + return 0; + } + + @Override + public int getMinimumSuction() { + return 0; + } + + @Override + public boolean renderExtendedTube() { + return true; + } +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java new file mode 100644 index 0000000000..e06d83846e --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/ContainerFastAlchemyFurnace.java @@ -0,0 +1,143 @@ +package gtPlusPlus.xmod.thaumcraft.gui; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; +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; +import net.minecraft.item.ItemStack; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.container.SlotLimitedHasAspects; +import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; + +public class ContainerFastAlchemyFurnace extends Container { + private final TileFastAlchemyFurnace furnace; + private int lastCookTime; + private int lastBurnTime; + private int lastItemBurnTime; + private int lastVis; + private int lastSmelt; + + public ContainerFastAlchemyFurnace(final InventoryPlayer par1InventoryPlayer, final TileFastAlchemyFurnace tileEntity) { + this.furnace = tileEntity; + this.addSlotToContainer(new SlotLimitedHasAspects(tileEntity, 0, 80, 8)); + this.addSlotToContainer(new Slot(tileEntity, 1, 80, 48)); + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 9; ++j) { + this.addSlotToContainer( + new Slot(par1InventoryPlayer, j + (i * 9) + 9, 8 + (j * 18), 84 + (i * 18))); + } + } + for (int i = 0; i < 9; ++i) { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + (i * 18), 142)); + } + } + + @Override + public void addCraftingToCrafters(final ICrafting par1ICrafting) { + super.addCraftingToCrafters(par1ICrafting); + par1ICrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime); + par1ICrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime); + par1ICrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime); + par1ICrafting.sendProgressBarUpdate(this, 3, this.furnace.vis); + par1ICrafting.sendProgressBarUpdate(this, 4, this.furnace.smeltTime); + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + for (int i = 0; i < this.crafters.size(); ++i) { + final ICrafting icrafting = (ICrafting) this.crafters.get(i); + if (this.lastCookTime != this.furnace.furnaceCookTime) { + icrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime); + } + if (this.lastBurnTime != this.furnace.furnaceBurnTime) { + icrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime); + } + if (this.lastItemBurnTime != this.furnace.currentItemBurnTime) { + icrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime); + } + if (this.lastVis != this.furnace.vis) { + icrafting.sendProgressBarUpdate(this, 3, this.furnace.vis); + } + if (this.lastSmelt != this.furnace.smeltTime) { + icrafting.sendProgressBarUpdate(this, 4, this.furnace.smeltTime); + } + } + this.lastCookTime = this.furnace.furnaceCookTime; + this.lastBurnTime = this.furnace.furnaceBurnTime; + this.lastItemBurnTime = this.furnace.currentItemBurnTime; + this.lastVis = this.furnace.vis; + this.lastSmelt = this.furnace.smeltTime; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(final int par1, final int par2) { + if (par1 == 0) { + this.furnace.furnaceCookTime = par2; + } + if (par1 == 1) { + this.furnace.furnaceBurnTime = par2; + } + if (par1 == 2) { + this.furnace.currentItemBurnTime = par2; + } + if (par1 == 3) { + this.furnace.vis = par2; + } + if (par1 == 4) { + this.furnace.smeltTime = par2; + } + } + + @Override + public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { + return this.furnace.isUseableByPlayer(par1EntityPlayer); + } + + @Override + public ItemStack transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par2) { + ItemStack itemstack = null; + final Slot slot = (Slot) this.inventorySlots.get(par2); + if ((slot != null) && slot.getHasStack()) { + final ItemStack itemstack2 = slot.getStack(); + itemstack = itemstack2.copy(); + if ((par2 != 1) && (par2 != 0)) { + AspectList al = ThaumcraftCraftingManager.getObjectTags(itemstack2); + al = ThaumcraftCraftingManager.getBonusTags(itemstack2, al); + if (TileFastAlchemyFurnace.isItemFuel(itemstack2)) { + if (!this.mergeItemStack(itemstack2, 1, 2, false) + && !this.mergeItemStack(itemstack2, 0, 1, false)) { + return null; + } + } else if ((al != null) && (al.size() > 0)) { + if (!this.mergeItemStack(itemstack2, 0, 1, false)) { + return null; + } + } else if ((par2 >= 2) && (par2 < 29)) { + if (!this.mergeItemStack(itemstack2, 29, 38, false)) { + return null; + } + } else if ((par2 >= 29) && (par2 < 38) && !this.mergeItemStack(itemstack2, 2, 29, false)) { + return null; + } + } else if (!this.mergeItemStack(itemstack2, 2, 38, false)) { + return null; + } + if (itemstack2.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + if (itemstack2.stackSize == itemstack.stackSize) { + return null; + } + slot.onPickupFromSlot(par1EntityPlayer, itemstack2); + } + return itemstack; + } +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java new file mode 100644 index 0000000000..5f23568bc1 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/thaumcraft/gui/GuiFastAlchemyFurnace.java @@ -0,0 +1,45 @@ +package gtPlusPlus.xmod.thaumcraft.gui; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.xmod.thaumcraft.common.tile.TileFastAlchemyFurnace; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import thaumcraft.client.lib.UtilsFX; + +@SideOnly(Side.CLIENT) +public class GuiFastAlchemyFurnace extends GuiContainer { + private final TileFastAlchemyFurnace furnaceInventory; + + public GuiFastAlchemyFurnace(final InventoryPlayer par1InventoryPlayer, + final TileFastAlchemyFurnace par2TileEntityFurnace) { + super(new ContainerFastAlchemyFurnace(par1InventoryPlayer, par2TileEntityFurnace)); + this.furnaceInventory = par2TileEntityFurnace; + } + + @Override + protected void drawGuiContainerForegroundLayer(final int par1, final int par2) { + } + + @Override + protected void drawGuiContainerBackgroundLayer(final float par1, final int par2, final int par3) { + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + UtilsFX.bindTexture("textures/gui/gui_alchemyfurnace.png"); + final int k = (this.width - this.xSize) / 2; + final int l = (this.height - this.ySize) / 2; + GL11.glEnable(3042); + this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + if (this.furnaceInventory.isBurning()) { + final int i1 = this.furnaceInventory.getBurnTimeRemainingScaled(20); + this.drawTexturedModalRect(k + 80, (l + 26 + 20) - i1, 176, 20 - i1, 16, i1); + } + int i1 = this.furnaceInventory.getCookProgressScaled(46); + this.drawTexturedModalRect(k + 106, (l + 13 + 46) - i1, 216, 46 - i1, 9, i1); + i1 = this.furnaceInventory.getContentsScaled(48); + this.drawTexturedModalRect(k + 61, (l + 12 + 48) - i1, 200, 48 - i1, 8, i1); + this.drawTexturedModalRect(k + 60, l + 8, 232, 0, 10, 55); + GL11.glDisable(3042); + } +} \ No newline at end of file -- cgit