From 00f3b4dc05800a81e77ddb58b4ec5f01090ccdb7 Mon Sep 17 00:00:00 2001 From: Rundas <38040866+Rundas01@users.noreply.github.com> Date: Sun, 2 Jun 2024 07:16:12 +0200 Subject: [PATCH] Small QoL Bee Update (#2458) --- .../mutation/MaterialMutationCondition.java | 63 +++++++++++++++++++ .../resources/assets/gregtech/lang/en_us.lang | 3 + 2 files changed, 66 insertions(+) create mode 100644 src/main/java/gregtech/integration/forestry/mutation/MaterialMutationCondition.java diff --git a/src/main/java/gregtech/integration/forestry/mutation/MaterialMutationCondition.java b/src/main/java/gregtech/integration/forestry/mutation/MaterialMutationCondition.java new file mode 100644 index 00000000000..a4ea54cdf23 --- /dev/null +++ b/src/main/java/gregtech/integration/forestry/mutation/MaterialMutationCondition.java @@ -0,0 +1,63 @@ +package gregtech.integration.forestry.mutation; + +import gregtech.api.unification.OreDictUnifier; +import gregtech.api.unification.material.Material; +import gregtech.api.util.LocalizationUtils; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import forestry.api.apiculture.IBeeHousing; +import forestry.api.climate.IClimateProvider; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IMutationCondition; +import forestry.core.tiles.TileUtil; + +import java.util.HashSet; +import java.util.Set; + +import static org.apache.commons.lang3.StringUtils.capitalize; + +public class MaterialMutationCondition implements IMutationCondition { + + private final Set acceptedBlocks = new HashSet(); + private final String displayName; + + public MaterialMutationCondition(Material material) { + this.displayName = LocalizationUtils.format("gregtech.mutation.block_of", material.getLocalizedName()); + String oredictName = "block" + capitalize(material.getName()); + + for (ItemStack ore : OreDictUnifier.getAllWithOreDictionaryName(oredictName)) { + if (!ore.isEmpty()) { + Item oreItem = ore.getItem(); + Block oreBlock = Block.getBlockFromItem(oreItem); + if (oreBlock != Blocks.AIR) { + this.acceptedBlocks.addAll(oreBlock.getBlockState().getValidStates()); + } + } + } + } + + public float getChance(World world, BlockPos pos, IAllele allele0, IAllele allele1, IGenome genome0, + IGenome genome1, IClimateProvider climate) { + TileEntity tile; + do { + pos = pos.down(); + tile = TileUtil.getTile(world, pos); + } while (tile instanceof IBeeHousing); + + IBlockState blockState = world.getBlockState(pos); + return this.acceptedBlocks.contains(blockState) ? 1.0F : 0.0F; + } + + public String getDescription() { + return LocalizationUtils.format("for.mutation.condition.resource", this.displayName); + } +} diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 78cbaeb9f2d..729c9210520 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -6286,3 +6286,6 @@ gregtech.scanner.forestry.larvae=§oScanned Larvae gregtech.scanner.forestry.serum=§oScanned Serum gregtech.scanner.forestry.caterpillar=§oScanned Caterpillar gregtech.scanner.forestry.pollen=§oScanned Pollen + +# Mutation +gregtech.mutation.block_of=Block of %s