aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/loaders/misc/bees
diff options
context:
space:
mode:
authorhacatu <hacatu5000@gmail.com>2023-09-08 20:38:41 +0000
committerGitHub <noreply@github.com>2023-09-08 22:38:41 +0200
commite4f17b7b40503fd34d9dae447802453480b9577c (patch)
treee5d8d6eb5c0caaa87ba40f8fb2e62740f3e1ad3f /src/main/java/gregtech/loaders/misc/bees
parent7e18bbad926a8b142113ecd59e428db08209b4de (diff)
downloadGT5-Unofficial-e4f17b7b40503fd34d9dae447802453480b9577c.tar.gz
GT5-Unofficial-e4f17b7b40503fd34d9dae447802453480b9577c.tar.bz2
GT5-Unofficial-e4f17b7b40503fd34d9dae447802453480b9577c.zip
Add BarnardaC bee effect, enhance tooltip and waila for iapiary (#2255)
* Added BarnardaC bee effect, added harder alternative mutation for indium bee * Improved tooltip and waila hud for iapiary * Shorten effect name for beealyzer * Moved Effects to own files, cached constants * Refactor constant names
Diffstat (limited to 'src/main/java/gregtech/loaders/misc/bees')
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java44
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java86
2 files changed, 130 insertions, 0 deletions
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java b/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java
new file mode 100644
index 0000000000..bb0d9eef8b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java
@@ -0,0 +1,44 @@
+package gregtech.loaders.misc.bees;
+
+import forestry.api.apiculture.EnumBeeChromosome;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IEffectData;
+import forestry.core.genetics.alleles.Allele;
+
+// helper class for implementing custom bee effects, based on MagicBees' implementation
+public abstract class GT_AlleleEffect extends Allele implements IAlleleBeeEffect {
+
+ public static final IAlleleBeeEffect FORESTRY_BASE_EFFECT = (IAlleleBeeEffect) AlleleManager.alleleRegistry
+ .getAllele("forestry.effectNone");
+ protected boolean combinable;
+
+ public GT_AlleleEffect(String id, boolean isDominant) {
+ super("gregtech." + id, "gregtech." + id, isDominant);
+ AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.EFFECT);
+ combinable = false;
+ }
+
+ @Override
+ public boolean isCombinable() {
+ return combinable;
+ }
+
+ public GT_AlleleEffect setIsCombinable(boolean canCombine) {
+ combinable = canCombine;
+ return this;
+ }
+
+ @Override
+ public abstract IEffectData validateStorage(IEffectData storedData);
+
+ @Override
+ public abstract IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
+
+ @Override
+ public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+ return FORESTRY_BASE_EFFECT.doFX(genome, storedData, housing);
+ }
+}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java b/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java
new file mode 100644
index 0000000000..61c78e7443
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java
@@ -0,0 +1,86 @@
+package gregtech.loaders.misc.bees;
+
+import static gregtech.api.enums.Mods.GalaxySpace;
+import static gregtech.api.enums.Mods.TwilightForest;
+
+import java.util.Arrays;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.World;
+
+import forestry.api.apiculture.BeeManager;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.genetics.IEffectData;
+import gregtech.GT_Mod;
+import gregtech.api.util.GT_ModHandler;
+
+public class GT_EffectTreeTwister extends GT_AlleleEffect {
+
+ private static final Integer[] ALLOWED_DIMS = { 2, // spectre
+ 112, // last millenium
+ 60, // bedrock
+ 69, // pocket plane
+ };
+
+ private static final ItemStack TF_TRANS_SAPLING = GT_ModHandler
+ .getModItem(TwilightForest.ID, "tile.TFSapling", 1, 6);
+ private static final ItemStack BARN_SAPLING = GT_ModHandler.getModItem(GalaxySpace.ID, "barnardaCsapling", 1, 0);
+
+ static {
+ if (TF_TRANS_SAPLING == null) {
+ GT_Mod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
+ }
+ if (BARN_SAPLING == null) {
+ GT_Mod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
+ }
+ }
+
+ public GT_EffectTreeTwister() {
+ super("effectTreetwister", false);
+ }
+
+ public IEffectData validateStorage(IEffectData storedData) {
+ return storedData; // unused for this effect
+ }
+
+ public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+ if (TF_TRANS_SAPLING == null || BARN_SAPLING == null) {
+ return storedData;
+ }
+ World world = housing.getWorld();
+ if (!Arrays.asList(ALLOWED_DIMS)
+ .contains(world.provider.dimensionId)) {
+ return storedData;
+ }
+ ChunkCoordinates coords = housing.getCoordinates();
+ IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
+
+ // Get random coords within territory
+ int xRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+ int yRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
+ int zRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[2]);
+
+ int xCoord = coords.posX + world.rand.nextInt(xRange) - xRange / 2;
+ int yCoord = coords.posY + world.rand.nextInt(yRange) - yRange / 2;
+ int zCoord = coords.posZ + world.rand.nextInt(zRange) - zRange / 2;
+
+ ItemStack sourceBlock = new ItemStack(
+ world.getBlock(xCoord, yCoord, zCoord),
+ 1,
+ world.getBlockMetadata(xCoord, yCoord, zCoord));
+ if (TF_TRANS_SAPLING != null && BARN_SAPLING != null && TF_TRANS_SAPLING.isItemEqual(sourceBlock)) {
+ world.setBlock(
+ xCoord,
+ yCoord,
+ zCoord,
+ Block.getBlockFromItem(BARN_SAPLING.getItem()),
+ BARN_SAPLING.getItemDamage(),
+ 2);
+ }
+ return storedData;
+ }
+}