diff options
author | Nico Spiske <64710705+Nilau1998@users.noreply.github.com> | 2024-09-01 14:38:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-01 14:38:40 +0200 |
commit | 148ff2956dad2377e6043173ad8b33d6acbc6ac6 (patch) | |
tree | 409cd58d3b847a0450efd8af7239b1860750e6c5 /src/main/java/gregtech/loaders/misc/bees | |
parent | 784fc5aaca22995a9652ca228484c1833c962db0 (diff) | |
download | GT5-Unofficial-148ff2956dad2377e6043173ad8b33d6acbc6ac6.tar.gz GT5-Unofficial-148ff2956dad2377e6043173ad8b33d6acbc6ac6.tar.bz2 GT5-Unofficial-148ff2956dad2377e6043173ad8b33d6acbc6ac6.zip |
Add bee in courtesy to DaddyDiddy (#2507)
* [major] new effect, comb, flower, mutation condition
* [minor] imports
* Update GT_BeeDefinition.java
* [minor] fancier processing
* [patch] bs
* Update ItemComb.java
* Update SifterRecipes.java
* [minor] nuked machine booster effect
* Added back the effect but now with tick throttling. Right now it is set so the effect only gets triggered every 30 seconds.
* SA & BS
* [minor] add dynamic authority
* rename comb type and bee
reduce speed to super speed
* update bs + sa
* changed to fastest because super speed was 2x blinding (wired naming)
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/loaders/misc/bees')
4 files changed, 214 insertions, 4 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 index bb0d9eef8b..25198968d2 100644 --- a/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java +++ b/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java @@ -14,11 +14,13 @@ 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; + protected int tickThrottle; // If set, this amount of ticks have to pass before an effect ticks - public GT_AlleleEffect(String id, boolean isDominant) { + public GT_AlleleEffect(String id, boolean isDominant, int tickThrottle) { super("gregtech." + id, "gregtech." + id, isDominant); AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.EFFECT); combinable = false; + this.tickThrottle = tickThrottle; } @Override @@ -35,7 +37,18 @@ public abstract class GT_AlleleEffect extends Allele implements IAlleleBeeEffect public abstract IEffectData validateStorage(IEffectData storedData); @Override - public abstract IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing); + public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) { + int ticksPassed = storedData.getInteger(0); + if (ticksPassed >= this.tickThrottle) { + storedData = this.doEffectTickThrottled(genome, storedData, housing); + } else { + storedData.setInteger(0, ticksPassed + 1); + } + return storedData; + } + + protected abstract IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, + IBeeHousing housing); @Override public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) { diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java b/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java new file mode 100644 index 0000000000..a50c0452bb --- /dev/null +++ b/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java @@ -0,0 +1,61 @@ +package gregtech.loaders.misc.bees; + +import net.minecraft.tileentity.TileEntity; +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 forestry.core.genetics.EffectData; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; + +public class GT_EffectMachineBoost extends GT_AlleleEffect { + + public GT_EffectMachineBoost() { + super("effectMachineBoost", false, 600); + } + + @Override + public IEffectData validateStorage(IEffectData storedData) { + if (storedData == null) { + storedData = new EffectData(1, 1); + } + return storedData; + } + + @Override + protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) { + World world = housing.getWorld(); + 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; + + // If gt machine of tier lower equal than ev, boost recipe by 2s + TileEntity tileEntity = world.getTileEntity(xCoord, yCoord, zCoord); + if (tileEntity instanceof BaseMetaTileEntity machine) { + if (machine.getMetaTileEntity() instanceof GT_MetaTileEntity_TieredMachineBlock tieredMachine) { + if (tieredMachine.mTier <= 4) { // EV + if (machine.isActive() && machine.getMaxProgress() > 60) { + machine.increaseProgress(40); + } + } + } + } + + storedData.setInteger(0, 0); + + return storedData; + } +} diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java b/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java index d188a3eb9b..a36635db57 100644 --- a/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java +++ b/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java @@ -40,14 +40,15 @@ public class GT_EffectTreeTwister extends GT_AlleleEffect { } public GT_EffectTreeTwister() { - super("effectTreetwister", false); + super("effectTreetwister", false, 0); } public IEffectData validateStorage(IEffectData storedData) { return storedData; // unused for this effect } - public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) { + @Override + protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) { if (TF_TRANS_SAPLING == null || BARN_SAPLING == null) { return storedData; } diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java b/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java new file mode 100644 index 0000000000..d2ab1d6297 --- /dev/null +++ b/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java @@ -0,0 +1,135 @@ +package gregtech.loaders.misc.bees; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.EnumPlantType; + +import forestry.api.apiculture.FlowerManager; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IAlleleFlowers; +import forestry.api.genetics.IChromosomeType; +import forestry.api.genetics.IFlower; +import forestry.api.genetics.IFlowerProvider; +import forestry.api.genetics.IIndividual; +import forestry.api.genetics.IPollinatable; +import forestry.api.genetics.ISpeciesRoot; +import gregtech.api.util.GT_LanguageManager; + +public enum GT_Flowers implements IFlowerProvider, IAlleleFlowers, IChromosomeType { + + FLAMING; + + protected boolean dominant; + + GT_Flowers() { + dominant = true; + } + + public static void doInit() { + for (GT_Flowers effect : values()) { + effect.register(); + } + } + + @Override + public String getUID() { + return "for.flowers." + toString().toLowerCase(); + } + + @Override + public boolean isDominant() { + return dominant; + } + + @Override + public IFlowerProvider getProvider() { + return this; + } + + @Override + public String getDescription() { + return GT_LanguageManager.getTranslation("for.flowers." + name().toLowerCase()); + } + + public void register() { + for (ItemStack stack : getItemStacks()) { + FlowerManager.flowerRegistry.registerAcceptableFlower(Block.getBlockFromItem(stack.getItem()), getUID()); + } + + AlleleManager.alleleRegistry.registerAllele(this, this); + } + + public ItemStack[] getItemStacks() { + switch (this) { + case FLAMING: + return new ItemStack[] { new ItemStack(Blocks.fire) }; + } + return new ItemStack[0]; + } + + @Override + public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) { + EnumSet<EnumPlantType> types = pollinatable.getPlantType(); + return types.size() > 1 || !types.contains(EnumPlantType.Nether); + } + + public boolean isAcceptedFlower(World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block == null) { + return false; + } + + switch (this) { + case FLAMING: + return block == Blocks.fire; + } + return false; + } + + @Override + public boolean growFlower(World world, IIndividual individual, int x, int y, int z) { + return false; + } + + @Override + public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products) { + return products; + } + + @Override + public String getName() { + return getDescription(); + } + + @Override + public String getUnlocalizedName() { + return getUID(); + } + + @Override + public String getFlowerType() { + return getUID(); + } + + @Override + public Set<IFlower> getFlowers() { + return new HashSet<>(); + } + + @Override + public Class<? extends IAllele> getAlleleClass() { + return getClass(); + } + + @Override + public ISpeciesRoot getSpeciesRoot() { + return AlleleManager.alleleRegistry.getSpeciesRoot(getUID()); + } +} |