From edf3ff74232b6b16625c8347b0d438453f1cca6c Mon Sep 17 00:00:00 2001 From: Quantumlyy Date: Thu, 14 Dec 2023 07:39:02 +0100 Subject: [PATCH] add prod multiplier based on industrial apiary speed --- src/main/java/magicbees/main/Config.java | 4 +- .../TileEntityApiamancersDrainerCommon.java | 12 ++++-- .../TileEntityApiamancersDrainerGT.java | 43 +++++++++++++------ 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index 64ce033..c0f18b6 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -353,11 +353,11 @@ public class Config { p = configuration.get( CATEGORY_GENERAL, "drainerCapacity", - 64, + 512, "The amount that the Apiamancer's Drainer can hold of each aspect", 1, 32767); - drainerCapacity = p.getInt(256); + drainerCapacity = p.getInt(512); p = configuration.get(CATEGORY_GENERAL, "moonDialShowText", false); p.comment = "set to true to show the current moon phase in mouse-over text."; diff --git a/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerCommon.java b/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerCommon.java index 4704c5a..28da442 100644 --- a/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerCommon.java +++ b/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerCommon.java @@ -63,10 +63,8 @@ public class TileEntityApiamancersDrainerCommon extends TileEntity implements IA if (Objects.equals(queenSpecies.getUID(), BeeSpecies.TC_ESSENTIA.getSpecies().getUID())) { IBeeModifier modifier = BeeManager.beeRoot.createBeeHousingModifier(beeHousing); IBee queen = BeeManager.beeRoot.getMember(queenStack); - IBeeGenome queenGenome = queen.getGenome(); - float productionMultiplier = modifier.getProductionModifier(queenGenome, 1.0F); - int amount = (int) Math.ceil(Config.drainerAmount * Math.max(productionMultiplier, 1.0F)); + int amount = Config.drainerAmount * getProductionMultiplier(modifier, queen, above); addToContainer(aspect, amount); drainQueen(beeHousing, modifier, queen); @@ -91,6 +89,14 @@ public class TileEntityApiamancersDrainerCommon extends TileEntity implements IA return beeHousing.getBeeInventory().getQueen(); } + protected int getProductionMultiplier(IBeeModifier modifier, IBee queen, TileEntity te) { + IBeeGenome queenGenome = queen.getGenome(); + float productionMultiplier = modifier.getProductionModifier(queenGenome, 1.0F); + float minimum = Math.max(productionMultiplier, 1.0F); + + return (int) Math.ceil(minimum); + } + private void drainQueen(IBeeHousing housing, IBeeModifier modifier, IBee queen) { float lifespanModifier = modifier.getLifespanModifier(queen.getGenome(), queen.getMate(), 1.0f); queen.age(housing.getWorld(), lifespanModifier); diff --git a/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerGT.java b/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerGT.java index 15af8de..6d0732c 100644 --- a/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerGT.java +++ b/src/main/java/magicbees/tileentity/TileEntityApiamancersDrainerGT.java @@ -7,7 +7,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import cpw.mods.fml.common.Loader; +import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeModifier; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; import gregtech.api.metatileentity.BaseMetaTileEntity; @@ -46,7 +48,7 @@ public class TileEntityApiamancersDrainerGT extends TileEntityApiamancersDrainer IBeeHousing regularCheck = super.beeHousing(above); if (regularCheck != null) return regularCheck; - BaseMetaTileEntity GTMetaTileEntity = GTTileEntity(above); + BaseMetaTileEntity GTMetaTileEntity = getGTTileEntity(above); if (GTMetaTileEntity != null) { IMetaTileEntity underlyingMetaTileEntity = GTMetaTileEntity.getMetaTileEntity(); @@ -60,29 +62,44 @@ public class TileEntityApiamancersDrainerGT extends TileEntityApiamancersDrainer @Override protected boolean canWork(IBeeHousing beeHousing, TileEntity te) { - BaseMetaTileEntity GTMetaTileEntity = GTTileEntity(te); + BaseMetaTileEntity GTMetaTileEntity = getGTTileEntity(te); return GTMetaTileEntity != null ? GTMetaTileEntity.isActive() : super.canWork(beeHousing, te); } @Override protected ItemStack getQueen(IBeeHousing beeHousing, TileEntity te) { - BaseMetaTileEntity GTMetaTileEntity = GTTileEntity(te); + BaseMetaTileEntity GTMetaTileEntity = getGTTileEntity(te); + GT_MetaTileEntity_IndustrialApiary industrialApiary = getGTIndustrialApiary(GTMetaTileEntity); - if (GTMetaTileEntity != null) { - IMetaTileEntity underlyingMetaTileEntity = GTMetaTileEntity.getMetaTileEntity(); - if (!(underlyingMetaTileEntity instanceof GT_MetaTileEntity_IndustrialApiary)) return null; - GT_MetaTileEntity_IndustrialApiary industrialApiary = (GT_MetaTileEntity_IndustrialApiary) underlyingMetaTileEntity; - - return industrialApiary.getUsedQueen(); - } - - return super.getQueen(beeHousing, te); + return industrialApiary != null ? industrialApiary.getUsedQueen() : super.getQueen(beeHousing, te); } - private BaseMetaTileEntity GTTileEntity(TileEntity te) { + @Override + protected int getProductionMultiplier(IBeeModifier modifier, IBee queen, TileEntity te) { + BaseMetaTileEntity GTMetaTileEntity = getGTTileEntity(te); + GT_MetaTileEntity_IndustrialApiary industrialApiary = getGTIndustrialApiary(GTMetaTileEntity); + + int housingProductionMultiplier = super.getProductionMultiplier(modifier, queen, te); + + return industrialApiary != null + ? housingProductionMultiplier * (int) Math.ceil(Math.sqrt(industrialApiary.mSpeed)) + : housingProductionMultiplier; + } + + private BaseMetaTileEntity getGTTileEntity(TileEntity te) { boolean isGTMetaTileEntity = te instanceof BaseMetaTileEntity; return isGTMetaTileEntity ? (BaseMetaTileEntity) te : null; } + + private GT_MetaTileEntity_IndustrialApiary getGTIndustrialApiary(BaseMetaTileEntity bmte) { + if (bmte != null) { + IMetaTileEntity underlyingMetaTileEntity = bmte.getMetaTileEntity(); + if (!(underlyingMetaTileEntity instanceof GT_MetaTileEntity_IndustrialApiary)) return null; + + return (GT_MetaTileEntity_IndustrialApiary) underlyingMetaTileEntity; + } + return null; + } }