From 755828dacfb3ab03affce91844949639b9e5ec84 Mon Sep 17 00:00:00 2001 From: Draknyte1 Date: Fri, 21 Oct 2016 20:46:47 +1000 Subject: % Trying things to get Frame Housings too apply their BeeModifier to the Alveary. @Mezz, I've had a horrible time trying to backtrack what apiaries do and apply that to the Alveary. Any advice or suggestions? --- .classpath | 4 +- .../forestry/bees/alveary/AlvearyBeeListener.java | 18 ++ .../bees/alveary/IAlvearyFrameHousing.java | 9 + .../bees/alveary/TileAlvearyFrameHousing.java | 193 ++++++++++++++------- .../bees/alveary/gui/InventoryFrameHousing.java | 102 ++++++++++- 5 files changed, 256 insertions(+), 70 deletions(-) create mode 100644 src/Java/gtPlusPlus/xmod/forestry/bees/alveary/AlvearyBeeListener.java create mode 100644 src/Java/gtPlusPlus/xmod/forestry/bees/alveary/IAlvearyFrameHousing.java diff --git a/.classpath b/.classpath index 22eb51343b..94f92859a9 100644 --- a/.classpath +++ b/.classpath @@ -11,8 +11,8 @@ - + - + diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/AlvearyBeeListener.java b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/AlvearyBeeListener.java new file mode 100644 index 0000000000..6736c54309 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/AlvearyBeeListener.java @@ -0,0 +1,18 @@ +package gtPlusPlus.xmod.forestry.bees.alveary; + +import forestry.api.apiculture.DefaultBeeListener; +import gtPlusPlus.xmod.forestry.bees.alveary.gui.InventoryFrameHousing; + +public class AlvearyBeeListener extends DefaultBeeListener { + private final IAlvearyFrameHousing apiary; + + public AlvearyBeeListener(IAlvearyFrameHousing apiary) { + this.apiary = apiary; + } + + @Override + public void wearOutEquipment(int amount) { + InventoryFrameHousing apiaryInventory = apiary.getAlvearyInventory(); + apiaryInventory.wearOutFrames(apiary, amount); + } +} diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/IAlvearyFrameHousing.java b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/IAlvearyFrameHousing.java new file mode 100644 index 0000000000..6eeefa2696 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/IAlvearyFrameHousing.java @@ -0,0 +1,9 @@ +package gtPlusPlus.xmod.forestry.bees.alveary; + +import forestry.api.apiculture.IBeeHousing; +import gtPlusPlus.xmod.forestry.bees.alveary.gui.InventoryFrameHousing; + +public interface IAlvearyFrameHousing extends IBeeHousing { + InventoryFrameHousing getAlvearyInventory(); + void wearOutFrames(IBeeHousing beeHousing, int amount); +} diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/TileAlvearyFrameHousing.java b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/TileAlvearyFrameHousing.java index 12f97b5f0c..794b5d1be8 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/TileAlvearyFrameHousing.java +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/TileAlvearyFrameHousing.java @@ -14,13 +14,19 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.DefaultBeeListener; import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeListener; import forestry.api.apiculture.IBeeModifier; import forestry.api.apiculture.IBeekeepingMode; import forestry.api.apiculture.IHiveFrame; +import forestry.api.arboriculture.EnumGermlingType; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.ISpeciesRoot; import forestry.api.multiblock.IAlvearyComponent; -import forestry.apiculture.ApiaryBeeModifier; +import forestry.apiculture.AlvearyBeeModifier; import forestry.apiculture.multiblock.MultiblockLogicAlveary; import forestry.apiculture.network.packets.PacketActiveUpdate; import forestry.apiculture.worldgen.Hive; @@ -32,15 +38,17 @@ import forestry.core.inventory.wrappers.InventoryIterator; import forestry.core.proxy.Proxies; import forestry.core.tiles.IActivatable; import forestry.core.utils.ItemStackUtil; +import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.forestry.bees.alveary.gui.CONTAINER_FrameHousing; import gtPlusPlus.xmod.forestry.bees.alveary.gui.GUI_FrameHousing; import gtPlusPlus.xmod.forestry.bees.alveary.gui.InventoryFrameHousing; public class TileAlvearyFrameHousing extends FR_TileAlveary -implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, IAlvearyComponent.BeeModifier +implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, IAlvearyComponent.BeeModifier, IAlvearyFrameHousing, IAlvearyComponent.BeeListener { private final InventoryFrameHousing inventory; + private final IBeeListener beeListener; private final Stack pendingSpawns = new Stack(); private boolean active; @@ -48,6 +56,7 @@ implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, { super(FR_BlockAlveary.Type.FRAME); this.inventory = new InventoryFrameHousing(this); + this.beeListener = new AlvearyFrameHousingBeeListener(this.inventory); } @@ -66,17 +75,23 @@ implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, @Override public void updateServer(int tickCount) { - + if (getInternalInventory() == null) { return; } - + if (this.inventory.getStackInSlot(0) != null) { - setActive(true); - if (tickCount % 1000 == 0) { - wearOutFrames(this, 1); + if (((MultiblockLogicAlveary)getMultiblockLogic()).getController().getBeekeepingLogic().canWork()){ + setActive(true); + if (tickCount % 1000 == 0) { + wearOutFrames(this, 1); + } } + else { + Utils.LOG_INFO("Cannot work - Probably no queen alive."); + } + } else { @@ -85,7 +100,7 @@ implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, if (tickCount % 500 != 0) { return; } - + } @Override @@ -224,50 +239,51 @@ implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, { return new CONTAINER_FrameHousing(this, player); } - - private final IBeeModifier beeModifier = new ApiaryBeeModifier(); - //private final IBeeListener beeListener = new ApiaryBeeListener(this); + + private final IBeeModifier beeModifier = new AlvearyBeeModifier(); + //private final IBeeListener beeListener = new AlvearyBeeListener(this); + private final Iterable beeListenerList = ((MultiblockLogicAlveary)getMultiblockLogic()).getController().getBeeListeners(); @Override public Collection getBeeModifiers() - { - List beeModifiers = new ArrayList(); - - beeModifiers.add(this.beeModifier); - for (IHiveFrame frame : getFrames(this.inventory)) { - beeModifiers.add(frame.getBeeModifier()); - } - return beeModifiers; - } - + { + List beeModifiers = new ArrayList(); + + beeModifiers.add(this.beeModifier); + for (IHiveFrame frame : getFrames(this.inventory)) { + beeModifiers.add(frame.getBeeModifier()); + } + return beeModifiers; + } + public Collection getFrames(IInventory inventory) - { - Collection hiveFrames = new ArrayList(inventory.getSizeInventory()); - for (int i = 0; i < inventory.getSizeInventory(); i++) - { - ItemStack stackInSlot = getStackInSlot(i); - if (stackInSlot != null) - { - Item itemInSlot = stackInSlot.getItem(); - if ((itemInSlot instanceof IHiveFrame)) { - hiveFrames.add((IHiveFrame)itemInSlot); - } - } - } - return hiveFrames; - } + { + Collection hiveFrames = new ArrayList(inventory.getSizeInventory()); + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + ItemStack stackInSlot = getStackInSlot(i); + if (stackInSlot != null) + { + Item itemInSlot = stackInSlot.getItem(); + if ((itemInSlot instanceof IHiveFrame)) { + hiveFrames.add((IHiveFrame)itemInSlot); + } + } + } + return hiveFrames; + } @Override public IBeeModifier getBeeModifier() { - List beeModifiers = new ArrayList(); - - beeModifiers.add(this.beeModifier); - for (IHiveFrame frame : getFrames(this.inventory)) { - beeModifiers.add(frame.getBeeModifier()); - } - return beeModifiers.get(0); - } - + List beeModifiers = new ArrayList(); + + //beeModifiers.add(this.beeModifier); + for (IHiveFrame frame : getFrames(this.inventory)) { + beeModifiers.add(frame.getBeeModifier()); + } + return beeModifiers.get(0); + } + private ItemStack getQueenStack() { ItemStack queenStack = ((MultiblockLogicAlveary)getMultiblockLogic()).getController().getBeeInventory().getQueen(); @@ -276,26 +292,69 @@ implements ISidedFrameWearingInventory, IActivatable, IAlvearyComponent.Active, @Override public void wearOutFrames(IBeeHousing beeHousing, int amount) - { - IBeekeepingMode beekeepingMode = BeeManager.beeRoot.getBeekeepingMode(beeHousing.getWorld()); - int wear = Math.round(amount * beekeepingMode.getWearModifier()); - for (int i = 0; i < this.inventory.getSizeInventory(); i++) - { - ItemStack hiveFrameStack = getStackInSlot(i); - if (hiveFrameStack != null) - { - Item hiveFrameItem = hiveFrameStack.getItem(); - if ((hiveFrameItem instanceof IHiveFrame)) - { - IHiveFrame hiveFrame = (IHiveFrame)hiveFrameItem; - - ItemStack queenStack = getQueenStack(); - IBee queen = BeeManager.beeRoot.getMember(queenStack); - ItemStack usedFrame = hiveFrame.frameUsed(beeHousing, hiveFrameStack, queen, wear); - - setInventorySlotContents(i, usedFrame); - } - } - } - } + { + IBeekeepingMode beekeepingMode = BeeManager.beeRoot.getBeekeepingMode(beeHousing.getWorld()); + int wear = Math.round(amount * beekeepingMode.getWearModifier()); + for (int i = 0; i < this.inventory.getSizeInventory(); i++) + { + ItemStack hiveFrameStack = getStackInSlot(i); + if (hiveFrameStack != null) + { + Item hiveFrameItem = hiveFrameStack.getItem(); + if ((hiveFrameItem instanceof IHiveFrame)) + { + IHiveFrame hiveFrame = (IHiveFrame)hiveFrameItem; + Utils.LOG_INFO("Wearing out frame by "+amount); + ItemStack queenStack = getQueenStack(); + IBee queen = BeeManager.beeRoot.getMember(queenStack); + ItemStack usedFrame = hiveFrame.frameUsed(beeHousing, hiveFrameStack, queen, wear); + + //((MultiblockLogicAlveary)getMultiblockLogic()).getController().getBeeListeners(). + + setInventorySlotContents(i, usedFrame); + } + } + } + } + + @Override + public InventoryFrameHousing getAlvearyInventory() { + return inventory; + } + + @Override + public IBeeListener getBeeListener() { + return beeListener; + } + + static class AlvearyFrameHousingBeeListener + extends DefaultBeeListener + { + private final InventoryFrameHousing inventory; + + public AlvearyFrameHousingBeeListener(InventoryFrameHousing inventory) + { + this.inventory = inventory; + } + + @Override + public boolean onPollenRetrieved(IIndividual pollen) + { + /*if (!((Object) this.inventory).canStorePollen()) { + return false; + }*/ + ISpeciesRoot speciesRoot = AlleleManager.alleleRegistry.getSpeciesRoot(pollen.getClass()); + + ItemStack pollenStack = speciesRoot.getMemberStack(pollen, EnumGermlingType.POLLEN.ordinal()); + if (pollenStack != null) + { + // ((Object) this.inventory).storePollenStack(pollenStack); + return true; + } + return false; + } + } + + + } diff --git a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/gui/InventoryFrameHousing.java b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/gui/InventoryFrameHousing.java index 406c3c47cb..9d6dd06f2d 100644 --- a/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/gui/InventoryFrameHousing.java +++ b/src/Java/gtPlusPlus/xmod/forestry/bees/alveary/gui/InventoryFrameHousing.java @@ -1,16 +1,36 @@ package gtPlusPlus.xmod.forestry.bees.alveary.gui; import net.minecraft.item.ItemStack; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; + +import com.mojang.authlib.GameProfile; + import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeHousingInventory; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IBeekeepingLogic; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.core.IErrorLogic; import forestry.core.inventory.InventoryAdapterTile; import forestry.core.utils.ItemStackUtil; +import gtPlusPlus.xmod.forestry.bees.alveary.IAlvearyFrameHousing; import gtPlusPlus.xmod.forestry.bees.alveary.TileAlvearyFrameHousing; -public class InventoryFrameHousing extends InventoryAdapterTile +public class InventoryFrameHousing extends InventoryAdapterTile implements IAlvearyFrameHousing { + + TileAlvearyFrameHousing alvearyFrame; + public InventoryFrameHousing(TileAlvearyFrameHousing alvearyFrame) { super(alvearyFrame, 1, "FrameHousingInv"); + this.alvearyFrame = alvearyFrame; } @Override @@ -18,4 +38,84 @@ public class InventoryFrameHousing extends InventoryAdapterTile getBeeListeners() { + return alvearyFrame.getBeeListeners(); + } + + @Override + public Iterable getBeeModifiers() { + return alvearyFrame.getBeeModifiers(); + } + + @Override + public IBeekeepingLogic getBeekeepingLogic() { + return alvearyFrame.getBeekeepingLogic(); + } + + @Override + public BiomeGenBase getBiome() { + return alvearyFrame.getBiome(); + } + + @Override + public int getBlockLightValue() { + return alvearyFrame.getBlockLightValue(); + } + + @Override + public EnumHumidity getHumidity() { + return alvearyFrame.getHumidity(); + } + + @Override + public GameProfile getOwner() { + return alvearyFrame.getOwner(); + } + + @Override + public EnumTemperature getTemperature() { + return alvearyFrame.getTemperature(); + } + + @Override + public World getWorld() { + return alvearyFrame.getWorld(); + } + + @Override + public ChunkCoordinates getCoordinates() { + return alvearyFrame.getCoordinates(); + } + + @Override + public IErrorLogic getErrorLogic() { + return alvearyFrame.getErrorLogic(); + } + + @Override + public InventoryFrameHousing getAlvearyInventory() { + return this; + } + + @Override + public void wearOutFrames(IBeeHousing beeHousing, int amount) { + alvearyFrame.wearOutFrames(beeHousing, amount); + } } -- cgit