From 5863b0a0a48fe1c135f5d334e9225f4a8035b135 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 20 May 2015 22:39:43 +0200 Subject: [PATCH] Added tons of stuff! --- build.gradle | 2 +- src/main/java/cofh/api/CoFHAPIProps.java | 11 ++ .../java/cofh/api/energy/EnergyStorage.java | 158 ++++++++++++++++ .../cofh/api/energy/IEnergyConnection.java | 21 +++ .../cofh/api/energy/IEnergyContainerItem.java | 52 ++++++ .../java/cofh/api/energy/IEnergyHandler.java | 58 ++++++ .../java/cofh/api/energy/IEnergyProvider.java | 38 ++++ .../java/cofh/api/energy/IEnergyReceiver.java | 38 ++++ .../java/cofh/api/energy/IEnergyStorage.java | 46 +++++ .../cofh/api/energy/ItemEnergyContainer.java | 110 +++++++++++ .../cofh/api/energy/TileEnergyHandler.java | 65 +++++++ .../java/cofh/api/energy/package-info.java | 10 + src/main/java/cofh/api/package-info.java | 9 + .../actuallyadditions/ActuallyAdditions.java | 2 + .../ellpeck/actuallyadditions/PLANNED.txt | 39 +++- .../blocks/BlockCanolaPress.java | 112 +++++++++++ .../blocks/BlockCoalGenerator.java | 112 +++++++++++ .../blocks/BlockCompost.java | 3 + ...achine.java => BlockFermentingBarrel.java} | 78 ++++---- .../blocks/BlockFluidFlowing.java | 103 +++++++++++ .../blocks/BlockFurnaceDouble.java | 1 + .../blocks/BlockFurnaceSolar.java | 1 + .../blocks/BlockGrinder.java | 2 + .../blocks/BlockHeatCollector.java | 1 + .../blocks/BlockItemRepairer.java | 1 + .../blocks/BlockOilGenerator.java | 112 +++++++++++ .../blocks/BlockPhantomface.java | 112 +++++++++++ .../actuallyadditions/blocks/BlockPlant.java | 138 ++++++++++++++ .../actuallyadditions/blocks/FluidAA.java | 10 + .../actuallyadditions/blocks/InitBlocks.java | 51 +++++ .../blocks/metalists/TheMiscBlocks.java | 4 +- .../config/values/ConfigBoolValues.java | 6 +- .../config/values/ConfigCrafting.java | 15 +- .../config/values/ConfigIntValues.java | 38 +++- .../crafting/BlockCrafting.java | 72 +++++++- .../crafting/FoodCrafting.java | 5 + .../crafting/GrinderCrafting.java | 16 +- .../crafting/ItemCrafting.java | 57 ++++-- .../crafting/MiscCrafting.java | 6 + .../creative/CreativeTab.java | 18 +- .../event/BucketFillEvent.java | 31 ++++ .../actuallyadditions/event/InitEvents.java | 2 + .../event/WorldDecorationEvent.java | 63 +++++++ .../gen/JamVillagerTradeHandler.java | 18 +- .../inventory/ContainerCanolaPress.java | 127 +++++++++++++ .../inventory/ContainerCoalGenerator.java | 117 ++++++++++++ .../inventory/ContainerFermentingBarrel.java | 126 +++++++++++++ .../inventory/ContainerFurnaceDouble.java | 45 ++--- .../inventory/ContainerGrinder.java | 45 ++--- .../inventory/ContainerOilGenerator.java | 120 ++++++++++++ .../inventory/ContainerRepairer.java | 25 +-- .../inventory/GuiBreaker.java | 2 +- .../inventory/GuiCanolaPress.java | 75 ++++++++ .../inventory/GuiCoalGenerator.java | 64 +++++++ .../inventory/GuiCrafter.java | 2 +- .../inventory/GuiDropper.java | 2 +- .../inventory/GuiFeeder.java | 2 +- .../inventory/GuiFermentingBarrel.java | 75 ++++++++ .../inventory/GuiFurnaceDouble.java | 15 +- .../inventory/GuiGiantChest.java | 2 +- .../inventory/GuiGrinder.java | 15 +- .../inventory/GuiHandler.java | 32 +++- .../inventory/GuiInputter.java | 2 +- .../inventory/GuiOilGenerator.java | 74 ++++++++ .../inventory/GuiRepairer.java | 15 +- .../actuallyadditions/items/InitItems.java | 37 +++- .../{ItemUpgrade.java => ItemBucketAA.java} | 30 +-- .../items/ItemHairyBall.java | 1 + .../items/ItemPhantomConnector.java | 146 +++++++++++++++ .../items/ItemResonantRice.java | 62 +++++++ .../actuallyadditions/items/ItemSeed.java | 130 +++++++++++++ .../items/metalists/TheFoods.java | 4 +- .../items/metalists/TheJams.java | 12 +- .../items/metalists/TheMiscItems.java | 7 +- .../nei/CompostRecipeHandler.java | 109 +++++++++++ .../nei/CrusherRecipeHandler.java | 65 +------ .../nei/HairyBallRecipeHandler.java | 129 +++++++++++++ .../nei/NEIActuallyAdditionsConfig.java | 13 +- .../actuallyadditions/recipe/FuelHandler.java | 72 ++++++++ .../recipe/GrinderRecipes.java | 6 +- .../recipe/HairyBallHandler.java | 2 + .../tile/IPowerAcceptor.java | 12 -- .../tile/TileEntityBase.java | 5 + .../tile/TileEntityCanolaPress.java | 174 ++++++++++++++++++ .../tile/TileEntityCoalGenerator.java | 117 ++++++++++++ .../tile/TileEntityFermentingBarrel.java | 153 +++++++++++++++ .../tile/TileEntityFurnaceDouble.java | 102 ++++------ .../tile/TileEntityFurnaceSolar.java | 79 +++++--- .../tile/TileEntityGrinder.java | 116 +++++------- .../tile/TileEntityHeatCollector.java | 80 +++++--- .../tile/TileEntityInventoryBase.java | 32 ++-- .../tile/TileEntityItemRepairer.java | 93 ++++------ .../tile/TileEntityOilGenerator.java | 168 +++++++++++++++++ .../tile/TileEntityPhantomface.java | 164 +++++++++++++++++ .../tile/TileEntityUpgradable.java | 40 ---- .../actuallyadditions/util/AssetUtil.java | 4 +- .../actuallyadditions/util/BlockUtil.java | 25 ++- .../actuallyadditions/util/ItemUtil.java | 6 +- .../actuallyadditions/util/ModUtil.java | 2 +- .../actuallyadditions/util/WorldUtil.java | 26 +++ .../waila/WailaDataProvider.java | 37 +++- .../assets/actuallyadditions/lang/en_US.lang | 94 +++++++++- .../textures/blocks/blockCanolaOilFlowing.png | Bin 0 -> 10800 bytes .../blocks/blockCanolaOilFlowing.png.mcmeta | 3 + .../textures/blocks/blockCanolaOilStill.png | Bin 0 -> 10857 bytes .../blocks/blockCanolaOilStill.png.mcmeta | 5 + .../textures/blocks/blockCanolaPress.png | Bin 0 -> 883 bytes .../textures/blocks/blockCanolaPressTop.png | Bin 0 -> 921 bytes .../textures/blocks/blockCanolaStage1.png | Bin 0 -> 282 bytes .../textures/blocks/blockCanolaStage2.png | Bin 0 -> 279 bytes .../textures/blocks/blockCanolaStage3.png | Bin 0 -> 324 bytes .../textures/blocks/blockCanolaStage4.png | Bin 0 -> 358 bytes .../textures/blocks/blockCoalGenerator.png | Bin 0 -> 527 bytes .../textures/blocks/blockCoalGeneratorTop.png | Bin 0 -> 550 bytes .../textures/blocks/blockFermentingBarrel.png | Bin 0 -> 783 bytes .../blocks/blockFermentingBarrelTop.png | Bin 0 -> 707 bytes .../textures/blocks/blockMiscCharcoal.png | Bin 0 -> 484 bytes .../textures/blocks/blockMiscEnderpearl.png | Bin 0 -> 830 bytes .../textures/blocks/blockOilFlowing.png | Bin 0 -> 9946 bytes .../blocks/blockOilFlowing.png.mcmeta | 3 + .../textures/blocks/blockOilGenerator.png | Bin 0 -> 490 bytes .../textures/blocks/blockOilGeneratorTop.png | Bin 0 -> 537 bytes .../textures/blocks/blockOilStill.png | Bin 0 -> 9022 bytes .../textures/blocks/blockOilStill.png.mcmeta | 5 + .../textures/blocks/blockPhantomface.png | Bin 0 -> 798 bytes .../textures/blocks/blockRiceStage1.png | Bin 0 -> 258 bytes .../textures/blocks/blockRiceStage2.png | Bin 0 -> 316 bytes .../textures/blocks/blockRiceStage3.png | Bin 0 -> 385 bytes .../textures/blocks/blockRiceStage4.png | Bin 0 -> 478 bytes .../textures/blocks/blockRiceStage5.png | Bin 0 -> 621 bytes .../textures/blocks/blockRiceStage6.png | Bin 0 -> 637 bytes .../textures/gui/guiCanolaPress.png | Bin 0 -> 2441 bytes .../textures/gui/guiCoalGenerator.png | Bin 0 -> 2036 bytes .../textures/gui/guiFermentingBarrel.png | Bin 0 -> 2459 bytes .../textures/gui/guiFurnaceDouble.png | Bin 2337 -> 2190 bytes .../textures/gui/guiGrinder.png | Bin 2462 -> 2212 bytes .../textures/gui/guiGrinderDouble.png | Bin 2601 -> 2423 bytes .../textures/gui/guiNEICompost.png | Bin 0 -> 1786 bytes .../textures/gui/guiNEIHairyBall.png | Bin 0 -> 1786 bytes .../textures/gui/guiOilGenerator.png | Bin 0 -> 2121 bytes .../textures/gui/guiRepairer.png | Bin 2145 -> 2036 bytes .../textures/items/itemBucketCanolaOil.png | Bin 0 -> 339 bytes .../textures/items/itemBucketOil.png | Bin 0 -> 338 bytes .../textures/items/itemCanolaSeed.png | Bin 0 -> 258 bytes .../textures/items/itemFoodRice.png | Bin 0 -> 512 bytes .../textures/items/itemFoodRiceBread.png | Bin 0 -> 347 bytes .../textures/items/itemMiscCanola.png | Bin 0 -> 428 bytes .../textures/items/itemMiscRiceDough.png | Bin 0 -> 363 bytes .../textures/items/itemMiscRiceSlime.png | Bin 0 -> 340 bytes .../textures/items/itemMiscTinyCharcoal.png | Bin 0 -> 368 bytes .../textures/items/itemMiscTinyCoal.png | Bin 0 -> 331 bytes .../textures/items/itemPhantomConnector.png | Bin 0 -> 330 bytes .../textures/items/itemResonantRice.png | Bin 0 -> 553 bytes .../textures/items/itemRiceSeed.png | Bin 0 -> 283 bytes src/main/resources/mcmod.info | 2 +- 155 files changed, 4573 insertions(+), 628 deletions(-) create mode 100644 src/main/java/cofh/api/CoFHAPIProps.java create mode 100644 src/main/java/cofh/api/energy/EnergyStorage.java create mode 100644 src/main/java/cofh/api/energy/IEnergyConnection.java create mode 100644 src/main/java/cofh/api/energy/IEnergyContainerItem.java create mode 100644 src/main/java/cofh/api/energy/IEnergyHandler.java create mode 100644 src/main/java/cofh/api/energy/IEnergyProvider.java create mode 100644 src/main/java/cofh/api/energy/IEnergyReceiver.java create mode 100644 src/main/java/cofh/api/energy/IEnergyStorage.java create mode 100644 src/main/java/cofh/api/energy/ItemEnergyContainer.java create mode 100644 src/main/java/cofh/api/energy/TileEnergyHandler.java create mode 100644 src/main/java/cofh/api/energy/package-info.java create mode 100644 src/main/java/cofh/api/package-info.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockCanolaPress.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockCoalGenerator.java rename src/main/java/ellpeck/actuallyadditions/blocks/{BlockCoffeeMachine.java => BlockFermentingBarrel.java} (66%) create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockFluidFlowing.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockOilGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockPlant.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/FluidAA.java create mode 100644 src/main/java/ellpeck/actuallyadditions/event/BucketFillEvent.java create mode 100644 src/main/java/ellpeck/actuallyadditions/event/WorldDecorationEvent.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/ContainerCanolaPress.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/ContainerCoalGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/ContainerFermentingBarrel.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/ContainerOilGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/GuiCanolaPress.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/GuiCoalGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/GuiFermentingBarrel.java create mode 100644 src/main/java/ellpeck/actuallyadditions/inventory/GuiOilGenerator.java rename src/main/java/ellpeck/actuallyadditions/items/{ItemUpgrade.java => ItemBucketAA.java} (71%) create mode 100644 src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/ItemResonantRice.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/ItemSeed.java create mode 100644 src/main/java/ellpeck/actuallyadditions/nei/CompostRecipeHandler.java create mode 100644 src/main/java/ellpeck/actuallyadditions/nei/HairyBallRecipeHandler.java create mode 100644 src/main/java/ellpeck/actuallyadditions/recipe/FuelHandler.java delete mode 100644 src/main/java/ellpeck/actuallyadditions/tile/IPowerAcceptor.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityCoalGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java delete mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityUpgradable.java create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilFlowing.png.mcmeta create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaOilStill.png.mcmeta create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPress.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaPressTop.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage1.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage2.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage3.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCanolaStage4.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGenerator.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockCoalGeneratorTop.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrel.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockFermentingBarrelTop.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscCharcoal.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockMiscEnderpearl.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilFlowing.png.mcmeta create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGenerator.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilGeneratorTop.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockOilStill.png.mcmeta create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomface.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage1.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage2.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage3.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage4.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage5.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockRiceStage6.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiCoalGenerator.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiNEICompost.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiNEIHairyBall.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemBucketCanolaOil.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemBucketOil.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemCanolaSeed.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemFoodRice.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemFoodRiceBread.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscCanola.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceDough.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscRiceSlime.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCharcoal.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscTinyCoal.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemPhantomConnector.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemResonantRice.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemRiceSeed.png 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 0000000000000000000000000000000000000000..f5982ec906794f34c9b4a6ee5f45edaa0643aa20 GIT binary patch literal 10800 zcmYkidpy(q|3ALX9Oe*4D4JmoIiT$wg!RDB!ED|_Xljnqk-qb z+%Yyp5QqzY@B{80@n-^yBA!Opo|o?5_Vl^w;RtfSdB@FD+0D@td0JUTSJ~3Mc7eDEVAOF+^;%}8Q~q3PVf*LL+IG`vBWY)McXU(F?*3Rb-(N-7Y3}yj*xgIOIZD^wOrNs9&-QT7qX+QKhqk2wOMN>#UFE$g-RUW26x~O= zvf|#$)qTyn+YR76*1phh`snnt4IlZQXUDpq-3r;L+8o(i3D{eG%WAar;l{k~P6GRm ziS_HSpJzHdw=%YV`_*n%k9jRu@1FZ*NfE{iwzr@mt>U*PxoUNHs>fJY-{L!`rUF({ zl>LQ;VTmzEAX*q?B}hwmr~ZEPkyqBOPQ%}tR9P!pVooOO18?98z5eJBqiJk!eN_|M znKm{rPFdW~2^({aOcfRlLn@=5A@(*K`h-E!OZPz7ta7+Yt{u~Df3tv>J3jm^$8VZ~ zc-`9Q46$BJSsJFDpjCNCxK8WwpN)XQ05^mB&?DMMvZ3H*8%n$MKt|DTd)5q|8kuy% z)u6Ft?#t{s>M&wDC;sG5u|>F6UASt>*f4p!_;*=* zJ1N{-LC5_ZvzO&vHexd)g^_^RG@lMsn0qK(w@UA3G5iD442b2X6r|7HrKVjd=!Q^S z1H=c=%RU4UTX0*GqI6*3_)(sEK|z-wN%Tt{bP|+}f2}s`hNz%v^jn@#X-quQhTof&6-4*3Cw1XM^vzo=$aG9-y3^QL^i2DgCEm6v6s1H#RC#49xrK(DoPf$OVGhh##zk&_7lU` zE7buM1y^A?YCndCyfc0T#NcVPL2ug#r|B`6$rc_sNL0@WSRU0RTI0;{&nCVZc`ZKF zd3i&l_^5$Yt$~sO9o@^(t4o<;szax5Kfhvzq#N1BSaP}V;TI)DGOB&qfZcS&tK()2 zc4?;WtcKSf)M>Xjw|AO5PdVK~5zHe2QVblcqtN9|WJIB$@+^+tjJt!4ygD?kP622A zd@=Cz)AG@0siZAVtB7DQ&RH@S8aU`b(Dx($4Mc$MksXzU%5+h{)N<$I-)L z2N#~PHV2nYs%F{V;y%6n@U-b?&%#i8qh$T1Gq)SX;NNbmDV(w!Ym9qleg5|8xz*eC zsHK+;DS7tk9qK0HT$^vzaN6Z`Qm4lQ2e_|(bl{&s4)xv#*=XWI>U~(d?jJ~5{L2naVoGZmE+iClDlG?J59&dLvso;BRoreVUnvPFFhzJdwtu<4q@_Mv=wqrh(_Y4;Xo@h)@c z-AAXxVnOh!thPh%j5iBzCi@#335BtGBfvR3C8?;d9k5pq zO07p5qreq-&j^B@0L0i$NVUc6AGQdqB?ag|lK52xMoXh!?6{C*$vn zL@N7wA7brtgm1W+ULMEljX|#p=w6@k+`7Eo?xdw^k|C9gKW{rzZmm_&2eprDIhXV)nA-9!P^2+e zq#Y)=rJ%wbvduB;uEy+;BUl#o|)im~J z4t5hQp-7?}_|6y70!z;P37No^JXZ01cG9LLj~DLiiWKFt>Re?2|AS8GdB)A?kqiKr zUDwKOBoXkzlh+oF^mI1F)rS^3+NUbP&LS6uUqn7%~)70N{XW)QM?Sxg`QOU%Tg+f5v% zJzec;0U#vkqh?=l=OxG;IOZ*vlw3u;v{ALl_JXc7Tk_^fvTX+3;gC*WkMo*i76<20 zYModdz0!3YW^e-XhoU#@dxki{Mj^&wX^zDrK2n`K3S>x#Z2mwFVdKQj$+oTJi^!cCPZj8kgQN^3&7LtTf95HLD?3_wvcBb-a zB>#G!kwIWXYRI18cLu{g&Aldw84<`=r02+u~d~) z$Fk#_UwCTE6lE@`Hiytf-El=(4-}?k0LW#tFOU&PgT5Y&n!zn_nzhU~`@#2`8$2q13q;F6tL7f#HxgEur+d8`A6sSbOGl(ai{xnkT9IUehC7p(VLXzaZ~5STv^UV zSC)WE1g#*Oy^wl?#E9r&S;RlBV<9or1W+4pp*JWFu-J0_;=e-{j=CR?tQ0(8J_Ims zT`hoF3|u=PxN1ReEzB#{&Rk;46sZK8J}?5Gpk<6<3+$L8gALVpgz4DSwq*hYf?gqq`(N&Y@eBQ#^y2x$+`E)#eH&Et4 z9dNT4DTri05$5C^@r^-NitR64*(6dN;2I&e4(U5C`0VpDzs?8{}u zI2sQsGLq82r0?)?S+TwtSt;!=Tx4oM&N!#%r0bHDxqdHYraxt~`V`!HK6!Kb;v49B z>A5m}K?tRZ(OUu+e4rHKHgJacSm1)%L=g1)>e7l?Qi!+~MUPgv)*W%X&U&Ch6?BHf zoX~M+Uj>1S13spTh_Ho1(+litle=t3W-GDm z=!J~EXwCBUeXYrgkY<)}@9TpcX2q(O_hJ^rlD)mk(LZs-tLoyr7K&c z!g6?ZddlX3Y_mQ<+JUm$GQDSkrvh5Joe{cTxS$~%g=Bi3AjYA{}>gC%J z6GAU-EYliOK3M>$)!e92(*5=xZO*p}s?DHMPh=c&A^nN%K;vSp43D4|)*`d)ch&V) z=gNhb*+v8{s2x*`Y|07=noZP;wz8hHJ0rp9e!M=$=KhH3wo?#|f*aos;VX(%%JhC) zu2>netD{AhLGUtH{V(Q2x6qQMaZn+CERVWUGW219#Z@?AYN?Ulu_PzS;WsG{^<1J5 zvCt{qhFHv+iL{`T6ys)vY zeV*)FlP<)EkVfw_B=7WddJ|9eutu-85}ycEM% zlJ1(v5fCzlOSZzV5_8QbGjp1CQjg%kL?`;rZ30HyQ zF{l+yA+URvEuq>Z7Pi}n;X`jMeaqn@Yf=vzF)lpLNj<7k)sa*jCLJQ0O*1- z*UthFitamhH+)wD!k1^2{Ppuw#lw_I1sGD5j_5IObX(K@+Cl0}y&ITv38y_NLOWtw zG-pL=moRPe#2#F23q7kW71SCq+Siz|8)Re?J{cbwhqnhqVu-(H8$rr zq5@V&g|=|o`Wmnrz=9ck^l5FQ9I4bSQiR%$G|KXZZ)wW7BQ)XP_(Z?)v=JXw*VDo~n`xKZmynda$Z<;)ryqUJ8VTHm>Cz|v5u0Q(4rvSglPO)}~ z2R6vgPR=Fer{tfBdR(5F-^?Yyd)|~xTvRLt5&(;~V>r54WUslg+Lm^s#4=miLlmt@ zl4bgb&t4QhGo35P5^@64viMA7CUVdvj-c>vxFSrJZEvg3vPN|pM-3kgh`1`Ql!D{eboRE)|j=7?i9k;sl^ zSIroOF-^!=I_~zblgg))%imJ#40t&vTJr8(5X$Tl<|A0f$1A&yFVaEE0)kbSA@%P? zCu8wfqwxZD&{jvvM1aApkJ4K;<-mc6KhhW`LZ=AYIv|T#;MsVfVN2YEqpCVF`^K!) zLXRw)Qo}c2&4jNLgI*qZYyioBNBdt^{%dSXctTz7t9Sx>lL7{v_QhA%5@f(GR+L>; zJ7>eb1>Bz5&ZYCO4H`8EnsC5m7sd%j_RFnT&s;J3IXv_Y^)X_-%fBUcZ=yj^0`fLY zmZMTmPr)ong3#KStt{HvnYQa^dQrHl5l4@VWw3@GMMY+#ZetNupXWZu}IvClF^OlEnMb-@QsK7j5o+vp=K18FA zP4a9>syK^PrlDH$juiBW`Skws!6)nqCCea;R`1K&#HkNrAuOLkr#yJXfSjku^7pyd zXa+Sm%p{u0L><2pohI+3MVhiAzwYyfAv@3A;b`&3`CXsuxc|w)U*ql;p9WTFw6S!4 z^oiq(G3l}s#BWWD=Hk&W%&p;Y4SALp%Tu%A!w=U}9|n^d%eW!Fqh<%YVDpx-aZb|{ z0tst@Nngi?v;KuUyZ-nzQWPr85h{rc`f8g0zePCY84CHZ1|^rON@<%v9GnOCG6sBM zKrwnc18sa4;9Q7YM{}ZJ{G&!B69naJM-Ld(@ zYs~6A_5~%KB6YciLAKzP7k;=P{WvujgeNLHXsc!b*e{r9|HGl zCvDmOV-?E!{9?YKYVXf&1VTr}Wbv6hH%o{>Tauv5 z$D}9lO;fW`#>vSF>e#&Q53V6asPWuY{8A}l%AAJI%gb@yhZ$U^2>dFhit8sbz!N{t zn46>%{1z{~31289j#OUiaef{6r4fMio`$q4aWan^2@~<67;PjGpuQ{_8@ic^nCVpX zGQ0k(H(~{*E%zLsh$<2*pNK(Rwu1jPgfa9gC9qH`zo6kD06UX|I3wg!J&t2KOE@+R7rx8}rO7k1!hKsq37<>ww5inMzYhQ4O4!Ev!` zS1a&IKSc(x;taF0-bxPlYw=-j@9iMNH3x<$ICB&lyx=-Mz}5su0l~|0eUB48RZuDz z1Ng< zMR&cVzjLFgy1{h4xEiXgfJaZIX|x#s5=Mu^{iWCFoHav1V-j8f*Wk1_B1;xC(uW_qvgbUAH%fpE;hR}c0)sTtC8 z8%IBsr=uZvHBDlp3SGx}LtAJ|YRr6x!`csup+99}E;l61j!(-gdesgi)QwD zI%1sPKrTW@&3r_E^b>D%xsLOr6seVFf2{EQzCsf*DHwW8We!anum)zYL&QVnh>m1F z5mB%djx?z<*vUtr?vO*gw_dmdJb1s`CTqFG5urvpL^9?*T8jPkogH?eXN( z*yaQM!6&tAq5>TXAFK8scLvlBFTY?MGO2*$UY{cbr(v7P+V14fX=a+|ZO2re&En9m zemejAjJn-xlAn7azUruKPlmdOEVLQgt1L=By=fxHCH`3$^U<4L< zLI)n0(dIlAXx8wHZrjW5Hw)3rssfPqE^QBukn4hZa|WQ8_~>uz;!<)XOx}|BUE`=lY`R*%vM$7_z5us2j6Jn6=PwX zEV#{)4;0&Ico7#h}cb`CQY9Me}rjeI*KLhq{GDm(jJWz@iW@dxUd zYg+^II7Am98C{JhQ?L2_qntl= z0h#!J>@{kwQ}hGSp8$*fql}5o1{Lyf22F5-kyviAfnwDhHCsm~SfG#<$pG3iPZL7* zib7nz+Q+U0(rRm2vM^T&bh)_7ED|P|II0IxNEj&kvUVAB|Q(_>twdPZ=#N%x)`QpyA0}XYLjv%lyVB)Q^A?$$fv~2+gIAlO$o%ih|`NQoP zAod4wiot>{PAxv~L2%&L-<|SHhmTg=(vmxPzt`qgdF~5@N=J4rH zk}BU+qB8sYau4RW2$CZIEK;%kQ(R-E@gsqK+-#uBk7^PF;O1VIfRj2)3yzywH1=94 z%EZVI^IFxh1556qD7Q^%v^=U}1PHWp+pqUrEmqNT%1r>_E!Og1}1YWBD=q*{gOT)_$w!CB?+)e*D9HG4`x`d&8c?N_-C0XAX6%hambLF z=a;uxDHM}J<-H{XDXVbt;_hH?&-60xfguE!bHm6()^qkc-HnSElgwV+RwKTz&lGiX zQfdu&mbFvE|5(a^**WaJJPnSIv=l>oTo!Z*gxb=+gqoHMLIR8$&T89x0k8@&8YqEM z#FErL;HQUQjXY&-KaTz$pxt)drU0n2Bl@SW6g5MuzS4RqlI~lZ>(Armjgx&tV=_Hg z#lXVgF|U{Pj)E5`ayM0JLUQHTBLb%6nR3QL{ElBw241LzPnX1AE@nHWbSl5RmMTtZ z>~ULZzDb_8nzEocsfNzPNxv}o_>%kn`0J+>R3ZZvbBm&Xal+=JKYHo1_5op4bvfG0 z)^}d`oO4WK$Xla`UatJ0@WJWj=eO`1vM`Wl2IU-mYM60<42E@6`JRsZW4NZUJp9{3 z8^NatYcm+YOuTgTip#&fzM@rs`q{5FHhlsiPkXsaz7_E|qS4 zI7k8YdpQyyYoJtwjf>S=>Rgat8^ZT(1qE5oOL+?fWU>EtH>6z)qnD((C?D%D3vgHY zqe@2X(bxfEsghmcw2rMz*J0jl7#^gr*a`q;q71JV>`*;N;!W%bh|8~*_ce4hE2J(G zK~oKx8=R{u%Vh5aTobT42>+{QMCCDOk27!B2aTU+4$&(5LU?z)sj1A_ZR*)LfUQI2P_>T z`cg3_f?NtdrxIcI3->9)!<-^<7`OI z>>JOW*VRE`!#&A>I2mzURAd<4O)1?B)QYin>texGTivynvQ!MamjSoF%57& zALYDW1WTnwasUd#ki;*SyW+S1;l|`}V_ay+wGzcpg0ah6kIpYUMg&F@xEQ%`e>?=) z+LBsFgt8q5tM?bXuJ+hYrTRCNApG~_`n91$Js=o3KE^zbV4#<>B4140;v1Lo=Y%W! zV))>YEDk@V>Q^>1+1I?#<$eLD60Wl7elC9T`H)exmzh%-b><8I_d>2KRh^H1B~0H3 zw5A`2HJ{T+Lb)OsmV=iGJdDeZtISf$&kb<`dCEZwjzhi!#r5GBN}2qEG9(HCxQl`7 zyfrKGOx!B{LwI^^^BNNfLeYg&Kn#C~q&M)OJ`7A!IaBb!Jgrndw`!2i1%6z}3~E|i za@r@{Tuqln(jx)A=rWSr(_6Ly93gO8&W!w&7)>$sZ{ zbkK>YC0|aJ!lucbA(`4-_Ocx6;tcq{ztH|V?m)cy&9Pv}-Os|@q~xkL|5k?w*5%(K z=b+cwtXiY*p#KZI{xjQJMfx{$kFMQr+PoLr`iS5q5NMlIUH&nXI%cE@ZM0l*79^TO zdLUD0`aSF*1#$GfgBU1tMI{p`reA#*kI~~s0kqchhy@1U>SMuaUjhYY#vz+-!K3A3 zZ+m696~>4Qv^)0KM~Ot!jYqBs=}mBj6!&__tHgV}$Ay{I;k27LDjf_-8n%}vP|r-I zFMNz4tN%Jlob%cCSw1H)baL)R%+}fHehpjL{PY@MH?R*b?O0m_F{sBK!#B`yD=wha z{ancrZV$_^`teyAh&mO+t)><$XqZ>DC9{#v;lqKuI1PVbPjR;H-oo1(ie|H}N1vAZ z^wGAuv)T>)`Qh({@f8BR2h&V0wbC&qvz|3HCau^}+O>8M3*N1kNw+1t`9yLfGglMo z-X+%RA_nBJnS|ARR^S?7=QHOtlQ=0JKT(*oS9>r7aRJP)@A#>rc-`2!OrY4&+Gr_X*{7{0;G+{F{70{{{N%F zznV`+hrmz+8mPY$_`tvbC8A%7s9^nAAP=YAMJaTI|CJ{>7Y8&-<`U_m9cUQ?etj z<~>97^3TT~`OF5632c6hu_}otYK*0~9aRAuNj-cEaL9;`kl`G7Snz;%$Jaby+a48spGz6vsCdlCG{V@c_~uH23gL6;NV;wJ;2)IrR*nN_i4O!+e^W z*goJJzf%X%p&oUl@&A{XyHAQM!bkdvLG9{N$^Jii5AoHE^9l{r11FfSjjMBTqef)w zALt~|&)Qh6Zd3&nIgjTe_!@6coTu$*yeI8_@lrTGfNJeP(bsTHI}tiJ!VXpc1});A zIq(5Y9B$lzQjZi+7h!NI5^#3l-);ul`Zp?^1&hvDKqXS3{VV1A4{UUt{Hr(95%gV` opjZEeF!2cAKD3;__x?WEWoa`iaT{R+oZtjujm!-T4G5I~2Oj7%@c;k- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59569bc405ab0b33afb86900f5a04098bed0a11d GIT binary patch literal 10857 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 V9p12FryI}>44$rjF6*2UngA4zVB-J) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..67c69118cf5ff0046065e19aa9ac7f902d58ba08 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~to$O}>W|+2DF6ydl(rIsj|=o#plrnVZT0@ajyx;Tbd_`jWakhj5rhuN4(Uo1u9n4ZO2 z)$e8whk`addUA>VYxb)hS#!#He`?om>#^nylzXO__NCSD#==ttX>Y`>p0e&t5Z(Mn zd|Nkr$jqmH=2O}^4HuigIIyr=@^_oA{)w-fw2a@GxKz$)pK($A*W3FMUm1k!|Guf7 Sw3-v>00vK2KbLh*2~7YcQDKz; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d51b6a7afd9a641623ffc6306d84b66c858efb49 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~to$OJq7wY)i-1BBC9V-A!TD(= z<%vb93~dIox?sjWt-KsAdzT^vI!{NMU*6g=d>Q*6X2%5B6W>sz)k ziN#87;gTw)+oxWJ8ZzuE7CAlX-Q)g4FNGf0^fKOSJilb+^Pf@2e{b%)9rlaSc0&j2 zsqe=p&0BeZpU3#bhIg{M7Z}_mn(OODZDnUaWR<9Y=g%7TWL7boX26pj&#K!vr4H2W z%X)WmLbJPW(b=7gMVECXMws5Wj#|LjV{pv$uC>`=Zi7`T)u+205r1@$_krS+I8UH! O89ZJ6T-G@yGywqi$a7Wz literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..163a73904d20da2c70fc7ea36424412ad2c7ed5f GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|~to$M@^1dYzia;TW64!{5;QX|b z^2DN4hJwV*yb`^<)Di^~Jp(<{)K;TZpqe9|E{-7<{zv;a3OX6`IG>&0(8Vg**4Gxh zLZY$HQ)A_)O23j9zw5F}o^M{dSw#I`|MTq3_vbIoc=`Rf;?H?(_gNLWcHL7FPmkg~ z=h))v)g5XbTebcmr+EMKjCdBdw6A-QUpmv&ZFG8t!1GLzEe^+h41ez|*y|^MO+JfZ z>FQ)=F@&7V!UIllVL+!FJXZN`^P^ED5z;jjL`-^J^H x`Pxs3Z!a*(8i$%bKfKMAcR|eOxhkCPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0f0$FK~y+TWs*CK!cY)}ZMICgmA^-9Y%Ihl z1Vh9}p}2~us}bTGg=Im(#wv}af5Aeq+5hC1J7b9K0h4>rJ?G5aiHXk_tQaEZ!yrzo zp;RhWtJQQmozLgL3^JJvjO)5QAycUovSc!u5chC6%;j>96}iddcD5cY}V^FqISDoEEdb5G_vcC;PwB2rx z$K&B}==FN5)yfnw2H<%f6(*C(bUMXcC=`ATVCM5V5sgLzHOhnxfkrX(`+a)gY&05m zyWQn-NllJ?-=|46g!z_558QIU-=m-zhSO@bASp!=)C7rA?;sbF3}NDHp7KF}R=B_L zcs%|LZnqmxwt8^CtAQVe>puiRpsVZkd_G?;7m3!E*bC$gk!-O=Kp9q$7Evhu4pTr8 z=0{VKJfOlLU@g@m5*g{*5`z~E1_K5UbZ;OGvd|ze#%e0P!AwQ}+W?tmSx-$F4ZQ3D R#;E`R002ovPDHLkV1lUE-7NqB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..deef7462dd24f68b26551a8296fc3b9d06eb9a27 GIT binary patch literal 550 zcmV+>0@?kEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0hdWcK~y+TO_Dip!ax*+X;QjOMaj>hq5y%g zg@r(Xk&MAeV8VSGVG+V1XsGz3`MhsKJQB<9+nIUCI`#PnBY}71Lm?T|f^<5a$z)jN z2!sTPvq}&`N}|KzFrUv?tJQCX(P&h!*K@htdcB^_W|c|>f@op^I@2^eozCO&XfzsO z818mENUrOaN~LnS+-kKBhlAvg1^i(^6z?wuA?^43+wFF}UVY!+Znr9d5`gJ+N`~=x zJef=o7mLLo1tP1}3X5j52^(fghCrbR`u#pNa2EtYx7*!pHss`Lxm;4D7R3IBK@D^n zMG*{&snu$Z;}9ejNnm3nOx=U$d9?Lmjx*E1S*Ao9GOu(+LKh z;L08uz0T+J#bQCKcDs#*7Vtwb7z~&_C=?0^XjG2OfMO6J6Kh=(v*()eaV=E5SvgYD z@pu$LoI!f$;thI$YTGs)lTExp?Ejt;-j~aTDY0TEvgh;3+d-9V&~Vo!0eN{Pk0C+X oBqRS{t3;DfQ_WFU8GbZ8()Nlj2>E@cM*00MJKL_t(I%XN~?ZyQw< z#eetC8^@jrjnm);k+@25D>j8}XaONUHlY6Fm5_>rRD@WeKtq$-Mh;2l!(-38m&Ht1 zh{e-;(mUrKopX#r<_cWSg+TVWyOo1Ua`6)Vp~sz6l)RRIKda5qE*0dNozRJF%A zF&c<6NCN_BYfh3#=ePIebVM^l5JFJ8FJTiS;Dnx|W*rHEXkB2vK5dL3ux(=p5s0mI zc(f1kzA%|)oXn1xJ^F}~*_6rQggna`Bm=HqzhS<(=G*6IeTa7~7YqJ6zoHIJKc?3d zywiS{0f4`Id4D>*cLe0wEce6xU53LUAx)XDZfP3h%g>&0us_BuQdSi&Uj9N^uX#Lu zfM68$nzw)7qVCqsbth3J4JimTn=R&snPJgLlHPMja6m;61Z`WR-L`$R90XLAGz1b= zM1^RP5CWpzHq4CJMv_EPM@Z9vis0VueA~7iSp+xduB;jE3{Vlw9Tg>{fwncm?tw7= zaQOdKetpS&vBKi^KUH3b4RSW!@#D#R>}EN`(TI!rilW}|{nt+!kN4O%4Mkb;803B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00JjTL_t(I%SDq(jvPk} zMIVP8YEriZNw5~afsdg3A44z<7_uS2ax1%Xj3B*;61*T{^~ulw81nhIUvlVs#-T?| zcz$}~dOnevxH;Q?upI}T88r&u|9zp>V47Zea~bj5$cJN9bf+V z%Imz~g7D$pTb|!sIgKM-XSgXuB_jY3cLJyp2tDIzNa}oi4ubju8ZFRJi!cl6Q9)XxQo6-=9KEli-Y7kNB-MF3y+`-)&Z_s8jf*{GL zAkvzOw1z53CZdTvXn1C&>>H6mMp6ZYAORI2(Vr}cTFDG*B>TFyJ6M;6%-|>$b3xIz zhBN_ym{E_Fnm{JYTA1z&e}DVlLfrSAd0xouaWjzpflVKQ0t9P;ZQHrO-udx5b6*ZT zf#3i9i|M}b>Ek;(H)=N9ZU*^3k?B4&uREn2yi9ZZOxw0nOXVoZ%QQ2L11iQ*E9Y@U pMc9u65n(So({x9GS_;Ru@*iuIL%$xIvY7w?002ovPDHLkV1kRhDH{L) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..31c637308b2be7d26fe99893781bfc416ac579d6 GIT binary patch literal 484 zcmV1RwnazrcU@gbB;C2$Lmq_ukn%Gb$YUc@|HTu)3O$ zh6BPvtW@#+{(POy(=-krR?CZGwm3;Z-gk9fox_9hbXN+2R2@$z-=Dk7B7+Bm^!dI7 z`Pi>tUv5Ao)dVGllgY>*^j76*90i~t{AWqXDTRf=sfs+^K32;`wpm}pqZpMW5P-jJ zYY3zW+8*GMYu~z)!0(Gv2u}A9P4fa8%Qv0O(g*=KFTf^k1fJWxKv=%%LaD$x8K|fVhsawvj*9-v^_xx+*pQdFG3|PiYn20IHYLOo)5`E2>drpUxkipyK aJogU)Drw5BA#AP)WFU8GbZ8()Nlj2>E@cM*00N>(L_t(I%WaZNZ(C&$ zhM)Ov=lC2uZ5peIE!wDZ+a0h(f;D2pf}hHcA5n1;63`YUv`%Rxi`a>8=k}d%SU4Lb zMtWBx&Ajh3BjtBrs|g-)77+o!XBjSdnyN-q4=SX-heI1p32h^(>u@H|uz7}9LtYd- zc{$_J=^4fvK3-h1UM$$%ZK&%8aSky8DUoak0?uXulX*Uw&G_uAFE~0m!Ff-!+fglV zS-roaxmnQ*m=Lf%i+aTYZOYaPSUknMVdX{tT9iv^2!bN;#daJW-a(EmzPLSqlAoJ`J`KA(Xx zxOThe;?>WTWeH*s=MG!{r!*y;^Bhkm9G^YL7>i4NWWCzcZnju!5kQQf>0q7v2pB<( zW&G?Z$CFdW(+PvJz)7#DD!bJkebXF1GS8rH(UcAYj3C|YP4@%a24pJ&Y9yrr#boTeU=1;WDzbRxuEh4-G~ zXhc3N8H|n?jE00!!T9`~}Y^?J*(xCeZ9x!g99w*h+W6-?w0N9j%u?z zL_k5iNDu70h#(jv)NMmn*I2h<86$n{Nih=J4vmr6b)+uxFK@C*1uoYs&j0`b07*qo IM6N<$f;f0<2><{9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d40c0a2f296c228d02e8894c4cb75da5d13f318a GIT binary patch literal 9946 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..120541747adf6c128a510530f97b2e9b09ed5457 GIT binary patch literal 490 zcmVN2bZe?^J zG%heMHD!e|WdHyHXh}ptR5(v%lCe(0P!xt)96LHOY7hl1VsPLg5DldkN~si3A~T7T zPr}rNk;E5}frN$C#piG}e!b_kf$-&Wd(XN5f6nbKxziMDk1TUy*iWkA>-SH{7J`H_ zBg^OWIdPMEx-av#8O3EKdBJm*AGn zz$tmnb7}?ctIzKrWNP5ScHoqz;T^RZ-G^e}lwSw+*{H!7dNu~rz!-osp=*o!xl_hJ z9n={^w=(f-gknIMlS?3lXXsVE)&;F1&kj4~aW9dM{aVziu&aiozGYE>!8RPP85l&V z?;tNEH6*jYW|j{E+F_Hj-EMb=^?J=rs2iJ&8u(#Y9TCT|u2!qXVzFEN2bZe?^J zG%heMHD!e|WdHyHmq|oHR5(vfk~wd}Koo>&Qo2k<$`Wfa!EfhVghjnM@EDi^U%WBCFL3 zi)OP48)iy|K%ofw{XR8t7X(4K+udw7d446GA6bcAvRF2GmVh|t`Yh4nv=bG_xEmXW&Ia1Q`coadLL3-!n4SIlT z+cq7OO}s$t|DF=wm&=7Iv0^5&=kv+iL6vOKaMvXPd3hy|Awk(BBmZBkM3Ycc(cdhMb literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b00fa0ae40b112d9257fb3b6a391439efd271dff GIT binary patch literal 9022 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b11ae7923b4bfc89dc6df27311e7a52bd5d41fdd GIT binary patch literal 798 zcmV+(1L6FMP)WFU8GbZ8()Nlj2>E@cM*00M$ZL_t(I%XO1YZX{I@ zgunMP->WKjxBnO$XEhDug0Gt=R1iS>)InV6k1+kgpyhkKZ z^2pHd*l!l3VUJm%Wy zH!tU$ou31+S}u9G_yjKjQ825BHh3Svwp4gRg>w7VibEwUWmJZ4=q<4rn{!?EIYh^^B|2z!5Vx>kGo<3^T*)@mn~DH_Hr% zJ#8Clnt++{e{jx|#)ODRG~%2;dN7m?P5hYDM#k-e)pGIS?EfTeSS^?2en%P-BEs26 zw`^BW=rLu97z0hpZ2tL!$3JfX*sL#}P5k@ep8fkr(wOinXpGcaQLBYoGui~2d?fIq z^s6Vr$tlixa=&B${*mq5`=f*)Sgl}&0>>pPAqRf^Zozi@3+wHUph6owZ5N*tIu0$O zN{k($=}_lA&UvH}GzXeoNjcM{NI#5Z&oQBg5sd>Hgrp-lVeI#~i<>X4=8;+x;Bd}; zXk~|nhHf%rdUlQXg6OemsXtIkX7TPX)O!JqI1?~Cl6Vhh)KVDw1GPR;(n!uD4x^f3 cwP0ra3&M6&(R8)i>i_@%07*qoM6N<$f|9Le3jhEB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aa5312e75affbf541e286ad4c1ca60c12ac8dd6d GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~E58UYcUz9RC{Rc?GbEzKIX^cyHLnE7WngeFN=+Tz~Aph3>)3h6Nnbhd;N+OSmktl&q`y?K|&(kkr-x u&%b5-J-)n+b^ep%+wCRx)f|!b;bCxIC@cOU^YaIgQ#@V$T-G@yGywqOAY9r2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..42f2c1181c7a0678d178026745077a240f302163 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~E58W0`lEM$3V=egnIRD+&iT2ysd*(pE(3#eQEFmI zYKlU6W=V#EyQgnJie4%^P<(->i(`nz>Er|n*2N8S3JT8e;)9kxtB?8AvqR;Q^w$6X z|9$UnY;5d&c>lhA{r~^zNpUx-q@8Vr&CYUeUG;ze{~t#Ws2@1_;qU2uHa51jw6_2M zJ&PUvwqN@{y??*4hemoJ~KvW4sh6XWVwY@N36Ccf03FLWS$nZTT(k|7@`S#~sIBn#C(U<;X^p z;Pfvpk2F4Ry>;Nb?T&TKD@D{E9+&T*nv&Q5O64i1&HBLXDFo_2F3~@(+W6!cNY<-e^IfxG$+0xu zgSiJJco`~QvOij;Z1Yg)_`nZEDuY(mqQ3U1!sk?A_&P>Nqp`b7KFwif6AO*Brg W3%;QOMbiX4KjJ6BIwWPkbi zvDWUWwkF4>)6=5W$_1Gq0*u@5;KqhVRTA%fpEc^?zi& z(pmq_>s~G$vr2SF#N8+Jt)6dxy7(8Laiq-k@}C=jvuLU$U2=5VWgKN#ymQ;pQ=xBm zh}|pcxV_qL=7Gb%Qy6yGeLG#*=d&R^F4>*+LYd34`AU;}A1~Q>cHjEMEv$16G)1_n z2{b7zNsw;i(0!mLGOt>$=XiitW8(kddnVQ*nHRE3UaVcO`HpGlRFz%)%1@?=I;EY6 z=(y%OTkN00%xMz)q+WEg9@t>UAo!qPmv8m!Jr@pSaM!0KHZ#o3;khJOFq!H4^Y1Dd zY782y*x9Gr=&xPIp!R-K(e%Dcof?a-=3G90Ai>CNWo2vevx&{(yqeFWFU8GbZ8()Nlj2>E@cM*00GfSL_t(I%hi*;ixXiG zhoAS|-Ry31kt;3=@#C;K4X9u$!Pfu4#zHK#6RgC-!op7cLJk!{4(uWXPC>A=)lwU6 z6mqwBm&@g1zH>=7yYJX}iAT~q-7xceW`>!8|K8NJ!1cRl1SPzA@Izg_vm}n~5RO6$ zPk(7ZrUGu>KQFaLgNyk*Vk|y={z7J9p0i7*X|~!_cIvD={Q6gCkBe{I%SrC!DT3rC z-?zR|4MIMylogb@bZuKM!{>%i`1%nICBF=p&^byj10P+(3{WL7z6d~ z5$|3G3PA6RPsowuDRy>i;0&l&hB&SweaI(~RG#bE#G%HqZKL#lQ9a&@Wmz)p3))g> ztw}f@mCX*V-H2q$MU0}d-q)+o19bqf`XW#pKfB6tg@mVB$og!R+GMgmBH*PUielcs z3MR(ZqJaOhm#3Z9^vO(P@VG zNn8E9_X$Ap*}8iBWKDf|y`lQOh{MO`u(ZSP>R?!0E~&jvL>x~vFnI^#)@??l(;g@_ zEIcZC0ENe;1Ba)l0gB5dRj>7EH+t@@U$AEdTa7TX^z58JgWABC`YGbc00000NkvXX Hu0mjf7W@_z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e75005dd13c6674818926ea6968110ab3f638642 GIT binary patch literal 637 zcmV-@0)qXCP)WFU8GbZ8()Nlj2>E@cM*00H4iL_t(I%e9leZWBQi zg}<3yd!3Dqk%$}{JES0piYGuWC@3PKC=xYW;QR<)fcJnd6-t4q^8ipFL5mQwkT77$ z8xkodNZ8Jkw=I8xP24U0ytY#p@3*>3?1(X?ES5 z0odAJp8^r**M9Q!A#dM&#JAtmJ&Xv02!MkY}tl3JW2i^Q}jDH8&ZSfXMV^5Hy=@$~Rm(t=_m(+eC4Mle3Xh(mjljQqB`m5Qi2B zkW%90Y%;dPai@n?hQ)$|6c$<=I$sA93Nqp6w+5V^oKdPe7-LwfEbz1aho#B_#z6k6 zBvvs1x9=?Hld&=_VreBy6f6AiJ?xB))&>FMq5?d$97 z@9&>5VZx+IlMWp^bolV$BS(%LJ$m%mv17-NA3t&8#L1H&q9iy!t)x7$D3zfgF*C13FE6!3!9>qM&os5wC>2<~y!Ui* z45^5FJNs?aZ8r&*!dWJn+6KNGrf%_UUi*8$+pbA`>sL;AA*J}C>e-(UKO)6Eizi&0 zA9Lqv;YO1;&+Avd{^h;ZZ#!pO+QglYyVEj@c$fT}Kl|BpZSIJD^}*><9)G`QR;4#A zjC{iVVvhdt-`^|SgX({7{#ttbAD{E)6Ji%+pEjj%@2E6pT&);d{^WeaeftU9rsyuP zX3cw@dkd(jLvx^)U zr@vL(72TE=IH%$5)4coN{LN=E>6QC#z905`3tJY~id)YcOJh&YW1M~ZTg0!W6Bb5_ zs4rL_7q0$0q@s{f_O7Uc&VpN}o3b7Dx4!a?p|JH={ z$p@kI1K)#fnTskI8D)W{STM@7|1oRGycxmp(?qObOT)L^-<~WiZ&tnf9>3$i1owjS zf_Y5$3jZ52F`2Et`h`t(sNrU-)KBJFCQG7W*-ol}9pO6t4Eg z&2?dSq>Yps^o3h#9p|h?tR?c%S0>xrS2OyCF5SF8Gv7^6Fu?z-_zo7e z>HFt>7T++pf{o?5{(|IJl?%EW{yvdfQN-r6o>_@$nV`Uh{W5bN{b615`u{&~o@9B#7dVoo%;jVqlJ;uGv%TkjWpInY;V2wDS%~{bfjloXD{z3n7-31bicYjui zJXc#_du#CqhAMWkfL#s$CTh!9v1fMNbBtu_YrV&Kn15qK5lhX3-apC<$|tnFkQGsR zP;o9t&_)gz)(MPa35;L(;sP1|FZ!&qwt>H%zhYa%MBUzc8#@(Q15k+9uC39#wLgzd z=GW>&>*Oc!T(DkH?yx@RmOW7DlJ?Nt?Mwn+)3_-RW*pj2upu+}< z!Cux0M}b<<3_Z$Ok*U)#;=b!%m-s7G4j&Yi}u{Fc>pC)Aj4{j^#Uf;)A&GF%LqwjkzW{Cp~ zIc9ty4HC=`3V9M3Kq71j?--d2-p&T`8qOXA8<5Ok)5i#suQ5CD`g~9N-!C^9j$1R8 zzMFpBgw5if;11rndGGX>863FCv}OCw*O&iZ6=CNwuwiGf*vqSC`Ao1PII%0aPEh4Q zZQ`88Y!xdFP6qZLIDJ{=_-KXNFIRnnu$9rwq(X>hX z|K^VxrU&}(^XJGW%qlwg+5zik_RzqH*|a!|58O91}0i3tygZv%X%we_2A8 z=oRyFwwNcuiK`8FUH)3ebZU0|Ja5)z5eIb{!asb~e7@xU>FfKJ<)0S3p~i5Jcl+-D zWzsRH5)%qpcXJ2$dGQvkbbofgR{2Y7#;;%E4zm09c=3GrXKoZ3bMPHgPA_AD4%>l^ m5)8+a7-YIf9;dx%??1+u*SlxTWeTzZ6~LaZelF{r5}E*^;+rD? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..68f68415e534fc4ceb53daa50221b30a34fda130 GIT binary patch literal 2459 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6ySlo%ySsaOdU|_%`}+F& z`}-$Mm@sM5q(g@e9X@>c$dMyQj~+dC?AY<+$4{I%aq{HJM~@!;`0?ZC&!4}3{rdg; z_n$w1{{H>@@87@w|NjH+8U>>vFsMSH{O0sUpo~%y7ttJ5!lqhkHC<)F_D=AMbN@XZW%*-p%%S$a$Fwry6GfizZN@ZYRW%P7$ z45^5FJLh%TEjI~Q-&-boIUbv_sj6o3RQ*pcNndjIxT?`S(V04J#oze(yn9;CZIck# zRQo;V*xjWME8~{t-tIrEbXP6Hr1OyazSnxbD;ux;pTF++x5=zA`|7WYNqPL;o>`IK z;5u1D{DSpYi2zSLECC1IcQgRke$G`RTX^CBs zXYzlmwHBztNBF~U&c}=EtP@K@ehL=M-);ZQoJq`gkrm_VcANjY^1IHe`!e#+&bzE9 zo+))BgR7$E#uDZSc6&wbI?pjyvSoySzx|}qb@GaU12+8c^CL|g5-yw6|2tI69U%Il z@Ao98X`3Tu7-mg=pxDIpOaJZdJnNXlJ46|4&hA`Z>3QJW`ai$!o7MJkC2&{Il4AK_ z8b3koqO}Bz&hJO*tQ$HP?ABytUVSrX$6_r70g(&wJF?5ozOa<|PVW1scRwYBb<3Ci zv5YV8cHd)k|C{$qdPgK9XB9g~1n>L?hX4ou`ONtd4%_1{TU!WhxO=v-Y4QVyGt8@) zm|PhTzf|Dh@>u`>?)r}^BK-}A|IK60b9MM1ead~0Qi8c)4~N9fYhSq~94@)|WOwMX4#-F06@5;|-eozp-mE**3nQGg>0~fbx2^zfloVR{C zXF_n!YqsYNvgT&&5e=++losqiSKKkD;m^Tu0^AGA6Bum*RyHul30;W)aM$^LLP_*> z{RXq@xE(hC?yk%O3y5+o@cVG+Wx+%SInKP7+!OidJY-kaZ=5amK~~J+{Q)K&hZu*t z+t!ZW46o&r7^8|E{w=*P3fke&;xXKb4JylVl(>owLH=-(=2r40`esW(UO*b|kjBH!!if^=?>sAmg;idj>5XgN(LZZXUfE zk5xT7-~HpYelFm^zwgDPd*?h^rpU>Z6{SDdVVWis}W)hj8-0=T=#bKof^Y2UVEBkl#JmoJS=$LFiW^`5g9Fk0)dy@*|S+~BzUSG|}s-VcQIe%jc$G0gw{Psg8qul5&-XV-o| z(_L8J3JRI!jrT;49oA@=!v?iX>P2j#O%KzF%ms8)kQ~S$+0Aq!Ld41dt{?4unjB3sTkH}&M2EHvI%(&64N(U$?QQ{g=5}cn_Ql40p%21G)nOCBh zms+A=qGzCIn%ZiV3M^mRJzX3_D&pSG>7KO8Ld11$X8fQ3?AGdujTiRtY|+^Kebppc z=S7yM9l|Sjzkg|X{H5@Rd%|~&|Fe~@ZoGW-%)YxTf3bXKdsXyZ@WaestADR)+;!(K z%ZE?ZpFSIJUr}`?kE!Bo?8b)0+&d=T4dWCm_~ET^^{!1=0%QArmZFD+E2NJ`95~2& zr|9m>fbCtD`x?G!=seiTdupcm1h4mpmgMhdu@dWwyum2Kcjo7=*$Par`kb;DYb-CQ z|9buQ{(&h9>nm9Eg)c;CsB?FGms9jR!qCP4ic|7h%$fV#3%)%I@DnnKtN*o1p?ATb zd$|)##Xq;nZkX!E;J^FG$~lLBeHZy~K7ZGI<5>SVyPHi78!z@Y{_!bo0C}!U?+wH)F z`Rf|yHOA^UmQQA}@mqOIaMyRBFCKAb>!s~&C<(o!laiPw_Q4{saQ?68his?LZ$DUd z@@dW5hL!b_i2-Lf|NFnNfm4Dd_wOpELkzrr;>9+M>1}s|yU+2;_#aS}JkfvJH|W4$ zq2yQX%NjnLs>LUBFJYf6Z85LGTWG?z1Ez8%c@HX>)`j}`U9T5advWK$LzX$~1FLI( zZNI^l?#ej*Rn6}CmzU2Exv;bGFz1PIhngRSJlsG%1x%~7-qlXmihKCUka1;$Udet2 z;iwnyHW%=F?6%Ku&W_RHo%E8G>)6(Qz9M(0bDRLY4D=EBM5P0U#nZq0v;$k1pGW}S4SFw9K^W!$2w7TsL zCCt*vh3og&U1ribz!Y&nE`q_bjWwcyb;B|-?u4t%It`4IBN&+3fjA1NK&OHAO(W}s zWT1iwhU~133}Lnhm?R83Sq%yfJZJr|`iC+PE6@MF<&BJ!_t+V;_#9mHf6|}lmXkLu znfvgpdqs2O7eoI;O=a!d<&FN=>#bMfeo(uAzWE)wdxep*T-*w&8ySMcMk$OSaILiY Z$Lz{z(9CRZ_W@LGdAjsmfjxwQvxq?>S|~I$w5+UbX+_0B1%%3- z9+AZi41DWBn6XgM`5jPDqQo_#Bsf2-iovG4Qj)i;N$-p`bBNV;A7 zWMj1Sxy>h{p9sw8JGUX$=UHd@`|Qcl2~yvc4%EpXEiZN^V1Uj{c`9bA7jRO|HRQJTZ;7cfY za5YGt(XIc(BZk{Ya|{l+HojacxUKtUQbUNsK7kv0X_FZ>1o+Qyh&{8G`NQN-^+ok* zdRzkBKJMu^^qxIqoVWhOUf)wpEle_V5_iv7%l3l>Xo}u}`Pvcdjxm0);d{UUL1*R` zFs%D4#Gdf3g?Yoq7G?_vX~ucW<12PH^r}X22J|v-5l#5>rFe$tZpJ=$zGs|oK=cf(}i~7ocVaz?8pZ1C7m^tY2UGQos{Nf!Ew`8t$!@iH7Z}De2N)q}hV?^mARGu`wO|mA2Xj!> zMe!Z@pJQ`c;=%R%+J|mEuUFc_BOEWtq$8|1W2f+CiLY;tm76o`6}wto)LF<-tUhD$ ztdD2UHgv~``k5ZToi~>u=HOppJM}Yj6Z*0~&9f^Q&=bbF++v1L3z{DEE$G;HmGaQ9=O9fZS~EVhUmu(5n}8IHd!!CJIc60hp!>E rkU^)LIU!Pp;q;^7E!DyPsmfjxwQvxq?>S|~I$^oEb?|7{Ha|I4?vwRLoKbai!gcX#*n z^h}&Map}^f$BrHQ|NlQw`zRO&q9iy!t)x7$D3zfgF*C13FE6!3!9>qM&os5wD3yVMmBrJ= zF{C2y?VR4SMK&U?Tjx8k-ewhY?|^9@o>rKLT zCeCZ0qqN@bZdSq$^G@OQtL`k3T5&p;Gh%(R!JXM#DnDP3pDVuA`OY{T*3cBA(rLx;V8q;K2+dN-NH zL`-d=Sc34~g|!pD1$CLf@>S;fo;HCYD}SDvBG-=i|3}MNA8wseUnrfj!@Qa0$pf8+ z`M0;c=im5v+doUzKjpsFf)~E}zT(PcxpVt)Z$rj{JX4@!6q$1F#$T|@oZB2*!<}&0 z_^K>pT7w%iFici8NK3ps`-sJ-mu13Tj|LVGhU1wY4D4lYOcER(47KSh4UO&~;RY5R zmjfIB&0EFF+<5Mw-Z`dsZyugxdGb)_!8CJwrhQ=xZ&~a3IqWFQRCAiBt+h`j{;x4d zMg8)NzQL;dxp%7cJyG1<@O_hy(S)xi0BE=$4_e)VP47P7j0(I zDmGX7gto%9csV;ed1()^4cu&xlFMt#7`Od9z5nU+gB2MHkq0u<*RPX5uYcfF|MUaL zTbQ<0-~N1WnnT3}%cea{d`s6d3L8A-y1~kr$ob~2<8zKpTn5bToBmkHEZf8WM*DX0 zj(^(5K;chZ8~hzVez9L?A90R=ZYWO);+v_#&jpZrnOZWwh zV29_)L9BDMwCm#EzUA7$HdlE@+<{icT|yrFIor$|0`_d3_a(OB5wBH{M;v3}_Orr3 zZ!12?X^@}nA!=Y6$&%0@f9Xdo(;~)Moqvo#F{QQN*CAgeVJ6d$;(K;~3UYNq9roP) z{;1v76BJ{U&vwHjudT6?RVqG5bDqaV}UT=fN;LPLWYa zfziiI-%PuH^8J(kOnLts&nMsb!X^Acg0IRe?BN@=1Bq!ZomM9k6z1Gvu{g2DAXI$i z|KCOYix~PI{5)B(_(Wl(E*Gc5T_wgP(JBokKmdKI;Vst0Q#smfjxwQvxq?>S|~I$w5+UbX+_0B1%%3- z9+AZi41AkFn9lFzsfc?!=V8=s3lUafGt;}V2Btap{|81!%ANLG(5J%WVwwI==DAl^&G9bjKNsJ{ ziI-hxO#jRtr}Vw?Wk%b>q_F($ziVZ4q-WfU<-GAe*&yc3r@ZTz{=c8@%e?XS)P~yY zuFO2*#VQK_I`5x5KR=pnnWg7}fBSwHO7I%Q_&jDh^!5F&!x;?^lloZyl%5K%*}Z5si9RAvaXrO;>{Id&v{K`LzU1P&4jNi5ntps*g*I?T0m#ki;9SDNMPK>bnM!7plPiQ z>UC378yh!2S$pOVqX}R9PG-B=cR&u__eJ@`&6NAh8Fm73K!tl7J{q4%R7?+hcAq8F z{vMm8-ZLd8IXR0PDra}iVBk68+}6FbrJ+6Xgu#Y0yXG`xBv>Wwn8D3aQ6X3NHJx`& zT5N!W!2!m@M{8mnc5FI)VZQN(d0!P7|Ic&SIg6jWV=nLC$DfxqE{-%;Re1B};q?!9 z*v)uk&hOG?T)6S$t#AFanflW1PHU*+2shudZ7(yBGo|4|v^`IMZT&O34f9H)nGSuQ zU6E-1+kReYGSjhVMf{Xo_9f)v&SAbc%6;W78)?-Zu<>@)~Ieg%(seamzDG zbp)JhaTWAhZc@mgkCX>KB^~X+`v0Px+@3PpwNsw_PKOeW{=1roE z3;FrFZpPj0X*hp~X`K(l{%g@p)^oyDd$ia49jG|3)m$6A^AeNJ0Va#3-xs`Rd77ou zu!Vtp0~G!8i)dg4qJlgS2}KUtOh5kjxHH!OFL$z7xc&cy=QfiYPEB<@FrP!+=YHqP z-m0?4Q|He-_xtw4oO_BAKvQc&jN^Vt-uwUiVa>fyn|{kM?s@-J*iQD#+y(tv+uoUn zbJnVBgeNnm7+)xFDl!#wFk>E2fh9U(4yTeBhcBhEe*J%D*=nDonu(QZpo-4Z)z4*} HQ$iB}TK7Rr literal 2601 zcmeHI`!|$n9Dm<;<~0|rv(m(HqSDB&doGg=GcqwPnlLrF4y`DR!62GbFSa4H$hKJ( z);3DXWo-s!4VGj#%4MlcO)g1pm2&6Zv1fnU{R{SN-*cYx`JT`7{hagtexBz!&smnc zvnr8H1OPyl>Eh%80H7iT0X#+lVPzaI1zs%2HklgaH5puw1%1|5wFYc# zY?PP)&I=$!13P@w*=+WJD+8?oP*hhW5~Zc3rKhK7WMpJ!X6EGNh{fWzwl)++74nbq z(SiT21BT^dwe^Q0@NoB3+~@yu0G{)>?TV8m@Ldka0Kg|T>kI5`uM;asO#y==@Qgev zh!2bo2Ka%;cmfk%ut3k!#LUDh_>4s`0Ki#HC%V@O|EbHW@x`_pjHmYZ4o=7`Mk_ga^f%UrAV;9vc0WKe=<#VupU3-7+0yt2Y1BX{=1?Mzl8M z9}rV{C$IcRyOOol@*Y}w%@%pAeV5XJpKBo^%wB%?_K{WTjV`)$VtJ*@NQ)b9ZU?=i zPrIH)sOaqCUqqL&UcW22B^*|*mmhK77t_NzThhWz~?lm3C7Eo=1+ zkW%`uJiBo#r~})pXw?T#y{oKDHA#uChp%>DG7CL^k=Ej9ZudFToMfJRhp@Hi_>QaU z(v~FaNB+hrS%gh!!_F7*sp^Fm2K3`bSNu>rcx68KWkSh#d+Qf!dUCHBZ<;kLqE8_g;nT#j;>TeN zofsS_u&s0;;xXa9ij4v`pmPX{F?qQQexuJhNL$tCu%$1UmDiEsT&^2<&Yox;D7w#Hp@_sUj*o#^ z)WH~dFyC7mX`c^yD@`X72J`jh%iGx}lV92)Ln#Z=%NbfGdVUweN!>dwlow9@Fl625 z`GVZhC22a|G3v{Zju~iQ(Mj~vmk&PAd{{cfLHEEyo@A3Ib*|o3s`Uz+x}<9;pAB1% zl!X;Nnn;J50qseXqjwQ%_0y^PE?RXz6;!UD>L#7rrfIBqsKyUneQo*hwUxWnLaV)E z^e6-c1xKP0jepQnlj16(pt#>&c{WhC=n=mhi(8d=(rzmB8Eh5*R&^Isva^}DG*LUm zX5WNAc*}nnYm|%pj6L|aI0}0Nc8Zvonwv?K#i)hOkqx-Fvzo@2o~IJlH8f%4eS@0n zwYZ7{5b5T1yUsPrcg;cSkVn)-;l|x_4%rL`-uFxfj z%sxF}>QEH?tCC`D{USEbZBuiRikrju9YTpNP`WUXIJh6&hYzjQ6v37&#Ub!W&IfHp z=?*yyr>o4BFXqUg@&_!iw<&e&(q8+sh%fHanfIAO5_kZo-73ful0iu`M4=!7y~ar! zJFlsCx8EnY%$Heks2FE&1m*x6YH=i5K{I3|g+v$4g;!w?0-GhB_n1AUF%ZisYzo-2JE%U%DSnGAQQaz}3RpB|Z$ AB>(^b 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 0000000000000000000000000000000000000000..8f0ac2bc8967ab800ec60aaff69273bbdae9f620 GIT binary patch literal 1786 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6Kav4M@OO4qV9awC zctjR6F!1dHVMfvYW|x415+$w?CBgY=CFO}lsSE{)nRz98d8s7|CVB>Xrm3w)sSFHE z37#&FAr*0NuiW)Yb`)U??A`ZY`}lsNS;Ydb88=F(dnS#$Kav4M@OO4qV9awC zctjR6F!1dHVMfvYW|x415+$w?CBgY=CFO}lsSE{)nRz98d8s7|CVB>Xrm3w)sSFHE z37#&FAr*0NuiW)Yb`)U??A`ZY`}lsNS;Ydb88=F(dnS#$1dt{?4unj9bnEkH}&M2EG*_%%~jtbRtktqQo_# zBsf20_0X?bH8QG#}peQszhA4zs;% zFYYcV2XUpp|N7hRyqvMh{Kee|8}fd!%B(wm*!lj_3%ecPv$dCA)@^vbM@n0up#I#v z?0WM*f74(2WD9)w-NS!h^t=7}6~>wlj9dvDQlZ8LGVJVO5?R2&s^P%+B~PQl?!6m` z2C4~YU=lfya2jgtVum6~kQ$Kii@N~~wfA~KG*AslZ^OZ93(K4D@$$WX_KWF<+!f>B zCXBz0+oDB3{8_uRexLnvhAQ*Cume}BRz=hp~%1pPcA{?g9HcyYUW0sSDd3T2(W9aWAhkUL%3oss+b-%=NMoh|( zY1OTlt0oq+|6ymnuzR9fLj9kkCxj2N>~UJwFj+l$Nkiec&61i4Re#R1F|o@0KF?Oe zc47BIut&K97@BpR-?QzNmbrHJI;VxA_koYbABF!^#4vI#D0hbVeE|boblW}NDszi9 zv#)Ymb~XHBM6 zG3;A@GOVw$`KR^gp;BssbEMlLwY z>ch07>AnBi$%!k{@0Z=UF7iW$@k!Q^}11E@UrboFyt=akR{0JICqS^xk5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiRepairer.png index a00a0fc686e33f4dab1b91195eeda9ff687b43fe..6ba8a00ae0ac28973022d4b2c96dfe0650b29b60 100644 GIT binary patch literal 2036 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6~dIox?sjWt-zyc-8)5S5QBJS;+i$PL>0<4{C2Y>wkpDmW@ev@_5tVylA zm;YXRGDho8W~=(CySG)#zBgTu@9fs!UcFcRwb+g?S>JE}|C)N0={nP%JMGV(n{vl+ z9;gj_UdZ%k#^&c;+n+Wv{h77#oPH}KPXdG9MmDws#XttL!~upku@Vj1_ryTVm?U1F zhUY*An?VEPjok(e;d^wiGk;L2I3!~xVavd3kz-KPkj%&@-6Q{CFGD-8nZSd9hQn;p z90sBfHXJNq?9)Eq!T;e%A~W*?%YCeW1Z30?r0_}SC>%Hl)Ng-awi&O)fvw^J!=8NmonLr=9j(!3+)-Ni za(a@z{si%aFa?7HnT}D_6IbN2mdQn zFk1dt{?4unjB3sTkH}&M2EHvI%(&64N(U$?QQ{g=5}cn_Ql40p%21G)nOCBh zms+A=qGzCIn%ZiV3M^2Ld%8G=RK&fV(_OU4fWh@{Sls{r2lJTRS08m3R*-sUYh09( z#4XclZCzGnVf*+4pGBGCJh^uUdzv?~&Xav>d)@wvEB79*3)7$f-ks7Y&Sz>_Om=Hoi8tG;qcWvVb6yRGs`9wHk@KEd0cw@?3U?1e;M_nA2Qf)ceL6a z!4xh!>E_Yd3XIDdUCM+W#3;_4tJC;dZSJf04NI@cKDeKMDZl9ybIb34ZC~UcGVncM znB%}H!*KsFqs#+l<_{`A4*8@7R5NfH%yj(9xQq$Nsc+cGFj?}Af`iV16t-#(0gzNF z<1+7mtu+n$YQ_Z&HT`oK?taPE3pe;!{wj`1JK+252V5%b9BD?)vMe1y@)vUtkbK4L z10-)TC#V^(&_6J7`Pah!gRED?7j&{7bHD7#_G0#jIWHGVKDbdH^VIxCL zh(-FhhYwe)3NRmuUck%GCLW;2@ZWNlq4lwDhPMJtN50y(2=VAG*u`+%ET+2R>+S+= z8Bu1F!y8}sf4thS2{a>#;o4jN&7wS;KW=5}(N@^=BT-t*U`N9hhB;qb-M^oBvpxA5 zmjTbiz3U|pozJ(kIk287n^ofdzmH}ahm#Tt7^T^E=xzvWsN)d7&zBp)nAm=hHAnKn zvI9|!vlRa^3+UUusjX^w&9wS1gVX>q}m3~%~1*b>T}3>c~xh&RkNE@J$^x|PAWOi1DXhlLLS5KIZY?vEed9{c%Q_1B@1pLKY1B+L0#LT=By}Z;C1rt33 zJ=4@yqg0@pBc3jfAr}5;Cv4V$JMu0#LT=By}Z;C1rt33 zJ=4@yqg0@p!=5gVAr}5;Cm3=u849=-^EoFUn<3ealH%gFT}*n73=4IG*RnFbua$eiWMzJA3af}#z`OU?Cu%WP z%zJ*&a(eTot=r-mJeWQ_ZAy~-pzF~zojsmi)$uA@!~ZkqdD%`gF!4-oICYh&;b6Y! d_5Cg#;v24Odj0uTd=}^(22WQ%mvv4FO#nJXd^P|8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f5773f3145e9d2db78ddd3cfa991788290bc4ad2 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33J=4@yqg0@p22U5q z5DWjc6Aif<40v3-OW(`RnY(M(j!H(w@AjUm2jdr+1Z6U<_pXyu;niHK_{6eE=giKt zP64hihxQ#ir0`hV!Es5Wf_`w~yA@}CatQqBp6@U({H17tiT5Xg1%^5YrW;l*a24G$ z%eI7j&DK>1xOQ-^*&Wg-$`BUM(j)q#?GUSy-E&RH5bJcHTNpfD{an^LB{Ts5Z`D@c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e927b9e97a34e4c7fe663bb1e7f3b5438faed7e7 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~E59%+$EDA|lz>9AnIRD+&iT2ysd*(pE(3#eQEFmI zYKlU6W=V#EyQgnJie4%^0|R4Ew=;ndHIVhC8Z?YT$BSlCVB)E=KnAhbya!e!sSO^y1sQOEYC4s&z!i{n;qHf>iEgVtB>I9lAa zptWmu&6|^tDns9-NTpir2v>b|^^|wh+qJQVZ$(yaX-<{gGK<%1dis}d{2vrA``*-@ z?3HeyJG=Yxev6lJO#4sXI<}~)wE2DU=S5$Y7tdGou$pV~?jO)29xdTJpDz2;KkIeT zm)Fa)ez)dtE*9$7JY?XaqQYU)`nah||J!XF=Gcl!QzcJ&_JJb8)78&qol`;+0M1I* AYXATM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fdbf09679f1f1a15a62ff1c23fd2f5e5a707e815 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ=4@yqg0@pGoCJvAr}5iC)jc^849!(&)VB^BPUU{L+KXBuBHU-8(c~i4AR=%`Bt+z zf49x#Jjo>{|KxpbzDLHaWv7xXIk*4TI+*Qte|9hXK@P+I=T_&__c~Ee(=!XNSEoy`Y`N)I+{phq*^S%4RU|;|!&!+~?=B|!YY%+>Hj45r_MV-` z!tuIHaKT*pYsapgjhoQhXB$=fdBub22Eig%j$J#^Bwy@NAGTKV#G`_omnHK&3)V=^ m;Ptj(`4Zdd;8O3fkX_QGBXeh0=sTdl7(8A5T-G@yGywpD)_vOm literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b02f176eb96b6a9cdb238226394fab75f50b909e GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~tDumciPa0kaG;QEW=KSdbAE1aYF-JD%fR4Vl$uzQ znxasiS(2gP?&%wlqL<3fz`!Wr>Eak-ar*6~y8f24nATG-v>Z?<{% zb!}R@#iOE63iU!g{{2pmWuhw6wk>|~eT8&4QxnHb&lfX$R`0I9DKJO&T`S*=>(kDt zY{_%|AiI09qUS2lsRrw(oyqc^mz6g!jzuAg`;t=nPs63tm(H+oJJNXl#b zn$VOWomqUjJWY!-ZK7u1UtdsHBOtcbRjGH4j9pit-Go%h?fvIB)!y;7V`OGcHao;| QRSpzrp00i_>zopr0K>4R4*&oF literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d25613c551c2525fe4e01de5e912c3472c3da3c2 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({MD?lGKCu%5&X6yYrJ zh%9Dc;1&j9Muu5)B!GhKC7!;n?Dtvug_RiC-X16g3dv@MM3gw^=jNv7l>oU649-QV zi6yBi3gww484B*6z5ywEsq8@U^PVn_Ar`0KPTZTt6e!TT-}*6Yq}e+A-!7GG2bW9; z5wn{-HCAO?V@T!PsSDmoZJY4o-PQp8F7G69ZhupmXEkT|?|l7l6#A^hsOb2v+tM>u zGagUS<_cJ>(D&2mzi5iz;lj_2ZXw6Jezo~Ve%Ko|xn}9T>UaESB@?V9ckYnA)ak_V zs*&};EveHc$GfTo9(knAY@g$Mp^GWxXtUq)4U2TbEL{T^X~_juHt&#i%5=D6SFpp~ z=(OIoAD_8r&tLo9{@(qRKfhkC`}O|x<;5#k<@;NU$prs79h!Lq0#LT=By}Z;C1rt33 zJ=4@yqg0@pqn<8~Ar}5iCs=bGau9LdJpbmD)&;Gt+8Ydf1-5K74()2_SQfOU)7vBa zwV#suheNaH8%D^?*lGNIPohxrnRu4NhAhrA^rx*=D`DT`z*Sk9wfgwxX49J~R-aw2 z9n(GZGphW}=S9Be*8Yz;HB8r+v%lW7>nl?S*O!uTg@S$OwoN-C^g^9k)kyGTlVjsN zj_K8Rn-iv{6*|6Qei$ILf4_rDOiRGcxqQ%_wFi2L!PC{xWt~$(69A#Cd;$Of literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6d10d84c5dd07841e6688afd9b1d19ae561f5b19 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPggqRyGbLvzJf4gM=hXTq84D?J>Ta8kIYHoYFIEGmGukAm`)#M=J%G%ka(9$#UQqvk9ro$c_=8Aew8RCwo z|1HpeaXbFb!i9xW?wxuvN1oTFyLs~pnkMz+IUbb=d{t_#qWtWD#O-ZAKb06Qs@=21 zrdxAPrOcW8rnMW+NIY)R`113UV&{uGU9CyCZl913sIdb&CCF>LwqBHelfI{F5=X$H zlhchBUoJeZ`a?JU!gcO~T0<6%hgVXJ)$dDxQZJU>>#%3V0uF@(R~0#q*wxevUI~xvnM`*j$=-U=Wi&tH8h6m|t50#LT=By}Z;C1rt33 zJ=4@yqg0@pJ)SO(Ar}5?`}T6R7zng5Zxa){DAK6Vp&*f4^FRIe?#M|S$|KK;em}V3 z(VrDRtzDL^>I|EdwP@;+Stkmvmo9msyu2xaqw!nq^3OIutKLUeF0pJV=-J5g;N0gJ zw>40ea+n0qV^p&DA@VFx|Ts-VaDlAQ{vA# zNha@5ntdz(NrR5lWs|A#=i}G2Ihaj~fvlUT?$y Ut9(8)2j~w5Pgg&ebxsLQ0K-^!lvI6;>1s;*b z3=DkxK$!8B)5ZfpL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33J=4@yqg0@p6P_-P zAr}5iCmrNEWFX*DyxM)Ch~OXYug`9-fB8Q?IqnkYNf8Kj|uhh(zU*Qak zPOUM>@D@BPz-;hw4p-hg#=a(&^1>YZ@7{v58IM{U%9zNBntWQm(k0q#Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra1rHMi z2-5TVA^-pY7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMHD!e|WdHyHheIk=N5k%-W}2`X7Fz8`7!?)CNC>gB1H>qL_hh7)T^jD9UA&wHiXfV?<*D&QD|W7ZAvV&45_Cy~mx^ zMo}?PkTv8b6_H31d%OG2Iej}D_`>4n-@A?6q&^cdgBcv{@hB)gbFc={E%53s0#LT=By}Z;C1rt33 zJ=4@yqg0@p9#0p?5DWjc{TDeK40v3uH_qPCQLm@CX#YFmotL;bE?X!j&oaBHviD{A zx9o{UGR#fIvtvD{%N#y#wR4ikzlKSdv?j&~3hMSxvuPI1cKm*e!BP5|!S!uL(+;Uk zy5Tsj?bYcO&*vunzbu{5Kj*Agj9@$;L(6GH?it*wORuh7!*XS(8qdDCUryh%A1^6k Ze*R5_?a|ffHlVv0JYD@<);T3K0RT*+XBPkf literal 0 HcmV?d00001 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": "",