aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/loaders
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/loaders')
-rw-r--r--src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java29
-rw-r--r--src/main/java/gregtech/loaders/misc/GT_Bees.java32
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java17
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java61
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java5
-rw-r--r--src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java135
-rw-r--r--src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java14
7 files changed, 286 insertions, 7 deletions
diff --git a/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java b/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java
index ec73782238..87292ced62 100644
--- a/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java
+++ b/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java
@@ -103,6 +103,7 @@ import gregtech.common.bees.GT_Bee_Mutation;
import gregtech.common.items.CombType;
import gregtech.common.items.DropType;
import gregtech.common.items.PropolisType;
+import gregtech.loaders.misc.bees.GT_Flowers;
/**
* Bride Class for Lambdas
@@ -1661,6 +1662,26 @@ public enum GT_BeeDefinition implements IBeeDefinition {
tMutation.requireResource(GameRegistry.findBlock(ExtraCells2.ID, "walrus"), 0);
}
}),
+ MACHINIST(GT_BranchDefinition.ORGANIC, "Machinist", true, new Color(85, 37, 130), new Color(253, 185, 39),
+ beeSpecies -> {
+ beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MACHINIST), 0.2f);
+ beeSpecies.setHumidity(EnumHumidity.NORMAL);
+ beeSpecies.setTemperature(NORMAL);
+ beeSpecies.setHasEffect();
+ }, template -> {
+ AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+ AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+ AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+ AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+ AlleleHelper.instance.set(template, NOCTURNAL, true);
+ AlleleHelper.instance.set(template, FLOWER_PROVIDER, GT_Flowers.FLAMING);
+ AlleleHelper.instance.set(template, FERTILITY, Fertility.MAXIMUM);
+ AlleleHelper.instance.set(template, EFFECT, getEffect(GREGTECH, "MachineBoost"));
+ }, dis -> {
+ IBeeMutationCustom tMutation = dis
+ .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Imperial"), 1);
+ tMutation.addMutationCondition(new GT_Bees.ActiveGTMachineMutationCondition());
+ }),
// Space Bees
SPACE(GT_BranchDefinition.SPACE, "Space", true, new Color(0x003366), new Color(0xC0C0C0), beeSpecies -> {
beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.02f);
@@ -2655,16 +2676,20 @@ public enum GT_BeeDefinition implements IBeeDefinition {
String species = WordUtils.capitalize(lowercaseName);
String uid = "gregtech.bee.species" + species;
- String description = "for.description." + species;
+ String description = "for.description." + lowercaseName;
String name = "for.bees.species." + lowercaseName;
GT_LanguageManager.addStringLocalization("for.bees.species." + lowercaseName, species);
+ String authority = GT_LanguageManager.getTranslation("for.bees.authority." + lowercaseName);
+ if (authority.equals("for.bees.authority." + lowercaseName)) {
+ authority = "GTNH";
+ }
this.branch = branch;
this.species = new GT_AlleleBeeSpecies(
uid,
dominant,
name,
- "GTNH",
+ authority,
description,
branch.getBranch(),
binomial,
diff --git a/src/main/java/gregtech/loaders/misc/GT_Bees.java b/src/main/java/gregtech/loaders/misc/GT_Bees.java
index 497105d75c..a8246360cf 100644
--- a/src/main/java/gregtech/loaders/misc/GT_Bees.java
+++ b/src/main/java/gregtech/loaders/misc/GT_Bees.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.Mods.Forestry;
import static gregtech.api.enums.Mods.GalaxySpace;
import static gregtech.api.enums.Mods.TwilightForest;
+import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
@@ -20,13 +21,16 @@ import forestry.api.genetics.IMutationCondition;
import forestry.core.genetics.alleles.Allele;
import forestry.core.utils.StringUtil;
import gregtech.GT_Mod;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
import gregtech.common.bees.GT_AlleleHelper;
import gregtech.common.items.ItemComb;
import gregtech.common.items.ItemDrop;
import gregtech.common.items.ItemPollen;
import gregtech.common.items.ItemPropolis;
import gregtech.loaders.misc.bees.GT_AlleleEffect;
+import gregtech.loaders.misc.bees.GT_EffectMachineBoost;
import gregtech.loaders.misc.bees.GT_EffectTreeTwister;
+import gregtech.loaders.misc.bees.GT_Flowers;
public class GT_Bees {
@@ -47,6 +51,7 @@ public class GT_Bees {
public static IAlleleInteger superLife;
public static IAlleleBeeEffect treetwisterEffect;
+ public static IAlleleBeeEffect machineBoostEffect;
public static ItemPropolis propolis;
public static ItemPollen pollen;
@@ -57,7 +62,7 @@ public class GT_Bees {
if (!(Forestry.isModLoaded() && GT_Mod.gregtechproxy.mGTBees)) {
return;
}
-
+ GT_Flowers.doInit();
GT_AlleleHelper.initialisation();
setupGTAlleles();
propolis = new ItemPropolis();
@@ -91,6 +96,7 @@ public class GT_Bees {
blinkLife = new AlleleInteger("lifeBlink", 2, false, EnumBeeChromosome.LIFESPAN);
superLife = new AlleleInteger("lifeEon", 600, false, EnumBeeChromosome.LIFESPAN);
+ machineBoostEffect = new GT_EffectMachineBoost();
if (GalaxySpace.isModLoaded() && TwilightForest.isModLoaded()) {
GT_Mod.GT_FML_LOGGER.info("treetwisterEffect: GalaxySpace and TwilightForest loaded, using default impl");
@@ -198,4 +204,28 @@ public class GT_Bees {
return "";
}
}
+
+ public static class ActiveGTMachineMutationCondition implements IMutationCondition {
+
+ public ActiveGTMachineMutationCondition() {
+
+ }
+
+ @Override
+ public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
+ IGenome genome1, IClimateProvider climate) {
+ TileEntity tileEntity = world.getTileEntity(x, y - 1, z);
+ if (tileEntity instanceof BaseMetaTileEntity machine) {
+ if (machine.isActive()) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Needs a running GT Machine below to breed";
+ }
+ }
}
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());
+ }
+}
diff --git a/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
index 8d3614d76a..3a34cc3536 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
@@ -1,6 +1,9 @@
package gregtech.loaders.postload.recipes;
+import static gregtech.api.enums.Mods.EnderIO;
+import static gregtech.api.enums.Mods.Forestry;
import static gregtech.api.recipe.RecipeMaps.sifterRecipes;
+import static gregtech.api.util.GT_ModHandler.getModItem;
import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
import net.minecraft.init.Blocks;
@@ -8,6 +11,7 @@ import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.util.GT_OreDictUnificator;
@@ -43,5 +47,15 @@ public class SifterRecipes implements Runnable {
.duration(30 * SECONDS)
.eut(16)
.addTo(sifterRecipes);
+ GT_Values.RA.stdBuilder()
+ .itemInputs(ItemList.ElectronicsLump.get(1))
+ .itemOutputs(
+ ItemList.Electric_Motor_LV.get(1),
+ getModItem(Forestry.ID, "thermionicTubes", 1L, 5),
+ getModItem(EnderIO.ID, "itemPowerConduit", 1L, 0))
+ .outputChances(25 * 100, 25 * 100, 25 * 100)
+ .duration(30 * SECONDS)
+ .eut(16)
+ .addTo(sifterRecipes);
}
}