-
Notifications
You must be signed in to change notification settings - Fork 61
[1.14.x] Modpack Developers
Content Table
There are a number of values a modpack developer can tweak to balance Immersive Petroleum with their pack.
D:reservoir_chance
Default chance for a fluid reservoir of some type to spawn. Lowering this makes oil far more valuable.
I:pumpjack_consumption
Default flux / tick cost of the Pumpjack. This is a major balancing point, see below spreadsheet.
I:pumpjack_speed
How many mB of fluid is extracted every tick by a single Pumpjack.
B:req_pipes
Whether the player must build pipes down to bedrock to use the Pumpjack. Recommended to keep disabled but may prove useful in hardcore packs.
D:distillationTower_energyModifier
Default cost of the Distillation Tower is 2048 flux / operation. Increasing this number to 2.0 will double the flux cost, halving it will half the flux cost.
D:distillationTower_timeModifier
Not super useful, but lets you make each operation in the Distillation Tower take longer if it is increased.
I highly suggest developers that want to go "into the weeds" of balance copy and edit this Google Drive spreadsheet which will automatically calculate net power production, reservoir drain time, and more.
DataPack (or JSON) is pretty straight forward, a lot can be figured out by just looking at how Immersive Petroleum's own data is stored.
However, i am still going to write down what every part of the json means and how that changes the behavior.
Even if there is currently just one, it is still good to know how the system works.
type
should always be immersivepetroleum:distillation
.
byproducts
is an array of item
's that each have their own chance
(0.0 to 1.0) of being spit out the backport while the main process is happening.
results
is an array of the of the fluids the distillation results in, with fluid
being the liquid that gets produced with an amount
telling how much of it.
input
is simply the fluid
that is being distilled into its components and used up in the process by amount
per operation.
energy
is the minimum power per tick required to distill the input
.
time
is the amount of time in ticks it takes until the input
has been processed.
Here is the default oil cracking recipe json that's used by Immersive Petroleum itself.
{
"type": "immersivepetroleum:distillation",
"byproducts": [
{
"item": "immersivepetroleum:bitumen",
"chance": "0.07"
}
],
"results": [
{
"fluid": "immersivepetroleum:lubricant",
"amount": 9
},
{
"fluid": "immersivepetroleum:diesel",
"amount": 27
},
{
"fluid": "immersivepetroleum:gasoline",
"amount": 39
}
],
"input": {
"tag": "forge:crude_oil",
"amount": 75
},
"energy": 2048,
"time": 1
}
type
should always be immersivepetroleum:reservoirs
.
name
: Display name for this reservoir type.
The base reservoirs are lowercase as they are translated - custom ones should be properly capitalized (ex. "Deep Ocean Oil Reservoir"
).
fluid
: The internal ID of the fluid that should be used.
(ex. "water"
, "lava"
, "oil"
, "ethanol"
, "concrete"
)
fluidminimum
/fluidcapacity
: Any number >= 0.
Fluid capacity must be larger or equal to min.
Linear distribution of reservoir sizes between these two numbers.
fluidtrace
Certain reservoir types can still be used after they're empty, such as Oil Reservoirs or Aquifers in base Immersive Petroleum.
0 here represents a finite reservoir. This value must be less than or equal to the I:pumpjack_speed
config.
weight
Used in a weighted random calculation with the weights of other valid reservoirs. If this is the only valid reservoir, it must spawn.
Dimension Whitelist/Blacklist
List of Dimension IDs.
Biome Whitelist/Blacklist
List of Biome IDs.
Important Note: A reservoir with a whitelist does not use its blacklist. That goes for both, the Dimension and the Biome list.
Here's the default Oil reservoir used by Immersive Petroleum.
{
"type": "immersivepetroleum:reservoirs",
"fluid": "immersivepetroleum:oil",
"fluidminimum": 2500000,
"fluidcapacity": 15000000,
"fluidtrace": 6,
"weight": 40,
"dimension": {
"whitelist": [],
"blacklist": [
"minecraft:the_end"
]
},
"biome": {
"whitelist": [],
"blacklist": []
},
"name": "oil"
}
Name | Type |
---|---|
Recipe Name | String |
Example:
// mods.immersivepetroleum.DistillationTower.remove(String recipeName);
mods.immersivepetroleum.DistillationTower.remove("oilcracking");
Name | Type |
---|
Example:
mods.immersivepetroleum.DistillationTower.removeAll();
Name | Type |
---|
Example:
// new mods.immersivepetroleum.DistillationBuilder();
new mods.immersivepetroleum.DistillationBuilder();
Name | Type |
---|---|
Fluids | String |
Example:
// builderInstance.setOutputFluids(IFluidStack[] fluidOutputs);
builderInstance.setOutputFluids([<fluid:minecraft:water> * 1]);
Name | Type |
---|---|
Item | IItemStack |
Chance | Integer (0 - 100) |
Example:
// builderInstance.addByproduct(IItemStack item, int chance);
builderInstance.addByproduct(<item:minecraft:cobblestone>, 50);
Name | Type |
---|---|
Item | IItemStack |
Chance | Double (0.0 - 1.0) |
Example:
// builderInstance.addByproduct(IItemStack item, double chance);
builderInstance.addByproduct(<item:minecraft:stone>, 0.25);
Name | Type |
---|---|
FluxPerTick | Integer (>=1) |
Ticks | Integer (>=1) |
Example:
// builderInstance.setEnergyAndTime(int fluxPerTick, int ticks);
builderInstance.setEnergyAndTime(1024, 1);
Name | Type |
---|---|
FluxPerTick | Integer (>=1) |
Example:
// builderInstance.setEnergy(int fluxPerTick);
builderInstance.setEnergy(1024);
Name | Type |
---|---|
Ticks | Integer (>=1) |
Example:
// builderInstance.setTime(int ticks);
builderInstance.setTime(1);
Name | Type |
---|---|
Recipe Name | String |
Example:
// builderInstance.build(String recipeName);
builderInstance.build("example_name");
Copy/Paste examples:
new DistillationBuilder()
.setOutputFluids([<fluid:minecraft:water> * 1]) // Array of output fluids
.setInputFluid(<tag:minecraft:lava>, 500) // Input Fluid Tag and the ammount of fluid in mB
.addByproduct(<item:minecraft:cobblestone>, 50) // Chance using integer (0 - 100)
.addByproduct(<item:minecraft:stone>, 0.25) // Chance using double (0.0 - 1.0)
.addByproduct(<item:minecraft:obsidian>, 0.007) // Integer is for convenience, using double gives more control
.setEnergyAndTime(1024, 1) // Can be done individualy with setEnergy(int) and setTime(int)
.build("lava_to_solids");
new DistillationBuilder()
.setOutputFluids([<fluid:minecraft:water> * 500])
.setInputFluid(<tag:forge:concrete>, 500)
.addByproduct(<item:minecraft:gravel>, 0.5)
.addByproduct(<item:minecraft:sand>, 0.25)
.addByproduct(<item:minecraft:sand>, 0.25)
.addByproduct(<item:minecraft:clay_ball>, 0.125)
.setEnergy(2048) // 2048 is the Default for Energy.
.setTime(1) // 1 is the Default for Time.
.build("concrete_reversal");
Name | Type |
---|---|
Recipe Name | String |
Example:
// mods.immersivepetroleum.ReservoirRegistry.remove(String recipeName);
mods.immersivepetroleum.ReservoirRegistry.remove("aquifer");
Name | Type |
---|
Example:
// mods.immersivepetroleum.ReservoirRegistry.removeAll();
mods.immersivepetroleum.ReservoirRegistry.removeAll();
Name | Type |
---|---|
Fluid | IFluidStack |
Minimum Size | int |
Maximum Size | int |
Replenish Rate | int |
Weight | int |
Weight is the Weighted Chance of a chunk containing that specific fluid reservoir. The weight is counted as in X in Total.
So if you have 5 Reservoir values at: 5, 5, 6, 8, 10
Then each respective entry will have a weighted chance of:
5 in 34
5 in 34
6 in 34
8 in 34
10 in 34
Example:
// new mods.immersivepetroleum.ReservoirBuilder(IFluidStack fluid, int minSize, int maxSize, int traceAmount, int weight);
new mods.immersivepetroleum.ReservoirBuilder(<fluid:minecraft:lava>, 1000, 5000, 0, 20);
Name | Type |
---|---|
Blacklist | Boolean |
Dimension Names | String[] array |
Example:
// builderInstance.addDimensions(boolean isBlacklist, String[] dimensionNames);
builderInstance.addDimensions(false, ["minecraft:overworld"]);
Name | Type |
---|---|
Blacklist | Boolean |
Biome Names | String[] array |
Example:
// builderInstance.addBiomes(boolean isBlacklist, String[] biomeNames);
builderInstance.addBiomes(false, ["minecraft:plains"]);
Name | Type |
---|---|
Name | String |
The base reservoirs are lowercase as they are translated - custom ones should be properly capitalized (ex. "Deep Ocean Oil Reservoir").
Example:
// builderInstance.build(String same);
builderInstance.build("Example Name");
Copy/Paste example:
new ReservoirBuilder(<fluid:minecraft:lava>, 25000, 100000, 0, 20)
.addDimensions(false, ["overworld"])
.addBiomes(false, ["minecraft:desert"])
.build("Desert Lava");
Name | Type |
---|---|
Fluid | IFluidStack |
Example:
//mods.immersivepetroleum.Lubricant.register(IFluidStack fuel, int fluxPerTick);
mods.immersivepetroleum.Lubricant.register(<fluid:minecraft:water> * 32);
Name | Type |
---|---|
Fluid | IFluidStack |
fluxPerTick | Integer |
Example:
//mods.immersivepetroleum.FuelRegistry.registerGeneratorFuel(IFluidStack fuel, int fluxPerTick);
mods.immersivepetroleum.FuelRegistry.registerGeneratorFuel(<fluid:minecraft:water> * 180, 64); // Using 180mB per Tick
Name | Type |
---|---|
Fluid | IFluidStack |
Example:
//mods.immersivepetroleum.FuelRegistry.registerMotorboatFuel(IFluidStack fuel);
mods.immersivepetroleum.FuelRegistry.registerMotorboatFuel(<fluid:minecraft:water> * 6); // Using 6mB per Tick