Compare commits

..
9 Commits
Author SHA1 Message Date
Martin Robertz d4ce528b2d Merge remote-tracking branch 'Nilau1998/bee-lore+name' into dev 2024-09-11 08:22:18 +02:00
Nilau1998 d863b3c311 [minor] better formatting, logic for bees, trees and butterflies. 2024-09-10 22:59:36 +02:00
Martin Robertz 255a71f3a1 update 2024-09-10 17:27:18 +02:00
Martin Robertz 66019fe027 Merge branch 'master' into bee-lore+name 2024-09-10 17:25:42 +02:00
11eb4b62df Fix broken reflection into GT post-renaming (#80)
* fix reflection

* spotlessApply (#81)

Co-authored-by: GitHub GTNH Actions <>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-08 22:50:17 +02:00
Nilau1998 5b2a65d2aa [minor] add ability to display bee lore and add Discoverd by tag 2024-09-01 12:17:39 +02:00
Martin Robertz a172cb379f update 2024-08-31 11:27:01 +02:00
Connor-Colenso c979d1fa79 Fix Alveary Mutation Overflow (#76) 2024-08-30 15:09:10 +01:00
Astatine5985 ef5825edcf Bee Mutation Logic Fix (#75) 2024-08-29 21:55:11 +02:00
22 changed files with 198 additions and 17 deletions

No files matched your search

+3 -3
View File
@@ -2,9 +2,9 @@
dependencies {
api('curse.maven:cofh-lib-220333:2388748')
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-alpha52:api')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.6.8-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.6.2:api')
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta6:api')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.6.35-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.7.0:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:api')
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
compileOnly('curse.maven:craftguide-75557:2459320')
+12 -1
View File
@@ -85,6 +85,11 @@ accessTransformersFile =
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
# Mixin classes will have access to "main" classes, but not the other way around.
separateMixinSourceSet =
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
@@ -117,9 +122,15 @@ minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
# list of strings, with the acceptable keys being(case does not matter):
# cursemaven
# modrinth
excludeWellKnownRepositories =
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+4 -1
View File
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Vendored
+2
View File
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.23'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.27'
}
@@ -52,4 +52,8 @@ public interface IIndividual extends INBTTagable {
IIndividual copy();
boolean isPureBred(IChromosomeType chromosomeType);
void addLore(List<String> text);
void addDiscoveredBy(List<String> text);
}
@@ -8,6 +8,9 @@
******************************************************************************/
package forestry.apiculture.genetics;
import static forestry.core.utils.MathUtil.safeAdd;
import static forestry.core.utils.MathUtil.safeMultiply;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -15,6 +18,7 @@ import java.util.Map;
import java.util.Random;
import java.util.Set;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -62,6 +66,7 @@ import forestry.core.errors.EnumErrorCode;
import forestry.core.genetics.Chromosome;
import forestry.core.genetics.GenericRatings;
import forestry.core.genetics.IndividualLiving;
import forestry.core.proxy.Proxies;
import forestry.core.utils.GeneticsUtil;
import forestry.core.utils.Log;
import forestry.core.utils.StringUtil;
@@ -373,6 +378,36 @@ public class Bee extends IndividualLiving implements IBee {
return suitableBiomes;
}
@Override
public void addLore(List<String> text) {
IAlleleBeeSpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 0) {
String speciesLore = descTokens[0];
if (!speciesLore.isEmpty() && !speciesLore.contains("for.description") && Proxies.common.isCtrlDown()) {
FontRenderer fontRenderer = Proxies.common.getClientInstance().fontRenderer;
String formattedLore = EnumChatFormatting.GOLD + speciesLore;
List<String> formattedLoreList = fontRenderer.listFormattedStringToWidth(formattedLore, 200);
text.addAll(formattedLoreList);
}
}
}
@Override
public void addDiscoveredBy(List<String> text) {
IAlleleBeeSpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 2) {
String discoveredBy = descTokens[2];
if (!discoveredBy.isEmpty()) {
text.add("");
text.add("Discovered by " + EnumChatFormatting.ITALIC + discoveredBy);
}
}
}
@Override
public void addTooltip(List<String> list) {
@@ -699,9 +734,9 @@ public class Bee extends IndividualLiving implements IBee {
// boost chance for researched mutations
if (breedingTracker.isResearched(beeMutation)) {
float mutationBoost = chance * (Config.researchMutationBoostMultiplier - 1.0f);
float mutationBoost = safeMultiply(chance, Config.researchMutationBoostMultiplier - 1.0f);
mutationBoost = Math.min(Config.maxResearchMutationBoostPercent, mutationBoost);
chance += mutationBoost;
chance = safeAdd(chance, mutationBoost);
}
if (chance > world.rand.nextFloat() * 100) {
@@ -8,6 +8,8 @@
******************************************************************************/
package forestry.apiculture.genetics;
import static forestry.core.utils.MathUtil.safeMultiply;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
@@ -49,8 +51,8 @@ public class BeeMutation extends Mutation implements IBeeMutationCustom {
IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world).getBeeModifier();
processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance);
processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance);
processedChance = safeMultiply(processedChance, beeHousingModifier.getMutationModifier(genome0, genome1, 1.0F));
processedChance = safeMultiply(processedChance, beeModeModifier.getMutationModifier(genome0, genome1, 1.0F));
return processedChance;
}
@@ -16,6 +16,7 @@ import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
@@ -50,6 +51,7 @@ import forestry.arboriculture.genetics.alleles.AlleleFruit;
import forestry.core.config.Config;
import forestry.core.genetics.Chromosome;
import forestry.core.genetics.Individual;
import forestry.core.proxy.Proxies;
import forestry.core.utils.StringUtil;
public class Tree extends Individual implements ITree, IPlantable {
@@ -298,6 +300,36 @@ public class Tree extends Individual implements ITree, IPlantable {
return plantTypes;
}
@Override
public void addLore(List<String> text) {
IAlleleTreeSpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 0) {
String speciesLore = descTokens[0];
if (!speciesLore.isEmpty() && !speciesLore.contains("for.description") && Proxies.common.isCtrlDown()) {
FontRenderer fontRenderer = Proxies.common.getClientInstance().fontRenderer;
String formattedLore = EnumChatFormatting.GOLD + speciesLore;
List<String> formattedLoreList = fontRenderer.listFormattedStringToWidth(formattedLore, 200);
text.addAll(formattedLoreList);
}
}
}
@Override
public void addDiscoveredBy(List<String> text) {
IAlleleTreeSpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 2) {
String discoveredBy = descTokens[2];
if (!discoveredBy.isEmpty()) {
text.add("");
text.add("Discovered by " + EnumChatFormatting.ITALIC + discoveredBy);
}
}
}
@Override
public void addTooltip(List<String> list) {
@@ -8,6 +8,8 @@
******************************************************************************/
package forestry.core.genetics;
import java.util.List;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.genetics.IChromosomeType;
@@ -79,4 +81,10 @@ public abstract class Individual implements IIndividual {
return getGenome().getActiveAllele(chromosomeType).getUID()
.equals(getGenome().getInactiveAllele(chromosomeType).getUID());
}
@Override
public void addLore(List<String> text) {}
@Override
public void addDiscoveredBy(List<String> text) {}
}
@@ -72,6 +72,12 @@ public abstract class ItemGE extends ItemForestry {
if (individual.isAnalyzed()) {
if (Proxies.common.isShiftDown()) {
individual.addTooltip(list);
individual.addDiscoveredBy(list);
if (Proxies.common.isCtrlDown()) {
individual.addLore(list);
} else {
list.add(EnumChatFormatting.ITALIC + "<" + StringUtil.localize("gui.tooltip.tml") + ">");
}
} else {
list.add(EnumChatFormatting.ITALIC + "<" + StringUtil.localize("gui.tooltip.tmi") + ">");
}
@@ -8,6 +8,8 @@
******************************************************************************/
package forestry.core.genetics.mutations;
import static forestry.core.utils.MathUtil.safeMultiply;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -126,7 +128,9 @@ public abstract class Mutation implements IMutationCustom {
IGenome genome1, IClimateProvider climate) {
float mutationChance = chance;
for (IMutationCondition mutationCondition : mutationConditions) {
mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate);
mutationChance = safeMultiply(
mutationChance,
mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate));
if (mutationChance == 0) {
return 0;
}
@@ -61,6 +61,10 @@ public class ProxyCommon {
return false;
}
public boolean isCtrlDown() {
return false;
}
public void playSoundFX(World world, int x, int y, int z, Block block) {
Proxies.net.sendNetworkPacket(new PacketFXSignal(PacketFXSignal.SoundFXType.LEAF, x, y, z, block, 0), world);
}
@@ -63,6 +63,11 @@ public class ProxyCommonClient extends ProxyCommon {
return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT);
}
@Override
public boolean isCtrlDown() {
return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL);
}
@Override
public String getDisplayName(ItemStack itemstack) {
return itemstack.getItem().getItemStackDisplayName(itemstack);
@@ -241,16 +241,16 @@ public abstract class BlockUtil {
if (bw) try {
// noinspection unchecked
BW_MetaGenerated_WerkstoffBlocksClass = (Class<? extends Block>) Class
.forName("com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_WerkstoffBlocks");
BWBlocks = (Block) Class.forName("com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader")
.getField("BWBlocks").get(null);
.forName("bartworks.system.material.BWMetaGeneratedWerkstoffBlocks");
BWBlocks = (Block) Class.forName("bartworks.system.material.WerkstoffLoader").getField("BWBlocks")
.get(null);
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
if (gt) try {
// noinspection unchecked
GTBlockMachines_Class = (Class<? extends Block>) Class.forName("gregtech.common.blocks.GT_Block_Machines");
GTBlockMachines = (Block) Class.forName("gregtech.api.GregTech_API").getField("sBlockMachines").get(null);
GTBlockMachines_Class = (Class<? extends Block>) Class.forName("gregtech.common.blocks.BlockMachines");
GTBlockMachines = (Block) Class.forName("gregtech.api.GregTechAPI").getField("sBlockMachines").get(null);
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
@@ -0,0 +1,30 @@
package forestry.core.utils;
import java.math.BigDecimal;
public class MathUtil {
private static final BigDecimal MAX_FLOAT = BigDecimal.valueOf(Float.MAX_VALUE);
private static final BigDecimal MIN_FLOAT = BigDecimal.valueOf(-Float.MAX_VALUE);
private static float clampToFloatRange(BigDecimal result) {
if (result.compareTo(MAX_FLOAT) > 0) {
return Float.MAX_VALUE;
} else if (result.compareTo(MIN_FLOAT) < 0) {
return -Float.MAX_VALUE;
}
return result.floatValue();
}
public static float safeMultiply(float a, float b) {
BigDecimal bigA = BigDecimal.valueOf(a);
BigDecimal bigB = BigDecimal.valueOf(b);
return clampToFloatRange(bigA.multiply(bigB));
}
public static float safeAdd(float a, float b) {
BigDecimal bigA = BigDecimal.valueOf(a);
BigDecimal bigB = BigDecimal.valueOf(b);
return clampToFloatRange(bigA.add(bigB));
}
}
@@ -14,6 +14,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Random;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.entity.EntityCreature;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -41,6 +42,7 @@ import forestry.api.lepidopterology.IEntityButterfly;
import forestry.core.genetics.Chromosome;
import forestry.core.genetics.GenericRatings;
import forestry.core.genetics.IndividualLiving;
import forestry.core.proxy.Proxies;
import forestry.core.utils.StringUtil;
public class Butterfly extends IndividualLiving implements IButterfly {
@@ -60,6 +62,36 @@ public class Butterfly extends IndividualLiving implements IButterfly {
this.genome = genome;
}
@Override
public void addLore(List<String> text) {
IAlleleButterflySpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 0) {
String speciesLore = descTokens[0];
if (!speciesLore.isEmpty() && !speciesLore.contains("for.description") && Proxies.common.isCtrlDown()) {
FontRenderer fontRenderer = Proxies.common.getClientInstance().fontRenderer;
String formattedLore = EnumChatFormatting.GOLD + speciesLore;
List<String> formattedLoreList = fontRenderer.listFormattedStringToWidth(formattedLore, 200);
text.addAll(formattedLoreList);
}
}
}
@Override
public void addDiscoveredBy(List<String> text) {
IAlleleButterflySpecies primary = genome.getPrimary();
String descTokens[] = primary.getDescription().split("\\|");
if (descTokens.length > 2) {
String discoveredBy = descTokens[2];
if (!discoveredBy.isEmpty()) {
text.add("");
text.add("Discovered by " + EnumChatFormatting.ITALIC + discoveredBy);
}
}
}
@Override
public void addTooltip(List<String> list) {
IAlleleButterflySpecies primary = genome.getPrimary();
@@ -335,6 +335,7 @@ for.gui.temperature=Temperatur
for.gui.tolerance=Toleranz
for.gui.temptol=Temp.Tol
for.gui.tooltip.tmi=Drücke die Umschalttaste für mehr Infos.
for.gui.tooltip.tml=Drücke die Steuerungstaste für mehr Geschichte.
for.gui.triple=Dreifache
for.gui.unknown=Unbekannt
for.gui.warm=Warm
@@ -341,6 +341,7 @@ for.gui.temperature=Temperature
for.gui.tolerance=Tolerance
for.gui.temptol=Temperature Tol.
for.gui.tooltip.tmi=Hold shift for details
for.gui.tooltip.tml=Hold ctrl for lore
for.gui.triple=Triple
for.gui.unknown=Unknown genome
for.gui.warm=Warm
@@ -244,6 +244,7 @@ gui.higher=Higher
gui.highest=Highest
gui.fecundated=Mated
gui.tooltip.tmi=Hold shift for details
gui.tooltip.tml=Hold ctrl for lore
gui.worktable.clear=Click to clear Grid
gui.escritoire.probe=Examine Specimens
hints.beebiomes.tag=Choose your biome!