diff --git a/build.gradle b/build.gradle index c5b1c8c5b..63a38bcf0 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { apply plugin: 'forge' apply plugin: 'maven' -version = "1.7.10-0.0.4.4" +version = "1.7.10-0.0.5.0" group = "ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/src/main/java/cofh/api/CoFHAPIProps.java b/src/main/java/cofh/api/CoFHAPIProps.java new file mode 100644 index 000000000..9b528304a --- /dev/null +++ b/src/main/java/cofh/api/CoFHAPIProps.java @@ -0,0 +1,11 @@ +package cofh.api; + +public class CoFHAPIProps { + + private CoFHAPIProps() { + + } + + public static final String VERSION = "1.7.10R1.0.2"; + +} diff --git a/src/main/java/cofh/api/energy/EnergyStorage.java b/src/main/java/cofh/api/energy/EnergyStorage.java new file mode 100644 index 000000000..1674c1894 --- /dev/null +++ b/src/main/java/cofh/api/energy/EnergyStorage.java @@ -0,0 +1,158 @@ +package cofh.api.energy; + +import net.minecraft.nbt.NBTTagCompound; + +/** + * Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own. + * + * @author King Lemming + * + */ +public class EnergyStorage implements IEnergyStorage { + + protected int energy; + protected int capacity; + protected int maxReceive; + protected int maxExtract; + + public EnergyStorage(int capacity) { + + this(capacity, capacity, capacity); + } + + public EnergyStorage(int capacity, int maxTransfer) { + + this(capacity, maxTransfer, maxTransfer); + } + + public EnergyStorage(int capacity, int maxReceive, int maxExtract) { + + this.capacity = capacity; + this.maxReceive = maxReceive; + this.maxExtract = maxExtract; + } + + public EnergyStorage readFromNBT(NBTTagCompound nbt) { + + this.energy = nbt.getInteger("Energy"); + + if (energy > capacity) { + energy = capacity; + } + return this; + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) { + + if (energy < 0) { + energy = 0; + } + nbt.setInteger("Energy", energy); + return nbt; + } + + public void setCapacity(int capacity) { + + this.capacity = capacity; + + if (energy > capacity) { + energy = capacity; + } + } + + public void setMaxTransfer(int maxTransfer) { + + setMaxReceive(maxTransfer); + setMaxExtract(maxTransfer); + } + + public void setMaxReceive(int maxReceive) { + + this.maxReceive = maxReceive; + } + + public void setMaxExtract(int maxExtract) { + + this.maxExtract = maxExtract; + } + + public int getMaxReceive() { + + return maxReceive; + } + + public int getMaxExtract() { + + return maxExtract; + } + + /** + * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers + * are guaranteed to have it. + * + * @param energy + */ + public void setEnergyStored(int energy) { + + this.energy = energy; + + if (this.energy > capacity) { + this.energy = capacity; + } else if (this.energy < 0) { + this.energy = 0; + } + } + + /** + * This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this + * externally, as not all IEnergyHandlers are guaranteed to have it. + * + * @param energy + */ + public void modifyEnergyStored(int energy) { + + this.energy += energy; + + if (this.energy > capacity) { + this.energy = capacity; + } else if (this.energy < 0) { + this.energy = 0; + } + } + + /* IEnergyStorage */ + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + + int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) { + energy += energyReceived; + } + return energyReceived; + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + + int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); + + if (!simulate) { + energy -= energyExtracted; + } + return energyExtracted; + } + + @Override + public int getEnergyStored() { + + return energy; + } + + @Override + public int getMaxEnergyStored() { + + return capacity; + } + +} diff --git a/src/main/java/cofh/api/energy/IEnergyConnection.java b/src/main/java/cofh/api/energy/IEnergyConnection.java new file mode 100644 index 000000000..79bdf77af --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyConnection.java @@ -0,0 +1,21 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not + * accept it; otherwise just use IEnergyHandler. + *

+ * Note that {@link IEnergyHandler} is an extension of this. + * + * @author King Lemming + * + */ +public interface IEnergyConnection { + + /** + * Returns TRUE if the TileEntity can connect on a given side. + */ + boolean canConnectEnergy(ForgeDirection from); + +} diff --git a/src/main/java/cofh/api/energy/IEnergyContainerItem.java b/src/main/java/cofh/api/energy/IEnergyContainerItem.java new file mode 100644 index 000000000..c28455b1a --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyContainerItem.java @@ -0,0 +1,52 @@ +package cofh.api.energy; + +import net.minecraft.item.ItemStack; + +/** + * Implement this interface on Item classes that support external manipulation of their internal energy storages. + *

+ * A reference implementation is provided {@link ItemEnergyContainer}. + * + * @author King Lemming + * + */ +public interface IEnergyContainerItem { + + /** + * Adds energy to a container item. Returns the quantity of energy that was accepted. This should always return 0 if the item cannot be externally charged. + * + * @param container + * ItemStack to be charged. + * @param maxReceive + * Maximum amount of energy to be sent into the item. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received by the item. + */ + int receiveEnergy(ItemStack container, int maxReceive, boolean simulate); + + /** + * Removes energy from a container item. Returns the quantity of energy that was removed. This should always return 0 if the item cannot be externally + * discharged. + * + * @param container + * ItemStack to be discharged. + * @param maxExtract + * Maximum amount of energy to be extracted from the item. + * @param simulate + * If TRUE, the discharge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted from the item. + */ + int extractEnergy(ItemStack container, int maxExtract, boolean simulate); + + /** + * Get the amount of energy currently stored in the container item. + */ + int getEnergyStored(ItemStack container); + + /** + * Get the max amount of energy that can be stored in the container item. + */ + int getMaxEnergyStored(ItemStack container); + +} diff --git a/src/main/java/cofh/api/energy/IEnergyHandler.java b/src/main/java/cofh/api/energy/IEnergyHandler.java new file mode 100644 index 000000000..22f2dbc62 --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyHandler.java @@ -0,0 +1,58 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + *

+ * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver { + + // merely a convenience interface (remove these methods in 1.8; provided here for back-compat via compiler doing things) + + /** + * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. + * + * @param from + * Orientation the energy is received from. + * @param maxReceive + * Maximum amount of energy to receive. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received. + */ + @Override + int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); + + /** + * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. + * + * @param from + * Orientation the energy is extracted from. + * @param maxExtract + * Maximum amount of energy to extract. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted. + */ + @Override + int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); + + + /** + * Returns the amount of energy currently stored. + */ + @Override + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + @Override + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/src/main/java/cofh/api/energy/IEnergyProvider.java b/src/main/java/cofh/api/energy/IEnergyProvider.java new file mode 100644 index 000000000..05287b35e --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyProvider.java @@ -0,0 +1,38 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + *

+ * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyProvider extends IEnergyConnection { + + /** + * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. + * + * @param from + * Orientation the energy is extracted from. + * @param maxExtract + * Maximum amount of energy to extract. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted. + */ + int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/src/main/java/cofh/api/energy/IEnergyReceiver.java b/src/main/java/cofh/api/energy/IEnergyReceiver.java new file mode 100644 index 000000000..c726e09e0 --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyReceiver.java @@ -0,0 +1,38 @@ +package cofh.api.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects. + *

+ * A reference implementation is provided {@link TileEnergyHandler}. + * + * @author King Lemming + * + */ +public interface IEnergyReceiver extends IEnergyConnection { + + /** + * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. + * + * @param from + * Orientation the energy is received from. + * @param maxReceive + * Maximum amount of energy to receive. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received. + */ + int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(ForgeDirection from); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(ForgeDirection from); + +} diff --git a/src/main/java/cofh/api/energy/IEnergyStorage.java b/src/main/java/cofh/api/energy/IEnergyStorage.java new file mode 100644 index 000000000..bc2065607 --- /dev/null +++ b/src/main/java/cofh/api/energy/IEnergyStorage.java @@ -0,0 +1,46 @@ +package cofh.api.energy; + +/** + * An energy storage is the unit of interaction with Energy inventories.
+ * This is not to be implemented on TileEntities. This is for internal use only. + *

+ * A reference implementation can be found at {@link EnergyStorage}. + * + * @author King Lemming + * + */ +public interface IEnergyStorage { + + /** + * Adds energy to the storage. Returns quantity of energy that was accepted. + * + * @param maxReceive + * Maximum amount of energy to be inserted. + * @param simulate + * If TRUE, the insertion will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) accepted by the storage. + */ + int receiveEnergy(int maxReceive, boolean simulate); + + /** + * Removes energy from the storage. Returns quantity of energy that was removed. + * + * @param maxExtract + * Maximum amount of energy to be extracted. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted from the storage. + */ + int extractEnergy(int maxExtract, boolean simulate); + + /** + * Returns the amount of energy currently stored. + */ + int getEnergyStored(); + + /** + * Returns the maximum amount of energy that can be stored. + */ + int getMaxEnergyStored(); + +} diff --git a/src/main/java/cofh/api/energy/ItemEnergyContainer.java b/src/main/java/cofh/api/energy/ItemEnergyContainer.java new file mode 100644 index 000000000..055ae45bc --- /dev/null +++ b/src/main/java/cofh/api/energy/ItemEnergyContainer.java @@ -0,0 +1,110 @@ +package cofh.api.energy; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +/** + * Reference implementation of {@link IEnergyContainerItem}. Use/extend this or implement your own. + * + * @author King Lemming + * + */ +public class ItemEnergyContainer extends Item implements IEnergyContainerItem { + + protected int capacity; + protected int maxReceive; + protected int maxExtract; + + public ItemEnergyContainer() { + + } + + public ItemEnergyContainer(int capacity) { + + this(capacity, capacity, capacity); + } + + public ItemEnergyContainer(int capacity, int maxTransfer) { + + this(capacity, maxTransfer, maxTransfer); + } + + public ItemEnergyContainer(int capacity, int maxReceive, int maxExtract) { + + this.capacity = capacity; + this.maxReceive = maxReceive; + this.maxExtract = maxExtract; + } + + public ItemEnergyContainer setCapacity(int capacity) { + + this.capacity = capacity; + return this; + } + + public void setMaxTransfer(int maxTransfer) { + + setMaxReceive(maxTransfer); + setMaxExtract(maxTransfer); + } + + public void setMaxReceive(int maxReceive) { + + this.maxReceive = maxReceive; + } + + public void setMaxExtract(int maxExtract) { + + this.maxExtract = maxExtract; + } + + /* IEnergyContainerItem */ + @Override + public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { + + if (container.stackTagCompound == null) { + container.stackTagCompound = new NBTTagCompound(); + } + int energy = container.stackTagCompound.getInteger("Energy"); + int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) { + energy += energyReceived; + container.stackTagCompound.setInteger("Energy", energy); + } + return energyReceived; + } + + @Override + public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { + + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { + return 0; + } + int energy = container.stackTagCompound.getInteger("Energy"); + int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); + + if (!simulate) { + energy -= energyExtracted; + container.stackTagCompound.setInteger("Energy", energy); + } + return energyExtracted; + } + + @Override + public int getEnergyStored(ItemStack container) { + + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { + return 0; + } + return container.stackTagCompound.getInteger("Energy"); + } + + @Override + public int getMaxEnergyStored(ItemStack container) { + + return capacity; + } + +} diff --git a/src/main/java/cofh/api/energy/TileEnergyHandler.java b/src/main/java/cofh/api/energy/TileEnergyHandler.java new file mode 100644 index 000000000..7cc655e92 --- /dev/null +++ b/src/main/java/cofh/api/energy/TileEnergyHandler.java @@ -0,0 +1,65 @@ +package cofh.api.energy; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own. + * + * @author King Lemming + * + */ +public class TileEnergyHandler extends TileEntity implements IEnergyHandler { + + protected EnergyStorage storage = new EnergyStorage(32000); + + @Override + public void readFromNBT(NBTTagCompound nbt) { + + super.readFromNBT(nbt); + storage.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + + super.writeToNBT(nbt); + storage.writeToNBT(nbt); + } + + /* IEnergyConnection */ + @Override + public boolean canConnectEnergy(ForgeDirection from) { + + return true; + } + + /* IEnergyReceiver */ + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { + + return storage.receiveEnergy(maxReceive, simulate); + } + + /* IEnergyProvider */ + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { + + return storage.extractEnergy(maxExtract, simulate); + } + + /* IEnergyReceiver and IEnergyProvider */ + @Override + public int getEnergyStored(ForgeDirection from) { + + return storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from) { + + return storage.getMaxEnergyStored(); + } + +} diff --git a/src/main/java/cofh/api/energy/package-info.java b/src/main/java/cofh/api/energy/package-info.java new file mode 100644 index 000000000..7379702b8 --- /dev/null +++ b/src/main/java/cofh/api/energy/package-info.java @@ -0,0 +1,10 @@ +/** + * (C) 2014 Team CoFH / CoFH / Cult of the Full Hub + * http://www.teamcofh.com + */ +@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHAPI", provides = "CoFHAPI|energy") +package cofh.api.energy; + +import cofh.api.CoFHAPIProps; +import cpw.mods.fml.common.API; + diff --git a/src/main/java/cofh/api/package-info.java b/src/main/java/cofh/api/package-info.java new file mode 100644 index 000000000..08ff5fcb6 --- /dev/null +++ b/src/main/java/cofh/api/package-info.java @@ -0,0 +1,9 @@ +/** + * (C) 2014 Team CoFH / CoFH / Cult of the Full Hub + * http://www.teamcofh.com + */ +@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI") +package cofh.api; + +import cpw.mods.fml.common.API; + diff --git a/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java b/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java index d6d0604a6..e22cfa268 100644 --- a/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java +++ b/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java @@ -21,6 +21,7 @@ import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.material.InitItemMaterials; import ellpeck.actuallyadditions.network.PacketHandler; import ellpeck.actuallyadditions.proxy.IProxy; +import ellpeck.actuallyadditions.recipe.FuelHandler; import ellpeck.actuallyadditions.tile.TileEntityBase; import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.Util; @@ -44,6 +45,7 @@ public class ActuallyAdditions{ InitBlocks.init(); InitItems.init(); InitVillager.init(); + FuelHandler.init(); proxy.preInit(); Util.logInfo("PreInitialization Finished."); diff --git a/src/main/java/ellpeck/actuallyadditions/PLANNED.txt b/src/main/java/ellpeck/actuallyadditions/PLANNED.txt index 44545e5e1..cc501acef 100644 --- a/src/main/java/ellpeck/actuallyadditions/PLANNED.txt +++ b/src/main/java/ellpeck/actuallyadditions/PLANNED.txt @@ -3,6 +3,10 @@ -Doesn't use Levels -Needs Quartz and Diamond Blocks instead of Bookcases around +-Chestie + -Follows you around + -Has an Inventory, a Crafting Table and a Furnace + -Instant Teleport Device -Teleports Players to where they look (Much like the Bukkit Compass) @@ -17,10 +21,6 @@ -Destroys excess Items (also determined by a Filter) -Gets emptied into Chest on Right-Click --Rice - -Gets planted in the Water - -Used to make Rice Flour and Rice Bread - -Auto-Crafting Item -Has a Recipe saved -Crafts Recipe on Shift-Right-Click if all Items are in Inventory @@ -57,7 +57,30 @@ -File Jukebox -Plays Sound Files put into your Minecraft Folder --RF Implementation - -Power Acceptor Block that powers Machines - -Machines still don't accept RF themselves! - -Solar Panel & Heat Collector produce RF \ No newline at end of file +-Oil Plant + -Used to make Oil (For use with other mods' machines) + +-Pharmacy Plants + -Give you different effects + +-Multi-Block Ore Factory + -Fluids and things higher Multiplying Chance (x2, x3..) + -Speed Upgrades etc. + +-Advanced Redstone Transmitter + -You can mark an area + -On Activation, all blocks in the area get a Signal + +-Lava Factory + -2x3 Multi Block + -Requires Energy + -Produces Lava from Cobblestone + -Has Upgrade Slots + +-Phantom Chest + -Is bound to Inventory on Right-Click + -Allows you to open the bound Inventory when placed down + -Only accessible with Pipes etc. + -ISided like the bound Block + -Range of 10, Range Upgrade adds 15 Range + -Nether Star allows direct GUI Access and adds 50 Range diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCanolaPress.java new file mode 100644 index 000000000..16ca12ff4 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCanolaPress.java @@ -0,0 +1,112 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.tile.TileEntityCanolaPress; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockCanolaPress extends BlockContainerBase implements INameableItem{ + + private IIcon topIcon; + + public BlockCanolaPress(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.0F); + this.setStepSound(soundTypeStone); + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityCanolaPress(); + } + + @Override + public IIcon getIcon(int side, int meta){ + return side == 1 || side == 0 ? this.topIcon : this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.topIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top"); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityCanolaPress press = (TileEntityCanolaPress)world.getTileEntity(x, y, z); + if (press != null) player.openGui(ActuallyAdditions.instance, GuiHandler.CANOLA_PRESS_ID, world, x, y, z); + return true; + } + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int par6){ + this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, par6); + } + + @Override + public String getName(){ + return "blockCanolaPress"; + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.rare; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerUsageInfo(list, TileEntityCanolaPress.energyUsedPerTick); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCoalGenerator.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCoalGenerator.java new file mode 100644 index 000000000..b57296420 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCoalGenerator.java @@ -0,0 +1,112 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.tile.TileEntityCoalGenerator; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockCoalGenerator extends BlockContainerBase implements INameableItem{ + + private IIcon topIcon; + + public BlockCoalGenerator(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.0F); + this.setStepSound(soundTypeStone); + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityCoalGenerator(); + } + + @Override + public IIcon getIcon(int side, int meta){ + return side <= 1 ? this.topIcon : this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.topIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top"); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityCoalGenerator press = (TileEntityCoalGenerator)world.getTileEntity(x, y, z); + if (press != null) player.openGui(ActuallyAdditions.instance, GuiHandler.COAL_GENERATOR_ID, world, x, y, z); + return true; + } + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int par6){ + this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, par6); + } + + @Override + public String getName(){ + return "blockCoalGenerator"; + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.uncommon; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerProductionInfo(list, TileEntityCoalGenerator.energyProducedPerTick); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java index ec518b1c4..2fb26fdc5 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java @@ -33,6 +33,8 @@ public class BlockCompost extends BlockContainerBase implements INameableItem{ this.setHarvestLevel("axe", 0); this.setHardness(1.0F); this.setStepSound(soundTypeWood); + + this.setBlockBoundsForItemRender(); } @Override @@ -46,6 +48,7 @@ public class BlockCompost extends BlockContainerBase implements INameableItem{ else tile.slots[0].stackSize++; if(!player.capabilities.isCreativeMode) player.inventory.getCurrentItem().stackSize--; } + //Add Fertilizer to player's inventory else if(tile.slots[0] != null && (stackPlayer == null || (stackPlayer.getItem() instanceof ItemFertilizer && stackPlayer.stackSize <= stackPlayer.getMaxStackSize() - tile.slots[0].stackSize)) && tile.slots[0].getItem() instanceof ItemFertilizer){ if(stackPlayer == null) player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCoffeeMachine.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFermentingBarrel.java similarity index 66% rename from src/main/java/ellpeck/actuallyadditions/blocks/BlockCoffeeMachine.java rename to src/main/java/ellpeck/actuallyadditions/blocks/BlockFermentingBarrel.java index af10c8998..68ab2eb43 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCoffeeMachine.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFermentingBarrel.java @@ -1,15 +1,17 @@ package ellpeck.actuallyadditions.blocks; -import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.tile.TileEntityFermentingBarrel; import ellpeck.actuallyadditions.util.BlockUtil; import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -19,9 +21,11 @@ import net.minecraft.world.World; import java.util.List; -public class BlockCoffeeMachine extends BlockContainerBase implements INameableItem{ +public class BlockFermentingBarrel extends BlockContainerBase implements INameableItem{ - public BlockCoffeeMachine(){ + private IIcon iconTop; + + public BlockFermentingBarrel(){ super(Material.wood); this.setHarvestLevel("axe", 0); this.setHardness(1.0F); @@ -29,44 +33,25 @@ public class BlockCoffeeMachine extends BlockContainerBase implements INameableI } @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int f6, float f7, float f8, float f9){ - if(!world.isRemote){ + public String getOredictName(){ + return this.getName(); + } + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityFermentingBarrel(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityFermentingBarrel press = (TileEntityFermentingBarrel)world.getTileEntity(x, y, z); + if (press != null) player.openGui(ActuallyAdditions.instance, GuiHandler.FERMENTING_BARREL_ID, world, x, y, z); + return true; } return true; } - @Override - public IIcon getIcon(int side, int metadata){ - return this.blockIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconReg){ - this.blockIcon = Blocks.hopper.getIcon(0, 0); - } - - @Override - public boolean isOpaqueCube(){ - return false; - } - - @Override - public boolean renderAsNormalBlock(){ - return false; - } - - @Override - public int getRenderType(){ - return RenderingRegistry.getNextAvailableRenderId(); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta){ - return null; - } - @Override public void breakBlock(World world, int x, int y, int z, Block block, int par6){ this.dropInventory(world, x, y, z); @@ -74,13 +59,20 @@ public class BlockCoffeeMachine extends BlockContainerBase implements INameableI } @Override - public String getName(){ - return "blockCoffeeMachine"; + public IIcon getIcon(int side, int metadata){ + return side <= 1 ? this.iconTop : this.blockIcon; } @Override - public String getOredictName(){ - return this.getName(); + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.iconTop = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top"); + } + + @Override + public String getName(){ + return "blockFermentingBarrel"; } public static class TheItemBlock extends ItemBlock{ @@ -112,8 +104,8 @@ public class BlockCoffeeMachine extends BlockContainerBase implements INameableI } @Override - public int getMetadata(int damage){ - return damage; + public int getMetadata(int meta){ + return meta; } } } diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFluidFlowing.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFluidFlowing.java new file mode 100644 index 000000000..c60c1f7a4 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFluidFlowing.java @@ -0,0 +1,103 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; + +import java.util.List; + +public class BlockFluidFlowing extends BlockFluidClassic implements INameableItem{ + + private String name; + + public IIcon stillIcon; + public IIcon flowingIcon; + + public BlockFluidFlowing(Fluid fluid, Material material, String unlocalizedName){ + super(fluid, material); + this.name = unlocalizedName; + this.setRenderPass(1); + displacements.put(this, false); + } + + @Override + public boolean canDisplace(IBlockAccess world, int x, int y, int z){ + return !world.getBlock(x, y, z).getMaterial().isLiquid() && super.canDisplace(world, x, y, z); + } + + @Override + public boolean displaceIfPossible(World world, int x, int y, int z){ + return !world.getBlock(x, y, z).getMaterial().isLiquid() && super.displaceIfPossible(world, x, y, z); + } + + @Override + public IIcon getIcon(int side, int meta){ + return side <= 1 ? this.stillIcon : this.flowingIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.stillIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Still"); + this.flowingIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Flowing"); + this.definedFluid.setIcons(this.stillIcon, this.flowingIcon); + } + + @Override + public String getName(){ + return this.name; + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.uncommon; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java index bee306682..a0986d1c9 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java @@ -171,6 +171,7 @@ public class BlockFurnaceDouble extends BlockContainerBase implements INameableI @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerUsageInfo(list, TileEntityFurnaceDouble.energyUsePerTick); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceSolar.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceSolar.java index 3f3e8cf14..0c2ae5542 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceSolar.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceSolar.java @@ -97,6 +97,7 @@ public class BlockFurnaceSolar extends BlockContainerBase implements INameableIt @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerProductionInfo(list, TileEntityFurnaceSolar.energyProducedPerTick); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java index 1f13cd985..1c63f53f6 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java @@ -3,6 +3,7 @@ package ellpeck.actuallyadditions.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; import ellpeck.actuallyadditions.inventory.GuiHandler; import ellpeck.actuallyadditions.tile.TileEntityGrinder; import ellpeck.actuallyadditions.util.BlockUtil; @@ -134,6 +135,7 @@ public class BlockGrinder extends BlockContainerBase implements INameableItem{ @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { BlockUtil.addInformation(theBlock, list, ((BlockGrinder)theBlock).isDouble ? 3 : 4, ""); + BlockUtil.addPowerUsageInfo(list, ((BlockGrinder)theBlock).isDouble ? ConfigIntValues.GRINDER_DOUBLE_ENERGY_USED.getValue() : ConfigIntValues.GRINDER_ENERGY_USED.getValue()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockHeatCollector.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockHeatCollector.java index 6d12ce546..c026c01dd 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockHeatCollector.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockHeatCollector.java @@ -85,6 +85,7 @@ public class BlockHeatCollector extends BlockContainerBase implements INameableI @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { BlockUtil.addInformation(theBlock, list, 3, ""); + BlockUtil.addPowerProductionInfo(list, TileEntityHeatCollector.energyProducedPerTick); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockItemRepairer.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockItemRepairer.java index 0b41e06d8..10be6b9a1 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockItemRepairer.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockItemRepairer.java @@ -122,6 +122,7 @@ public class BlockItemRepairer extends BlockContainerBase implements INameableIt @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerUsageInfo(list, TileEntityItemRepairer.energyUsePerTick); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockOilGenerator.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockOilGenerator.java new file mode 100644 index 000000000..28e8d6568 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockOilGenerator.java @@ -0,0 +1,112 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.tile.TileEntityOilGenerator; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockOilGenerator extends BlockContainerBase implements INameableItem{ + + private IIcon topIcon; + + public BlockOilGenerator(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.0F); + this.setStepSound(soundTypeStone); + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityOilGenerator(); + } + + @Override + public IIcon getIcon(int side, int meta){ + return side <= 1 ? this.topIcon : this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.topIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top"); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityOilGenerator generator = (TileEntityOilGenerator)world.getTileEntity(x, y, z); + if (generator != null) player.openGui(ActuallyAdditions.instance, GuiHandler.OIL_GENERATOR_ID, world, x, y, z); + return true; + } + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int par6){ + this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, par6); + } + + @Override + public String getName(){ + return "blockOilGenerator"; + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.uncommon; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + BlockUtil.addPowerProductionInfo(list, TileEntityOilGenerator.energyProducedPerTick); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java new file mode 100644 index 000000000..da7866f6a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java @@ -0,0 +1,112 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityPhantomface; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockPhantomface extends BlockContainerBase implements INameableItem{ + + public BlockPhantomface(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.0F); + this.setStepSound(soundTypeStone); + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int hitSide, float hitX, float hitY, float hitZ){ + if(!world.isRemote){ + TileEntityPhantomface tile = (TileEntityPhantomface)world.getTileEntity(x, y, z); + if(tile != null){ + if(tile.hasBoundTile()){ + if(tile.isBoundTileInRage()){ + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", tile.boundTile.xCoord, tile.boundTile.yCoord, tile.boundTile.zCoord))); + return true; + } + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", tile.boundTile.xCoord, tile.boundTile.yCoord, tile.boundTile.zCoord))); + return true; + } + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"))); + return true; + } + } + return false; + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityPhantomface(); + } + + @Override + public IIcon getIcon(int side, int metadata){ + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public String getName(){ + return "blockPhantomface"; + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.epic; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 2, ""); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockPlant.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPlant.java new file mode 100644 index 000000000..6de887356 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPlant.java @@ -0,0 +1,138 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.items.ItemSeed; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCrops; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class BlockPlant extends BlockCrops implements INameableItem{ + + private IIcon[] textures; + private String name; + public Item seedItem; + public ItemStack returnItem; + + public BlockPlant(String name, int stages){ + this.name = name; + this.textures = new IIcon[stages]; + } + + @Override + public boolean canBlockStay(World world, int x, int y, int z){ + return y > 0 && y < 256 && world.getBlock(x, y-1, z).getMaterial() == ((ItemSeed)this.seedItem).soilBlock.getMaterial(); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune){ + ArrayList ret = super.getDrops(world, x, y, z, metadata, fortune); + if (metadata >= 7){ + for (int i = 0; i < 3 + fortune; ++i){ + if (world.rand.nextInt(15) <= metadata){ + ret.add(new ItemStack(this.seedItem)); + } + } + ret.add(this.returnItem.copy()); + } + + return ret; + } + + @Override + public Item getItemDropped(int meta, Random rand, int i){ + return null; + } + + + @Override + public boolean canPlaceBlockOn(Block block){ + return block == ((ItemSeed)this.seedItem).soilBlock; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta){ + if(meta < 7){ + if (meta == 6) meta = 5; + return this.textures[meta >> 1]; + } + else return this.textures[this.textures.length-1]; + } + + @Override + public Item func_149866_i(){ + return this.seedItem; + } + + @Override + public Item func_149865_P(){ + return this.returnItem.getItem(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + for (int i = 0; i < this.textures.length; i++){ + textures[i] = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Stage" + (i+1)); + } + } + + @Override + public String getName(){ + return this.name; + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.uncommon; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/FluidAA.java b/src/main/java/ellpeck/actuallyadditions/blocks/FluidAA.java new file mode 100644 index 000000000..5e09fef8a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/FluidAA.java @@ -0,0 +1,10 @@ +package ellpeck.actuallyadditions.blocks; + +import net.minecraftforge.fluids.Fluid; + +public class FluidAA extends Fluid{ + + public FluidAA(String fluidName){ + super(fluidName); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java index 40b45453e..64cdf3528 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java @@ -3,6 +3,10 @@ package ellpeck.actuallyadditions.blocks; import ellpeck.actuallyadditions.util.BlockUtil; import ellpeck.actuallyadditions.util.Util; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.EnumRarity; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; public class InitBlocks{ @@ -26,9 +30,56 @@ public class InitBlocks{ public static Block blockPlacer; public static Block blockDropper; + public static Block blockRice; + public static Block blockCanola; + + public static Fluid fluidCanolaOil; + public static Block blockCanolaOil; + public static Fluid fluidOil; + public static Block blockOil; + + public static Block blockCanolaPress; + public static Block blockFermentingBarrel; + + public static Block blockCoalGenerator; + public static Block blockOilGenerator; + + public static Block blockPhantomface; + public static void init(){ Util.logInfo("Initializing Blocks..."); + fluidCanolaOil = new FluidAA("canolaOil").setDensity(1200).setViscosity(1500).setTemperature(300).setRarity(EnumRarity.uncommon); + FluidRegistry.registerFluid(fluidCanolaOil); + blockCanolaOil = new BlockFluidFlowing(fluidCanolaOil, Material.water, "blockCanolaOil"); + BlockUtil.register(blockCanolaOil, BlockFluidFlowing.TheItemBlock.class, false); + + fluidOil = new FluidAA("oil").setDensity(1200).setViscosity(1500).setTemperature(300).setRarity(EnumRarity.uncommon); + FluidRegistry.registerFluid(fluidOil); + blockOil = new BlockFluidFlowing(fluidOil, Material.water, "blockOil"); + BlockUtil.register(blockOil, BlockFluidFlowing.TheItemBlock.class, false); + + blockCanolaPress = new BlockCanolaPress(); + BlockUtil.register(blockCanolaPress, BlockCanolaPress.TheItemBlock.class); + + blockPhantomface = new BlockPhantomface(); + BlockUtil.register(blockPhantomface, BlockPhantomface.TheItemBlock.class); + + blockCoalGenerator = new BlockCoalGenerator(); + BlockUtil.register(blockCoalGenerator, BlockCoalGenerator.TheItemBlock.class); + + blockOilGenerator = new BlockOilGenerator(); + BlockUtil.register(blockOilGenerator, BlockOilGenerator.TheItemBlock.class); + + blockFermentingBarrel = new BlockFermentingBarrel(); + BlockUtil.register(blockFermentingBarrel, BlockFermentingBarrel.TheItemBlock.class); + + blockRice = new BlockPlant("blockRice", 6); + BlockUtil.register(blockRice, BlockPlant.TheItemBlock.class, false); + + blockCanola = new BlockPlant("blockCanola", 4); + BlockUtil.register(blockCanola, BlockPlant.TheItemBlock.class, false); + blockCompost = new BlockCompost(); BlockUtil.register(blockCompost, BlockCompost.TheItemBlock.class); diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/metalists/TheMiscBlocks.java b/src/main/java/ellpeck/actuallyadditions/blocks/metalists/TheMiscBlocks.java index d2c2dcdb3..a007cda29 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/metalists/TheMiscBlocks.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/metalists/TheMiscBlocks.java @@ -10,7 +10,9 @@ public enum TheMiscBlocks implements INameableItem{ QUARTZ("BlackQuartz", EnumRarity.rare, "blockQuartzBlack"), ORE_QUARTZ("OreBlackQuartz", EnumRarity.epic, "oreQuartzBlack"), WOOD_CASING("WoodCasing", EnumRarity.common, "blockCasingWood"), - STONE_CASING("StoneCasing", EnumRarity.uncommon, "blockCasingStone"); + STONE_CASING("StoneCasing", EnumRarity.uncommon, "blockCasingStone"), + CHARCOAL_BLOCK("Charcoal", EnumRarity.common, "blockCharcoal"), + ENDERPEARL_BLOCK("Enderpearl", EnumRarity.rare, "blockEnderpearl"); public final String name; public final String oredictName; diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java index 8c65da1ec..6c89187ec 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java @@ -21,10 +21,12 @@ public enum ConfigBoolValues{ EMERALD_SHARD_CROP("Emerald Shard", ConfigCategories.MOB_DROPS, true, "If the Emerald Shard drops from Mobs"), DO_UPDATE_CHECK("Do Update Check", ConfigCategories.OTHER, true, "If Actually Additions should check for an Update on joining a World"), - DO_CRUSHER_SPAM("Crusher Debug", ConfigCategories.OTHER, false, "Print out Crusher Recipe Initializing Debug"), + DO_CAT_DROPS("Do Cat Drops", ConfigCategories.OTHER, true, "If Cats drop Hairy Balls on Occasion"), + DO_WAILA_INFO("Waila Display Info", ConfigCategories.OTHER, true, "If the Shift Description should display in Waila too"), - DO_CAT_DROPS("Do Cat Drops", ConfigCategories.OTHER, true, "If Cats drop Hairy Balls on Occasion"); + DO_RICE_GEN("Rice Gen", ConfigCategories.WORLD_GEN, true, "If Rice should generate in the World"), + DO_CANOLA_GEN("Canola Gen", ConfigCategories.WORLD_GEN, true, "If Canola should generate in the World"); public final String name; public final String category; diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java index 7faebfc9d..c88e70e39 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java @@ -68,7 +68,19 @@ public enum ConfigCrafting{ KNIFE_BLADE("Knife Blade", ConfigCategories.ITEMS_CRAFTING), TOOL_EMERALD("Emerald Tools", ConfigCategories.ITEMS_CRAFTING), - TOOL_OBSIDIAN("Obsidian Tools", ConfigCategories.ITEMS_CRAFTING); + TOOL_OBSIDIAN("Obsidian Tools", ConfigCategories.ITEMS_CRAFTING), + RICE_BREAD("Rice Bread", ConfigCategories.FOOD_CRAFTING), + RICE_DOUGH("Rice Dough", ConfigCategories.FOOD_CRAFTING), + + RICE_GADGETS("Rice Gadgets", ConfigCategories.ITEMS_CRAFTING), + RESONANT_RICE("Resonant Rice", ConfigCategories.ITEMS_CRAFTING), + + CANOLA_PRESS("Canola Press", ConfigCategories.BLOCKS_CRAFTING), + FERMENTING_BARREL("Fermenting Barrel", ConfigCategories.BLOCKS_CRAFTING), + COAL_GENERATOR("Coal Generator", ConfigCategories.BLOCKS_CRAFTING), + OIL_GENERATOR("Oil Generator", ConfigCategories.BLOCKS_CRAFTING), + PHANTOMFACE("Phantomface", ConfigCategories.BLOCKS_CRAFTING), + PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING); public final String name; public final String category; @@ -87,5 +99,4 @@ public enum ConfigCrafting{ public boolean isEnabled(){ return ConfigValues.craftingValues[this.ordinal()]; } - } diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java index 80df3d523..571d2a6e0 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java @@ -12,14 +12,14 @@ public enum ConfigIntValues{ BLACK_QUARTZ_BASE_AMOUNT("Black Quartz Amount", ConfigCategories.WORLD_GEN, 3, 1, 50, "How big a Black Quartz Vein is at least"), BLACK_QUARTZ_ADD_CHANCE("Black Quartz Additional Chance", ConfigCategories.WORLD_GEN, 3, 0, 50, "How much bigger than the Base Amount a Black Quartz Vein can get"), - BLACK_QUARTZ_CHANCE("Black Quartz Chance", ConfigCategories.WORLD_GEN, 25, 1, 150, "How often the Black Quartz tries to generate"), + BLACK_QUARTZ_CHANCE("Black Quartz Chance", ConfigCategories.WORLD_GEN, 5, 1, 150, "How often the Black Quartz tries to generate"), BLACK_QUARTZ_MIN_HEIGHT("Black Quartz Min Height", ConfigCategories.WORLD_GEN, 0, 0, 256, "How high the Black Quartz starts to generate"), BLACK_QUARTZ_MAX_HEIGHT("Black Quartz Max Height", ConfigCategories.WORLD_GEN, 25, 0, 256, "How high the Black Quartz stops to generate at"), COMPOST_AMOUNT("Compost: Amount Needed To Convert", ConfigCategories.MACHINE_VALUES, 10, 1, 64, "How many items are needed in the Compost to convert to Fertilizer"), COMPOST_TIME("Compost: Conversion Time Needed", ConfigCategories.MACHINE_VALUES, 1000, 30, 10000, "How long the Compost needs to convert to Fertilizer"), - FISHER_TIME("Fishing Net: Time Needed", ConfigCategories.MACHINE_VALUES, 10000, 50, 500000, "How long it takes on Average until the Fishing Net catches a Fish"), + FISHER_TIME("Fishing Net: Time Needed", ConfigCategories.MACHINE_VALUES, 15000, 50, 500000, "How long it takes on Average until the Fishing Net catches a Fish"), FEEDER_REACH("Feeder: Reach", ConfigCategories.MACHINE_VALUES, 5, 1, 20, "The Radius of Action of the Feeder"), FEEDER_TIME("Feeder: Time Needed", ConfigCategories.MACHINE_VALUES, 100, 50, 5000, "The time spent between feeding animals with the Feeder"), @@ -35,20 +35,41 @@ public enum ConfigIntValues{ OBSIDIAN_USES("Obsidian: Max Uses", ConfigCategories.TOOL_VALUES, 8000, 50, 20000, "How often Obsidian Tools can be used"), OBSIDIAN_ENCHANTABILITY("Obsidian: Enchantability", ConfigCategories.TOOL_VALUES, 15, 1, 30, "How enchantable an Obsidian Tool is"), - GRINDER_CRUSH_TIME("Crusher: Crush Time", ConfigCategories.MACHINE_VALUES, 200, 10, 1000, "How long the Crusher takes to crush an item"), - GRINDER_DOUBLE_CRUSH_TIME("Double Crusher: Crush Time", ConfigCategories.MACHINE_VALUES, 300, 10, 1000, "How long the Double Crusher takes to crush an item"), - FURNACE_DOUBLE_SMELT_TIME("Double Furnace: Smelt Time", ConfigCategories.MACHINE_VALUES, 300, 10, 1000, "How long the Double Furnace takes to crush an item"), + GRINDER_CRUSH_TIME("Crusher: Time", ConfigCategories.MACHINE_VALUES, 100, 10, 1000, "How long the Crusher takes to crush an item"), + GRINDER_DOUBLE_CRUSH_TIME("Double Crusher: Time", ConfigCategories.MACHINE_VALUES, 150, 10, 1000, "How long the Double Crusher takes to crush an item"), + FURNACE_DOUBLE_SMELT_TIME("Double Furnace: Time", ConfigCategories.MACHINE_VALUES, 80, 10, 1000, "How long the Double Furnace takes to crush an item"), - REPAIRER_SPEED_SLOWDOWN("Item Repairer: Speed Slowdown", ConfigCategories.MACHINE_VALUES, 3, 1, 100, "How much slower the Item Repairer repairs"), + REPAIRER_SPEED_SLOWDOWN("Repairer: Speed Slowdown", ConfigCategories.MACHINE_VALUES, 2, 1, 100, "How much slower the Item Repairer repairs"), HEAT_COLLECTOR_BLOCKS("Heat Collector: Blocks Needed", ConfigCategories.MACHINE_VALUES, 4, 1, 5, "How many Blocks are needed for the Heat Collector to power Machines above it"), HEAT_COLLECTOR_LAVA_CHANCE("Heat Collector: Random Chance", ConfigCategories.MACHINE_VALUES, 10000, 10, 100000, "The Chance of the Heat Collector destroying a Lava Block around (Default Value 2000 meaning a 1/2000 Chance!)"), - GLASS_TIME_NEEDED("Greenhouse Glass: Time Needed", ConfigCategories.MACHINE_VALUES, 1000, 10, 1000000, "The Time Needed for the Greenhouse Glass to grow a Plant below it"), + GLASS_TIME_NEEDED("Greenhouse Glass: Time Needed", ConfigCategories.MACHINE_VALUES, 4000, 10, 1000000, "The Time Needed for the Greenhouse Glass to grow a Plant below it"), BREAKER_TIME_NEEDED("Breaker and Placer: Time Needed", ConfigCategories.MACHINE_VALUES, 15, 1, 10000, "The Time Needed for the Breaker and the Placer to place or break a Block"), DROPPER_TIME_NEEDED("Dropper: Time Needed", ConfigCategories.MACHINE_VALUES, 10, 1, 10000, "The Time Needed for the Dropper to drop an Item"), - CAT_DROP_CHANCE("Cat Drops: Chance", ConfigCategories.OTHER, 5000, 5, 10000000, "The 1 in X chance for a Hairy Ball to Drop from a Cat with X being this value"); + CAT_DROP_CHANCE("Cat Drops: Chance", ConfigCategories.OTHER, 5000, 5, 10000000, "The 1 in X chance for a Hairy Ball to Drop from a Cat with X being this value"), + + RICE_AMOUNT("Rice Amount", ConfigCategories.WORLD_GEN, 15, 1, 100, "The Chance of Rice generating"), + CANOLA_AMOUNT("Canola Amount", ConfigCategories.WORLD_GEN, 2, 1, 50, "The Chance of Canola generating"), + + GRINDER_ENERGY_USED("Energy Use: Crusher", ConfigCategories.MACHINE_VALUES, 40, 1, 500, "The Amount of Energy used by the Crusher per Tick"), + GRINDER_DOUBLE_ENERGY_USED("Energy Use: Double Crusher", ConfigCategories.MACHINE_VALUES, 60, 1, 500, "The Amount of Energy used by the Double Crusher per Tick"), + FURNACE_SOLAR_ENERGY_PRODUCED("Energy Production: Furnace Solar", ConfigCategories.MACHINE_VALUES, 15, 1, 500, "The Amount of Energy produced by the Solar per Tick"), + HEAT_COLLECTOR_ENERGY_PRODUCED("Energy Production: Heat Collector", ConfigCategories.MACHINE_VALUES, 30, 1, 500, "The Amount of Energy produced by the Heat Collector per Tick"), + REPAIRER_ENERGY_USED("Energy Use: Repairer", ConfigCategories.MACHINE_VALUES, 1250, 1, 5000, "The Amount of Energy used by the Repairer per Tick"), + FURNACE_ENERGY_USED("Energy Use: Double Furnace", ConfigCategories.MACHINE_VALUES, 25, 1, 500, "The Amount of Energy used by the Double Furnace per Tick"), + + PRESS_PROCESSING_TIME("Canola Press: Processing Time", ConfigCategories.MACHINE_VALUES, 30, 1, 1000, "The Amount of time it takes to process one Canola"), + PRESS_MB_PRODUCED("Canola Press: mB Produced", ConfigCategories.MACHINE_VALUES, 50, 1, 5000, "The Amount of Canola Oil produced from one Canola"), + PRESS_ENERGY_USED("Energy Use: Canola Press", ConfigCategories.MACHINE_VALUES, 35, 10, 500, "The Amount of Energy used by the Canola Press per Tick"), + + BARREL_MB_PRODUCED("Fermenting Barrel: mB Produced", ConfigCategories.MACHINE_VALUES, 50, 1, 3000, "The Amount of mB produced by the Barrel per cycle"), + BARREL_PROCESSING_TIME("Fermenting Barrel: Processing Time", ConfigCategories.MACHINE_VALUES, 100, 1, 5000, "The Amount of time it takes to process one Canola Oil to Oil"), + + COAL_GEN_ENERGY_PRODUCED("Coal Generator: Energy Produced", ConfigCategories.MACHINE_VALUES, 30, 1, 500, "The Amount of Energy generated by the Coal Generator"), + + PHANTOMFACE_RANGE("Phantomface: Default Range", ConfigCategories.MACHINE_VALUES, 16, 3, 100, "The Default Range of the Phantomface"); public final String name; public final String category; @@ -69,5 +90,4 @@ public enum ConfigIntValues{ public int getValue(){ return ConfigValues.intValues[this.ordinal()]; } - } diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java index 6e174270e..96d7aaca5 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.blocks.metalists.TheMiscBlocks; import ellpeck.actuallyadditions.config.values.ConfigCrafting; +import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheMiscItems; import ellpeck.actuallyadditions.util.INameableItem; import net.minecraft.init.Blocks; @@ -23,6 +24,13 @@ public class BlockCrafting{ 'W', "plankWood", 'C', TheMiscBlocks.WOOD_CASING.getOredictName())); + //Charcoal Block + GameRegistry.addRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal()), + "CCC", "CCC", "CCC", + 'C', new ItemStack(Items.coal, 1, 1)); + GameRegistry.addShapelessRecipe(new ItemStack(Items.coal, 9, 1), + new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal())); + //Wood Casing if(ConfigCrafting.WOOD_CASING.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), @@ -31,6 +39,56 @@ public class BlockCrafting{ 'R', "dustRedstone", 'S', "stickWood")); + //Canola Press + if(ConfigCrafting.CANOLA_PRESS.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockCanolaPress), + "CHC", "CDC", "CRC", + 'C', "cobblestone", + 'H', Blocks.hopper, + 'R', TheMiscItems.COIL_ADVANCED.getOredictName(), + 'D', TheMiscItems.CANOLA.getOredictName())); + + //Fermenting Barrel + if(ConfigCrafting.FERMENTING_BARREL.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFermentingBarrel), + "CHC", "CDC", "CRC", + 'C', "logWood", + 'H', Blocks.hopper, + 'R', TheMiscBlocks.WOOD_CASING.getOredictName(), + 'D', TheMiscItems.CANOLA.getOredictName())); + + //Phantomface + if(ConfigCrafting.PHANTOMFACE.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPhantomface), + "ECE", "EBE", "ESE", + 'E', Items.ender_eye, + 'C', Blocks.chest, + 'S', TheMiscItems.COIL_ADVANCED.getOredictName(), + 'B', TheMiscBlocks.ENDERPEARL_BLOCK.getOredictName())); + + //Oil Generator + if(ConfigCrafting.OIL_GENERATOR.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockOilGenerator), + "CRC", "CBC", "CRC", + 'C', "cobblestone", + 'R', TheMiscBlocks.STONE_CASING.getOredictName(), + 'B', InitItems.itemBucketOil)); + + //Coal Generator + if(ConfigCrafting.COAL_GENERATOR.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockCoalGenerator), + "CRC", "CBC", "CRC", + 'C', "cobblestone", + 'R', TheMiscBlocks.STONE_CASING.getOredictName(), + 'B', "coal")); + + //Enderpearl Block + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()), + "EE", "EE", + 'E', Items.ender_pearl)); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Items.ender_pearl, 4), + TheMiscBlocks.ENDERPEARL_BLOCK.getOredictName())); + //Stone Casing if(ConfigCrafting.STONE_CASING.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.STONE_CASING.ordinal()), @@ -58,28 +116,28 @@ public class BlockCrafting{ 'D', "gemDiamond", 'I', "ingotIron", 'O', TheMiscItems.COIL.getOredictName(), - 'C', Items.nether_star)); + 'C', TheMiscBlocks.STONE_CASING.getOredictName())); //Solar Panel - /*if(ConfigCrafting.SOLAR_PANEL.isEnabled()) + if(ConfigCrafting.SOLAR_PANEL.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFurnaceSolar), "IQI", "CDC", "IBI", 'D', "blockDiamond", 'I', "ingotIron", 'Q', TheMiscBlocks.STONE_CASING.getOredictName(), 'C', TheMiscItems.COIL_ADVANCED.getOredictName(), - 'B', new ItemStack(Blocks.iron_bars)));*/ + 'B', new ItemStack(Blocks.iron_bars))); //Heat Collector - /*if(ConfigCrafting.HEAT_COLLECTOR.isEnabled()) + if(ConfigCrafting.HEAT_COLLECTOR.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockHeatCollector), "BRB", "CDC", "BQB", - 'D', "blockDiamond", + 'D', "gemDiamond", 'R', new ItemStack(Items.repeater), 'Q', TheMiscBlocks.STONE_CASING.getOredictName(), 'L', new ItemStack(Items.lava_bucket), 'C', TheMiscItems.COIL_ADVANCED.getOredictName(), - 'B', new ItemStack(Blocks.iron_bars)));*/ + 'B', new ItemStack(Blocks.iron_bars))); //Quartz Pillar GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ_PILLAR.ordinal()), @@ -158,7 +216,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockGreenhouseGlass), "GSG", "SDS", "GSG", 'G', "blockGlass", - 'D', "gemDiamond", + 'D', "blockDiamond", 'S', "treeSapling")); //Placer diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java index ab4d04a5a..070226d02 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/FoodCrafting.java @@ -19,6 +19,11 @@ public class FoodCrafting{ String knifeStack = ((INameableItem)InitItems.itemKnife).getOredictName(); + //Rice Bread + if(ConfigCrafting.RICE_BREAD.isEnabled()) + GameRegistry.addSmelting(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RICE_DOUGH.ordinal()), + new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal()), 1F); + //Baguette if(ConfigCrafting.BAGUETTE.isEnabled()) GameRegistry.addSmelting(new ItemStack(InitItems.itemMisc, 1, diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java index a75b29265..231dade0f 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java @@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.crafting; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheDusts; +import ellpeck.actuallyadditions.items.metalists.TheFoods; import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler; import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler.SearchCase; import ellpeck.actuallyadditions.recipe.GrinderRecipes; @@ -18,21 +19,24 @@ public class GrinderCrafting{ public static void init(){ Util.logInfo("Initializing Crusher Recipes..."); - grindRec.registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10), null, 0); - grindRec.registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal()), null, 0); + grindRec.registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10)); + grindRec.registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal())); + grindRec.registerRecipe(new ItemStack(Items.coal), new ItemStack(InitItems.itemDust, 1, TheDusts.COAL.ordinal())); + grindRec.registerRecipe(new ItemStack(Blocks.coal_block), new ItemStack(InitItems.itemDust, 9, TheDusts.COAL.ordinal())); - grindRec.registerRecipe("cobblestone", "sand"); + grindRec.registerRecipe(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.sand)); grindRec.registerRecipe(new ItemStack(Blocks.gravel), new ItemStack(Items.flint)); - grindRec.registerRecipe("stone", "cobblestone"); + grindRec.registerRecipe(new ItemStack(Blocks.stone), new ItemStack(Blocks.cobblestone)); + grindRec.registerRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.sugar, 2)); grindRec.registerRecipe("oreNickel", "dustNickel", "dustPlatinum", 30, 2); grindRec.registerRecipe("oreIron", "dustIron", "dustGold", 20, 2); - grindRecHan.searchCases.add(new SearchCase("ore", 2)); grindRecHan.searchCases.add(new SearchCase("oreNether", 6)); grindRecHan.searchCases.add(new SearchCase("denseore", 8)); - grindRecHan.searchCases.add(new SearchCase("gem", 1)); grindRecHan.searchCases.add(new SearchCase("ingot", 1)); + grindRecHan.searchCases.add(new SearchCase("gem", 1)); + grindRecHan.searchCases.add(new SearchCase("ore", 2)); grindRecHan.exceptions.add("ingotBrick"); grindRecHan.exceptions.add("ingotBrickNether"); diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java index fee9b529e..5fae3d929 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/ItemCrafting.java @@ -5,10 +5,7 @@ import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.blocks.metalists.TheMiscBlocks; import ellpeck.actuallyadditions.config.values.ConfigCrafting; import ellpeck.actuallyadditions.items.InitItems; -import ellpeck.actuallyadditions.items.metalists.TheDusts; -import ellpeck.actuallyadditions.items.metalists.TheMiscItems; -import ellpeck.actuallyadditions.items.metalists.ThePotionRings; -import ellpeck.actuallyadditions.items.metalists.TheSpecialDrops; +import ellpeck.actuallyadditions.items.metalists.*; import ellpeck.actuallyadditions.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -22,6 +19,21 @@ public class ItemCrafting{ public static void init(){ + //Rice Stuff + if(ConfigCrafting.RICE_GADGETS.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Items.paper, 3), + "RRR", + 'R', TheFoods.RICE.getOredictName())); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 4, TheMiscItems.RICE_SLIME.ordinal()), + " R ", "RBR", " R ", + 'R', TheMiscItems.RICE_DOUGH.getOredictName(), + 'B', Items.water_bucket)); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 4, TheMiscItems.RICE_SLIME.ordinal()), + " R ", "RBR", " R ", + 'R', TheMiscItems.RICE_DOUGH.getOredictName(), + 'B', new ItemStack(Items.potionitem))); + } + //Leaf Blower if(ConfigCrafting.LEAF_BLOWER.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLeafBlower), @@ -38,6 +50,11 @@ public class ItemCrafting{ 'I', "ingotIron", 'R', "dustRedstone")); + //Resonant Rice + if(ConfigCrafting.RESONANT_RICE.isEnabled()) + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemResonantRice), + TheFoods.RICE.getOredictName(), "nuggetEnderium", Items.gunpowder)); + //Advanced Coil if(ConfigCrafting.ADV_COIL.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), @@ -64,6 +81,14 @@ public class ItemCrafting{ 'P', new ItemStack(Blocks.piston), 'C', TheMiscItems.COIL_ADVANCED.getOredictName())); + //Phantom Connector + if(ConfigCrafting.PHANTOM_CONNECTOR.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemPhantomConnector), + "YE", "EY", "S ", + 'Y', Items.ender_eye, + 'E', Items.ender_pearl, + 'S', "stickWood")); + //Quartz GameRegistry.addSmelting(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F); @@ -81,13 +106,19 @@ public class ItemCrafting{ new ItemStack(Items.sign), new ItemStack(Items.slime_ball)); - //SpeedUpgrade - if(ConfigCrafting.SPEED_UPGRADE.isEnabled()) - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemSpeedUpgrade, 2), - "RGR", "GUG", "RGR", - 'U', TheMiscItems.COIL.getOredictName(), - 'R', "dustRedstone", - 'G', "ingotGold")); + //Tiny Coal + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), + new ItemStack(Items.coal)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_CHAR.ordinal()), + new ItemStack(Items.coal, 1, 1)); + + //Rice Seeds + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemRiceSeed), + new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal())); + + //Canola Seeds + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemCanolaSeed), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal())); //Mashed Food if(ConfigCrafting.MASHED_FOOD.isEnabled()) @@ -139,14 +170,14 @@ public class ItemCrafting{ public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(Blocks.diamond_block), new ItemStack(Items.nether_wart), new ItemStack(Items.potionitem), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); - GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.nether_star)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.nether_star), new ItemStack(Items.nether_star)); } public static void initMashedFoodRecipes(){ for(Object nextIterator : Item.itemRegistry){ if(nextIterator instanceof ItemFood){ ItemStack ingredient = new ItemStack((Item)nextIterator, 1, Util.WILDCARD); - GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.MASHED_FOOD.ordinal()), ingredient, ingredient, ingredient, ingredient, new ItemStack(InitItems.itemKnife, 1, Util.WILDCARD)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 12, TheMiscItems.MASHED_FOOD.ordinal()), ingredient, ingredient, ingredient, ingredient, new ItemStack(InitItems.itemKnife, 1, Util.WILDCARD)); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/MiscCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/MiscCrafting.java index 56e1bc903..0ae0905ce 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/MiscCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/MiscCrafting.java @@ -3,6 +3,7 @@ package ellpeck.actuallyadditions.crafting; import cpw.mods.fml.common.registry.GameRegistry; import ellpeck.actuallyadditions.config.values.ConfigCrafting; import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.metalists.TheFoods; import ellpeck.actuallyadditions.items.metalists.TheMiscItems; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -18,6 +19,11 @@ public class MiscCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 2, TheMiscItems.DOUGH.ordinal()), "cropWheat", "cropWheat")); + //Rice Dough + if(ConfigCrafting.RICE_DOUGH.isEnabled()) + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 2, TheMiscItems.RICE_DOUGH.ordinal()), + TheFoods.RICE.getOredictName(), TheFoods.RICE.getOredictName())); + //Paper Cone if(ConfigCrafting.PAPER_CONE.isEnabled()) GameRegistry.addRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()), diff --git a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java index 7a15a5fbd..3ce8bed67 100644 --- a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java +++ b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java @@ -28,14 +28,16 @@ public class CreativeTab extends CreativeTabs{ this.addBlock(InitBlocks.blockInputter); this.addBlock(InitBlocks.blockInputterAdvanced); + this.addBlock(InitBlocks.blockPhantomface); this.addBlock(InitBlocks.blockGreenhouseGlass); this.addBlock(InitBlocks.blockGrinder); this.addBlock(InitBlocks.blockGrinderDouble); this.addBlock(InitBlocks.blockFurnaceDouble); - //TODO Re-add - //this.addBlock(InitBlocks.blockFurnaceSolar); - //this.addBlock(InitBlocks.blockHeatCollector); + this.addBlock(InitBlocks.blockFurnaceSolar); + this.addBlock(InitBlocks.blockHeatCollector); + this.addBlock(InitBlocks.blockCoalGenerator); + this.addBlock(InitBlocks.blockOilGenerator); this.addBlock(InitBlocks.blockItemRepairer); this.addBlock(InitBlocks.blockFishingNet); this.addBlock(InitBlocks.blockBreaker); @@ -46,10 +48,18 @@ public class CreativeTab extends CreativeTabs{ this.addBlock(InitBlocks.blockFeeder); this.addBlock(InitBlocks.blockCompost); this.addBlock(InitBlocks.blockGiantChest); + this.addBlock(InitBlocks.blockCanolaPress); + this.addBlock(InitBlocks.blockFermentingBarrel); + this.addItem(InitItems.itemPhantomConnector); + this.addItem(InitItems.itemBucketCanolaOil); + this.addItem(InitItems.itemBucketOil); + + this.addItem(InitItems.itemRiceSeed); + this.addItem(InitItems.itemCanolaSeed); this.addItem(InitItems.itemHairyBall); - this.addItem(InitItems.itemSpeedUpgrade); this.addItem(InitItems.itemMisc); + this.addItem(InitItems.itemResonantRice); this.addItem(InitItems.itemFertilizer); this.addItem(InitItems.itemFoods); this.addItem(InitItems.itemKnife); diff --git a/src/main/java/ellpeck/actuallyadditions/event/BucketFillEvent.java b/src/main/java/ellpeck/actuallyadditions/event/BucketFillEvent.java new file mode 100644 index 000000000..953bed198 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/event/BucketFillEvent.java @@ -0,0 +1,31 @@ +package ellpeck.actuallyadditions.event; + +import cpw.mods.fml.common.eventhandler.Event; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import ellpeck.actuallyadditions.blocks.BlockFluidFlowing; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.items.InitItems; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.player.FillBucketEvent; + +public class BucketFillEvent{ + + @SubscribeEvent + public void onBucketFilled(FillBucketEvent event){ + Block block = event.world.getBlock(event.target.blockX, event.target.blockY, event.target.blockZ); + + if(block instanceof BlockFluidFlowing){ + if(block == InitBlocks.blockCanolaOil){ + event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ); + event.result = new ItemStack(InitItems.itemBucketCanolaOil); + } + if(block == InitBlocks.blockOil){ + event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ); + event.result = new ItemStack(InitItems.itemBucketOil); + } + event.setResult(Event.Result.ALLOW); + } + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java b/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java index d087f1b95..638251ebc 100644 --- a/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java +++ b/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java @@ -13,6 +13,8 @@ public class InitEvents{ Util.registerEvent(new PickupEvent()); Util.registerEvent(new TooltipEvent()); Util.registerEvent(new EntityLivingEvent()); + Util.registerEvent(new WorldDecorationEvent()); + Util.registerEvent(new BucketFillEvent()); } } diff --git a/src/main/java/ellpeck/actuallyadditions/event/WorldDecorationEvent.java b/src/main/java/ellpeck/actuallyadditions/event/WorldDecorationEvent.java new file mode 100644 index 000000000..1d36159fc --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/event/WorldDecorationEvent.java @@ -0,0 +1,63 @@ +package ellpeck.actuallyadditions.event; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.config.values.ConfigBoolValues; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import net.minecraft.block.material.Material; +import net.minecraft.world.World; +import net.minecraftforge.event.terraingen.DecorateBiomeEvent; + +import java.util.ArrayList; +import java.util.Random; + +public class WorldDecorationEvent{ + + @SubscribeEvent + public void onWorldDecoration(DecorateBiomeEvent event){ + if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){ + for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){ + if(new Random().nextInt(10) == 0){ + int genX = event.chunkX+event.rand.nextInt(16)+8; + int genZ = event.chunkZ+event.rand.nextInt(16)+8; + int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ); + + if(event.world.getBlock(genX, genY, genZ).getMaterial() == Material.water){ + ArrayList blocksAroundBottom = this.getMaterialsAround(event.world, genX, genY, genZ); + ArrayList blocksAroundTop = this.getMaterialsAround(event.world, genX, genY+1, genZ); + if(blocksAroundBottom.contains(Material.grass) || blocksAroundBottom.contains(Material.ground) || blocksAroundBottom.contains(Material.rock) || blocksAroundBottom.contains(Material.sand)){ + if(!blocksAroundTop.contains(Material.water) && !blocksAroundTop.contains(Material.water) && !blocksAroundTop.contains(Material.water) && event.world.getBlock(genX, genY+1, genZ).getMaterial() == Material.air){ + event.world.setBlock(genX, genY+1, genZ, InitBlocks.blockRice, event.rand.nextInt(8), 2); + } + } + } + } + } + } + + if(ConfigBoolValues.DO_CANOLA_GEN.isEnabled()){ + for(int i = 0; i < ConfigIntValues.CANOLA_AMOUNT.getValue(); i++){ + if(new Random().nextInt(50) == 0){ + int genX = event.chunkX+event.rand.nextInt(16)+8; + int genZ = event.chunkZ+event.rand.nextInt(16)+8; + int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ)-1; + + if(event.world.getBlock(genX, genY, genZ).getMaterial() == Material.grass){ + event.world.setBlock(genX, genY+1, genZ, InitBlocks.blockCanola, event.rand.nextInt(8), 2); + } + } + } + } + } + + public ArrayList getMaterialsAround(World world, int x, int y, int z){ + ArrayList blocks = new ArrayList(); + blocks.add(world.getBlock(x+1, y, z).getMaterial()); + blocks.add(world.getBlock(x-1, y, z).getMaterial()); + blocks.add(world.getBlock(x, y, z+1).getMaterial()); + blocks.add(world.getBlock(x, y, z-1).getMaterial()); + + return blocks; + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java b/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java index dccd4fdee..8cee0c841 100644 --- a/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java @@ -18,15 +18,15 @@ public class JamVillagerTradeHandler implements VillagerRegistry.IVillageTradeHa private ArrayList trades = new ArrayList(); public JamVillagerTradeHandler(){ - this.addWants("ingotGold", 3, 2); - this.addWants("cropWheat", 10, 10); - this.addWants("dustRedstone", 15, 15); - this.addWants(new ItemStack(Items.bucket), 1, 4); - this.addWants(new ItemStack(Items.glass_bottle), 5, 5); + this.addWants("ingotGold", 5, 2); + this.addWants("cropWheat", 15, 10); + this.addWants("dustRedstone", 25, 15); + this.addWants(new ItemStack(Items.bucket), 5, 4); + this.addWants(new ItemStack(Items.glass_bottle), 12, 5); this.addWants(new ItemStack(Items.potionitem), 1, 0); - this.addWants("ingotIron", 5, 5); - this.addWants("gemDiamond", 1, 1); - this.addWants("dustGlowstone", 5, 10); + this.addWants("ingotIron", 10, 5); + this.addWants("gemDiamond", 1, 2); + this.addWants("dustGlowstone", 12, 10); } @Override @@ -48,7 +48,7 @@ public class JamVillagerTradeHandler implements VillagerRegistry.IVillageTradeHa if(wantsOne == wantsTwo) wantsTwo = null; for(int k = 0; k < TheJams.values().length; k++){ - recipeList.add(new MerchantRecipe(wantsOne, wantsTwo, new ItemStack(InitItems.itemJams, rand.nextInt(5)+1, k))); + recipeList.add(new MerchantRecipe(wantsOne, wantsTwo, new ItemStack(InitItems.itemJams, rand.nextInt(3)+1, k))); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCanolaPress.java new file mode 100644 index 000000000..4217aa86c --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCanolaPress.java @@ -0,0 +1,127 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.inventory.slot.SlotOutput; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityCanolaPress; +import invtweaks.api.container.InventoryContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +@InventoryContainer +public class ContainerCanolaPress extends Container{ + + private TileEntityCanolaPress press; + + private int lastEnergyStored; + private int lastTankAmount; + private int lastProcessTime; + + public ContainerCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ + this.press = (TileEntityCanolaPress)tile; + + this.addSlotToContainer(new Slot(this.press, 0, 81, 10)); + this.addSlotToContainer(new Slot(this.press, 1, 136, 73)); + this.addSlotToContainer(new SlotOutput(this.press, 2, 136, 42)); + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); + } + } + for (int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.press.isUseableByPlayer(player); + } + + @Override + public void addCraftingToCrafters(ICrafting iCraft){ + super.addCraftingToCrafters(iCraft); + iCraft.sendProgressBarUpdate(this, 0, this.press.getEnergyStored(ForgeDirection.UNKNOWN)); + iCraft.sendProgressBarUpdate(this, 1, this.press.tank.getFluidAmount()); + iCraft.sendProgressBarUpdate(this, 2, this.press.currentProcessTime); + } + + @Override + public void detectAndSendChanges(){ + super.detectAndSendChanges(); + for(Object crafter : this.crafters){ + ICrafting iCraft = (ICrafting)crafter; + + if(this.lastEnergyStored != this.press.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 0, this.press.getEnergyStored(ForgeDirection.UNKNOWN)); + if(this.lastTankAmount != this.press.tank.getFluidAmount()) iCraft.sendProgressBarUpdate(this, 1, this.press.tank.getFluidAmount()); + if(this.lastProcessTime != this.press.currentProcessTime) iCraft.sendProgressBarUpdate(this, 2, this.press.currentProcessTime); + } + + this.lastEnergyStored = this.press.getEnergyStored(ForgeDirection.UNKNOWN); + this.lastTankAmount = this.press.tank.getFluidAmount(); + this.lastProcessTime = this.press.currentProcessTime; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2){ + if(par1 == 0) this.press.storage.setEnergyStored(par2); + if(par1 == 1) this.press.tank.setFluid(new FluidStack(InitBlocks.fluidCanolaOil, par2)); + if(par1 == 2) this.press.currentProcessTime = par2; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 3; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = (Slot)this.inventorySlots.get(slot); + if(theSlot.getHasStack()){ + ItemStack currentStack = theSlot.getStack(); + ItemStack newStack = currentStack.copy(); + + if(slot <= hotbarEnd && slot >= inventoryStart){ + if(currentStack.getItem() == InitItems.itemMisc && currentStack.getItemDamage() == TheMiscItems.CANOLA.ordinal()){ + this.mergeItemStack(newStack, 0, 1, false); + } + if(currentStack.getItem() == Items.bucket){ + this.mergeItemStack(newStack, 1, 2, false); + } + } + + if(slot <= hotbarEnd && slot >= hotbarStart){ + this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false); + } + + else if(slot <= inventoryEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false); + } + + else if(slot < inventoryStart){ + this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false); + } + + if(newStack.stackSize == 0) theSlot.putStack(null); + else theSlot.onSlotChanged(); + if(newStack.stackSize == currentStack.stackSize) return null; + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCoalGenerator.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCoalGenerator.java new file mode 100644 index 000000000..8f92656c2 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerCoalGenerator.java @@ -0,0 +1,117 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityCoalGenerator; +import invtweaks.api.container.InventoryContainer; +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 net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; + +@InventoryContainer +public class ContainerCoalGenerator extends Container{ + + private TileEntityCoalGenerator generator; + + private int lastEnergyStored; + private int lastBurnTime; + private int lastMaxBurnTime; + + public ContainerCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ + this.generator = (TileEntityCoalGenerator)tile; + + this.addSlotToContainer(new Slot(this.generator, 0, 87, 43)); + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); + } + } + for (int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.generator.isUseableByPlayer(player); + } + + @Override + public void addCraftingToCrafters(ICrafting iCraft){ + super.addCraftingToCrafters(iCraft); + iCraft.sendProgressBarUpdate(this, 0, this.generator.getEnergyStored(ForgeDirection.UNKNOWN)); + iCraft.sendProgressBarUpdate(this, 1, this.generator.currentBurnTime); + iCraft.sendProgressBarUpdate(this, 2, this.generator.maxBurnTime); + } + + @Override + public void detectAndSendChanges(){ + super.detectAndSendChanges(); + for(Object crafter : this.crafters){ + ICrafting iCraft = (ICrafting)crafter; + + if(this.lastEnergyStored != this.generator.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 0, this.generator.getEnergyStored(ForgeDirection.UNKNOWN)); + if(this.lastBurnTime != this.generator.currentBurnTime) iCraft.sendProgressBarUpdate(this, 1, this.generator.currentBurnTime); + if(this.lastMaxBurnTime != this.generator.maxBurnTime) iCraft.sendProgressBarUpdate(this, 2, this.generator.maxBurnTime); + } + + this.lastEnergyStored = this.generator.getEnergyStored(ForgeDirection.UNKNOWN); + this.lastBurnTime = this.generator.currentBurnTime; + this.lastMaxBurnTime = this.generator.maxBurnTime; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2){ + if(par1 == 0) this.generator.storage.setEnergyStored(par2); + if(par1 == 1) this.generator.currentBurnTime = par2; + if(par1 == 2) this.generator.maxBurnTime = par2; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 1; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = (Slot)this.inventorySlots.get(slot); + if(theSlot.getHasStack()){ + ItemStack currentStack = theSlot.getStack(); + ItemStack newStack = currentStack.copy(); + + if(slot <= hotbarEnd && slot >= inventoryStart){ + if(TileEntityFurnace.getItemBurnTime(currentStack) > 0){ + this.mergeItemStack(newStack, 0, 1, false); + } + } + + if(slot <= hotbarEnd && slot >= hotbarStart){ + this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false); + } + + else if(slot <= inventoryEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false); + } + + else if(slot < inventoryStart){ + this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false); + } + + if(newStack.stackSize == 0) theSlot.putStack(null); + else theSlot.onSlotChanged(); + if(newStack.stackSize == currentStack.stackSize) return null; + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFermentingBarrel.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFermentingBarrel.java new file mode 100644 index 000000000..85946bd3f --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFermentingBarrel.java @@ -0,0 +1,126 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.inventory.slot.SlotOutput; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityFermentingBarrel; +import invtweaks.api.container.InventoryContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +@InventoryContainer +public class ContainerFermentingBarrel extends Container{ + + private TileEntityFermentingBarrel barrel; + + private int lastProcessTime; + private int lastCanolaTank; + private int lastOilTank; + + public ContainerFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ + this.barrel = (TileEntityFermentingBarrel)tile; + + this.addSlotToContainer(new Slot(this.barrel, 0, 42, 74)); + this.addSlotToContainer(new SlotOutput(this.barrel, 1, 42, 43)); + this.addSlotToContainer(new Slot(this.barrel, 2, 118, 74)); + this.addSlotToContainer(new SlotOutput(this.barrel, 3, 118, 43)); + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); + } + } + for (int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.barrel.isUseableByPlayer(player); + } + + @Override + public void addCraftingToCrafters(ICrafting iCraft){ + super.addCraftingToCrafters(iCraft); + iCraft.sendProgressBarUpdate(this, 0, this.barrel.oilTank.getFluidAmount()); + iCraft.sendProgressBarUpdate(this, 1, this.barrel.canolaTank.getFluidAmount()); + iCraft.sendProgressBarUpdate(this, 2, this.barrel.currentProcessTime); + } + + @Override + public void detectAndSendChanges(){ + super.detectAndSendChanges(); + for(Object crafter : this.crafters){ + ICrafting iCraft = (ICrafting)crafter; + + if(this.lastOilTank != this.barrel.oilTank.getFluidAmount()) iCraft.sendProgressBarUpdate(this, 0, this.barrel.oilTank.getFluidAmount()); + if(this.lastCanolaTank != this.barrel.canolaTank.getFluidAmount()) iCraft.sendProgressBarUpdate(this, 1, this.barrel.canolaTank.getFluidAmount()); + if(this.lastProcessTime != this.barrel.currentProcessTime) iCraft.sendProgressBarUpdate(this, 2, this.barrel.currentProcessTime); + } + + this.lastOilTank = this.barrel.oilTank.getFluidAmount(); + this.lastCanolaTank = this.barrel.canolaTank.getFluidAmount(); + this.lastProcessTime = this.barrel.currentProcessTime; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2){ + if(par1 == 0) this.barrel.oilTank.setFluid(new FluidStack(InitBlocks.fluidOil, par2)); + if(par1 == 1) this.barrel.canolaTank.setFluid(new FluidStack(InitBlocks.fluidCanolaOil, par2)); + if(par1 == 2) this.barrel.currentProcessTime = par2; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 4; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = (Slot)this.inventorySlots.get(slot); + if(theSlot.getHasStack()){ + ItemStack currentStack = theSlot.getStack(); + ItemStack newStack = currentStack.copy(); + + if(slot <= hotbarEnd && slot >= inventoryStart){ + if(currentStack.getItem() == InitItems.itemBucketCanolaOil){ + this.mergeItemStack(newStack, 0, 1, false); + } + if(currentStack.getItem() == Items.bucket){ + this.mergeItemStack(newStack, 2, 3, false); + } + } + + if(slot <= hotbarEnd && slot >= hotbarStart){ + this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false); + } + + else if(slot <= inventoryEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false); + } + + else if(slot < inventoryStart){ + this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false); + } + + if(newStack.stackSize == 0) theSlot.putStack(null); + else theSlot.onSlotChanged(); + if(newStack.stackSize == currentStack.stackSize) return null; + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFurnaceDouble.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFurnaceDouble.java index c2e2fbc89..b68c0b322 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerFurnaceDouble.java @@ -13,15 +13,14 @@ import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; @InventoryContainer public class ContainerFurnaceDouble extends Container{ private TileEntityFurnaceDouble tileFurnace; - private int lastCoalTime; - private int lastCoalTimeLeft; + private int lastEnergy; private int lastFirstCrushTime; private int lastSecondCrushTime; private int lastBurnTime; @@ -29,15 +28,11 @@ public class ContainerFurnaceDouble extends Container{ public ContainerFurnaceDouble(InventoryPlayer inventory, TileEntityBase tile){ this.tileFurnace = (TileEntityFurnaceDouble)tile; - this.addSlotToContainer(new Slot(this.tileFurnace, TileEntityFurnaceDouble.SLOT_COAL, 80, 21)); - this.addSlotToContainer(new Slot(this.tileFurnace, TileEntityFurnaceDouble.SLOT_INPUT_1, 51, 21)); this.addSlotToContainer(new SlotOutput(this.tileFurnace, TileEntityFurnaceDouble.SLOT_OUTPUT_1, 51, 69)); this.addSlotToContainer(new Slot(this.tileFurnace, TileEntityFurnaceDouble.SLOT_INPUT_2, 109, 21)); this.addSlotToContainer(new SlotOutput(this.tileFurnace, TileEntityFurnaceDouble.SLOT_OUTPUT_2, 108, 69)); - this.addSlotToContainer(new Slot(this.tileFurnace, this.tileFurnace.speedUpgradeSlot, 155, 21)); - for (int i = 0; i < 3; i++){ for (int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); @@ -51,11 +46,10 @@ public class ContainerFurnaceDouble extends Container{ @Override public void addCraftingToCrafters(ICrafting iCraft){ super.addCraftingToCrafters(iCraft); - iCraft.sendProgressBarUpdate(this, 0, this.tileFurnace.coalTime); - iCraft.sendProgressBarUpdate(this, 1, this.tileFurnace.coalTimeLeft); - iCraft.sendProgressBarUpdate(this, 2, this.tileFurnace.firstSmeltTime); - iCraft.sendProgressBarUpdate(this, 3, this.tileFurnace.secondSmeltTime); - iCraft.sendProgressBarUpdate(this, 4, this.tileFurnace.maxBurnTime); + iCraft.sendProgressBarUpdate(this, 0, this.tileFurnace.firstSmeltTime); + iCraft.sendProgressBarUpdate(this, 1, this.tileFurnace.secondSmeltTime); + iCraft.sendProgressBarUpdate(this, 2, this.tileFurnace.maxBurnTime); + iCraft.sendProgressBarUpdate(this, 3, this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN)); } @Override @@ -64,28 +58,25 @@ public class ContainerFurnaceDouble extends Container{ for(Object crafter : this.crafters){ ICrafting iCraft = (ICrafting)crafter; - if(this.lastCoalTime != this.tileFurnace.coalTime) iCraft.sendProgressBarUpdate(this, 0, this.tileFurnace.coalTime); - if(this.lastCoalTimeLeft != this.tileFurnace.coalTimeLeft) iCraft.sendProgressBarUpdate(this, 1, this.tileFurnace.coalTimeLeft); - if(this.lastFirstCrushTime != this.tileFurnace.firstSmeltTime) iCraft.sendProgressBarUpdate(this, 2, this.tileFurnace.firstSmeltTime); - if(this.lastSecondCrushTime != this.tileFurnace.secondSmeltTime) iCraft.sendProgressBarUpdate(this, 3, this.tileFurnace.secondSmeltTime); - if(this.lastBurnTime != this.tileFurnace.maxBurnTime) iCraft.sendProgressBarUpdate(this, 4, this.tileFurnace.maxBurnTime); + if(this.lastFirstCrushTime != this.tileFurnace.firstSmeltTime) iCraft.sendProgressBarUpdate(this, 0, this.tileFurnace.firstSmeltTime); + if(this.lastSecondCrushTime != this.tileFurnace.secondSmeltTime) iCraft.sendProgressBarUpdate(this, 1, this.tileFurnace.secondSmeltTime); + if(this.lastBurnTime != this.tileFurnace.maxBurnTime) iCraft.sendProgressBarUpdate(this, 2, this.tileFurnace.maxBurnTime); + if(this.lastEnergy != this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 3, this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN)); } - this.lastCoalTime = this.tileFurnace.coalTime; - this.lastCoalTimeLeft = this.tileFurnace.coalTimeLeft; this.lastFirstCrushTime = this.tileFurnace.firstSmeltTime; this.lastSecondCrushTime = this.tileFurnace.secondSmeltTime; this.lastBurnTime = this.tileFurnace.maxBurnTime; + this.lastEnergy = this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN); } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2){ - if(par1 == 0) this.tileFurnace.coalTime = par2; - if(par1 == 1) this.tileFurnace.coalTimeLeft = par2; - if(par1 == 2) this.tileFurnace.firstSmeltTime = par2; - if(par1 == 3) this.tileFurnace.secondSmeltTime = par2; - if(par1 == 4) this.tileFurnace.maxBurnTime = par2; + if(par1 == 0) this.tileFurnace.firstSmeltTime = par2; + if(par1 == 1) this.tileFurnace.secondSmeltTime = par2; + if(par1 == 2) this.tileFurnace.maxBurnTime = par2; + if(par1 == 3) this.tileFurnace.storage.setEnergyStored(par2); } @Override @@ -95,7 +86,7 @@ public class ContainerFurnaceDouble extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 6; + final int inventoryStart = 4; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -110,10 +101,6 @@ public class ContainerFurnaceDouble extends Container{ this.mergeItemStack(newStack, TileEntityFurnaceDouble.SLOT_INPUT_1, TileEntityFurnaceDouble.SLOT_INPUT_1+1, false); this.mergeItemStack(newStack, TileEntityFurnaceDouble.SLOT_INPUT_2, TileEntityFurnaceDouble.SLOT_INPUT_2+2, false); } - - if(TileEntityFurnace.getItemBurnTime(currentStack) > 0){ - this.mergeItemStack(newStack, TileEntityFurnaceDouble.SLOT_COAL, TileEntityFurnaceDouble.SLOT_COAL+1, false); - } } if(slot <= hotbarEnd && slot >= hotbarStart){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerGrinder.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerGrinder.java index a3e0c6abb..296ca65f0 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerGrinder.java @@ -13,7 +13,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; @InventoryContainer public class ContainerGrinder extends Container{ @@ -21,18 +21,15 @@ public class ContainerGrinder extends Container{ private TileEntityGrinder tileGrinder; private boolean isDouble; - private int lastCoalTime; - private int lastCoalTimeLeft; private int lastFirstCrushTime; private int lastSecondCrushTime; private int lastMaxCrushTime; + private int lastEnergyStored; public ContainerGrinder(InventoryPlayer inventory, TileEntityBase tile, boolean isDouble){ this.tileGrinder = (TileEntityGrinder)tile; this.isDouble = isDouble; - this.addSlotToContainer(new Slot(this.tileGrinder, TileEntityGrinder.SLOT_COAL, this.isDouble ? 80 : 51, 21)); - this.addSlotToContainer(new Slot(this.tileGrinder, TileEntityGrinder.SLOT_INPUT_1, this.isDouble ? 51 : 80, 21)); this.addSlotToContainer(new SlotOutput(this.tileGrinder, TileEntityGrinder.SLOT_OUTPUT_1_1, this.isDouble ? 37 : 66, 69)); this.addSlotToContainer(new SlotOutput(this.tileGrinder, TileEntityGrinder.SLOT_OUTPUT_1_2, this.isDouble ? 64 : 92, 69)); @@ -42,8 +39,6 @@ public class ContainerGrinder extends Container{ this.addSlotToContainer(new SlotOutput(this.tileGrinder, TileEntityGrinder.SLOT_OUTPUT_2_2, 121, 69)); } - this.addSlotToContainer(new Slot(this.tileGrinder, this.tileGrinder.speedUpgradeSlot, this.isDouble ? 155 : 146, 21)); - for (int i = 0; i < 3; i++){ for (int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); @@ -57,11 +52,10 @@ public class ContainerGrinder extends Container{ @Override public void addCraftingToCrafters(ICrafting iCraft){ super.addCraftingToCrafters(iCraft); - iCraft.sendProgressBarUpdate(this, 0, this.tileGrinder.coalTime); - iCraft.sendProgressBarUpdate(this, 1, this.tileGrinder.coalTimeLeft); - iCraft.sendProgressBarUpdate(this, 2, this.tileGrinder.firstCrushTime); - iCraft.sendProgressBarUpdate(this, 3, this.tileGrinder.maxCrushTime); - if(this.isDouble) iCraft.sendProgressBarUpdate(this, 4, this.tileGrinder.secondCrushTime); + iCraft.sendProgressBarUpdate(this, 0, this.tileGrinder.firstCrushTime); + iCraft.sendProgressBarUpdate(this, 1, this.tileGrinder.maxCrushTime); + if(this.isDouble) iCraft.sendProgressBarUpdate(this, 2, this.tileGrinder.secondCrushTime); + iCraft.sendProgressBarUpdate(this, 3, this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN)); } @Override @@ -70,28 +64,25 @@ public class ContainerGrinder extends Container{ for(Object crafter : this.crafters){ ICrafting iCraft = (ICrafting)crafter; - if(this.lastCoalTime != this.tileGrinder.coalTime) iCraft.sendProgressBarUpdate(this, 0, this.tileGrinder.coalTime); - if(this.lastCoalTimeLeft != this.tileGrinder.coalTimeLeft) iCraft.sendProgressBarUpdate(this, 1, this.tileGrinder.coalTimeLeft); - if(this.lastFirstCrushTime != this.tileGrinder.firstCrushTime) iCraft.sendProgressBarUpdate(this, 2, this.tileGrinder.firstCrushTime); - if(this.lastMaxCrushTime != this.tileGrinder.maxCrushTime) iCraft.sendProgressBarUpdate(this, 3, this.tileGrinder.maxCrushTime); - if(this.isDouble) if(this.lastSecondCrushTime != this.tileGrinder.secondCrushTime) iCraft.sendProgressBarUpdate(this, 4, this.tileGrinder.secondCrushTime); + if(this.lastFirstCrushTime != this.tileGrinder.firstCrushTime) iCraft.sendProgressBarUpdate(this, 0, this.tileGrinder.firstCrushTime); + if(this.lastMaxCrushTime != this.tileGrinder.maxCrushTime) iCraft.sendProgressBarUpdate(this, 1, this.tileGrinder.maxCrushTime); + if(this.isDouble) if(this.lastSecondCrushTime != this.tileGrinder.secondCrushTime) iCraft.sendProgressBarUpdate(this, 2, this.tileGrinder.secondCrushTime); + if(this.lastEnergyStored != this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 3, this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN)); } - this.lastCoalTime = this.tileGrinder.coalTime; - this.lastCoalTimeLeft = this.tileGrinder.coalTimeLeft; this.lastFirstCrushTime = this.tileGrinder.firstCrushTime; this.lastMaxCrushTime = this.tileGrinder.maxCrushTime; if(this.isDouble) this.lastSecondCrushTime = this.tileGrinder.secondCrushTime; + this.lastEnergyStored = this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN); } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2){ - if(par1 == 0) this.tileGrinder.coalTime = par2; - if(par1 == 1) this.tileGrinder.coalTimeLeft = par2; - if(par1 == 2) this.tileGrinder.firstCrushTime = par2; - if(par1 == 3) this.tileGrinder.maxCrushTime = par2; - if(this.isDouble && par1 == 4) this.tileGrinder.secondCrushTime = par2; + if(par1 == 0) this.tileGrinder.firstCrushTime = par2; + if(par1 == 1) this.tileGrinder.maxCrushTime = par2; + if(this.isDouble && par1 == 2) this.tileGrinder.secondCrushTime = par2; + if(par1 == 3) this.tileGrinder.storage.setEnergyStored(par2); } @Override @@ -101,7 +92,7 @@ public class ContainerGrinder extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = this.isDouble ? 8 : 5; + final int inventoryStart = this.isDouble ? 6 : 3; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -116,10 +107,6 @@ public class ContainerGrinder extends Container{ this.mergeItemStack(newStack, TileEntityGrinder.SLOT_INPUT_1, TileEntityGrinder.SLOT_INPUT_1+1, false); if(this.isDouble) this.mergeItemStack(newStack, TileEntityGrinder.SLOT_INPUT_2, TileEntityGrinder.SLOT_INPUT_2+1, false); } - - if(TileEntityFurnace.getItemBurnTime(currentStack) > 0){ - this.mergeItemStack(newStack, TileEntityGrinder.SLOT_COAL, TileEntityGrinder.SLOT_COAL+1, false); - } } if(slot <= hotbarEnd && slot >= hotbarStart){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerOilGenerator.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerOilGenerator.java new file mode 100644 index 000000000..e1164f9b7 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerOilGenerator.java @@ -0,0 +1,120 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityOilGenerator; +import invtweaks.api.container.InventoryContainer; +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 net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +@InventoryContainer +public class ContainerOilGenerator extends Container{ + + private TileEntityOilGenerator generator; + + private int lastEnergyStored; + private int lastBurnTime; + private int lastTankAmount; + + public ContainerOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ + this.generator = (TileEntityOilGenerator)tile; + + this.addSlotToContainer(new Slot(this.generator, 0, 98, 74)); + this.addSlotToContainer(new Slot(this.generator, 1, 98, 43)); + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); + } + } + for (int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.generator.isUseableByPlayer(player); + } + + @Override + public void addCraftingToCrafters(ICrafting iCraft){ + super.addCraftingToCrafters(iCraft); + iCraft.sendProgressBarUpdate(this, 0, this.generator.getEnergyStored(ForgeDirection.UNKNOWN)); + iCraft.sendProgressBarUpdate(this, 1, this.generator.currentBurnTime); + iCraft.sendProgressBarUpdate(this, 2, this.generator.tank.getFluidAmount()); + } + + @Override + public void detectAndSendChanges(){ + super.detectAndSendChanges(); + for(Object crafter : this.crafters){ + ICrafting iCraft = (ICrafting)crafter; + + if(this.lastEnergyStored != this.generator.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 0, this.generator.getEnergyStored(ForgeDirection.UNKNOWN)); + if(this.lastBurnTime != this.generator.currentBurnTime) iCraft.sendProgressBarUpdate(this, 1, this.generator.currentBurnTime); + if(this.lastTankAmount != this.generator.tank.getFluidAmount()) iCraft.sendProgressBarUpdate(this, 2, this.generator.tank.getFluidAmount()); + } + + this.lastEnergyStored = this.generator.getEnergyStored(ForgeDirection.UNKNOWN); + this.lastBurnTime = this.generator.currentBurnTime; + this.lastTankAmount = this.generator.tank.getFluidAmount(); + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2){ + if(par1 == 0) this.generator.storage.setEnergyStored(par2); + if(par1 == 1) this.generator.currentBurnTime = par2; + if(par1 == 2) this.generator.tank.setFluid(new FluidStack(InitBlocks.fluidOil, par2)); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 2; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = (Slot)this.inventorySlots.get(slot); + if(theSlot.getHasStack()){ + ItemStack currentStack = theSlot.getStack(); + ItemStack newStack = currentStack.copy(); + + if(slot <= hotbarEnd && slot >= inventoryStart){ + if(currentStack.getItem() == InitItems.itemBucketOil){ + this.mergeItemStack(newStack, 0, 1, false); + } + } + + if(slot <= hotbarEnd && slot >= hotbarStart){ + this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false); + } + + else if(slot <= inventoryEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false); + } + + else if(slot < inventoryStart){ + this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false); + } + + if(newStack.stackSize == 0) theSlot.putStack(null); + else theSlot.onSlotChanged(); + if(newStack.stackSize == currentStack.stackSize) return null; + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerRepairer.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerRepairer.java index 0eb861132..57a8a3f09 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerRepairer.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerRepairer.java @@ -12,21 +12,18 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; @InventoryContainer public class ContainerRepairer extends Container{ private TileEntityItemRepairer tileRepairer; - private int lastCoalTime; - private int lastCoalTimeLeft; + private int lastEnergy; public ContainerRepairer(InventoryPlayer inventory, TileEntityBase tile){ this.tileRepairer = (TileEntityItemRepairer)tile; - this.addSlotToContainer(new Slot(this.tileRepairer, TileEntityItemRepairer.SLOT_COAL, 80, 21)); - this.addSlotToContainer(new Slot(this.tileRepairer, TileEntityItemRepairer.SLOT_INPUT, 47, 53)); this.addSlotToContainer(new SlotOutput(this.tileRepairer, TileEntityItemRepairer.SLOT_OUTPUT, 109, 53)); @@ -43,8 +40,7 @@ public class ContainerRepairer extends Container{ @Override public void addCraftingToCrafters(ICrafting iCraft){ super.addCraftingToCrafters(iCraft); - iCraft.sendProgressBarUpdate(this, 0, this.tileRepairer.coalTime); - iCraft.sendProgressBarUpdate(this, 1, this.tileRepairer.coalTimeLeft); + iCraft.sendProgressBarUpdate(this, 0, this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN)); } @Override @@ -53,19 +49,16 @@ public class ContainerRepairer extends Container{ for(Object crafter : this.crafters){ ICrafting iCraft = (ICrafting)crafter; - if(this.lastCoalTime != this.tileRepairer.coalTime) iCraft.sendProgressBarUpdate(this, 0, this.tileRepairer.coalTime); - if(this.lastCoalTimeLeft != this.tileRepairer.coalTimeLeft) iCraft.sendProgressBarUpdate(this, 1, this.tileRepairer.coalTimeLeft); + if(this.lastEnergy != this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN)) iCraft.sendProgressBarUpdate(this, 0, this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN)); } - this.lastCoalTime = this.tileRepairer.coalTime; - this.lastCoalTimeLeft = this.tileRepairer.coalTimeLeft; + this.lastEnergy = this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN); } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2){ - if(par1 == 0) this.tileRepairer.coalTime = par2; - if(par1 == 1) this.tileRepairer.coalTimeLeft = par2; + if(par1 == 0) this.tileRepairer.storage.setEnergyStored(par2); } @Override @@ -75,7 +68,7 @@ public class ContainerRepairer extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 3; + final int inventoryStart = 2; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -89,10 +82,6 @@ public class ContainerRepairer extends Container{ if(TileEntityItemRepairer.canBeRepaired(currentStack)){ this.mergeItemStack(newStack, TileEntityItemRepairer.SLOT_INPUT, TileEntityItemRepairer.SLOT_INPUT+1, false); } - - if(TileEntityFurnace.getItemBurnTime(currentStack) > 0){ - this.mergeItemStack(newStack, TileEntityItemRepairer.SLOT_COAL, TileEntityItemRepairer.SLOT_COAL+1, false); - } } if(slot <= hotbarEnd && slot >= hotbarStart){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiBreaker.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiBreaker.java index 9975882b7..0fc2dfa5a 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiBreaker.java @@ -26,7 +26,7 @@ public class GuiBreaker extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.breaker.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.breaker.getInventoryName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCanolaPress.java new file mode 100644 index 000000000..80afcb98a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCanolaPress.java @@ -0,0 +1,75 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityCanolaPress; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +import java.util.Collections; + +@SideOnly(Side.CLIENT) +public class GuiCanolaPress extends GuiContainer{ + + private TileEntityCanolaPress press; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCanolaPress"); + + public GuiCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerCanolaPress(inventory, tile)); + this.press = (TileEntityCanolaPress)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.press.getInventoryName()); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + + if(this.press.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.press.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft + 43, this.guiTop+89-i, 176, 29, 16, i); + } + + if(this.press.tank.getFluidAmount() > 0){ + int i = this.press.getTankScaled(83); + drawTexturedModalRect(this.guiLeft + 117, this.guiTop+89-i, 192, 29, 16, i); + } + + if(this.press.currentProcessTime > 0){ + int i = this.press.getProcessScaled(29); + drawTexturedModalRect(this.guiLeft + 83, this.guiTop+32, 176, 0, 12, i); + } + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + String text1 = this.press.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.press.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text1), x, y); + } + + String text2 = this.press.tank.getFluidAmount() + "/" + this.press.tank.getCapacity() + " mB " +StatCollector.translateToLocal("fluid.canolaOil"); + if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text2), x, y); + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiCoalGenerator.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCoalGenerator.java new file mode 100644 index 000000000..17ac5d93d --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCoalGenerator.java @@ -0,0 +1,64 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityCoalGenerator; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +import java.util.Collections; + +@SideOnly(Side.CLIENT) +public class GuiCoalGenerator extends GuiContainer{ + + private TileEntityCoalGenerator generator; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCoalGenerator"); + + public GuiCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerCoalGenerator(inventory, tile)); + this.generator = (TileEntityCoalGenerator)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.generator.getInventoryName()); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + + if(this.generator.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.generator.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); + } + + if(this.generator.currentBurnTime > 0){ + int i = this.generator.getBurningScaled(13); + this.drawTexturedModalRect(guiLeft+87, guiTop+27+12-i, 176, 96-i, 14, i); + } + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + String text1 = this.generator.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.generator.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text1), x, y); + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiCrafter.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCrafter.java index 6a3357f93..f8a21ba64 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiCrafter.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiCrafter.java @@ -23,7 +23,7 @@ public class GuiCrafter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 74, -10, "container." + ModUtil.MOD_ID_LOWER + ".crafting"); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID_LOWER+".crafting"); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java index eb7543178..1a79f8281 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java @@ -26,7 +26,7 @@ public class GuiDropper extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.dropper.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.dropper.getInventoryName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiFeeder.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFeeder.java index 288a1a8b2..74537ae62 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiFeeder.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFeeder.java @@ -31,7 +31,7 @@ public class GuiFeeder extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 70-5, -10, this.tileFeeder.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileFeeder.getInventoryName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiFermentingBarrel.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFermentingBarrel.java new file mode 100644 index 000000000..f15245136 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFermentingBarrel.java @@ -0,0 +1,75 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityFermentingBarrel; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import org.lwjgl.opengl.GL11; + +import java.util.Collections; + +@SideOnly(Side.CLIENT) +public class GuiFermentingBarrel extends GuiContainer{ + + private TileEntityFermentingBarrel press; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFermentingBarrel"); + + public GuiFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerFermentingBarrel(inventory, tile)); + this.press = (TileEntityFermentingBarrel)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.press.getInventoryName()); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + + if(this.press.canolaTank.getFluidAmount() > 0){ + int i = this.press.getCanolaTankScaled(83); + drawTexturedModalRect(this.guiLeft + 61, this.guiTop+89-i, 192, 29, 16, i); + } + + if(this.press.oilTank.getFluidAmount() > 0){ + int i = this.press.getOilTankScaled(83); + drawTexturedModalRect(this.guiLeft + 99, this.guiTop+89-i, 176, 29, 16, i); + } + + if(this.press.currentProcessTime > 0){ + int i = this.press.getProcessScaled(29); + drawTexturedModalRect(this.guiLeft+82, this.guiTop+34, 176, 0, 12, i); + } + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + + String text1 = this.press.canolaTank.getFluidAmount() + "/" + this.press.canolaTank.getCapacity() + " mB " +StatCollector.translateToLocal("fluid.canolaOil"); + if(x >= guiLeft+61 && y >= guiTop+6 && x <= guiLeft+76 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text1), x, y); + } + + String text2 = this.press.oilTank.getFluidAmount() + "/" + this.press.oilTank.getCapacity() + " mB " +StatCollector.translateToLocal("fluid.oil"); + if(x >= guiLeft+99 && y >= guiTop+6 && x <= guiLeft+114 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text2), x, y); + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiFurnaceDouble.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFurnaceDouble.java index 3afe84460..acb2fafee 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiFurnaceDouble.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiFurnaceDouble.java @@ -8,8 +8,11 @@ import ellpeck.actuallyadditions.util.AssetUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; +import java.util.Collections; + @SideOnly(Side.CLIENT) public class GuiFurnaceDouble extends GuiContainer{ @@ -25,7 +28,7 @@ public class GuiFurnaceDouble extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.tileFurnace.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileFurnace.getInventoryName()); } @Override @@ -38,9 +41,9 @@ public class GuiFurnaceDouble extends GuiContainer{ this.mc.getTextureManager().bindTexture(resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); - if(this.tileFurnace.coalTime > 0){ - int i = this.tileFurnace.getCoalTimeToScale(15); - this.drawTexturedModalRect(this.guiLeft+80, this.guiTop+5+14-i, 176, 44+14-i, 14, i); + if(this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.tileFurnace.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); } if(this.tileFurnace.firstSmeltTime > 0){ int i = this.tileFurnace.getFirstTimeToScale(23); @@ -55,5 +58,9 @@ public class GuiFurnaceDouble extends GuiContainer{ @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); + String text = this.tileFurnace.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.tileFurnace.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if(x >= guiLeft+28 && y >= guiTop+6 && x <= guiLeft+43 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text), x, y); + } } } \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiGiantChest.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiGiantChest.java index 9d85dc943..e030b9d03 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiGiantChest.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiGiantChest.java @@ -27,7 +27,7 @@ public class GuiGiantChest extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 172-5, -10, this.chest.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.chest.getInventoryName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiGrinder.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiGrinder.java index b9f723df7..4bd6eb59c 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiGrinder.java @@ -8,8 +8,11 @@ import ellpeck.actuallyadditions.util.AssetUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; +import java.util.Collections; + @SideOnly(Side.CLIENT) public class GuiGrinder extends GuiContainer{ @@ -28,7 +31,7 @@ public class GuiGrinder extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.tileGrinder.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileGrinder.getInventoryName()); } @Override @@ -41,9 +44,9 @@ public class GuiGrinder extends GuiContainer{ this.mc.getTextureManager().bindTexture(this.isDouble ? resLocDouble : resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); - if(this.tileGrinder.coalTime > 0){ - int i = this.tileGrinder.getCoalTimeToScale(15); - this.drawTexturedModalRect(this.guiLeft+(isDouble ? 80 : 51), this.guiTop+5+14-i, 176, 44+14-i, 14, i); + if(this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.tileGrinder.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft + (isDouble ? 14 : 43), this.guiTop+89-i, 176, (isDouble ? 44 : 23), 16, i); } if(this.tileGrinder.firstCrushTime > 0){ int i = this.tileGrinder.getFirstTimeToScale(23); @@ -60,5 +63,9 @@ public class GuiGrinder extends GuiContainer{ @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); + String text = this.tileGrinder.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.tileGrinder.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if((this.isDouble && x >= guiLeft+14 && y >= guiTop+6 && x <= guiLeft+29 && y <= guiTop+88) || (!this.isDouble && x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88)){ + this.func_146283_a(Collections.singletonList(text), x, y); + } } } \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index 7a3e81c66..bfefb5ec4 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -13,7 +13,7 @@ public class GuiHandler implements IGuiHandler{ @Override public Object getServerGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z){ - switch (id){ + switch(id){ case FEEDER_ID: TileEntityBase tileFeeder = (TileEntityBase)world.getTileEntity(x, y, z); return new ContainerFeeder(entityPlayer.inventory, tileFeeder); @@ -46,6 +46,18 @@ public class GuiHandler implements IGuiHandler{ case DROPPER_ID: TileEntityBase tileDropper = (TileEntityBase)world.getTileEntity(x, y, z); return new ContainerDropper(entityPlayer.inventory, tileDropper); + case CANOLA_PRESS_ID: + TileEntityBase tilePress = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerCanolaPress(entityPlayer.inventory, tilePress); + case FERMENTING_BARREL_ID: + TileEntityBase tileBarrel = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerFermentingBarrel(entityPlayer.inventory, tileBarrel); + case COAL_GENERATOR_ID: + TileEntityBase tileGenerator = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerCoalGenerator(entityPlayer.inventory, tileGenerator); + case OIL_GENERATOR_ID: + TileEntityBase tileOilGen = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerOilGenerator(entityPlayer.inventory, tileOilGen); default: return null; } @@ -53,7 +65,7 @@ public class GuiHandler implements IGuiHandler{ @Override public Object getClientGuiElement(int id, EntityPlayer entityPlayer, World world, int x, int y, int z){ - switch (id){ + switch(id){ case FEEDER_ID: TileEntityBase tileFeeder = (TileEntityBase)world.getTileEntity(x, y, z); return new GuiFeeder(entityPlayer.inventory, tileFeeder); @@ -86,6 +98,18 @@ public class GuiHandler implements IGuiHandler{ case DROPPER_ID: TileEntityBase tileDropper = (TileEntityBase)world.getTileEntity(x, y, z); return new GuiDropper(entityPlayer.inventory, tileDropper); + case CANOLA_PRESS_ID: + TileEntityBase tilePress = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiCanolaPress(entityPlayer.inventory, tilePress); + case FERMENTING_BARREL_ID: + TileEntityBase tileBarrel = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiFermentingBarrel(entityPlayer.inventory, tileBarrel); + case COAL_GENERATOR_ID: + TileEntityBase tileGenerator = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiCoalGenerator(entityPlayer.inventory, tileGenerator); + case OIL_GENERATOR_ID: + TileEntityBase tileOilGen = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiOilGenerator(entityPlayer.inventory, tileOilGen); default: return null; } @@ -102,6 +126,10 @@ public class GuiHandler implements IGuiHandler{ public static final int INPUTTER_ADVANCED_ID = 8; public static final int BREAKER_ID = 9; public static final int DROPPER_ID = 10; + public static final int CANOLA_PRESS_ID = 11; + public static final int FERMENTING_BARREL_ID = 12; + public static final int COAL_GENERATOR_ID = 13; + public static final int OIL_GENERATOR_ID = 14; public static void init(){ Util.logInfo("Initializing GuiHandler..."); diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiInputter.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiInputter.java index 4b036a739..22b5c166c 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiInputter.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiInputter.java @@ -62,7 +62,7 @@ public class GuiInputter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, this.isAdvanced ? 105-5 : 93-5, -10, this.tileInputter.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileInputter.getInventoryName()); } @SuppressWarnings("unchecked") diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiOilGenerator.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiOilGenerator.java new file mode 100644 index 000000000..864722db6 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiOilGenerator.java @@ -0,0 +1,74 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityOilGenerator; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +import java.util.Collections; + +@SideOnly(Side.CLIENT) +public class GuiOilGenerator extends GuiContainer{ + + private TileEntityOilGenerator generator; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiOilGenerator"); + + public GuiOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerOilGenerator(inventory, tile)); + this.generator = (TileEntityOilGenerator)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.generator.getInventoryName()); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + + if(this.generator.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.generator.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); + } + + if(this.generator.tank.getFluidAmount() > 0){ + int i = this.generator.getTankScaled(83); + drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 0, 16, i); + } + + if(this.generator.currentBurnTime > 0){ + int i = this.generator.getBurningScaled(13); + this.drawTexturedModalRect(guiLeft+72, guiTop+44+12-i, 176, 96-i, 14, i); + } + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + String text1 = this.generator.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.generator.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text1), x, y); + } + String text2 = this.generator.tank.getFluidAmount() + "/" + this.generator.tank.getCapacity() + " mB " +StatCollector.translateToLocal("fluid.oil"); + if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text2), x, y); + } + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiRepairer.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiRepairer.java index 81151158b..435af2cf9 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiRepairer.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiRepairer.java @@ -8,8 +8,11 @@ import ellpeck.actuallyadditions.util.AssetUtil; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; +import java.util.Collections; + @SideOnly(Side.CLIENT) public class GuiRepairer extends GuiContainer{ @@ -25,7 +28,7 @@ public class GuiRepairer extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.tileRepairer.getInventoryName()); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileRepairer.getInventoryName()); } @Override @@ -38,9 +41,9 @@ public class GuiRepairer extends GuiContainer{ this.mc.getTextureManager().bindTexture(resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); - if(this.tileRepairer.coalTime > 0){ - int i = this.tileRepairer.getCoalTimeToScale(15); - this.drawTexturedModalRect(this.guiLeft+80, this.guiTop+5+14-i, 176, 44+14-i, 14, i); + if(this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + int i = this.tileRepairer.getEnergyScaled(83); + drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); } if(TileEntityItemRepairer.canBeRepaired(this.tileRepairer.slots[TileEntityItemRepairer.SLOT_INPUT])){ int i = this.tileRepairer.getItemDamageToScale(22); @@ -51,5 +54,9 @@ public class GuiRepairer extends GuiContainer{ @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); + String text = this.tileRepairer.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.tileRepairer.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF"; + if(x >= guiLeft+28 && y >= guiTop+6 && x <= guiLeft+43 && y <= guiTop+88){ + this.func_146283_a(Collections.singletonList(text), x, y); + } } } \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java index 703d497f0..5f6354598 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java +++ b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java @@ -1,5 +1,8 @@ package ellpeck.actuallyadditions.items; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.items.metalists.TheFoods; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; import ellpeck.actuallyadditions.items.tools.*; import ellpeck.actuallyadditions.material.InitItemMaterials; import ellpeck.actuallyadditions.recipe.HairyBallHandler; @@ -10,6 +13,8 @@ import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.fluids.FluidContainerRegistry; public class InitItems{ @@ -39,16 +44,35 @@ public class InitItems{ public static Item itemSwordObsidian; public static Item itemHoeObsidian; - public static Item itemSpeedUpgrade; - public static Item itemHairyBall; + public static Item itemRiceSeed; + public static Item itemCanolaSeed; + public static Item itemResonantRice; + public static Item itemBucketOil; + public static Item itemBucketCanolaOil; + + public static Item itemPhantomConnector; public static void init(){ Util.logInfo("Initializing Items..."); + itemBucketOil = new ItemBucketAA(InitBlocks.blockOil, "itemBucketOil"); + ItemUtil.register(itemBucketOil); + FluidContainerRegistry.registerFluidContainer(InitBlocks.fluidOil, new ItemStack(itemBucketOil), FluidContainerRegistry.EMPTY_BUCKET); + + itemBucketCanolaOil = new ItemBucketAA(InitBlocks.blockCanolaOil, "itemBucketCanolaOil"); + ItemUtil.register(itemBucketCanolaOil); + FluidContainerRegistry.registerFluidContainer(InitBlocks.fluidCanolaOil, new ItemStack(itemBucketCanolaOil), FluidContainerRegistry.EMPTY_BUCKET); + itemFertilizer = new ItemFertilizer(); ItemUtil.register(itemFertilizer); + itemPhantomConnector = new ItemPhantomConnector(); + ItemUtil.register(itemPhantomConnector); + + itemResonantRice = new ItemResonantRice(); + ItemUtil.register(itemResonantRice); + itemMisc = new ItemMisc(); ItemUtil.register(itemMisc, ItemMisc.allMiscItems); @@ -82,13 +106,16 @@ public class InitItems{ itemPotionRingAdvanced = new ItemPotionRing(true); ItemUtil.register(itemPotionRingAdvanced); - itemSpeedUpgrade = new ItemUpgrade(ItemUpgrade.UpgradeType.SPEED, "itemUpgradeSpeed", 2+3); - ItemUtil.register(itemSpeedUpgrade); - itemHairyBall = new ItemHairyBall(); ItemUtil.register(itemHairyBall); HairyBallHandler.init(); + itemRiceSeed = new ItemSeed("itemRiceSeed", InitBlocks.blockRice, Blocks.water, EnumPlantType.Water, new ItemStack(itemFoods, 1, TheFoods.RICE.ordinal())); + ItemUtil.register(itemRiceSeed); + + itemCanolaSeed = new ItemSeed("itemCanolaSeed", InitBlocks.blockCanola, Blocks.grass, EnumPlantType.Crop, new ItemStack(itemMisc, 1, TheMiscItems.CANOLA.ordinal())); + ItemUtil.register(itemCanolaSeed); + itemPickaxeEmerald = new ItemPickaxeAA(InitItemMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemPickaxeEmerald", EnumRarity.rare); itemAxeEmerald = new ItemAxeAA(InitItemMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemAxeEmerald", EnumRarity.rare); itemShovelEmerald = new ItemShovelAA(InitItemMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemShovelEmerald", EnumRarity.rare); diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemUpgrade.java b/src/main/java/ellpeck/actuallyadditions/items/ItemBucketAA.java similarity index 71% rename from src/main/java/ellpeck/actuallyadditions/items/ItemUpgrade.java rename to src/main/java/ellpeck/actuallyadditions/items/ItemBucketAA.java index 96623e566..f753459b1 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemUpgrade.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemBucketAA.java @@ -5,37 +5,41 @@ import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.util.INameableItem; import ellpeck.actuallyadditions.util.ItemUtil; import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; +import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import java.util.List; -public class ItemUpgrade extends Item implements INameableItem{ +public class ItemBucketAA extends ItemBucket implements INameableItem{ - private final String name; - public UpgradeType type; - private int textAmount; + private String name; - public ItemUpgrade(UpgradeType type, String name, int textAmount){ - this.name = name; - this.type = type; - this.textAmount = textAmount; + public ItemBucketAA(Block block, String unlocName){ + super(block); + this.name = unlocName; } @Override public EnumRarity getRarity(ItemStack stack){ - return EnumRarity.rare; + return EnumRarity.uncommon; + } + + @Override + public Item getContainerItem(){ + return Items.bucket; } @Override - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { - ItemUtil.addInformation(this, list, this.textAmount, ""); + ItemUtil.addInformation(this, list, 1, ""); } @Override @@ -58,8 +62,4 @@ public class ItemUpgrade extends Item implements INameableItem{ public String getOredictName(){ return this.getName(); } - - public enum UpgradeType{ - SPEED - } } diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemHairyBall.java b/src/main/java/ellpeck/actuallyadditions/items/ItemHairyBall.java index 3f6482ab0..8ce79fdd3 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemHairyBall.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemHairyBall.java @@ -31,6 +31,7 @@ public class ItemHairyBall extends Item implements INameableItem{ player.worldObj.spawnEntityInWorld(entityItem); } stack.stackSize--; + world.playSoundAtEntity(player, "random.pop", 0.2F, new Random().nextFloat() * 0.1F + 0.9F); } return stack; } diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java b/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java new file mode 100644 index 000000000..b02400107 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java @@ -0,0 +1,146 @@ +package ellpeck.actuallyadditions.items; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityPhantomface; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ItemUtil; +import ellpeck.actuallyadditions.util.KeyUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import java.util.List; + +public class ItemPhantomConnector extends Item implements INameableItem{ + + public ItemPhantomConnector(){ + this.setMaxStackSize(1); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile != null && tile instanceof TileEntityPhantomface && this.getStoredConnection(stack) != null){ + TileEntity stored = this.getStoredConnection(stack); + if(stored != null && stored.getWorldObj().getTileEntity(stored.xCoord, stored.yCoord, stored.zCoord) == stored){ + ((TileEntityPhantomface)tile).boundTile = stored.getWorldObj().getTileEntity(stored.xCoord, stored.yCoord, stored.zCoord); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.connected.desc"))); + this.clearStorage(stack); + return true; + } + } + + if(tile != null && !(tile instanceof TileEntityPhantomface) && tile instanceof IInventory){ + this.storeConnection(stack, tile); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.stored.desc"))); + return true; + } + else{ + if(tile instanceof TileEntityPhantomface) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.noBound.desc"))); + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.notInventory.desc"))); + } + } + return super.onItemUse(stack, player, world, x, y, z, par7, par8, par9, par10); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){ + if(this.getStoredConnection(stack) == null) this.clearStorage(stack); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + if(KeyUtil.isControlPressed()) this.clearStorage(stack); + return stack; + } + + public TileEntity getStoredConnection(ItemStack stack){ + NBTTagCompound tag = stack.getTagCompound(); + if(tag != null){ + int x = tag.getInteger("XCoordOfTileStored"); + int y = tag.getInteger("YCoordOfTileStored"); + int z = tag.getInteger("ZCoordOfTileStored"); + World world = DimensionManager.getWorld(tag.getInteger("WorldOfTileStored")); + + return world.getTileEntity(x, y, z); + } + return null; + } + + public void storeConnection(ItemStack stack, TileEntity tile){ + NBTTagCompound tag = stack.getTagCompound(); + if(tag == null) tag = new NBTTagCompound(); + + tag.setInteger("XCoordOfTileStored", tile.xCoord); + tag.setInteger("YCoordOfTileStored", tile.yCoord); + tag.setInteger("ZCoordOfTileStored", tile.zCoord); + tag.setInteger("WorldOfTileStored", tile.getWorldObj().provider.dimensionId); + + stack.setTagCompound(tag); + } + + public void clearStorage(ItemStack stack){ + stack.setTagCompound(new NBTTagCompound()); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.epic; + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + ItemUtil.addInformation(this, list, 2, ""); + TileEntity tile = this.getStoredConnection(stack); + if(tile != null){ + list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.boundTo.desc") + ":"); + list.add("X: " + tile.xCoord); + list.add("Y: " + tile.yCoord); + list.add("Z: " + tile.zCoord); + list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.inWorld.desc") + " " + tile.getWorldObj().provider.dimensionId); + } + } + + @Override + public IIcon getIcon(ItemStack stack, int pass){ + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public String getName(){ + return "itemPhantomConnector"; + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public boolean getShareTag(){ + return true; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemResonantRice.java b/src/main/java/ellpeck/actuallyadditions/items/ItemResonantRice.java new file mode 100644 index 000000000..79e956b5a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemResonantRice.java @@ -0,0 +1,62 @@ +package ellpeck.actuallyadditions.items; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.util.*; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +import java.util.List; + +public class ItemResonantRice extends Item implements INameableItem{ + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + if(!world.isRemote){ + stack.stackSize--; + world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); + } + return stack; + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.epic; + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + ItemUtil.addInformation(this, list, 1, ""); + if(KeyUtil.isShiftPressed() && OreDictionary.getOres("nuggetEnderium").size() == 0) list.add(StringUtil.RED + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".itemResonantRice.uncraftable.desc")); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass){ + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public String getName(){ + return "itemResonantRice"; + } + + @Override + public String getOredictName(){ + return this.getName(); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemSeed.java b/src/main/java/ellpeck/actuallyadditions/items/ItemSeed.java new file mode 100644 index 000000000..872f9af7c --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemSeed.java @@ -0,0 +1,130 @@ +package ellpeck.actuallyadditions.items; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.BlockPlant; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ItemUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.BlockSnapshot; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.ForgeEventFactory; + +import java.util.List; + +public class ItemSeed extends Item implements IPlantable, INameableItem{ + + public Block plant; + public Block soilBlock; + public EnumPlantType type; + public String name; + + public ItemSeed(String name, Block plant, Block soilBlock, EnumPlantType type, ItemStack returnItem){ + this.name = name; + this.plant = plant; + this.soilBlock = soilBlock; + this.type = type; + ((BlockPlant)this.plant).seedItem = this; + ((BlockPlant)this.plant).returnItem = returnItem; + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int hitSide, float hitX, float hitY, float hitZ){ + if(this.type == EnumPlantType.Water || hitSide != 1) return false; + else if(player.canPlayerEdit(x, y, z, hitSide, stack) && player.canPlayerEdit(x, y + 1, z, hitSide, stack)){ + if(((BlockPlant)this.plant).canPlaceBlockOn(world.getBlock(x, y, z)) && world.isAirBlock(x, y + 1, z)){ + world.setBlock(x, y + 1, z, this.plant); + stack.stackSize--; + return true; + } + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + if(this.type == EnumPlantType.Water){ + MovingObjectPosition pos = this.getMovingObjectPositionFromPlayer(world, player, true); + if(pos != null){ + if(pos.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK){ + int i = pos.blockX; + int j = pos.blockY; + int k = pos.blockZ; + + if(world.canMineBlock(player, i, j, k) && player.canPlayerEdit(i, j, k, pos.sideHit, stack)){ + if(world.getBlock(i, j, k).getMaterial() == Material.water && world.getBlockMetadata(i, j, k) == 0 && world.isAirBlock(i, j + 1, k)){ + BlockSnapshot snap = BlockSnapshot.getBlockSnapshot(world, i, j+1, k); + world.setBlock(i, j + 1, k, this.plant); + if(ForgeEventFactory.onPlayerBlockPlace(player, snap, ForgeDirection.UP).isCanceled()){ + snap.restore(true, false); + return super.onItemRightClick(stack, world, player); + } + stack.stackSize--; + } + } + } + } + } + return super.onItemRightClick(stack, world, player); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.rare; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + ItemUtil.addInformation(this, list, 1, ""); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass){ + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z){ + return this.type; + } + + @Override + public Block getPlant(IBlockAccess world, int x, int y, int z){ + return this.plant; + } + + @Override + public int getPlantMetadata(IBlockAccess world, int x, int y, int z){ + return 0; + } + + @Override + public String getName(){ + return this.name; + } + + @Override + public String getOredictName(){ + return this.getName(); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheFoods.java b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheFoods.java index b9df1658a..4dc38122c 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheFoods.java +++ b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheFoods.java @@ -23,7 +23,9 @@ public enum TheFoods implements INameableItem{ BIG_COOKIE("BigCookie", 6, 1F, false, 20, EnumRarity.uncommon, "foodBigCookie"), HAMBURGER("Hamburger", 14, 6F, false, 40, EnumRarity.common, "foodHamburger"), PIZZA("Pizza", 20, 10F, false, 45, EnumRarity.uncommon, "foodPizza"), - BAGUETTE("Baguette", 7, 2F, false, 25, EnumRarity.common, "foodBaguette"); + BAGUETTE("Baguette", 7, 2F, false, 25, EnumRarity.common, "foodBaguette"), + RICE("Rice", 2, 1F, false, 10, EnumRarity.uncommon, "foodRice"), + RICE_BREAD("RiceBread", 8, 3F, false, 25, EnumRarity.uncommon, "foodRiceBread"); public static void setReturnItems(){ SPAGHETTI.returnItem = new ItemStack(Items.bowl); diff --git a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheJams.java b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheJams.java index fc770f571..296c24102 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheJams.java +++ b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheJams.java @@ -5,12 +5,12 @@ import net.minecraft.item.EnumRarity; public enum TheJams implements INameableItem{ - CU_BA_RA("CuBaRa", 20, 5F, EnumRarity.rare, "jamCuBaRa", 5, 12, 12595273), - GRA_KI_BA("GraKiBa", 20, 5F, EnumRarity.rare, "jamGraKiBa", 16, 13, 5492820), - PL_AP_LE("PlApLe", 20, 5F, EnumRarity.rare, "jamPlApLe", 15, 3, 13226009), - CH_AP_CI("ChApCi", 20, 5F, EnumRarity.rare, "jamChApCi", 10, 1, 13189222), - HO_ME_KI("HoMeKi", 20, 5F, EnumRarity.rare, "jamHoMeKi", 10, 14, 2031360), - PI_CO("PiCo", 20, 5F, EnumRarity.rare, "jamPiCo", 9, 1, 16056203); + CU_BA_RA("CuBaRa", 4, 5F, EnumRarity.rare, "jamCuBaRa", 5, 12, 12595273), + GRA_KI_BA("GraKiBa", 4, 5F, EnumRarity.rare, "jamGraKiBa", 16, 13, 5492820), + PL_AP_LE("PlApLe", 4, 5F, EnumRarity.rare, "jamPlApLe", 15, 3, 13226009), + CH_AP_CI("ChApCi", 4, 5F, EnumRarity.rare, "jamChApCi", 10, 1, 13189222), + HO_ME_KI("HoMeKi", 4, 5F, EnumRarity.rare, "jamHoMeKi", 10, 14, 2031360), + PI_CO("PiCo", 4, 5F, EnumRarity.rare, "jamPiCo", 9, 1, 16056203); public final String name; public final String oredictName; diff --git a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheMiscItems.java b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheMiscItems.java index c8e5fcfd1..b678244ec 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/metalists/TheMiscItems.java +++ b/src/main/java/ellpeck/actuallyadditions/items/metalists/TheMiscItems.java @@ -13,7 +13,12 @@ public enum TheMiscItems implements INameableItem{ QUARTZ("BlackQuartz", EnumRarity.epic, "gemQuartzBlack"), RING("Ring", EnumRarity.uncommon, "itemRing"), COIL("Coil", EnumRarity.common, "itemCoilBasic"), - COIL_ADVANCED("CoilAdvanced", EnumRarity.uncommon, "itemCoilAdvanced"); + COIL_ADVANCED("CoilAdvanced", EnumRarity.uncommon, "itemCoilAdvanced"), + RICE_DOUGH("RiceDough", EnumRarity.uncommon, "itemRiceDough"), + TINY_COAL("TinyCoal", EnumRarity.common, "itemTinyCoal"), + TINY_CHAR("TinyCharcoal", EnumRarity.common, "itemTinyChar"), + RICE_SLIME("RiceSlime", EnumRarity.uncommon, "slimeball"), + CANOLA("Canola", EnumRarity.uncommon, "itemCanola"); public final String name; public final String oredictName; diff --git a/src/main/java/ellpeck/actuallyadditions/nei/CompostRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/nei/CompostRecipeHandler.java new file mode 100644 index 000000000..4111dbba9 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/nei/CompostRecipeHandler.java @@ -0,0 +1,109 @@ +package ellpeck.actuallyadditions.nei; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.RecipeInfo; +import codechicken.nei.recipe.TemplateRecipeHandler; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.Collections; + +public class CompostRecipeHandler extends TemplateRecipeHandler{ + + public static final String NAME = "compost"; + + public CompostRecipeHandler(){ + super(); + RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); + } + + public class CachedCompostRecipe extends CachedRecipe{ + + public PositionedStack result; + public PositionedStack input; + public int chance; + + public CachedCompostRecipe(ItemStack input, ItemStack result){ + this.result = new PositionedStack(result, 67+32, 19); + this.input = new PositionedStack(input, 5+32, 19); + } + + @Override + public PositionedStack getIngredient(){ + return input; + } + + @Override + public PositionedStack getResult(){ + return result; + } + } + + @Override + public int recipiesPerPage(){ + return 2; + } + + @Override + public Class getGuiClass(){ + return null; + } + + @Override + public String getRecipeName(){ + return StatCollector.translateToLocal("container." + ModUtil.MOD_ID_LOWER + ".nei." + NAME + ".name"); + } + + @Override + public void loadTransferRects(){ + transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results){ + if(outputId.equals(NAME) && getClass() == CompostRecipeHandler.class){ + arecipes.add(new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, ConfigIntValues.COMPOST_AMOUNT.getValue(), TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, ConfigIntValues.COMPOST_AMOUNT.getValue()))); + } + else super.loadCraftingRecipes(outputId, results); + } + + @Override + public void loadCraftingRecipes(ItemStack result){ + if(NEIServerUtils.areStacksSameType(new ItemStack(InitItems.itemFertilizer), result)) arecipes.add(new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, ConfigIntValues.COMPOST_AMOUNT.getValue(), TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, ConfigIntValues.COMPOST_AMOUNT.getValue()))); + } + + @Override + public void loadUsageRecipes(ItemStack ingredient){ + if(NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemMisc, ConfigIntValues.COMPOST_AMOUNT.getValue(), TheMiscItems.MASHED_FOOD.ordinal()), ingredient)){ + CachedCompostRecipe theRecipe = new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, ConfigIntValues.COMPOST_AMOUNT.getValue(), TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, ConfigIntValues.COMPOST_AMOUNT.getValue())); + theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); + arecipes.add(theRecipe); + } + } + + @Override + public String getGuiTexture(){ + return ModUtil.MOD_ID_LOWER + ":textures/gui/guiNEICompost.png"; + } + + @Override + public void drawBackground(int recipeIndex){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiDraw.changeTexture(getGuiTexture()); + GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); + } + + @Override + public String getOverlayIdentifier(){ + return NAME; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/nei/CrusherRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/nei/CrusherRecipeHandler.java index 8eae1f040..bbb50f5c9 100644 --- a/src/main/java/ellpeck/actuallyadditions/nei/CrusherRecipeHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/nei/CrusherRecipeHandler.java @@ -1,7 +1,6 @@ package ellpeck.actuallyadditions.nei; import codechicken.lib.gui.GuiDraw; -import codechicken.nei.ItemList; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.RecipeInfo; @@ -11,23 +10,18 @@ import ellpeck.actuallyadditions.recipe.GrinderRecipes; import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.StringUtil; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; import java.awt.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class CrusherRecipeHandler extends TemplateRecipeHandler{ public static final String NAME = "crushing"; - public static final String FUEL = "fuel"; - - public static ArrayList fuels; public CrusherRecipeHandler(){ super(); @@ -59,15 +53,9 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ return resultOne; } - @Override - public PositionedStack getOtherStack(){ - return fuels.get((cycleticks / 48) % fuels.size()).stack; - } - @Override public List getOtherStacks(){ ArrayList list = new ArrayList(); - list.add(this.getOtherStack()); if(this.resultTwo != null) list.add(this.resultTwo); return list; } @@ -78,20 +66,8 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ return 1; } - public static class Fuel{ - - public Fuel(ItemStack in, int burnTime){ - this.stack = new PositionedStack(in, 51, 21, false); - this.burnTime = burnTime; - } - - public PositionedStack stack; - public int burnTime; - } - @Override public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(51, 5, 14, 14), FUEL)); transferRects.add(new RecipeTransferRect(new Rectangle(80, 40, 24, 22), NAME)); } @@ -105,12 +81,6 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ return StatCollector.translateToLocal("container." + ModUtil.MOD_ID_LOWER + ".nei." + NAME + ".name"); } - @Override - public TemplateRecipeHandler newInstance(){ - if (fuels == null || fuels.isEmpty()) findFuels(); - return super.newInstance(); - } - @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == CrusherRecipeHandler.class){ @@ -130,12 +100,6 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ } } - @Override - public void loadUsageRecipes(String inputId, Object... ingredients){ - if (inputId.equals(FUEL) && getClass() == CrusherRecipeHandler.class) loadCraftingRecipes(NAME); - else super.loadUsageRecipes(inputId, ingredients); - } - @Override public void loadUsageRecipes(ItemStack ingredient){ ArrayList recipes = GrinderRecipes.instance().recipes; @@ -157,12 +121,11 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ public void drawBackground(int recipeIndex){ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(49, 5, 49, 5, 66, 86); + GuiDraw.drawTexturedModalRect(60, 13, 60, 13, 56, 79); } @Override public void drawExtras(int recipe){ - drawProgressBar(51, 5, 176, 44, 14, 14, 48, 7); drawProgressBar(80, 40, 176, 0, 24, 23, 48, 1); CachedCrush crush = (CachedCrush)this.arecipes.get(recipe); @@ -173,28 +136,6 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{ } } - private static Set excludedFuels(){ - Set theFuels = new HashSet(); - theFuels.add(Item.getItemFromBlock(Blocks.brown_mushroom)); - theFuels.add(Item.getItemFromBlock(Blocks.red_mushroom)); - theFuels.add(Item.getItemFromBlock(Blocks.standing_sign)); - theFuels.add(Item.getItemFromBlock(Blocks.wall_sign)); - theFuels.add(Item.getItemFromBlock(Blocks.wooden_door)); - theFuels.add(Item.getItemFromBlock(Blocks.trapped_chest)); - return theFuels; - } - - private static void findFuels(){ - fuels = new ArrayList(); - Set theFuels = excludedFuels(); - for(ItemStack item : ItemList.items){ - if(!theFuels.contains(item.getItem())){ - int burnTime = TileEntityFurnace.getItemBurnTime(item); - if(burnTime > 0) fuels.add(new Fuel(item.copy(), burnTime)); - } - } - } - @Override public String getOverlayIdentifier(){ return NAME; diff --git a/src/main/java/ellpeck/actuallyadditions/nei/HairyBallRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/nei/HairyBallRecipeHandler.java new file mode 100644 index 000000000..950afc0ef --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/nei/HairyBallRecipeHandler.java @@ -0,0 +1,129 @@ +package ellpeck.actuallyadditions.nei; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.RecipeInfo; +import codechicken.nei.recipe.TemplateRecipeHandler; +import ellpeck.actuallyadditions.recipe.HairyBallHandler; +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Collections; + +public class HairyBallRecipeHandler extends TemplateRecipeHandler{ + + public static final String NAME = "ballOfHair"; + + public HairyBallRecipeHandler(){ + super(); + RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); + } + + public class CachedBallRecipe extends CachedRecipe{ + + public PositionedStack result; + public PositionedStack input; + public int chance; + + public CachedBallRecipe(ItemStack input, ItemStack result, int chance){ + this.result = new PositionedStack(result, 67+32, 19); + this.chance = chance; + this.input = new PositionedStack(input, 5+32, 19); + } + + @Override + public PositionedStack getIngredient(){ + return input; + } + + @Override + public PositionedStack getResult(){ + return result; + } + } + + @Override + public int recipiesPerPage(){ + return 2; + } + + @Override + public Class getGuiClass(){ + return null; + } + + @Override + public String getRecipeName(){ + return StatCollector.translateToLocal("container." + ModUtil.MOD_ID_LOWER + ".nei." + NAME + ".name"); + } + + @Override + public void loadTransferRects(){ + transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results){ + if(outputId.equals(NAME) && getClass() == HairyBallRecipeHandler.class){ + ArrayList recipes = HairyBallHandler.returns; + for(HairyBallHandler.Return recipe : recipes){ + arecipes.add(new CachedBallRecipe(recipe.inputItem, recipe.returnItem, recipe.itemWeight)); + } + } + else super.loadCraftingRecipes(outputId, results); + } + + @Override + public void loadCraftingRecipes(ItemStack result){ + ArrayList recipes = HairyBallHandler.returns; + for(HairyBallHandler.Return recipe : recipes){ + if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)) arecipes.add(new CachedBallRecipe(recipe.inputItem, recipe.returnItem, recipe.itemWeight)); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient){ + ArrayList recipes = HairyBallHandler.returns; + for(HairyBallHandler.Return recipe : recipes){ + if(NEIServerUtils.areStacksSameTypeCrafting(recipe.inputItem, ingredient)){ + CachedBallRecipe theRecipe = new CachedBallRecipe(recipe.inputItem, recipe.returnItem, recipe.itemWeight); + theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); + arecipes.add(theRecipe); + } + } + } + + @Override + public String getGuiTexture(){ + return ModUtil.MOD_ID_LOWER + ":textures/gui/guiNEIHairyBall.png"; + } + + @Override + public void drawBackground(int recipeIndex){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiDraw.changeTexture(getGuiTexture()); + GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); + } + + @Override + public void drawExtras(int rec){ + CachedBallRecipe recipe = (CachedBallRecipe)this.arecipes.get(rec); + if(recipe.result != null){ + int secondChance = recipe.chance; + String secondString = secondChance + "%"; + GuiDraw.drawString(secondString, 65+32, 48, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + } + } + + @Override + public String getOverlayIdentifier(){ + return NAME; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/nei/NEIActuallyAdditionsConfig.java b/src/main/java/ellpeck/actuallyadditions/nei/NEIActuallyAdditionsConfig.java index 7f90d5e67..74fdadcff 100644 --- a/src/main/java/ellpeck/actuallyadditions/nei/NEIActuallyAdditionsConfig.java +++ b/src/main/java/ellpeck/actuallyadditions/nei/NEIActuallyAdditionsConfig.java @@ -17,9 +17,16 @@ public class NEIActuallyAdditionsConfig implements IConfigureNEI{ API.registerRecipeHandler(crusherRecipeHandler); API.registerUsageHandler(crusherRecipeHandler); - //TODO Re-add - API.hideItem(new ItemStack(InitBlocks.blockHeatCollector)); - API.hideItem(new ItemStack(InitBlocks.blockFurnaceSolar)); + HairyBallRecipeHandler ballRecipeHandler = new HairyBallRecipeHandler(); + API.registerRecipeHandler(ballRecipeHandler); + API.registerUsageHandler(ballRecipeHandler); + + CompostRecipeHandler compostRecipeHandler = new CompostRecipeHandler(); + API.registerRecipeHandler(compostRecipeHandler); + API.registerUsageHandler(compostRecipeHandler); + + API.hideItem(new ItemStack(InitBlocks.blockRice)); + API.hideItem(new ItemStack(InitBlocks.blockCanola)); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/FuelHandler.java b/src/main/java/ellpeck/actuallyadditions/recipe/FuelHandler.java new file mode 100644 index 000000000..8fe8d7311 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/recipe/FuelHandler.java @@ -0,0 +1,72 @@ +package ellpeck.actuallyadditions.recipe; + +import cpw.mods.fml.common.IFuelHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.blocks.metalists.TheMiscBlocks; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; +import ellpeck.actuallyadditions.util.Util; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.HashMap; + +@SuppressWarnings("unused") +public class FuelHandler implements IFuelHandler{ + + private static HashMap, Integer> fuelList = new HashMap, Integer>(); + + public static void init(){ + Util.logInfo("Initializing Fuelstuffs..."); + + GameRegistry.registerFuelHandler(new FuelHandler()); + setFuelValues(); + } + + @Override + public int getBurnTime(ItemStack fuel){ + return getFuelValue(fuel); + } + + public static void setFuelValues(){ + addFuel(InitItems.itemMisc, TheMiscItems.TINY_CHAR.ordinal(), 200); + addFuel(InitItems.itemMisc, TheMiscItems.TINY_COAL.ordinal(), 200); + addFuel(InitBlocks.blockMisc, TheMiscBlocks.CHARCOAL_BLOCK.ordinal(), 16000); + } + + private static void addFuel(Item item, int metadata, int value){ + fuelList.put(Pair.of(item, metadata), value); + } + + private static void addFuel(Item item, int value){ + addFuel(item, 0, value); + } + + private static void addFuel(Block block, int metadata, int value){ + addFuel(Item.getItemFromBlock(block), metadata, value); + } + + private static void addFuel(Block block, int value){ + addFuel(Item.getItemFromBlock(block), 0, value); + } + + private static int getFuelValue(ItemStack stack){ + if(stack != null && stack.getItem() != null){ + Pair pair = Pair.of(stack.getItem(), stack.getItemDamage()); + + if(fuelList.containsKey(pair)){ + return fuelList.get(pair); + } + else{ + pair = Pair.of(stack.getItem(), 0); + if(fuelList.containsKey(pair)){ + return fuelList.get(pair); + } + } + } + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java index 3b60baad6..208a5f2d0 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java +++ b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java @@ -41,10 +41,6 @@ public class GrinderRecipes{ } } - public void registerRecipe(String input, String outputOne){ - this.registerRecipe(input, outputOne, "", 0, 1); - } - public void registerRecipe(ItemStack input, ItemStack outputOne){ this.registerRecipe(input, outputOne, null, 0); } @@ -78,6 +74,8 @@ public class GrinderRecipes{ break; } } + + if(containsInput && containsOutput) break; } return containsInput && containsOutput; } diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/HairyBallHandler.java b/src/main/java/ellpeck/actuallyadditions/recipe/HairyBallHandler.java index a03da6f18..87d81bf5d 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/HairyBallHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/recipe/HairyBallHandler.java @@ -46,10 +46,12 @@ public class HairyBallHandler{ public static class Return extends WeightedRandom.Item{ public ItemStack returnItem; + public ItemStack inputItem; public Return(ItemStack returnItem, int chance){ super(chance); this.returnItem = returnItem; + this.inputItem = new ItemStack(InitItems.itemHairyBall); } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/IPowerAcceptor.java b/src/main/java/ellpeck/actuallyadditions/tile/IPowerAcceptor.java deleted file mode 100644 index 4c4f46d19..000000000 --- a/src/main/java/ellpeck/actuallyadditions/tile/IPowerAcceptor.java +++ /dev/null @@ -1,12 +0,0 @@ -package ellpeck.actuallyadditions.tile; - -public interface IPowerAcceptor{ - - void setBlockMetadataToOn(); - - void setPower(int power); - - void setItemPower(int power); - - int getItemPower(); -} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java index cf3f30777..202429ee6 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java @@ -27,6 +27,11 @@ public class TileEntityBase extends TileEntity{ GameRegistry.registerTileEntity(TileEntityInputter.TileEntityInputterAdvanced.class, ModUtil.MOD_ID_LOWER + ":tileEntityInputterAdvanced"); GameRegistry.registerTileEntity(TileEntityBreaker.TileEntityPlacer.class, ModUtil.MOD_ID_LOWER + ":tileEntityPlacer"); GameRegistry.registerTileEntity(TileEntityGrinder.TileEntityGrinderDouble.class, ModUtil.MOD_ID_LOWER + ":tileEntityGrinderDouble"); + GameRegistry.registerTileEntity(TileEntityCanolaPress.class, ModUtil.MOD_ID_LOWER + ":tileEntityCanolaPress"); + GameRegistry.registerTileEntity(TileEntityFermentingBarrel.class, ModUtil.MOD_ID_LOWER + ":tileEntityFermentingBarrel"); + GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID_LOWER + ":tileEntityOilGenerator"); + GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, ModUtil.MOD_ID_LOWER + ":tileEntityCoalGenerator"); + GameRegistry.registerTileEntity(TileEntityPhantomface.class, ModUtil.MOD_ID_LOWER + ":tileEntityPhantomface"); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java new file mode 100644 index 000000000..bd19b96cd --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java @@ -0,0 +1,174 @@ +package ellpeck.actuallyadditions.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.*; + +public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler{ + + public EnergyStorage storage = new EnergyStorage(40000, energyUsedPerTick+50); + + public FluidTank tank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + + public static int energyUsedPerTick = ConfigIntValues.PRESS_ENERGY_USED.getValue(); + public int mbProducedPerCanola = ConfigIntValues.PRESS_MB_PRODUCED.getValue(); + + public int maxTimeProcessing = ConfigIntValues.PRESS_PROCESSING_TIME.getValue(); + public int currentProcessTime; + + public TileEntityCanolaPress(){ + super(3, "canolaPress"); + } + + @Override + @SuppressWarnings("unchecked") + public void updateEntity(){ + if(!worldObj.isRemote){ + if(this.isCanola(0) && this.storage.getEnergyStored() >= energyUsedPerTick && this.mbProducedPerCanola <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + this.currentProcessTime++; + if(this.currentProcessTime >= this.maxTimeProcessing){ + this.currentProcessTime = 0; + + this.slots[0].stackSize--; + if(this.slots[0].stackSize == 0) this.slots[0] = null; + + this.tank.fill(new FluidStack(InitBlocks.fluidCanolaOil, mbProducedPerCanola), true); + this.markDirty(); + } + } + else this.currentProcessTime = 0; + + if(this.slots[1] != null && this.slots[1].getItem() == Items.bucket && this.slots[2] == null){ + if(this.tank.getFluidAmount() > 0 && this.tank.getFluid().getFluid() == InitBlocks.fluidCanolaOil && this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ + this.slots[2] = new ItemStack(InitItems.itemBucketCanolaOil); + this.slots[1].stackSize--; + if(this.slots[1].stackSize == 0) this.slots[1] = null; + this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + } + } + + if(this.currentProcessTime > 0) this.storage.extractEnergy(energyUsedPerTick, false); + + if(this.tank.getFluidAmount() > 0){ + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UP, this.tank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, this.tank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, this.tank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, this.tank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, this.tank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.WEST, this.tank); + } + } + } + + public boolean isCanola(int slot){ + return this.slots[slot] != null && this.slots[slot].getItem() == InitItems.itemMisc && this.slots[slot].getItemDamage() == TheMiscItems.CANOLA.ordinal(); + } + + @SideOnly(Side.CLIENT) + public int getTankScaled(int i){ + return this.tank.getFluidAmount() * i / this.tank.getCapacity(); + } + + @SideOnly(Side.CLIENT) + public int getProcessScaled(int i){ + return this.currentProcessTime * i / this.maxTimeProcessing; + } + + @SideOnly(Side.CLIENT) + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + compound.setInteger("ProcessTime", this.currentProcessTime); + this.storage.writeToNBT(compound); + this.tank.writeToNBT(compound); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + this.currentProcessTime = compound.getInteger("ProcessTime"); + this.storage.readFromNBT(compound); + this.tank.readFromNBT(compound); + super.readFromNBT(compound); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()) || (i == 1 && stack.getItem() == Items.bucket); + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return slot == 2 && stack.getItem() == InitItems.itemBucketCanolaOil; + } + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return true; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill){ + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){ + if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName())) return this.tank.drain(resource.amount, doDrain); + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain){ + return this.tank.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid){ + return false; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid){ + return true; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from){ + return new FluidTankInfo[]{this.tank.getInfo()}; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoalGenerator.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoalGenerator.java new file mode 100644 index 000000000..f89c9156a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoalGenerator.java @@ -0,0 +1,117 @@ +package ellpeck.actuallyadditions.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityCoalGenerator extends TileEntityInventoryBase implements IEnergyReceiver{ + + public EnergyStorage storage = new EnergyStorage(30000, energyProducedPerTick+50); + + public static int energyProducedPerTick = ConfigIntValues.COAL_GEN_ENERGY_PRODUCED.getValue(); + + public int maxBurnTime; + public int currentBurnTime; + + public TileEntityCoalGenerator(){ + super(1, "coalGenerator"); + } + + @Override + @SuppressWarnings("unchecked") + public void updateEntity(){ + if(!worldObj.isRemote){ + + if(this.currentBurnTime > 0){ + this.currentBurnTime--; + this.storage.receiveEnergy(energyProducedPerTick, false); + } + + if(energyProducedPerTick <= this.getMaxEnergyStored(ForgeDirection.UNKNOWN)-this.getEnergyStored(ForgeDirection.UNKNOWN)){ + if(this.currentBurnTime <= 0 && this.slots[0] != null && TileEntityFurnace.getItemBurnTime(this.slots[0]) > 0){ + this.maxBurnTime = TileEntityFurnace.getItemBurnTime(this.slots[0]); + this.currentBurnTime = this.maxBurnTime; + this.slots[0].stackSize--; + if(this.slots[0].stackSize == 0) this.slots[0] = this.slots[0].getItem().getContainerItem(this.slots[0]); + } + } + + if(this.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UP, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.WEST, storage); + } + } + } + + @SideOnly(Side.CLIENT) + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); + } + + @SideOnly(Side.CLIENT) + public int getBurningScaled(int i){ + return this.currentBurnTime * i / this.maxBurnTime; + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + compound.setInteger("BurnTime", this.currentBurnTime); + compound.setInteger("MaxBurnTime", this.maxBurnTime); + this.storage.writeToNBT(compound); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + this.currentBurnTime = compound.getInteger("BurnTime"); + this.maxBurnTime = compound.getInteger("MaxBurnTime"); + this.storage.readFromNBT(compound); + super.readFromNBT(compound); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return TileEntityFurnace.getItemBurnTime(stack) > 0; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return false; + } + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return true; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java new file mode 100644 index 000000000..b9c15ad2e --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java @@ -0,0 +1,153 @@ +package ellpeck.actuallyadditions.tile; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.*; + +public class TileEntityFermentingBarrel extends TileEntityInventoryBase implements IFluidHandler{ + + public FluidTank canolaTank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank oilTank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + + public int currentProcessTime; + public int maxTimeProcessing = ConfigIntValues.BARREL_PROCESSING_TIME.getValue(); + + public int mBProducedPerCycle = ConfigIntValues.BARREL_MB_PRODUCED.getValue(); + + public TileEntityFermentingBarrel(){ + super(4, "fermentingBarrel"); + } + + @Override + @SuppressWarnings("unchecked") + public void updateEntity(){ + if(!worldObj.isRemote){ + if(this.canolaTank.getFluidAmount() >= this.mBProducedPerCycle && this.mBProducedPerCycle <= this.oilTank.getCapacity()-this.oilTank.getFluidAmount()){ + this.currentProcessTime++; + if(this.currentProcessTime >= this.maxTimeProcessing){ + this.currentProcessTime = 0; + + this.oilTank.fill(new FluidStack(InitBlocks.fluidOil, mBProducedPerCycle), true); + this.canolaTank.drain(mBProducedPerCycle, true); + this.markDirty(); + } + } + else this.currentProcessTime = 0; + + if(this.slots[0] != null && this.slots[0].getItem() == InitItems.itemBucketCanolaOil && (this.slots[1] == null || (this.slots[1].stackSize < this.slots[1].getMaxStackSize()))){ + if(FluidContainerRegistry.BUCKET_VOLUME <= this.canolaTank.getCapacity()-this.canolaTank.getFluidAmount()){ + if(this.slots[1] == null) this.slots[1] = new ItemStack(Items.bucket); + else this.slots[1].stackSize++; + this.slots[0] = null; + this.canolaTank.fill(new FluidStack(InitBlocks.fluidCanolaOil, FluidContainerRegistry.BUCKET_VOLUME), true); + } + } + + if(this.slots[2] != null && this.slots[2].getItem() == Items.bucket && this.slots[3] == null){ + if(this.oilTank.getFluidAmount() > 0 && this.oilTank.getFluid().getFluid() == InitBlocks.fluidOil && this.oilTank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ + this.slots[3] = new ItemStack(InitItems.itemBucketOil); + this.slots[2].stackSize--; + if(this.slots[2].stackSize == 0) this.slots[2] = null; + this.oilTank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + } + } + + if(this.oilTank.getFluidAmount() > 0){ + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UP, this.oilTank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, this.oilTank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, this.oilTank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, this.oilTank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, this.oilTank); + WorldUtil.pushFluid(worldObj, xCoord, yCoord, zCoord, ForgeDirection.WEST, this.oilTank); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + compound.setInteger("ProcessTime", this.currentProcessTime); + this.canolaTank.writeToNBT(compound); + NBTTagCompound tag = new NBTTagCompound(); + this.oilTank.writeToNBT(tag); + compound.setTag("OilTank", tag); + super.writeToNBT(compound); + } + + @SideOnly(Side.CLIENT) + public int getProcessScaled(int i){ + return this.currentProcessTime * i / this.maxTimeProcessing; + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + this.currentProcessTime = compound.getInteger("ProcessTime"); + this.canolaTank.readFromNBT(compound); + this.oilTank.readFromNBT((NBTTagCompound)compound.getTag("OilTank")); + super.readFromNBT(compound); + } + + @SideOnly(Side.CLIENT) + public int getOilTankScaled(int i){ + return this.oilTank.getFluidAmount() * i / this.oilTank.getCapacity(); + } + + @SideOnly(Side.CLIENT) + public int getCanolaTankScaled(int i){ + return this.canolaTank.getFluidAmount() * i / this.canolaTank.getCapacity(); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return (i == 0 && stack.getItem() == InitItems.itemBucketCanolaOil) || (i == 2 && stack.getItem() == Items.bucket); + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return (slot == 1 && stack.getItem() == Items.bucket) || (slot == 3 && stack.getItem() == InitItems.itemBucketOil); + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill){ + if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName())) return this.canolaTank.fill(resource, doFill); + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){ + if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidOil.getName())) return this.oilTank.drain(resource.amount, doDrain); + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain){ + return this.oilTank.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid){ + return fluid == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName()); + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid){ + return fluid == FluidRegistry.getFluid(InitBlocks.fluidOil.getName()); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from){ + return new FluidTankInfo[]{this.canolaTank.getInfo(), this.oilTank.getInfo()}; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceDouble.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceDouble.java index efdfb5363..05bd9747c 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceDouble.java @@ -1,24 +1,25 @@ package ellpeck.actuallyadditions.tile; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.config.values.ConfigIntValues; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPowerAcceptor{ +public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IEnergyReceiver{ - public static final int SLOT_COAL = 0; - public static final int SLOT_INPUT_1 = 1; - public static final int SLOT_OUTPUT_1 = 2; - public static final int SLOT_INPUT_2 = 3; - public static final int SLOT_OUTPUT_2 = 4; + public static final int SLOT_INPUT_1 = 0; + public static final int SLOT_OUTPUT_1 = 1; + public static final int SLOT_INPUT_2 = 2; + public static final int SLOT_OUTPUT_2 = 3; - public int coalTime; - public int coalTimeLeft; + public EnergyStorage storage = new EnergyStorage(30000, energyUsePerTick+30); + + public static int energyUsePerTick = ConfigIntValues.FURNACE_ENERGY_USED.getValue(); public int maxBurnTime = this.getStandardSpeed(); @@ -26,33 +27,18 @@ public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPo public int secondSmeltTime; public TileEntityFurnaceDouble(){ - super(6, "furnaceDouble"); - this.speedUpgradeSlot = 5; + super(4, "furnaceDouble"); } @Override @SuppressWarnings("unchecked") public void updateEntity(){ if(!worldObj.isRemote){ - this.speedUp(); - - boolean theFlag = this.coalTimeLeft > 0; - - if(this.coalTimeLeft > 0) this.coalTimeLeft -= 1+this.burnTimeAmplifier; boolean canSmeltOnFirst = this.canSmeltOn(SLOT_INPUT_1, SLOT_OUTPUT_1); boolean canSmeltOnSecond = this.canSmeltOn(SLOT_INPUT_2, SLOT_OUTPUT_2); - if((canSmeltOnFirst || canSmeltOnSecond) && this.coalTimeLeft <= 0 && this.slots[SLOT_COAL] != null){ - this.coalTime = TileEntityFurnace.getItemBurnTime(this.slots[SLOT_COAL]); - this.coalTimeLeft = this.coalTime; - if(this.coalTime > 0){ - this.slots[SLOT_COAL].stackSize--; - if(this.slots[SLOT_COAL].stackSize <= 0) this.slots[SLOT_COAL] = this.slots[SLOT_COAL].getItem().getContainerItem(this.slots[SLOT_COAL]); - } - } - - if(this.coalTimeLeft > 0){ + if(this.storage.getEnergyStored() >= energyUsePerTick){ if(canSmeltOnFirst){ this.firstSmeltTime++; if(this.firstSmeltTime >= maxBurnTime){ @@ -74,14 +60,9 @@ public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPo else{ this.firstSmeltTime = 0; this.secondSmeltTime = 0; - this.coalTime = 0; } - if(theFlag != this.coalTimeLeft > 0){ - int metaBefore = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, (this.coalTimeLeft > 0 ? metaBefore+4 : metaBefore-4), 2); - this.markDirty(); - } + if(this.firstSmeltTime > 0 || this.secondSmeltTime > 0) this.storage.extractEnergy(energyUsePerTick, false); } } @@ -112,24 +93,22 @@ public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPo @Override public void writeToNBT(NBTTagCompound compound){ super.writeToNBT(compound); - compound.setInteger("CoalTime", this.coalTime); - compound.setInteger("CoalTimeLeft", this.coalTimeLeft); compound.setInteger("FirstSmeltTime", this.firstSmeltTime); compound.setInteger("SecondSmeltTime", this.secondSmeltTime); + this.storage.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); - this.coalTime = compound.getInteger("CoalTime"); - this.coalTimeLeft = compound.getInteger("CoalTimeLeft"); this.firstSmeltTime = compound.getInteger("FirstSmeltTime"); this.secondSmeltTime = compound.getInteger("SecondSmeltTime"); + this.storage.readFromNBT(compound); } @SideOnly(Side.CLIENT) - public int getCoalTimeToScale(int i){ - return this.coalTimeLeft * i / this.coalTime; + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); } @SideOnly(Side.CLIENT) @@ -144,7 +123,7 @@ public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPo @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == SLOT_COAL && TileEntityFurnace.getItemBurnTime(stack) > 0 || (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && FurnaceRecipes.smelting().getSmeltingResult(stack) != null; + return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && FurnaceRecipes.smelting().getSmeltingResult(stack) != null; } @Override @@ -154,37 +133,30 @@ public class TileEntityFurnaceDouble extends TileEntityUpgradable implements IPo @Override public boolean canExtractItem(int slot, ItemStack stack, int side){ - return slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2 || (slot == SLOT_COAL && stack.getItem() == Items.bucket); + return slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2; } - @Override - public void setBlockMetadataToOn(){ - int metaBefore = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, metaBefore+4, 2); - } - - @Override - public void setPower(int power){ - this.coalTimeLeft = power; - } - - @Override - public void setItemPower(int power){ - this.coalTime = power; - } - - @Override - public int getItemPower(){ - return this.coalTime; - } - - @Override public int getStandardSpeed(){ return ConfigIntValues.FURNACE_DOUBLE_SMELT_TIME.getValue(); } @Override - public void setSpeed(int newSpeed){ - this.maxBurnTime = newSpeed; + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return true; } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceSolar.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceSolar.java index 3b8fa4d91..236cd7dc7 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFurnaceSolar.java @@ -1,44 +1,67 @@ package ellpeck.actuallyadditions.tile; -public class TileEntityFurnaceSolar extends TileEntityBase{ +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyProvider; +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyProvider{ @Override - public boolean canUpdate(){ - return false; + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate){ + return this.storage.extractEnergy(maxExtract, simulate); } - //TODO Reimplement + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } - /*@Override + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return from != ForgeDirection.UP; + } + + public EnergyStorage storage = new EnergyStorage(30000, energyProducedPerTick+50); + + public static int energyProducedPerTick = ConfigIntValues.FURNACE_SOLAR_ENERGY_PRODUCED.getValue(); + + @Override public void updateEntity(){ if(!worldObj.isRemote){ if(worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord) && worldObj.isDaytime()){ - TileEntity tileBelow = WorldUtil.getTileEntityFromSide(1, worldObj, xCoord, yCoord, zCoord); + if(energyProducedPerTick <= this.getMaxEnergyStored(ForgeDirection.UNKNOWN)-this.getEnergyStored(ForgeDirection.UNKNOWN)){ + this.storage.receiveEnergy(energyProducedPerTick, false); + this.markDirty(); + } + } - givePowerTo(tileBelow); + if(this.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.WEST, storage); } } } - public static void givePowerTo(TileEntity tile){ - if(tile instanceof IPowerAcceptor){ - IPowerAcceptor acceptor = (IPowerAcceptor)tile; - int coalTimeBefore = acceptor.getItemPower(); - acceptor.setItemPower(42); - acceptor.setPower(42); - if(coalTimeBefore == 0){ - acceptor.setBlockMetadataToOn(); - } - return; - } - if(tile instanceof TileEntityFurnace){ - TileEntityFurnace furnaceBelow = (TileEntityFurnace)tile; - int burnTimeBefore = furnaceBelow.furnaceBurnTime; - furnaceBelow.furnaceBurnTime = 42; - furnaceBelow.currentItemBurnTime = 42; - if(burnTimeBefore == 0){ - BlockFurnace.updateFurnaceBlockState(true, tile.getWorldObj(), furnaceBelow.xCoord, furnaceBelow.yCoord, furnaceBelow.zCoord); - } - } - }*/ + @Override + public void writeToNBT(NBTTagCompound compound){ + this.storage.writeToNBT(compound); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + this.storage.readFromNBT(compound); + super.readFromNBT(compound); + } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java index e9057a3cf..a62170ef3 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java @@ -1,39 +1,60 @@ package ellpeck.actuallyadditions.tile; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.config.values.ConfigIntValues; import ellpeck.actuallyadditions.recipe.GrinderRecipes; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; import java.util.Random; -public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcceptor{ +public class TileEntityGrinder extends TileEntityInventoryBase implements IEnergyReceiver{ + + public EnergyStorage storage = new EnergyStorage(60000, energyUsePerTick+20); + + @Override + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return true; + } public static class TileEntityGrinderDouble extends TileEntityGrinder{ public TileEntityGrinderDouble(){ - super(8, "grinderDouble"); + super(6, "grinderDouble"); this.isDouble = true; this.maxCrushTime = this.getStandardSpeed(); - this.speedUpgradeSlot = 7; + energyUsePerTick = ConfigIntValues.GRINDER_DOUBLE_ENERGY_USED.getValue(); } } - public static final int SLOT_COAL = 0; - public static final int SLOT_INPUT_1 = 1; - public static final int SLOT_OUTPUT_1_1 = 2; - public static final int SLOT_OUTPUT_1_2 = 3; - public static final int SLOT_INPUT_2 = 4; - public static final int SLOT_OUTPUT_2_1 = 5; - public static final int SLOT_OUTPUT_2_2 = 6; + public static final int SLOT_INPUT_1 = 0; + public static final int SLOT_OUTPUT_1_1 = 1; + public static final int SLOT_OUTPUT_1_2 = 2; + public static final int SLOT_INPUT_2 = 3; + public static final int SLOT_OUTPUT_2_1 = 4; + public static final int SLOT_OUTPUT_2_2 = 5; - public int coalTime; - public int coalTimeLeft; + public static int energyUsePerTick; public int maxCrushTime; @@ -47,10 +68,10 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc } public TileEntityGrinder(){ - super(5, "grinder"); + super(3, "grinder"); this.isDouble = false; this.maxCrushTime = this.getStandardSpeed(); - this.speedUpgradeSlot = 4; + energyUsePerTick = ConfigIntValues.GRINDER_ENERGY_USED.getValue(); } @Override @@ -66,26 +87,11 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc ((TileEntityGrinderDouble)worldObj.getTileEntity(xCoord, yCoord, zCoord)).slots = theSlots.clone(); } - this.speedUp(); - - boolean theFlag = this.coalTimeLeft > 0; - - if(this.coalTimeLeft > 0) this.coalTimeLeft -= 1+this.burnTimeAmplifier; - boolean canCrushOnFirst = this.canCrushOn(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2); boolean canCrushOnSecond = false; if(this.isDouble) canCrushOnSecond = this.canCrushOn(SLOT_INPUT_2, SLOT_OUTPUT_2_1, SLOT_OUTPUT_2_2); - if((canCrushOnFirst || canCrushOnSecond) && this.coalTimeLeft <= 0 && this.slots[SLOT_COAL] != null){ - this.coalTime = TileEntityFurnace.getItemBurnTime(this.slots[SLOT_COAL]); - this.coalTimeLeft = this.coalTime; - if(this.coalTime > 0){ - this.slots[SLOT_COAL].stackSize--; - if(this.slots[SLOT_COAL].stackSize <= 0) this.slots[SLOT_COAL] = this.slots[SLOT_COAL].getItem().getContainerItem(this.slots[SLOT_COAL]); - } - } - - if(this.coalTimeLeft > 0){ + if(this.storage.getEnergyStored() >= energyUsePerTick){ if(canCrushOnFirst){ this.firstCrushTime++; if(this.firstCrushTime >= maxCrushTime){ @@ -109,13 +115,9 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc else{ this.firstCrushTime = 0; this.secondCrushTime = 0; - this.coalTime = 0; } - if(theFlag != this.coalTimeLeft > 0){ - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, (this.coalTimeLeft > 0 ? 1 : 0), 2); - this.markDirty(); - } + if(this.firstCrushTime > 0 || this.secondCrushTime > 0) this.storage.extractEnergy(energyUsePerTick, false); } } @@ -155,25 +157,23 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc @Override public void writeToNBT(NBTTagCompound compound){ - compound.setInteger("CoalTime", this.coalTime); - compound.setInteger("CoalTimeLeft", this.coalTimeLeft); compound.setInteger("FirstCrushTime", this.firstCrushTime); compound.setInteger("SecondCrushTime", this.secondCrushTime); + this.storage.writeToNBT(compound); super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound){ - this.coalTime = compound.getInteger("CoalTime"); - this.coalTimeLeft = compound.getInteger("CoalTimeLeft"); this.firstCrushTime = compound.getInteger("FirstCrushTime"); this.secondCrushTime = compound.getInteger("SecondCrushTime"); + this.storage.readFromNBT(compound); super.readFromNBT(compound); } @SideOnly(Side.CLIENT) - public int getCoalTimeToScale(int i){ - return this.coalTimeLeft * i / this.coalTime; + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); } @SideOnly(Side.CLIENT) @@ -188,7 +188,7 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == SLOT_COAL && TileEntityFurnace.getItemBurnTime(stack) > 0 || (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && GrinderRecipes.instance().getOutput(stack, false) != null; + return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && GrinderRecipes.instance().getOutput(stack, false) != null; } @Override @@ -198,36 +198,10 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc @Override public boolean canExtractItem(int slot, ItemStack stack, int side){ - return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2 || (slot == SLOT_COAL && stack.getItem() == Items.bucket); + return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2; } - @Override - public void setBlockMetadataToOn(){ - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 1, 2); - } - - @Override - public void setPower(int power){ - this.coalTimeLeft = power; - } - - @Override - public void setItemPower(int power){ - this.coalTime = power; - } - - @Override - public int getItemPower(){ - return this.coalTime; - } - - @Override public int getStandardSpeed(){ return this.isDouble ? ConfigIntValues.GRINDER_DOUBLE_CRUSH_TIME.getValue() : ConfigIntValues.GRINDER_CRUSH_TIME.getValue(); } - - @Override - public void setSpeed(int newSpeed){ - this.maxCrushTime = newSpeed; - } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityHeatCollector.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityHeatCollector.java index eca959c5b..de73f6523 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityHeatCollector.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityHeatCollector.java @@ -1,45 +1,75 @@ package ellpeck.actuallyadditions.tile; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyProvider; import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatCollector extends TileEntityBase{ +import java.util.ArrayList; +import java.util.Random; + +public class TileEntityHeatCollector extends TileEntityBase implements IEnergyProvider{ private int randomChance = ConfigIntValues.HEAT_COLLECTOR_LAVA_CHANCE.getValue(); private int blocksNeeded = ConfigIntValues.HEAT_COLLECTOR_BLOCKS.getValue(); + public EnergyStorage storage = new EnergyStorage(30000, energyProducedPerTick+50); + + public static int energyProducedPerTick = ConfigIntValues.HEAT_COLLECTOR_ENERGY_PRODUCED.getValue(); + @Override - public boolean canUpdate(){ - return false; - } - - //TODO Reimplement - - /*@Override public void updateEntity(){ if(!worldObj.isRemote){ ArrayList blocksAround = new ArrayList(); - - for(int i = 1; i <= 5; i++){ - ChunkCoordinates coords = WorldUtil.getCoordsFromSide(i, xCoord, yCoord, zCoord); - if(coords != null){ - Block block = worldObj.getBlock(coords.posX, coords.posY, coords.posZ); - if(block != null && block.getMaterial() == Material.lava && worldObj.getBlockMetadata(coords.posX, coords.posY, coords.posZ) == 0){ - blocksAround.add(i); + if(energyProducedPerTick <= this.getMaxEnergyStored(ForgeDirection.UNKNOWN)-this.getEnergyStored(ForgeDirection.UNKNOWN)){ + for(int i = 1; i <= 5; i++){ + ChunkCoordinates coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionByRotatingSide(i), xCoord, yCoord, zCoord); + if(coords != null){ + Block block = worldObj.getBlock(coords.posX, coords.posY, coords.posZ); + if(block != null && block.getMaterial() == Material.lava && worldObj.getBlockMetadata(coords.posX, coords.posY, coords.posZ) == 0){ + blocksAround.add(i); + } } } - } - if(blocksAround.size() >= blocksNeeded){ - TileEntity tileAbove = WorldUtil.getTileEntityFromSide(0, worldObj, xCoord, yCoord, zCoord); + if(blocksAround.size() >= blocksNeeded){ + this.storage.receiveEnergy(energyProducedPerTick, false); + this.markDirty(); - TileEntityFurnaceSolar.givePowerTo(tileAbove); - - Random rand = new Random(); - if(rand.nextInt(randomChance) == 0){ - int randomSide = blocksAround.get(rand.nextInt(blocksAround.size())); - WorldUtil.breakBlockAtSide(randomSide, worldObj, xCoord, yCoord, zCoord); + Random rand = new Random(); + if(rand.nextInt(randomChance) == 0){ + int randomSide = blocksAround.get(rand.nextInt(blocksAround.size())); + WorldUtil.breakBlockAtSide(WorldUtil.getDirectionByRotatingSide(randomSide), worldObj, xCoord, yCoord, zCoord); + } + } + if(this.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UP, this.storage); } } } - }*/ + } + + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate){ + return this.storage.extractEnergy(maxExtract, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return from == ForgeDirection.UP; + } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java index 0ba5b40b2..ad52e7157 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java @@ -20,27 +20,31 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public void writeToNBT(NBTTagCompound compound){ super.writeToNBT(compound); - NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ - if (slots[currentIndex] != null){ - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); - slots[currentIndex].writeToNBT(tagCompound); - tagList.appendTag(tagCompound); + if(this.slots.length > 0){ + NBTTagList tagList = new NBTTagList(); + for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + if(slots[currentIndex] != null){ + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte)currentIndex); + slots[currentIndex].writeToNBT(tagCompound); + tagList.appendTag(tagCompound); + } } + compound.setTag("Items", tagList); } - compound.setTag("Items", tagList); } @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); - NBTTagList tagList = compound.getTagList("Items", 10); - for (int i = 0; i < tagList.tagCount(); i++){ - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if (slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); + if(this.slots.length > 0){ + NBTTagList tagList = compound.getTagList("Items", 10); + for(int i = 0; i < tagList.tagCount(); i++){ + NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); + byte slotIndex = tagCompound.getByte("Slot"); + if(slotIndex >= 0 && slotIndex < slots.length){ + slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); + } } } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityItemRepairer.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityItemRepairer.java index d7873dd15..b51bee937 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityItemRepairer.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityItemRepairer.java @@ -1,68 +1,53 @@ package ellpeck.actuallyadditions.tile; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.config.values.ConfigIntValues; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityItemRepairer extends TileEntityInventoryBase implements IPowerAcceptor{ +public class TileEntityItemRepairer extends TileEntityInventoryBase implements IEnergyReceiver{ - public static final int SLOT_COAL = 0; - public static final int SLOT_INPUT = 1; - public static final int SLOT_OUTPUT = 2; + public static final int SLOT_INPUT = 0; + public static final int SLOT_OUTPUT = 1; + + public EnergyStorage storage = new EnergyStorage(300000, energyUsePerTick+100); private final int speedSlowdown = ConfigIntValues.REPAIRER_SPEED_SLOWDOWN.getValue(); - public int coalTime; - public int coalTimeLeft; + public static int energyUsePerTick = ConfigIntValues.REPAIRER_ENERGY_USED.getValue(); public int nextRepairTick; public TileEntityItemRepairer(){ - super(3, "repairer"); + super(2, "repairer"); } @Override @SuppressWarnings("unchecked") public void updateEntity(){ if(!worldObj.isRemote){ - boolean theFlag = this.coalTimeLeft > 0; - - if(this.coalTimeLeft > 0) this.coalTimeLeft--; - - if(this.slots[SLOT_OUTPUT] == null){ - if(canBeRepaired(this.slots[SLOT_INPUT])){ - if(this.slots[SLOT_INPUT].getItemDamage() <= 0){ - this.slots[SLOT_OUTPUT] = this.slots[SLOT_INPUT].copy(); - this.slots[SLOT_INPUT] = null; - } - else{ - if(this.coalTimeLeft <= 0){ - this.coalTime = TileEntityFurnace.getItemBurnTime(this.slots[SLOT_COAL]); - this.coalTimeLeft = this.coalTime; - if(this.coalTime > 0){ - this.slots[SLOT_COAL].stackSize--; - if(this.slots[SLOT_COAL].stackSize <= 0) this.slots[SLOT_COAL] = this.slots[SLOT_COAL].getItem().getContainerItem(this.slots[SLOT_COAL]); - } - } - if(this.coalTimeLeft > 0){ - this.nextRepairTick++; - if(this.nextRepairTick >= this.speedSlowdown){ - this.nextRepairTick = 0; - this.slots[SLOT_INPUT].setItemDamage(this.slots[SLOT_INPUT].getItemDamage() - 1); - } + if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(this.slots[SLOT_INPUT])){ + if(this.slots[SLOT_INPUT].getItemDamage() <= 0){ + this.slots[SLOT_OUTPUT] = this.slots[SLOT_INPUT].copy(); + this.slots[SLOT_INPUT] = null; + this.nextRepairTick = 0; + } + else{ + if(this.storage.getEnergyStored() >= energyUsePerTick){ + this.nextRepairTick++; + this.storage.extractEnergy(energyUsePerTick, false); + if(this.nextRepairTick >= this.speedSlowdown){ + this.nextRepairTick = 0; + this.slots[SLOT_INPUT].setItemDamage(this.slots[SLOT_INPUT].getItemDamage() - 1); } } } } - - if(theFlag != this.coalTimeLeft > 0){ - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, (this.coalTimeLeft > 0 ? 1 : 0), 2); - this.markDirty(); - } + else this.nextRepairTick = 0; } } @@ -72,23 +57,21 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I @Override public void writeToNBT(NBTTagCompound compound){ - compound.setInteger("CoalTime", this.coalTime); - compound.setInteger("CoalTimeLeft", this.coalTimeLeft); compound.setInteger("NextRepairTick", this.nextRepairTick); super.writeToNBT(compound); + this.storage.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound){ - this.coalTime = compound.getInteger("CoalTime"); - this.coalTimeLeft = compound.getInteger("CoalTimeLeft"); this.nextRepairTick = compound.getInteger("NextRepairTick"); super.readFromNBT(compound); + this.storage.readFromNBT(compound); } @SideOnly(Side.CLIENT) - public int getCoalTimeToScale(int i){ - return this.coalTimeLeft * i / this.coalTime; + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); } @SideOnly(Side.CLIENT) @@ -101,7 +84,7 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == SLOT_COAL && TileEntityFurnace.getItemBurnTime(stack) > 0 || i == SLOT_INPUT; + return i == SLOT_INPUT; } @Override @@ -111,26 +94,26 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I @Override public boolean canExtractItem(int slot, ItemStack stack, int side){ - return slot == SLOT_OUTPUT || (slot == SLOT_COAL && stack.getItem() == Items.bucket); + return slot == SLOT_OUTPUT; } @Override - public void setBlockMetadataToOn(){ - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 1, 2); + public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); } @Override - public void setPower(int power){ - this.coalTimeLeft = power; + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); } @Override - public void setItemPower(int power){ - this.coalTime = power; + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); } @Override - public int getItemPower(){ - return this.coalTime; + public boolean canConnectEnergy(ForgeDirection from){ + return true; } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java new file mode 100644 index 000000000..ddb04823a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java @@ -0,0 +1,168 @@ +package ellpeck.actuallyadditions.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyProvider; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.*; + +public class TileEntityOilGenerator extends TileEntityInventoryBase implements IEnergyProvider, IFluidHandler{ + + public EnergyStorage storage = new EnergyStorage(30000, energyProducedPerTick+50); + + public FluidTank tank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + + public static int energyProducedPerTick = 76; + + public int fuelUsedPerBurnup = 50; + public int maxBurnTime = 100; + + public int currentBurnTime; + + public TileEntityOilGenerator(){ + super(2, "oilGenerator"); + } + + @Override + @SuppressWarnings("unchecked") + public void updateEntity(){ + if(!worldObj.isRemote){ + + if(this.currentBurnTime > 0){ + this.currentBurnTime--; + this.storage.receiveEnergy(energyProducedPerTick, false); + } + + if(energyProducedPerTick <= this.getMaxEnergyStored(ForgeDirection.UNKNOWN)-this.getEnergyStored(ForgeDirection.UNKNOWN)){ + if(this.currentBurnTime <= 0 && this.tank.getFluidAmount() >= this.fuelUsedPerBurnup){ + this.currentBurnTime = this.maxBurnTime; + this.tank.drain(this.fuelUsedPerBurnup, true); + } + } + + if(this.slots[0] != null && this.slots[0].getItem() == InitItems.itemBucketOil && (this.slots[1] == null || (this.slots[1].stackSize < this.slots[1].getMaxStackSize()))){ + if(FluidContainerRegistry.BUCKET_VOLUME <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + if(this.slots[1] == null) this.slots[1] = new ItemStack(Items.bucket); + else this.slots[1].stackSize++; + this.slots[0] = null; + this.tank.fill(new FluidStack(InitBlocks.fluidOil, FluidContainerRegistry.BUCKET_VOLUME), true); + } + } + + if(this.getEnergyStored(ForgeDirection.UNKNOWN) > 0){ + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UP, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.DOWN, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.EAST, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.SOUTH, storage); + WorldUtil.pushEnergy(worldObj, xCoord, yCoord, zCoord, ForgeDirection.WEST, storage); + } + } + } + + @SideOnly(Side.CLIENT) + public int getEnergyScaled(int i){ + return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN); + } + + @SideOnly(Side.CLIENT) + public int getTankScaled(int i){ + return this.tank.getFluidAmount() * i / this.tank.getCapacity(); + } + + @SideOnly(Side.CLIENT) + public int getBurningScaled(int i){ + return this.currentBurnTime * i / this.maxBurnTime; + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + compound.setInteger("BurnTime", this.currentBurnTime); + compound.setInteger("MaxBurnTime", this.maxBurnTime); + this.storage.writeToNBT(compound); + this.tank.writeToNBT(compound); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + this.currentBurnTime = compound.getInteger("BurnTime"); + this.maxBurnTime = compound.getInteger("MaxBurnTime"); + this.storage.readFromNBT(compound); + this.tank.readFromNBT(compound); + super.readFromNBT(compound); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return stack.getItem() == InitItems.itemBucketOil && i == 0; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return slot == 1; + } + + @Override + public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate){ + return this.storage.extractEnergy(maxExtract, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(ForgeDirection from){ + return true; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill){ + if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidOil.getName())) return this.tank.fill(resource, doFill); + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){ + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain){ + return null; + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid){ + return fluid == FluidRegistry.getFluid(InitBlocks.fluidOil.getName()); + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid){ + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from){ + return new FluidTankInfo[]{this.tank.getInfo()}; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java new file mode 100644 index 000000000..69a778842 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java @@ -0,0 +1,164 @@ +package ellpeck.actuallyadditions.tile; + +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class TileEntityPhantomface extends TileEntityInventoryBase{ + + public TileEntity boundTile; + + public final int range = ConfigIntValues.PHANTOMFACE_RANGE.getValue(); + + public TileEntityPhantomface(){ + super(0, "phantomface"); + } + + @Override + public void updateEntity(){ + if(!this.hasBoundTile()) this.boundTile = null; + + if(this.tempX > 0 || this.tempY > 0 || this.tempZ > 0){ + this.boundTile = tempWorld.getTileEntity(tempX, tempY, tempZ); + this.tempX = 0; + this.tempY = 0; + this.tempZ = 0; + this.tempWorld = null; + } + } + + public boolean isBoundTileInRage(){ + if(this.hasBoundTile() && this.boundTile.getWorldObj().loadedTileEntityList.contains(this.boundTile)){ + int xDif = this.boundTile.xCoord-this.xCoord; + int yDif = this.boundTile.yCoord-this.yCoord; + int zDif = this.boundTile.zCoord-this.zCoord; + + if(xDif >= -this.range && xDif <= this.range){ + if(yDif >= -this.range && yDif <= this.range){ + if(zDif >= -this.range && zDif <= this.range) return true; + } + } + } + return false; + } + + public boolean hasBoundTile(){ + return this.boundTile != null && boundTile.getWorldObj().getTileEntity(boundTile.xCoord, boundTile.yCoord, boundTile.zCoord) != null && boundTile.getWorldObj() == this.getWorldObj() && boundTile instanceof IInventory; + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); + if(this.hasBoundTile()){ + compound.setInteger("XCoordOfTileStored", boundTile.xCoord); + compound.setInteger("YCoordOfTileStored", boundTile.yCoord); + compound.setInteger("ZCoordOfTileStored", boundTile.zCoord); + compound.setInteger("WorldOfTileStored", boundTile.getWorldObj().provider.dimensionId); + } + } + + private int tempX; + private int tempY; + private int tempZ; + private World tempWorld; + + @Override + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + this.tempX = compound.getInteger("XCoordOfTileStored"); + this.tempY = compound.getInteger("YCoordOfTileStored"); + this.tempZ = compound.getInteger("ZCoordOfTileStored"); + this.tempWorld = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored")); + } + + public IInventory getInventory(){ + TileEntity tile = boundTile.getWorldObj().getTileEntity(boundTile.xCoord, boundTile.yCoord, boundTile.zCoord); + if(tile != null && tile instanceof IInventory){ + this.markDirty(); + return (IInventory)tile; + } + return null; + } + + public ISidedInventory getSided(){ + return this.getInventory() instanceof ISidedInventory ? (ISidedInventory)this.getInventory() : null; + } + + @Override + public int getInventoryStackLimit(){ + return this.isBoundTileInRage() ? this.getInventory().getInventoryStackLimit() : 0; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player){ + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return this.isBoundTileInRage() && this.getInventory().isItemValidForSlot(i, stack); + } + + @Override + public ItemStack getStackInSlotOnClosing(int i){ + return this.isBoundTileInRage() ? this.getInventory().getStackInSlotOnClosing(i) : null; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + if(this.isBoundTileInRage()) this.getInventory().setInventorySlotContents(i, stack); + } + + @Override + public int getSizeInventory(){ + return this.isBoundTileInRage() ? this.getInventory().getSizeInventory() : 0; + } + + @Override + public ItemStack getStackInSlot(int i){ + return this.isBoundTileInRage() ? this.getInventory().getStackInSlot(i) : null; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + return this.isBoundTileInRage() ? this.getInventory().decrStackSize(i, j) : null; + } + + @Override + public String getInventoryName(){ + return this.name; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side){ + if(this.isBoundTileInRage()){ + if(this.getSided() != null){ + return this.getSided().getAccessibleSlotsFromSide(side); + } + else{ + int[] theInt = new int[this.getSizeInventory()]; + for(int i = 0; i < theInt.length; i++){ + theInt[i] = i; + } + return theInt; + } + } + return new int[0]; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isBoundTileInRage() && (this.getSided() == null || this.getSided().canInsertItem(slot, stack, side)); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return this.isBoundTileInRage() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityUpgradable.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityUpgradable.java deleted file mode 100644 index 864678128..000000000 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityUpgradable.java +++ /dev/null @@ -1,40 +0,0 @@ -package ellpeck.actuallyadditions.tile; - -import ellpeck.actuallyadditions.items.ItemUpgrade; -import net.minecraft.item.ItemStack; - -public abstract class TileEntityUpgradable extends TileEntityInventoryBase{ - - public int speedUpgradeSlot; - public int burnTimeAmplifier; - - public TileEntityUpgradable(int slots, String name){ - super(slots, name); - } - - public void speedUp(){ - ItemStack stack = this.slots[speedUpgradeSlot]; - if(stack != null && stack.getItem() instanceof ItemUpgrade && ((ItemUpgrade)stack.getItem()).type == ItemUpgrade.UpgradeType.SPEED){ - int newSpeed = this.getStandardSpeed() - 10*stack.stackSize; - this.speedUpBurnTimeBySpeed(stack.stackSize); - if(newSpeed < 5) newSpeed = 5; - this.setSpeed(newSpeed); - } - else{ - this.speedUpBurnTimeBySpeed(0); - this.setSpeed(this.getStandardSpeed()); - } - } - - public void speedUpBurnTimeBySpeed(int upgradeAmount){ - this.burnTimeAmplifier = upgradeAmount*2; - } - - public int getStandardSpeed(){ - return 0; - } - - public void setSpeed(int newSpeed){ - - } -} diff --git a/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java b/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java index 4528b0a01..4db32fb3f 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java @@ -12,10 +12,8 @@ public class AssetUtil{ return new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/gui/" + file + ".png"); } - public static void displayNameAndInventoryString(FontRenderer font, int xSize, int yPositionOfInventoryText, int yPositionOfMachineText, String machineName){ + public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, String machineName){ String localMachineName = StatCollector.translateToLocal(machineName + ".name"); - String inventoryName = StatCollector.translateToLocal("container.inventory"); font.drawString(localMachineName, xSize/2 - font.getStringWidth(localMachineName)/2, yPositionOfMachineText, StringUtil.DECIMAL_COLOR_WHITE); - font.drawString(inventoryName, xSize/2 - font.getStringWidth(inventoryName)/2, yPositionOfInventoryText-1, StringUtil.DECIMAL_COLOR_GRAY_TEXT); } } diff --git a/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java b/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java index 86fc9e727..6a90f1b2c 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java @@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.util; import cpw.mods.fml.common.registry.GameRegistry; import ellpeck.actuallyadditions.creative.CreativeTab; +import ellpeck.actuallyadditions.waila.WailaDataProvider; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -26,6 +27,20 @@ public class BlockUtil{ else list.add(ItemUtil.shiftForInfo()); } + @SuppressWarnings("unchecked") + public static void addPowerUsageInfo(List list, int usage){ + if(KeyUtil.isShiftPressed()){ + list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".uses.desc") + " " + usage + " RF/t"); + } + } + + @SuppressWarnings("unchecked") + public static void addPowerProductionInfo(List list, int produce){ + if(KeyUtil.isShiftPressed()){ + list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".produces.desc") + " " + produce + " RF/t"); + } + } + public static void register(Block block, Class itemBlock, Enum[] list){ block.setCreativeTab(CreativeTab.instance); block.setBlockName(createUnlocalizedName(block)); @@ -33,13 +48,21 @@ public class BlockUtil{ for(Enum current : list){ if(!((INameableItem)current).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)current).getOredictName(), new ItemStack(block, 1, current.ordinal())); } + + WailaDataProvider.registerList.add(block); } public static void register(Block block, Class itemBlock){ - block.setCreativeTab(CreativeTab.instance); + register(block, itemBlock, true); + } + + public static void register(Block block, Class itemBlock, boolean addTab){ + if(addTab) block.setCreativeTab(CreativeTab.instance); block.setBlockName(createUnlocalizedName(block)); GameRegistry.registerBlock(block, itemBlock, ((INameableItem)block).getName()); if(!((INameableItem)block).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)block).getOredictName(), new ItemStack(block, 1, Util.WILDCARD)); + + WailaDataProvider.registerList.add(block); } } diff --git a/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java index cfe583ece..b38dd0e51 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java @@ -28,7 +28,11 @@ public class ItemUtil{ } public static void register(Item item){ - item.setCreativeTab(CreativeTab.instance); + register(item, true); + } + + public static void register(Item item, boolean addTab){ + if(addTab) item.setCreativeTab(CreativeTab.instance); item.setUnlocalizedName(createUnlocalizedName(item)); GameRegistry.registerItem(item, ((INameableItem)item).getName()); if(!((INameableItem)item).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)item).getOredictName(), new ItemStack(item, 1, Util.WILDCARD)); diff --git a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java index 6b79d8d70..d62825ba3 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java @@ -5,7 +5,7 @@ import org.apache.logging.log4j.Logger; public class ModUtil{ - public static final String VERSION = "1.7.10-0.0.4.4"; + public static final String VERSION = "1.7.10-0.0.5.0"; public static final String MOD_ID = "ActuallyAdditions"; public static final String NAME = "Actually Additions"; diff --git a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java index 05966627c..fa205740f 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java @@ -1,5 +1,7 @@ package ellpeck.actuallyadditions.util; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -7,6 +9,8 @@ import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidHandler; public class WorldUtil{ @@ -22,6 +26,28 @@ public class WorldUtil{ } } + public static void pushEnergy(World world, int x, int y, int z, ForgeDirection side, EnergyStorage storage){ + TileEntity tile = getTileEntityFromSide(side, world, x, y, z); + if(tile != null && tile instanceof IEnergyReceiver){ + if(((IEnergyReceiver)tile).canConnectEnergy(side.getOpposite())){ + int receive = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), Math.min(storage.getMaxExtract(), storage.getEnergyStored()), false); + storage.extractEnergy(receive, false); + world.markBlockForUpdate(x+side.offsetX, y+side.offsetY, z+side.offsetZ); + } + } + } + + public static void pushFluid(World world, int x, int y, int z, ForgeDirection side, FluidTank tank){ + TileEntity tile = getTileEntityFromSide(side, world, x, y, z); + if(tile != null && tank.getFluid() != null && tile instanceof IFluidHandler){ + if(((IFluidHandler)tile).canFill(side.getOpposite(), tank.getFluid().getFluid())){ + int receive = ((IFluidHandler)tile).fill(side.getOpposite(), tank.getFluid(), true); + tank.drain(receive, true); + world.markBlockForUpdate(x+side.offsetX, y+side.offsetY, z+side.offsetZ); + } + } + } + public static boolean placeBlockAtSide(ForgeDirection side, World world, int x, int y, int z, ItemStack stack){ if(world instanceof WorldServer){ if(side != ForgeDirection.UNKNOWN){ diff --git a/src/main/java/ellpeck/actuallyadditions/waila/WailaDataProvider.java b/src/main/java/ellpeck/actuallyadditions/waila/WailaDataProvider.java index d2dd090fa..da5b44583 100644 --- a/src/main/java/ellpeck/actuallyadditions/waila/WailaDataProvider.java +++ b/src/main/java/ellpeck/actuallyadditions/waila/WailaDataProvider.java @@ -1,18 +1,24 @@ package ellpeck.actuallyadditions.waila; +import ellpeck.actuallyadditions.blocks.BlockCompost; +import ellpeck.actuallyadditions.config.values.ConfigBoolValues; import ellpeck.actuallyadditions.tile.TileEntityCompost; +import ellpeck.actuallyadditions.util.INameableItem; import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.Util; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; import mcp.mobius.waila.api.IWailaDataProvider; import mcp.mobius.waila.api.IWailaRegistrar; +import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import java.util.ArrayList; import java.util.List; @SuppressWarnings("unused") @@ -20,20 +26,29 @@ public class WailaDataProvider implements IWailaDataProvider{ private final String WAILA_PRE_LANG = "gui." + ModUtil.MOD_ID_LOWER + ".waila."; + public static final ArrayList registerList = new ArrayList(); + @Override public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config){ return null; } @Override - public List getWailaHead(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ + public List getWailaHead(ItemStack stack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ + + if(ConfigBoolValues.DO_WAILA_INFO.isEnabled()){ + if(accessor.getBlock() instanceof INameableItem){ + Item.getItemFromBlock(accessor.getBlock()).addInformation(stack, accessor.getPlayer(), currentTip, true); + } + } + return currentTip; } @Override - public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ + public List getWailaBody(ItemStack stack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ - if (accessor.getTileEntity() instanceof TileEntityCompost){ + if(accessor.getTileEntity() instanceof TileEntityCompost){ this.compostBody(accessor, currentTip); } @@ -45,21 +60,21 @@ public class WailaDataProvider implements IWailaDataProvider{ TileEntityCompost tile = (TileEntityCompost)accessor.getTileEntity(); if(meta <= tile.amountNeededToConvert){ - String tip1 = StatCollector.translateToLocal(WAILA_PRE_LANG + "compostAmount" + ".name") + ": " + meta + "/" + tile.amountNeededToConvert; + String tip1 = StatCollector.translateToLocal(WAILA_PRE_LANG + "compostAmount.name") + ": " + meta + "/" + tile.amountNeededToConvert; currentTip.add(tip1); if(meta == tile.amountNeededToConvert){ - currentTip.add(StatCollector.translateToLocal(WAILA_PRE_LANG + "compostConverting" + ".name")); + currentTip.add(StatCollector.translateToLocal(WAILA_PRE_LANG + "compostConverting.name")); } } if(meta == tile.amountNeededToConvert+1){ - currentTip.add(StatCollector.translateToLocal(WAILA_PRE_LANG + "compostDone" + ".name")); + currentTip.add(StatCollector.translateToLocal(WAILA_PRE_LANG + "compostDone.name")); } } @Override - public List getWailaTail(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ + public List getWailaTail(ItemStack stack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config){ return currentTip; } @@ -71,6 +86,12 @@ public class WailaDataProvider implements IWailaDataProvider{ public static void register(IWailaRegistrar registrar){ Util.logInfo("Initializing Waila Plugin..."); - registrar.registerBodyProvider(new WailaDataProvider(), TileEntityCompost.class); + WailaDataProvider provider = new WailaDataProvider(); + + registrar.registerBodyProvider(provider, BlockCompost.class); + + for(Block theBlock : registerList){ + registrar.registerHeadProvider(provider, theBlock.getClass()); + } } } \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 445f97aa0..825a39cef 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -1,6 +1,9 @@ itemGroup.actuallyadditions=Actually Additions achievement.page.actuallyadditions=Actually Additions +fluid.oil=Oil +fluid.canolaOil=Canola Oil + tile.actuallyadditions.blockCompost.name=Compost tile.actuallyadditions.blockMiscOreBlackQuartz.name=Black Quartz Ore tile.actuallyadditions.blockMiscBlackQuartz.name=Block of Black Quartz @@ -12,14 +15,77 @@ tile.actuallyadditions.blockGrinder.name=Crusher tile.actuallyadditions.blockGrinderDouble.name=Double Crusher tile.actuallyadditions.blockFurnaceDouble.name=Double Furnace tile.actuallyadditions.blockFishingNet.name=Fishing Net -tile.actuallyadditions.blockFurnaceSolar.name=Solar Panel [TEMPORARILY UNIMPLEMENTED] -tile.actuallyadditions.blockHeatCollector.name=Heat Collector [TEMPORARILY UNIMPLEMENTED] +tile.actuallyadditions.blockFurnaceSolar.name=Solar Panel +tile.actuallyadditions.blockHeatCollector.name=Heat Collector tile.actuallyadditions.blockItemRepairer.name=Item Repairer tile.actuallyadditions.blockMiscWoodCasing.name=Wood Casing tile.actuallyadditions.blockMiscStoneCasing.name=Stone Casing tile.actuallyadditions.blockGreenhouseGlass.name=Greenhouse Glass +tile.actuallyadditions.blockRice.name=Rice Plant +tooltip.actuallyadditions.blockRice.desc=It's growing... kind of.. +item.actuallyadditions.itemFoodRice.name=Rice +tooltip.actuallyadditions.itemFoodRice.desc=Used to make all kinds of useful stuff! +item.actuallyadditions.itemMiscRiceDough.name=Rice Dough +tooltip.actuallyadditions.itemMiscRiceDough.desc=It's Dough, but made from Rice +item.actuallyadditions.itemFoodRiceBread.name=Rice Bread +tooltip.actuallyadditions.itemFoodRiceBread.desc=It's like Bread, but ricey! +item.actuallyadditions.itemRiceSeed.name=Rice Seeds +tooltip.actuallyadditions.itemRiceSeed.desc=Grows on Water! + +item.actuallyadditions.itemMiscTinyCoal.name=Tiny Coal +tooltip.actuallyadditions.itemMiscTinyCoal.desc=Crafted from Coal, smelts one Item +item.actuallyadditions.itemMiscTinyCharcoal.name=Tiny Charcoal +tooltip.actuallyadditions.itemMiscTinyCharcoal.desc=Crafted from Charcoal, smelts one Item +tile.actuallyadditions.blockMiscCharcoal.name=Block of Charcoal +tooltip.actuallyadditions.blockMiscCharcoal.desc=Crafted from Charcoal +item.actuallyadditions.itemMiscRiceSlime.name=Rice Slimeball +tooltip.actuallyadditions.itemMiscRiceSlime.desc=It's sticky... and smells kinda good... + +tile.actuallyadditions.blockCoalGenerator.name=Coal Generator +tooltip.actuallyadditions.blockCoalGenerator.desc=Produces Energy from Coal and other flammable Materials + +item.actuallyadditions.itemBucketCanolaOil.name=Canola Oil Bucket +tooltip.actuallyadditions.itemBucketCanolaOil.desc=A Bucket filled with Canola Oil +item.actuallyadditions.itemBucketOil.name=Oil Bucket +tooltip.actuallyadditions.itemBucketOil.desc=Made in a Fermenting Barrel from Canola Oil + +tile.actuallyadditions.blockPhantomface.name=Phantomface +tooltip.actuallyadditions.blockPhantomface.desc.1=Like a Pipe, only Wireless! Connect me with a Phantom Connector! +tooltip.actuallyadditions.blockPhantomface.desc.2=Input things into me to input into connected Blocks! + +item.actuallyadditions.itemPhantomConnector.name=Phantom Connector +tooltip.actuallyadditions.itemPhantomConnector.desc.1=Connects a Phantom Face to any Inventory Block! +tooltip.actuallyadditions.itemPhantomConnector.desc.2=Press Control to clear the stored TileEntity + +item.actuallyadditions.itemCanolaSeed.name=Canola Seeds +tooltip.actuallyadditions.itemCanolaSeed.desc=Grows on Grass! +item.actuallyadditions.itemMiscCanola.name=Canola +tooltip.actuallyadditions.itemMiscCanola.desc=Used to make Oil in a Canola Press +tile.actuallyadditions.blockCanola.name=Canola Plant +tooltip.actuallyadditions.blockCanola.desc=It's growing... kind of.. + +item.actuallyadditions.itemResonantRice.name=Resonant Rice +tooltip.actuallyadditions.itemResonantRice.desc=Don't know what it does... maybe if you right-click it? +tooltip.actuallyadditions.itemResonantRice.uncraftable.desc=Uncraftable because there's no Mod installed that adds Enderium :( + +tile.actuallyadditions.blockCanolaPress.name=Canola Press +tooltip.actuallyadditions.blockCanolaPress.desc=Makes Canola Oil from Canola +tile.actuallyadditions.blockFermentingBarrel.name=Fermenting Barrel +tooltip.actuallyadditions.blockFermentingBarrel.desc=Ferments Canola Oil made in a Press to Canola + +tile.actuallyadditions.blockCanolaOil.name=Canola Oil +tooltip.actuallyadditions.blockCanolaOil.desc=Oil made from Canola +tile.actuallyadditions.blockOil.name=Oil +tooltip.actuallyadditions.blockOil.desc=Can be used to power Machines + +tile.actuallyadditions.blockMiscEnderpearl.name=Block of Enderpearl +tooltip.actuallyadditions.blockMiscEnderpearl.desc=It's a Block. Made of Pearls. Wow. + +tile.actuallyadditions.blockOilGenerator.name=Oil Generator +tooltip.actuallyadditions.blockOilGenerator.desc=Generates Power from Oil + tile.actuallyadditions.blockBreaker.name=Auto-Breaker tile.actuallyadditions.blockPlacer.name=Auto-Placer tile.actuallyadditions.blockDropper.name=Automatic Precision Dropper @@ -42,6 +108,16 @@ tile.actuallyadditions.blockInputter.add.13.name=Efficient Sucking Dilettant tile.actuallyadditions.blockInputter.add.14.name=Extreme Sand Digger tile.actuallyadditions.blockInputter.add.15.name=MISSINGNO +tooltip.actuallyadditions.phantom.connected.desc= +tooltip.actuallyadditions.phantom.stored.desc= +tooltip.actuallyadditions.phantom.noBound.desc=The Connector has no Information stored! +tooltip.actuallyadditions.phantom.notInventory.desc=This Block is not an Inventory! +tooltip.actuallyadditions.phantom.inWorld.desc=In World +tooltip.actuallyadditions.phantom.boundTo.desc=Bound to +tooltip.actuallyadditions.phantom.connectedBlock.desc=Connected to TileEntity at %s, %s, %s +tooltip.actuallyadditions.phantom.connectedNoRange.desc=Connected to TileEntity at %s, %s, %s but it is not in Range! +tooltip.actuallyadditions.phantom.notConnected.desc=This Phantomface isn't connected to anything! + item.actuallyadditions.itemMiscMashedFood.name=Mashed Food item.actuallyadditions.itemFertilizer.name=Fertilizer item.actuallyadditions.itemMiscDough.name=Dough @@ -164,8 +240,8 @@ tooltip.actuallyadditions.blockInputter.desc.5=-Side to Output to and Input from tooltip.actuallyadditions.blockInputter.desc.6=-Slot in the other Inventory to Output to and Input from tooltip.actuallyadditions.blockInputterAdvanced.desc=Has an Input and Output Filter! tooltip.actuallyadditions.blockFishingNet.desc=Catches Fish automatically when placed above Water -tooltip.actuallyadditions.blockFurnaceSolar.desc=Powers Actually Additions Machines and Vanilla Furnaces below it in Daylight -tooltip.actuallyadditions.blockHeatCollector.desc.1=Powers Actually Additions Machines and Vanilla Furnaces above it +tooltip.actuallyadditions.blockFurnaceSolar.desc=Produces RF in Daylight +tooltip.actuallyadditions.blockHeatCollector.desc.1=Produces RF tooltip.actuallyadditions.blockHeatCollector.desc.2=Needs a bunch of Lava around it tooltip.actuallyadditions.blockHeatCollector.desc.3=Occasionally steals the Lava. Watch out! tooltip.actuallyadditions.blockItemRepairer.desc=Repairs Tools and Armor automatically @@ -265,6 +341,9 @@ info.actuallyadditions.gui.slot=Slot info.actuallyadditions.gui.put=Put info.actuallyadditions.gui.pull=Pull +tooltip.actuallyadditions.uses.desc=Uses +tooltip.actuallyadditions.produces.desc=Produces + effect.actuallyadditions.speed.name=Speed effect.actuallyadditions.haste.name=Haste effect.actuallyadditions.strength.name=Strength @@ -289,8 +368,14 @@ container.actuallyadditions.placer.name=Placer container.actuallyadditions.breaker.name=Breaker container.actuallyadditions.dropper.name=Precision Dropper container.actuallyadditions.crafting.name=Crafting Table On A Stick +container.actuallyadditions.canolaPress.name=Canola Press +container.actuallyadditions.fermentingBarrel.name=Fermenting Barrel +container.actuallyadditions.coalGenerator.name=Coal Generator +container.actuallyadditions.oilGenerator.name=Oil Generator container.actuallyadditions.nei.crushing.name=Crusher +container.actuallyadditions.nei.ballOfHair.name=Ball Of Hair Usage +container.actuallyadditions.nei.compost.name=Compost gui.actuallyadditions.waila.compostAmount.name=Amount of Mashed Food gui.actuallyadditions.waila.compostDone.name=Done! @@ -300,7 +385,6 @@ info.actuallyadditions.update.generic.desc=[{"text":"There is an "},{"text":"Upd info.actuallyadditions.update.versionComp.desc=[{"text":"You have Version "},{"text":"%s","color":"dark_red","italic":"false"},{"text":", the newest one is ","color":"none","italic":"false"},{"text":"%s","color":"dark_green","underlined":"false"},{"text":"!","color":"none","underlined":"false"}] info.actuallyadditions.update.download.desc=[{"text":"Download the newest Version "},{"text":"here! (Click me!)","color":"dark_green","underlined":"true","clickEvent":{"action":"open_url","value":"%s"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Click here to open your Browser and download the newest Version!"}]}}}] info.actuallyadditions.update.failed.desc=[{"text":"The Update Check for "},{"text":"Actually Additions ","color":"dark_green","bold":"true"},{"text":"failed! Check your Internet Connection and the Logs for more Info!","color":"none"}] -info.actuallyadditions.update.new.desc=Important Changes: achievement.actuallyadditions.pickUpSolidXP=Hard and Rich and Stuff achievement.actuallyadditions.pickUpSolidXP.desc=Pick up some Solidified Experience diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png new file mode 100644 index 000000000..f5982ec90 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png.mcmeta b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png.mcmeta new file mode 100644 index 000000000..4f0718ac9 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png new file mode 100644 index 000000000..59569bc40 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png.mcmeta b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png.mcmeta new file mode 100644 index 000000000..0645f48c6 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPress.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPress.png new file mode 100644 index 000000000..75726f79d Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPress.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPressTop.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPressTop.png new file mode 100644 index 000000000..17144ed53 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPressTop.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage1.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage1.png new file mode 100644 index 000000000..e0b7862a0 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage1.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage2.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage2.png new file mode 100644 index 000000000..67c69118c Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage2.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage3.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage3.png new file mode 100644 index 000000000..d51b6a7af Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage3.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage4.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage4.png new file mode 100644 index 000000000..163a73904 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage4.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGenerator.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGenerator.png new file mode 100644 index 000000000..d551df5e2 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGenerator.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGeneratorTop.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGeneratorTop.png new file mode 100644 index 000000000..deef7462d Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGeneratorTop.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrel.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrel.png new file mode 100644 index 000000000..c0340d0e5 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrel.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrelTop.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrelTop.png new file mode 100644 index 000000000..494a7328d Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrelTop.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscCharcoal.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscCharcoal.png new file mode 100644 index 000000000..31c637308 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscCharcoal.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscEnderpearl.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscEnderpearl.png new file mode 100644 index 000000000..87acd223d Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscEnderpearl.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png new file mode 100644 index 000000000..d40c0a2f2 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png.mcmeta b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png.mcmeta new file mode 100644 index 000000000..4f0718ac9 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGenerator.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGenerator.png new file mode 100644 index 000000000..120541747 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGenerator.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGeneratorTop.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGeneratorTop.png new file mode 100644 index 000000000..5d560937e Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGeneratorTop.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png new file mode 100644 index 000000000..b00fa0ae4 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png.mcmeta b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png.mcmeta new file mode 100644 index 000000000..0645f48c6 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomface.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomface.png new file mode 100644 index 000000000..b11ae7923 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomface.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage1.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage1.png new file mode 100644 index 000000000..aa5312e75 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage1.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage2.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage2.png new file mode 100644 index 000000000..42f2c1181 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage2.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage3.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage3.png new file mode 100644 index 000000000..da2986f47 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage3.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage4.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage4.png new file mode 100644 index 000000000..69085b702 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage4.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage5.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage5.png new file mode 100644 index 000000000..16b768803 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage5.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage6.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage6.png new file mode 100644 index 000000000..e75005dd1 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage6.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png new file mode 100644 index 000000000..4472e793f Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiCoalGenerator.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiCoalGenerator.png new file mode 100644 index 000000000..7ee6c1cbc Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiCoalGenerator.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png new file mode 100644 index 000000000..68f68415e Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiFurnaceDouble.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiFurnaceDouble.png index c4a1f8bf9..8be70aae5 100644 Binary files a/src/main/resources/assets/actuallyadditions/textures/gui/guiFurnaceDouble.png and b/src/main/resources/assets/actuallyadditions/textures/gui/guiFurnaceDouble.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinder.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinder.png index 9c94d97ff..b29234c8f 100644 Binary files a/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinder.png and b/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinder.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinderDouble.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinderDouble.png index 608242579..49ca77cda 100644 Binary files a/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinderDouble.png and b/src/main/resources/assets/actuallyadditions/textures/gui/guiGrinderDouble.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiNEICompost.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiNEICompost.png new file mode 100644 index 000000000..8f0ac2bc8 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiNEICompost.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiNEIHairyBall.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiNEIHairyBall.png new file mode 100644 index 000000000..8f0ac2bc8 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiNEIHairyBall.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png new file mode 100644 index 000000000..2b139a7f5 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png index a00a0fc68..6ba8a00ae 100644 Binary files a/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png and b/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemBucketCanolaOil.png b/src/main/resources/assets/actuallyadditions/textures/items/itemBucketCanolaOil.png new file mode 100644 index 000000000..2e06004fe Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemBucketCanolaOil.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemBucketOil.png b/src/main/resources/assets/actuallyadditions/textures/items/itemBucketOil.png new file mode 100644 index 000000000..487a0e50f Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemBucketOil.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemCanolaSeed.png b/src/main/resources/assets/actuallyadditions/textures/items/itemCanolaSeed.png new file mode 100644 index 000000000..f5773f314 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemCanolaSeed.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRice.png b/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRice.png new file mode 100644 index 000000000..e927b9e97 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRice.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRiceBread.png b/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRiceBread.png new file mode 100644 index 000000000..fdbf09679 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemFoodRiceBread.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscCanola.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscCanola.png new file mode 100644 index 000000000..b02f176eb Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscCanola.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceDough.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceDough.png new file mode 100644 index 000000000..d25613c55 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceDough.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceSlime.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceSlime.png new file mode 100644 index 000000000..63769bd18 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceSlime.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCharcoal.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCharcoal.png new file mode 100644 index 000000000..6d10d84c5 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCharcoal.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCoal.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCoal.png new file mode 100644 index 000000000..101113cff Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCoal.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemPhantomConnector.png b/src/main/resources/assets/actuallyadditions/textures/items/itemPhantomConnector.png new file mode 100644 index 000000000..dd07fae4f Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemPhantomConnector.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemResonantRice.png b/src/main/resources/assets/actuallyadditions/textures/items/itemResonantRice.png new file mode 100644 index 000000000..9c1dd1183 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemResonantRice.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemRiceSeed.png b/src/main/resources/assets/actuallyadditions/textures/items/itemRiceSeed.png new file mode 100644 index 000000000..2e13afcc4 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/itemRiceSeed.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index a5141932f..74d25c21b 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "ActuallyAdditions", "name": "Actually Additions", "description": "Actually Additions is a Mod that offers a bunch of things from Machines for Automation and tons of food to advanced Hopper Mechanisms and Effect Rings!", - "version": "0.0.4.4", + "version": "0.0.5.0", "mcversion": "1.7.10", "url": "https://github.com/Ellpeck/ActuallyAdditions", "updateUrl": "",