equivalent-exchange-3/src/main/java/com/pahimar/ee3/util/CalcinationHelper.java

41 lines
1.5 KiB
Java
Raw Normal View History

2014-07-03 21:44:44 +02:00
package com.pahimar.ee3.util;
2023-01-03 17:47:36 +01:00
import java.util.Random;
2015-05-07 19:45:06 +02:00
import com.pahimar.ee3.api.exchange.EnergyValue;
import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy;
2014-07-03 21:44:44 +02:00
import com.pahimar.ee3.init.ModItems;
import net.minecraft.item.ItemStack;
2023-01-03 17:47:36 +01:00
public class CalcinationHelper {
private static Random random = new Random();
2014-07-03 21:44:44 +02:00
public static ItemStack getCalcinationResult(ItemStack itemStack) {
2023-01-03 17:47:36 +01:00
EnergyValue dustEnergyValue = EnergyValueRegistryProxy.getEnergyValue(
new ItemStack(ModItems.alchemicalDust, 1, 3)
);
EnergyValue itemStackEnergyValue
= EnergyValueRegistryProxy.getEnergyValue(itemStack);
2014-07-03 21:44:44 +02:00
if (dustEnergyValue != null && itemStackEnergyValue != null) {
2023-01-03 17:47:36 +01:00
int dustAmount = (int
) Math.floor(itemStackEnergyValue.getValue() / dustEnergyValue.getValue());
float residualEMC = itemStackEnergyValue.getValue()
- (dustAmount * dustEnergyValue.getValue());
2023-01-03 17:47:36 +01:00
double u
= (double) residualEMC / dustEnergyValue.getValue(); // expected value (µ)
double s = u / 2; // deviation (σ)
u *= 1 - 0.0043451773677092; // negative cut-off correction factor
2023-01-03 17:47:36 +01:00
dustAmount += (int
) (Math.max(0, random.nextGaussian() * s + u) + random.nextDouble());
if (dustAmount > 0) {
return new ItemStack(ModItems.alchemicalDust, dustAmount, 3);
2014-07-03 21:44:44 +02:00
}
}
return new ItemStack(ModItems.alchemicalDust, 1, 0);
2014-07-03 21:44:44 +02:00
}
}