[1.14.x] Modpack Developers - Flaxbeard/ImmersivePetroleum GitHub Wiki
Content Table
Balance
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
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.
Distillation
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
}
Fluid Reservoirs
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"
}
CraftTweaker
Distillation
remove
| Name | Type |
|---|---|
| Recipe Name | String |
Example:
// mods.immersivepetroleum.DistillationTower.remove(String recipeName);
mods.immersivepetroleum.DistillationTower.remove("oilcracking");
removeAll
| Name | Type |
|---|
Example:
mods.immersivepetroleum.DistillationTower.removeAll();
Builder
constructor
| Name | Type |
|---|
Example:
// new mods.immersivepetroleum.DistillationBuilder();
new mods.immersivepetroleum.DistillationBuilder();
setOutputFluid
| Name | Type |
|---|---|
| Fluids | String |
Example:
// builderInstance.setOutputFluids(IFluidStack[] fluidOutputs);
builderInstance.setOutputFluids([<fluid:minecraft:water> * 1]);
addByproduct(IItemStack item, int chance)
| Name | Type |
|---|---|
| Item | IItemStack |
| Chance | Integer (0 - 100) |
Example:
// builderInstance.addByproduct(IItemStack item, int chance);
builderInstance.addByproduct(<item:minecraft:cobblestone>, 50);
addByproduct(IItemStack item, double chance)
| Name | Type |
|---|---|
| Item | IItemStack |
| Chance | Double (0.0 - 1.0) |
Example:
// builderInstance.addByproduct(IItemStack item, double chance);
builderInstance.addByproduct(<item:minecraft:stone>, 0.25);
setEnergyAndTime
| Name | Type |
|---|---|
| FluxPerTick | Integer (>=1) |
| Ticks | Integer (>=1) |
Example:
// builderInstance.setEnergyAndTime(int fluxPerTick, int ticks);
builderInstance.setEnergyAndTime(1024, 1);
setEnergy
| Name | Type |
|---|---|
| FluxPerTick | Integer (>=1) |
Example:
// builderInstance.setEnergy(int fluxPerTick);
builderInstance.setEnergy(1024);
setTime
| Name | Type |
|---|---|
| Ticks | Integer (>=1) |
Example:
// builderInstance.setTime(int ticks);
builderInstance.setTime(1);
build
| 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");
Fluid Reservoirs
remove
| Name | Type |
|---|---|
| Recipe Name | String |
Example:
// mods.immersivepetroleum.ReservoirRegistry.remove(String recipeName);
mods.immersivepetroleum.ReservoirRegistry.remove("aquifer");
removeAll
| Name | Type |
|---|
Example:
// mods.immersivepetroleum.ReservoirRegistry.removeAll();
mods.immersivepetroleum.ReservoirRegistry.removeAll();
Builder
constructor
| Name | Type |
|---|---|
| Fluid | IFluidStack |
| Minimum Size | int |
| Maximum Size | int |
| Replenish Rate | int |
| Weight | int |
Weight
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);
addDimensions
| Name | Type |
|---|---|
| Blacklist | Boolean |
| Dimension Names | String[] array |
Example:
// builderInstance.addDimensions(boolean isBlacklist, String[] dimensionNames);
builderInstance.addDimensions(false, ["minecraft:overworld"]);
addBiomes
| Name | Type |
|---|---|
| Blacklist | Boolean |
| Biome Names | String[] array |
Example:
// builderInstance.addBiomes(boolean isBlacklist, String[] biomeNames);
builderInstance.addBiomes(false, ["minecraft:plains"]);
build
| Name | Type |
|---|---|
| Name | String |
Preface
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");
Lubricant
register
| Name | Type |
|---|---|
| Fluid | IFluidStack |
Example:
//mods.immersivepetroleum.Lubricant.register(IFluidStack fuel, int fluxPerTick);
mods.immersivepetroleum.Lubricant.register(<fluid:minecraft:water> * 32);
Fuel Registry
registerGeneratorFuel
| 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
registerMotorboatFuel
| Name | Type |
|---|---|
| Fluid | IFluidStack |
Example:
//mods.immersivepetroleum.FuelRegistry.registerMotorboatFuel(IFluidStack fuel);
mods.immersivepetroleum.FuelRegistry.registerMotorboatFuel(<fluid:minecraft:water> * 6); // Using 6mB per Tick