From 5ad22953362e67dd530e8fda64cdb875d1649512 Mon Sep 17 00:00:00 2001 From: Eli Gibbs Date: Wed, 20 May 2026 23:42:27 -0400 Subject: [PATCH] Update to proper configs, as well as add no power requirement to machines --- .../block/custom/PipeBlock.java | 17 +++++- .../entity/custom/DNAAnalyzerBlockEntity.java | 7 ++- .../custom/DNAExtractorBlockEntity.java | 7 ++- .../custom/DNAHybridizerBlockEntity.java | 7 ++- ...EmbryoCalcificationMachineBlockEntity.java | 7 ++- .../custom/EmbryonicMachineBlockEntity.java | 7 ++- .../custom/FossilCleanerBlockEntity.java | 7 ++- .../custom/FossilGrinderBlockEntity.java | 7 ++- .../entity/custom/IncubatorBlockEntity.java | 7 ++- .../cmr/jurassicrevived/config/JRConfig.java | 37 ++++++++--- .../config/JRConfigManager.java | 61 +++++++++++++++++-- .../client/config/JRClothConfigScreens.java | 49 ++++++++++++--- .../client/config/JRClothConfigScreens.java | 49 ++++++++++++--- .../client/config/JRClothConfigScreens.java | 49 ++++++++++++--- 14 files changed, 265 insertions(+), 53 deletions(-) diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/custom/PipeBlock.java b/common/src/main/java/net/cmr/jurassicrevived/block/custom/PipeBlock.java index 0983305..d2b73f5 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/custom/PipeBlock.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/custom/PipeBlock.java @@ -1,7 +1,9 @@ package net.cmr.jurassicrevived.block.custom; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; +import net.cmr.jurassicrevived.block.entity.custom.GeneratorBlockEntity; import net.cmr.jurassicrevived.block.entity.custom.PipeBlockEntity; +import net.cmr.jurassicrevived.block.entity.custom.PowerCellBlockEntity; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.item.ModItems; @@ -195,7 +197,7 @@ public class PipeBlock extends Block implements EntityBlock, SimpleWaterloggedBl hasCommonConnection = switch (this.transport) { case ITEMS -> be instanceof Container; case FLUIDS -> false; - case ENERGY -> be instanceof ModEnergyUtil.EnergyProvider; + case ENERGY -> be instanceof ModEnergyUtil.EnergyProvider && canEnergyPipeConnectTo(be); }; } @@ -203,7 +205,7 @@ public class PipeBlock extends Block implements EntityBlock, SimpleWaterloggedBl boolean platformHasHandler = switch (this.transport) { case ITEMS -> Services.TRANSFER.getItemHandler(lvl, neighborPos, dir.getOpposite()).isPresent(); case FLUIDS -> Services.TRANSFER.getFluidHandler(lvl, neighborPos, dir.getOpposite()).isPresent(); - case ENERGY -> Services.TRANSFER.getEnergyHandler(lvl, neighborPos, dir.getOpposite()).isPresent(); + case ENERGY -> canEnergyPipeConnectTo(be) && Services.TRANSFER.getEnergyHandler(lvl, neighborPos, dir.getOpposite()).isPresent(); }; hasCommonConnection = hasCommonConnection || platformHasHandler; } @@ -218,6 +220,17 @@ public class PipeBlock extends Block implements EntityBlock, SimpleWaterloggedBl return ConnectionType.NONE; } + private boolean canEnergyPipeConnectTo(@Nullable BlockEntity be) { + if (JRConfigManager.get().requirePower) { + return true; + } + + return !(be instanceof ModEnergyUtil.EnergyProvider) + || be instanceof GeneratorBlockEntity + || be instanceof PowerCellBlockEntity + || be instanceof PipeBlockEntity; + } + public static EnumProperty getProp(Direction dir) { return switch (dir) { case DOWN -> DOWN; diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAAnalyzerBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAAnalyzerBlockEntity.java index 9264563..7ca1cd5 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAAnalyzerBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAAnalyzerBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.DNAAnalyzerBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.item.ModItems; import net.cmr.jurassicrevived.recipe.DNAAnalyzerRecipe; import net.cmr.jurassicrevived.recipe.DNAAnalyzerRecipeInput; @@ -265,8 +266,10 @@ public class DNAAnalyzerBlockEntity extends BlockEntity implements ExtendedMenuP } if (!lockedOutput.isEmpty() && canInsertOutput(lockedOutput)) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(DNAAnalyzerBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAExtractorBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAExtractorBlockEntity.java index 896455c..fd52fe3 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAExtractorBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAExtractorBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.DNAExtractorBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.item.ModItems; import net.cmr.jurassicrevived.recipe.DNAExtractorRecipe; import net.cmr.jurassicrevived.recipe.DNAExtractorRecipeInput; @@ -263,8 +264,10 @@ public class DNAExtractorBlockEntity extends BlockEntity implements ExtendedMenu } if (!lockedOutput.isEmpty() && canInsertOutput(lockedOutput)) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(DNAExtractorBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAHybridizerBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAHybridizerBlockEntity.java index 0e58a8c..a73baa6 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAHybridizerBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/DNAHybridizerBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.DNAHybridizerBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.recipe.DNAHybridizerRecipe; import net.cmr.jurassicrevived.recipe.DNAHybridizerRecipeInput; import net.cmr.jurassicrevived.recipe.ModRecipes; @@ -274,8 +275,10 @@ public class DNAHybridizerBlockEntity extends BlockEntity implements ExtendedMen boolean canProceed = exactMatch != null && !lockedOutput.isEmpty() && canInsertOutput(lockedOutput); if (canProceed) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(DNAHybridizerBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryoCalcificationMachineBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryoCalcificationMachineBlockEntity.java index ea0aff1..7381937 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryoCalcificationMachineBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryoCalcificationMachineBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.EmbryoCalcificationMachineBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.recipe.EmbryoCalcificationMachineRecipe; import net.cmr.jurassicrevived.recipe.EmbryoCalcificationMachineRecipeInput; import net.cmr.jurassicrevived.recipe.ModRecipes; @@ -264,8 +265,10 @@ public class EmbryoCalcificationMachineBlockEntity extends BlockEntity implement } if (!lockedOutput.isEmpty() && canInsertOutput(lockedOutput)) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(EmbryoCalcificationMachineBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryonicMachineBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryonicMachineBlockEntity.java index 78f2287..962717c 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryonicMachineBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/EmbryonicMachineBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.EmbryonicMachineBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.item.ModItems; import net.cmr.jurassicrevived.recipe.EmbryonicMachineRecipe; import net.cmr.jurassicrevived.recipe.EmbryonicMachineRecipeInput; @@ -270,8 +271,10 @@ public class EmbryonicMachineBlockEntity extends BlockEntity implements Extended } if (!lockedOutput.isEmpty() && canInsertOutput(lockedOutput)) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(EmbryonicMachineBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilCleanerBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilCleanerBlockEntity.java index f4c0b5d..e5e9023 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilCleanerBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilCleanerBlockEntity.java @@ -6,6 +6,7 @@ import net.cmr.jurassicrevived.block.custom.FossilCleanerBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.recipe.FossilCleanerRecipe; import net.cmr.jurassicrevived.recipe.FossilCleanerRecipeInput; import net.cmr.jurassicrevived.recipe.ModRecipes; @@ -289,8 +290,10 @@ public class FossilCleanerBlockEntity extends BlockEntity implements ExtendedMen } if (!lockedOutput.isEmpty() && canInsertOutput(lockedOutput) && fluidStack.getAmount() >= WATER_CRAFT_AMOUNT) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(FossilCleanerBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilGrinderBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilGrinderBlockEntity.java index 4f7f98a..a319902 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilGrinderBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/FossilGrinderBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.FossilGrinderBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.recipe.FossilGrinderRecipe; import net.cmr.jurassicrevived.recipe.FossilGrinderRecipeInput; import net.cmr.jurassicrevived.recipe.ModRecipes; @@ -271,8 +272,10 @@ public class FossilGrinderBlockEntity extends BlockEntity implements ExtendedMen boolean canOutput = !output.isEmpty() && canInsertOutput(output); if (canOutput) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } progress++; level.setBlockAndUpdate(pos, state.setValue(FossilGrinderBlock.LIT, true)); diff --git a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/IncubatorBlockEntity.java b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/IncubatorBlockEntity.java index 0d8b6b3..148a7d1 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/IncubatorBlockEntity.java +++ b/common/src/main/java/net/cmr/jurassicrevived/block/entity/custom/IncubatorBlockEntity.java @@ -5,6 +5,7 @@ import net.cmr.jurassicrevived.block.custom.IncubatorBlock; import net.cmr.jurassicrevived.block.entity.ModBlockEntities; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyStorage; import net.cmr.jurassicrevived.block.entity.energy.ModEnergyUtil; +import net.cmr.jurassicrevived.config.JRConfigManager; import net.cmr.jurassicrevived.recipe.IncubatorRecipe; import net.cmr.jurassicrevived.recipe.IncubatorRecipeInput; import net.cmr.jurassicrevived.recipe.ModRecipes; @@ -280,8 +281,10 @@ public class IncubatorBlockEntity extends BlockEntity implements ExtendedMenuPro } if (anyActive) { - if (energyStorage.getEnergyStored() < 10) return; - energyStorage.extractEnergy(10, false); + if (JRConfigManager.get().requirePower) { + if (energyStorage.getEnergyStored() < 10) return; + energyStorage.extractEnergy(10, false); + } } for (int s = 0; s < 3; s++) { diff --git a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java index 896a170..27c784d 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java +++ b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfig.java @@ -1,14 +1,33 @@ package net.cmr.jurassicrevived.config; public final class JRConfig { - // Example options (replace with your real ones) - public boolean enableDinosaurs = true; - public int spawnWeight = 10; - public boolean requirePower = true; - public int fePerSecond = 1000; - public int itemsPerSecond = 100; - public int milliBucketsPerSecond = 1000; + /** + * When false, machines do not require/consume power, machine GUIs hide their power bars, + * and energy pipes do not connect to machines. Generator and power cell behavior is unchanged. + */ + public boolean requirePower = true; - public JRConfig() { - } + /** + * Controls whether dinosaurs should naturally spawn. + * Entity spawning is not implemented yet, but future spawn code should read this. + */ + public boolean naturallySpawning = false; + + /** + * Energy pipe transfer rate in FE per second. + */ + public int fePerSecond = 1000; + + /** + * Item pipe transfer rate in items per second. + */ + public int itemsPerSecond = 100; + + /** + * Fluid pipe transfer rate in milliBuckets per second. + */ + public int milliBucketsPerSecond = 1000; + + public JRConfig() { + } } diff --git a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java index 6d78484..df74c75 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java +++ b/common/src/main/java/net/cmr/jurassicrevived/config/JRConfigManager.java @@ -28,8 +28,16 @@ public final class JRConfigManager { // For now: keep it simple and non-fatal. try { String text = Files.readString(file, StandardCharsets.UTF_8); - // TODO: parse JSON into config (Gson recommended) - // config = parsed; + JRConfig loaded = new JRConfig(); + + loaded.requirePower = readBoolean(text, "requirePower", loaded.requirePower); + loaded.naturallySpawning = readBoolean(text, "naturallySpawning", loaded.naturallySpawning); + loaded.fePerSecond = readPositiveInt(text, "fePerSecond", loaded.fePerSecond); + loaded.itemsPerSecond = readPositiveInt(text, "itemsPerSecond", loaded.itemsPerSecond); + loaded.milliBucketsPerSecond = readPositiveInt(text, "milliBucketsPerSecond", loaded.milliBucketsPerSecond); + + config = loaded; + save(configDir); } catch (IOException e) { // Keep defaults if load fails } @@ -40,10 +48,12 @@ public final class JRConfigManager { Files.createDirectories(configDir); Path file = configDir.resolve("jurassicrevived.json"); - // TODO: write JSON (Gson recommended) String text = "{\n" + - " \"enableDinosaurs\": " + config.enableDinosaurs + ",\n" + - " \"spawnWeight\": " + config.spawnWeight + "\n" + + " \"requirePower\": " + config.requirePower + ",\n" + + " \"naturallySpawning\": " + config.naturallySpawning + ",\n" + + " \"fePerSecond\": " + config.fePerSecond + ",\n" + + " \"itemsPerSecond\": " + config.itemsPerSecond + ",\n" + + " \"milliBucketsPerSecond\": " + config.milliBucketsPerSecond + "\n" + "}\n"; Files.writeString(file, text, StandardCharsets.UTF_8); @@ -51,4 +61,45 @@ public final class JRConfigManager { // ignore / log via your logger if desired } } + + private static boolean readBoolean(String text, String key, boolean fallback) { + String value = readRawValue(text, key); + if ("true".equalsIgnoreCase(value)) return true; + if ("false".equalsIgnoreCase(value)) return false; + return fallback; + } + + private static int readPositiveInt(String text, String key, int fallback) { + String value = readRawValue(text, key); + if (value == null) return fallback; + + try { + return Math.max(1, Integer.parseInt(value)); + } catch (NumberFormatException e) { + return fallback; + } + } + + private static String readRawValue(String text, String key) { + String quotedKey = "\"" + key + "\""; + int keyIndex = text.indexOf(quotedKey); + if (keyIndex < 0) return null; + + int colonIndex = text.indexOf(':', keyIndex + quotedKey.length()); + if (colonIndex < 0) return null; + + int valueStart = colonIndex + 1; + while (valueStart < text.length() && Character.isWhitespace(text.charAt(valueStart))) { + valueStart++; + } + + int valueEnd = valueStart; + while (valueEnd < text.length()) { + char c = text.charAt(valueEnd); + if (c == ',' || c == '\n' || c == '\r' || c == '}') break; + valueEnd++; + } + + return text.substring(valueStart, valueEnd).trim(); + } } diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index 4df2769..12d1924 100755 --- a/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -23,18 +23,53 @@ public final class JRClothConfigScreens { ConfigEntryBuilder eb = builder.entryBuilder(); general.addEntry( - eb.startBooleanToggle(Component.literal("Enable Dinosaurs"), cfg.enableDinosaurs) + eb.startBooleanToggle(Component.literal("Require Power"), cfg.requirePower) .setDefaultValue(true) - .setSaveConsumer(v -> cfg.enableDinosaurs = v) + .setTooltip(Component.literal("When disabled, machines do not consume power, hide power bars, and energy pipes do not connect to machines.")) + .setSaveConsumer(v -> cfg.requirePower = v) + .requireRestart() .build() ); general.addEntry( - eb.startIntField(Component.literal("Spawn Weight"), cfg.spawnWeight) - .setDefaultValue(10) - .setMin(0) - .setMax(1000) - .setSaveConsumer(v -> cfg.spawnWeight = v) + eb.startBooleanToggle(Component.literal("Naturally Spawning Dinosaurs"), cfg.naturallySpawning) + .setDefaultValue(false) + .setTooltip(Component.literal("Controls whether dinosaurs naturally spawn once entity spawning is implemented.")) + .setSaveConsumer(v -> cfg.naturallySpawning = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Energy pipe transfer rate in FE per second.")) + .setSaveConsumer(v -> cfg.fePerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("Items Per Second"), cfg.itemsPerSecond) + .setDefaultValue(100) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Item pipe transfer rate in items per second.")) + .setSaveConsumer(v -> cfg.itemsPerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("MilliBuckets Per Second"), cfg.milliBucketsPerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Fluid pipe transfer rate in milliBuckets per second.")) + .setSaveConsumer(v -> cfg.milliBucketsPerSecond = Math.max(1, v)) + .requireRestart() .build() ); diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index 4df2769..12d1924 100755 --- a/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -23,18 +23,53 @@ public final class JRClothConfigScreens { ConfigEntryBuilder eb = builder.entryBuilder(); general.addEntry( - eb.startBooleanToggle(Component.literal("Enable Dinosaurs"), cfg.enableDinosaurs) + eb.startBooleanToggle(Component.literal("Require Power"), cfg.requirePower) .setDefaultValue(true) - .setSaveConsumer(v -> cfg.enableDinosaurs = v) + .setTooltip(Component.literal("When disabled, machines do not consume power, hide power bars, and energy pipes do not connect to machines.")) + .setSaveConsumer(v -> cfg.requirePower = v) + .requireRestart() .build() ); general.addEntry( - eb.startIntField(Component.literal("Spawn Weight"), cfg.spawnWeight) - .setDefaultValue(10) - .setMin(0) - .setMax(1000) - .setSaveConsumer(v -> cfg.spawnWeight = v) + eb.startBooleanToggle(Component.literal("Naturally Spawning Dinosaurs"), cfg.naturallySpawning) + .setDefaultValue(false) + .setTooltip(Component.literal("Controls whether dinosaurs naturally spawn once entity spawning is implemented.")) + .setSaveConsumer(v -> cfg.naturallySpawning = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Energy pipe transfer rate in FE per second.")) + .setSaveConsumer(v -> cfg.fePerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("Items Per Second"), cfg.itemsPerSecond) + .setDefaultValue(100) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Item pipe transfer rate in items per second.")) + .setSaveConsumer(v -> cfg.itemsPerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("MilliBuckets Per Second"), cfg.milliBucketsPerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Fluid pipe transfer rate in milliBuckets per second.")) + .setSaveConsumer(v -> cfg.milliBucketsPerSecond = Math.max(1, v)) + .requireRestart() .build() ); diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java b/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java index 4df2769..12d1924 100755 --- a/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/client/config/JRClothConfigScreens.java @@ -23,18 +23,53 @@ public final class JRClothConfigScreens { ConfigEntryBuilder eb = builder.entryBuilder(); general.addEntry( - eb.startBooleanToggle(Component.literal("Enable Dinosaurs"), cfg.enableDinosaurs) + eb.startBooleanToggle(Component.literal("Require Power"), cfg.requirePower) .setDefaultValue(true) - .setSaveConsumer(v -> cfg.enableDinosaurs = v) + .setTooltip(Component.literal("When disabled, machines do not consume power, hide power bars, and energy pipes do not connect to machines.")) + .setSaveConsumer(v -> cfg.requirePower = v) + .requireRestart() .build() ); general.addEntry( - eb.startIntField(Component.literal("Spawn Weight"), cfg.spawnWeight) - .setDefaultValue(10) - .setMin(0) - .setMax(1000) - .setSaveConsumer(v -> cfg.spawnWeight = v) + eb.startBooleanToggle(Component.literal("Naturally Spawning Dinosaurs"), cfg.naturallySpawning) + .setDefaultValue(false) + .setTooltip(Component.literal("Controls whether dinosaurs naturally spawn once entity spawning is implemented.")) + .setSaveConsumer(v -> cfg.naturallySpawning = v) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("FE Per Second"), cfg.fePerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Energy pipe transfer rate in FE per second.")) + .setSaveConsumer(v -> cfg.fePerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("Items Per Second"), cfg.itemsPerSecond) + .setDefaultValue(100) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Item pipe transfer rate in items per second.")) + .setSaveConsumer(v -> cfg.itemsPerSecond = Math.max(1, v)) + .requireRestart() + .build() + ); + + general.addEntry( + eb.startIntField(Component.literal("MilliBuckets Per Second"), cfg.milliBucketsPerSecond) + .setDefaultValue(1000) + .setMin(1) + .setMax(Integer.MAX_VALUE) + .setTooltip(Component.literal("Fluid pipe transfer rate in milliBuckets per second.")) + .setSaveConsumer(v -> cfg.milliBucketsPerSecond = Math.max(1, v)) + .requireRestart() .build() );