Skip to content

Commit

Permalink
fractional multipliers
Browse files Browse the repository at this point in the history
  • Loading branch information
DonovanDMC committed Sep 30, 2022
1 parent 203b7cc commit da6373e
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@
"gui.projectexpansion.config.emc_display.desc": "Displays your current emc and gained emc per second in the top left corner.",
"gui.projectexpansion.config.notify_command_changes": "Notify Command Changes",
"gui.projectexpansion.config.notify_command_changes.desc": "Notify users something is changed about them via /emc.",
"gui.projectexpansion.config.notify_knowledge_book_gains": "Notify Knowledge Book Gains",
"gui.projectexpansion.config.notify_knowledge_book_gains.desc": "Tell users the list of items they gained when using a knowledge book.",
"gui.projectexpansion.config.limit_emc_link_vendor": "Limit EMC Link Vendor Output",
"gui.projectexpansion.config.limit_emc_link_vendor.desc": "If EMC Link Right-Click functionality should be Limited by Tier or Not.",
"gui.projectexpansion.config.transmutation_interface_item_count": "Transmutation Interface Item Count",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,24 @@
public final class Config {
public static final ForgeConfigSpec.Builder Builder = new ForgeConfigSpec.Builder();
public static final ForgeConfigSpec Spec;
public static final ForgeConfigSpec.ConfigValue<Integer> tickDelay = Builder.translation("gui.projectexpansion.config.tick_delay.desc").define("tickDelay", 20);
public static final ForgeConfigSpec.ConfigValue<Integer> tickDelay = Builder.translation("gui.projectexpansion.config.tick_delay.desc").defineInRange("tickDelay", 20, 1, 200);
public static final ForgeConfigSpec.ConfigValue<Boolean> formatEMC = Builder.translation("gui.projectexpansion.config.format_emc.desc").define("formatEMC", true);
public static final ForgeConfigSpec.ConfigValue<Boolean> fullNumberNames = Builder.translation("gui.projectexpansion.config.full_number_names.desc").define("fullNumberNames", true);
public static final ForgeConfigSpec.ConfigValue<Boolean> emcDisplay = Builder.translation("gui.projectexpansion.config.emc_display.desc").define("emcDisplay", true);
public static final ForgeConfigSpec.ConfigValue<Boolean> notifyCommandChanges = Builder.translation("gui.projectexpansion.config.notify_command_changes.desc").define("notifyCommandChanges", true);
public static final ForgeConfigSpec.ConfigValue<Boolean> notifyKnowledgeBookGains = Builder.translation("gui.projectexpansion.config.notify_knowledge_book_gains.desc").define("notifyKnowledgeBookGains", true);
public static final ForgeConfigSpec.ConfigValue<Boolean> limitEmcLinkVendor = Builder.translation("gui.projectexpansion.config.limit_emc_link_vendor.desc").define("limitEmcLinkVendor", true);
// due to the large range of this (1 - Integer.MAX_VALUE, with all 2 billion values being valid), this option is excluded from the gui
public static final ForgeConfigSpec.ConfigValue<Integer> transmutationInterfaceItemCount = Builder.translation("gui.projectexpansion.config.transmutation_interface_item_count.desc").define("transmutationInterfaceItemCount", 2147483647);
public static final ForgeConfigSpec.ConfigValue<Boolean> useOldValues = Builder.translation("gui.projectexpansion.config.use_old_values.desc").define("useOldValues", false);
public static final ForgeConfigSpec.ConfigValue<Integer> collectorMultiplier = Builder.translation("gui.projectexpansion.config.collector_multiplier.desc").define("collectorMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> emcLinkItemLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_item_limit_multiplier.desc").define("emcLinkItemLimitMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> emcLinkFluidLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_fluid_limit_multiplier.desc").define("emcLinkFluidLimitMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> emcLinkEMCLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_emc_limit_multiplier.desc").define("emcLinkEMCLimitMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> powerflowerMultiplier = Builder.translation("gui.projectexpansion.config.powerflower_multiplier.desc").define("powerflowerMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> relayBonusMultiplier = Builder.translation("gui.projectexpansion.config.relay_bonus_multiplier.desc").define("relayBonusMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> relayTransferMultiplier = Builder.translation("gui.projectexpansion.config.relay_transfer_multiplier.desc").define("relayTransferMultiplier", 1);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteFuelCost = Builder.translation("gui.projectexpansion.config.infinite_fuel_cost.desc").define("infiniteFuelCost", 128);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteFuelBurnTime = Builder.translation("gui.projectexpansion.config.infinite_fuel_burn_time.desc").define("infiniteFuelBurnTime", 1600);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteSteakCost = Builder.translation("gui.projectexpansion.config.infinite_steak_cost.desc").define("infiniteSteakCost", 64);
public static final ForgeConfigSpec.ConfigValue<Integer> transmutationInterfaceItemCount = Builder.translation("gui.projectexpansion.config.transmutation_interface_item_count.desc").defineInRange("transmutationInterfaceItemCount", Integer.MAX_VALUE, 1, Integer.MAX_VALUE);
public static final ForgeConfigSpec.ConfigValue<Double> collectorMultiplier = Builder.translation("gui.projectexpansion.config.collector_multiplier.desc").defineInRange("collectorMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> emcLinkItemLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_item_limit_multiplier.desc").defineInRange("emcLinkItemLimitMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> emcLinkFluidLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_fluid_limit_multiplier.desc").defineInRange("emcLinkFluidLimitMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> emcLinkEMCLimitMultiplier = Builder.translation("gui.projectexpansion.config.emc_link_emc_limit_multiplier.desc").defineInRange("emcLinkEMCLimitMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> powerflowerMultiplier = Builder.translation("gui.projectexpansion.config.powerflower_multiplier.desc").defineInRange("powerflowerMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> relayBonusMultiplier = Builder.translation("gui.projectexpansion.config.relay_bonus_multiplier.desc").defineInRange("relayBonusMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Double> relayTransferMultiplier = Builder.translation("gui.projectexpansion.config.relay_transfer_multiplier.desc").defineInRange("relayTransferMultiplier", 1.0D, 0.1D, 50D);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteFuelCost = Builder.translation("gui.projectexpansion.config.infinite_fuel_cost.desc").defineInRange("infiniteFuelCost", 128, 1, Integer.MAX_VALUE);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteFuelBurnTime = Builder.translation("gui.projectexpansion.config.infinite_fuel_burn_time.desc").defineInRange("infiniteFuelBurnTime", 1600, 1, Integer.MAX_VALUE);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteSteakCost = Builder.translation("gui.projectexpansion.config.infinite_steak_cost.desc").defineInRange("infiniteSteakCost", 64, 1, Integer.MAX_VALUE);
static { Spec = Builder.build(); }
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,57 +91,57 @@ protected void init() {

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.collector_multiplier",
1, 20, 1,
__ -> (double) Config.collectorMultiplier.get(),
(__, newValue) -> Config.collectorMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.collectorMultiplier.get(),
(__, newValue) -> Config.collectorMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.collector_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.emc_link_item_limit_multiplier",
1, 20, 1,
__ -> (double) Config.emcLinkItemLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkItemLimitMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.emcLinkItemLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkItemLimitMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.emc_link_item_limit_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.emc_link_fluid_limit_multiplier",
1, 20, 1,
__ -> (double) Config.emcLinkFluidLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkFluidLimitMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.emcLinkFluidLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkFluidLimitMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.emc_link_fluid_limit_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.emc_link_emc_limit_multiplier",
1, 20, 1,
__ -> (double) Config.emcLinkEMCLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkEMCLimitMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.emcLinkEMCLimitMultiplier.get(),
(__, newValue) -> Config.emcLinkEMCLimitMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.emc_link_emc_limit_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.powerflower_multiplier",
1, 20, 1,
__ -> (double) Config.powerflowerMultiplier.get(),
(__, newValue) -> Config.powerflowerMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.powerflowerMultiplier.get(),
(__, newValue) -> Config.powerflowerMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.powerflower_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.relay_bonus_multiplier",
1, 20, 1,
__ -> (double) Config.relayBonusMultiplier.get(),
(__, newValue) -> Config.relayBonusMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.relayBonusMultiplier.get(),
(__, newValue) -> Config.relayBonusMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.relay_bonus_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

optionsRowList.addOption(new SliderPercentageOption(
"gui.projectexpansion.config.relay_transfer_multiplier",
1, 20, 1,
__ -> (double) Config.relayTransferMultiplier.get(),
(__, newValue) -> Config.relayTransferMultiplier.set(newValue.intValue()),
0.1F, 20.0F, 0.1F,
__ -> Config.relayTransferMultiplier.get(),
(__, newValue) -> Config.relayTransferMultiplier.set(newValue),
(gs, option) -> new TranslationTextComponent("gui.projectexpansion.config.relay_transfer_multiplier").appendSibling(new StringTextComponent(String.format(": %s", (int) option.get(gs))))
));

Expand Down
42 changes: 22 additions & 20 deletions src/main/java/cool/furry/mc/forge/projectexpansion/util/Matter.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import cool.furry.mc.forge.projectexpansion.block.BlockPowerFlower;
import cool.furry.mc.forge.projectexpansion.block.BlockRelay;
import cool.furry.mc.forge.projectexpansion.config.Config;
import cool.furry.mc.forge.projectexpansion.item.ItemCompressedEnergyCollector;
import cool.furry.mc.forge.projectexpansion.registries.Blocks;
import cool.furry.mc.forge.projectexpansion.registries.Items;
import cool.furry.mc.forge.projectexpansion.item.ItemCompressedEnergyCollector;
import moze_intel.projecte.gameObjs.registries.PEItems;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
Expand All @@ -17,6 +17,7 @@
import net.minecraftforge.fml.RegistryObject;

import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Objects;
Expand Down Expand Up @@ -54,9 +55,9 @@ public Matter next() {
public final String name;
public final boolean hasItem;
public final int level;
public final BigInteger collectorOutputBase;
public final BigInteger relayBonusBase;
public final BigInteger relayTransferBase;
public final BigDecimal collectorOutputBase;
public final BigDecimal relayBonusBase;
public final BigDecimal relayTransferBase;
@Nullable
public final Supplier<Item> existingItem;
public final Rarity rarity;
Expand Down Expand Up @@ -89,11 +90,11 @@ public Matter next() {
this.hasItem = existingItem == null && ordinal() != 0;
this.level = ordinal() + 1;
// Gₙ(aₙ)(z)=4(2z²+z-1)/4z-1
this.collectorOutputBase = Config.useOldValues.get() ? calcOldValue(BigInteger.valueOf(6), level) : BigInteger.valueOf(collectorOutput);
this.collectorOutputBase = Config.useOldValues.get() ? calcOldValue(BigDecimal.valueOf(6), level) : BigDecimal.valueOf(collectorOutput);
// ¯\_(ツ)_/¯
this.relayBonusBase = Config.useOldValues.get() ? calcOldValue(BigInteger.valueOf(1), level) : BigInteger.valueOf(relayBonus);
this.relayBonusBase = Config.useOldValues.get() ? calcOldValue(BigDecimal.valueOf(1), level) : BigDecimal.valueOf(relayBonus);
// Gₙ(aₙ)(z)=64(2z²+z-1)/4z-1
this.relayTransferBase = Config.useOldValues.get() ? calcOldValue(BigInteger.valueOf(64), level) : BigInteger.valueOf(relayTransfer);
this.relayTransferBase = Config.useOldValues.get() ? calcOldValue(BigDecimal.valueOf(64), level) : BigDecimal.valueOf(relayTransfer);
this.existingItem = existingItem;
this.rarity =
level >= EPIC_THRESHOLD ? Rarity.EPIC :
Expand All @@ -102,9 +103,9 @@ public Matter next() {
Rarity.COMMON;
}

private BigInteger calcOldValue(BigInteger base, int level) {
BigInteger i = base;
for (int v = 1; v <= level; v++) i = i.multiply(BigInteger.valueOf(v));
private BigDecimal calcOldValue(BigDecimal base, int level) {
BigDecimal i = base;
for (int v = 1; v <= level; v++) i = i.multiply(BigDecimal.valueOf(v));
return i;
}

Expand All @@ -115,7 +116,7 @@ public int getLevel() {
/* Limits */

public BigInteger getPowerFlowerOutput() {
return collectorOutputBase.multiply(BigInteger.valueOf(18)).add(relayBonusBase.multiply(BigInteger.valueOf(30))).multiply(BigInteger.valueOf(Config.powerflowerMultiplier.get()));
return collectorOutputBase.multiply(BigDecimal.valueOf(18)).add(relayBonusBase.multiply(BigDecimal.valueOf(30))).multiply(BigDecimal.valueOf(Config.powerflowerMultiplier.get())).toBigInteger();
}

public BigInteger getPowerFlowerOutputForTicks(int ticks) {
Expand All @@ -129,24 +130,26 @@ public BigInteger getPowerFlowerOutputForTicks(int ticks) {
tick rate of these 3 will grossly duplicate emc
*/



public BigInteger getCollectorOutput() {
return collectorOutputBase.multiply(BigInteger.valueOf(Config.collectorMultiplier.get()));
return collectorOutputBase.multiply(BigDecimal.valueOf(Config.collectorMultiplier.get())).toBigInteger();
}

public BigInteger getCollectorOutputForTicks(int ticks) {
return getCollectorOutput();
}

public BigInteger getRelayBonus() {
return relayBonusBase.multiply(BigInteger.valueOf(Config.relayBonusMultiplier.get()));
return relayBonusBase.multiply(BigDecimal.valueOf(Config.relayBonusMultiplier.get())).toBigInteger();
}

public BigInteger getRelayBonusForTicks(int ticks) {
return getRelayBonus();
}

public BigInteger getRelayTransfer() {
return relayTransferBase.multiply(BigInteger.valueOf(Config.relayTransferMultiplier.get()));
return relayTransferBase.multiply(BigDecimal.valueOf(Config.relayTransferMultiplier.get())).toBigInteger();
}
public BigInteger getRelayTransferForTicks(int ticks) {
return getRelayTransfer();
Expand All @@ -157,22 +160,22 @@ public int getEMCLinkInventorySize() {
}

public BigInteger getEMCLinkEMCLimit() {
return BigInteger.valueOf(16)
return BigDecimal.valueOf(16)
.pow(level)
.multiply(BigInteger.valueOf(Config.emcLinkEMCLimitMultiplier.get()));
.multiply(BigDecimal.valueOf(Config.emcLinkEMCLimitMultiplier.get())).toBigInteger();
}

public int getEMCLinkItemLimit() {
try {
return Math.multiplyExact((int) Math.pow(2, level - 1), Config.emcLinkItemLimitMultiplier.get());
return BigDecimal.valueOf(2).pow(level - 1).multiply(BigDecimal.valueOf(Config.emcLinkItemLimitMultiplier.get())).intValueExact();
} catch(ArithmeticException ignore) {
return Integer.MAX_VALUE;
}
}

public int getEMCLinkFluidLimit() {
try {
return Math.multiplyExact(Math.multiplyExact((int) Math.pow(2, level - 1), 1000), Config.emcLinkFluidLimitMultiplier.get());
return BigDecimal.valueOf(2).pow(level - 1).multiply(BigDecimal.valueOf(1000)).multiply(BigDecimal.valueOf(Config.emcLinkFluidLimitMultiplier.get())).intValueExact();
} catch(ArithmeticException ignore) {
return Integer.MAX_VALUE;
}
Expand Down Expand Up @@ -233,8 +236,7 @@ public StringTextComponent getEMCLinkFluidLimitComponent() {
private void register(RegistrationType reg) {
switch (reg) {
case MATTER: {
if (hasItem)
itemMatter = Items.Registry.register(String.format("%s_matter", name), () -> new Item(new Item.Properties().group(Main.group).rarity(rarity)));
if (hasItem) itemMatter = Items.Registry.register(String.format("%s_matter", name), () -> new Item(new Item.Properties().group(Main.group).rarity(rarity)));
break;
}

Expand Down

0 comments on commit da6373e

Please sign in to comment.