Added OreDrop API
This commit is contained in:
parent
c01ae43435
commit
601812a10c
4 changed files with 126 additions and 0 deletions
75
src/main/java/techreborn/blocks/OreDrop.java
Normal file
75
src/main/java/techreborn/blocks/OreDrop.java
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
package techreborn.blocks;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
|
import techreborn.init.ModBlocks;
|
||||||
|
import techreborn.config.ConfigTechReborn;
|
||||||
|
|
||||||
|
public class OreDrop
|
||||||
|
{
|
||||||
|
public OreDrop(ItemStack drop)
|
||||||
|
{
|
||||||
|
this.drop = drop;
|
||||||
|
this.count = drop.stackSize;
|
||||||
|
this.baseChance = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OreDrop(ItemStack drop, Integer baseChance)
|
||||||
|
{
|
||||||
|
this.drop = drop;
|
||||||
|
this.count = drop.stackSize;
|
||||||
|
this.baseChance = baseChance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getDrops(int fortuneLevel, Random random)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
if (baseChance == 100) //This always drops. Use vanilla fortune rules.
|
||||||
|
{
|
||||||
|
count = calculateFortuneMulti(fortuneLevel, random);
|
||||||
|
} else if (calculateFortuneSingle(fortuneLevel, random)) //This has a chance to drop. Increase that chance with fortune.
|
||||||
|
{
|
||||||
|
count = this.count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
return new ItemStack(drop.getItem(), count, drop.getItemDamage());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Refer to http://minecraft.gamepedia.com/Enchanting#Fortune
|
||||||
|
private int calculateFortuneMulti(int level, Random random)
|
||||||
|
{
|
||||||
|
int chanceOfEachBonus = 100 / (level + 2);
|
||||||
|
int roll = random.nextInt(100);
|
||||||
|
|
||||||
|
if (roll <= chanceOfEachBonus * level) //If level = 0, this is always false
|
||||||
|
{
|
||||||
|
return (roll / chanceOfEachBonus) + 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Each fortune level increases probability by 50% of base, up to a limit of 100%.
|
||||||
|
//So, if base is 5% and we have Fortune III, chance is 5% + (3 * 2.5%) = 12.5%
|
||||||
|
private boolean calculateFortuneSingle(int level, Random random)
|
||||||
|
{
|
||||||
|
double modifier = ConfigTechReborn.FortuneSecondaryOreMultiplierPerLevel * level;
|
||||||
|
double total = baseChance + (baseChance * modifier);
|
||||||
|
int roll = random.nextInt(100);
|
||||||
|
return roll <= total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack drop;
|
||||||
|
public Integer baseChance;
|
||||||
|
public Integer count;
|
||||||
|
}
|
37
src/main/java/techreborn/blocks/OreDropSet.java
Normal file
37
src/main/java/techreborn/blocks/OreDropSet.java
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
package techreborn.blocks;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
|
import techreborn.init.ModBlocks;
|
||||||
|
import techreborn.config.ConfigTechReborn;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
|
||||||
|
public class OreDropSet
|
||||||
|
{
|
||||||
|
public OreDropSet(OreDrop primary, OreDrop... secondaries)
|
||||||
|
{
|
||||||
|
this.primary = primary;
|
||||||
|
this.secondaries = secondaries;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<ItemStack> drop(int fortune, Random random)
|
||||||
|
{
|
||||||
|
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
|
for (OreDrop drop : secondaries)
|
||||||
|
{
|
||||||
|
drops.add(drop.getDrops(fortune, random));
|
||||||
|
}
|
||||||
|
|
||||||
|
drops.add(primary.getDrops(fortune, random));
|
||||||
|
return drops;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OreDrop primary;
|
||||||
|
public OreDrop[] secondaries;
|
||||||
|
}
|
|
@ -61,6 +61,8 @@ public class ConfigTechReborn {
|
||||||
public static boolean SodaliteOreTrue;
|
public static boolean SodaliteOreTrue;
|
||||||
public static int SodaliteOreRare;
|
public static int SodaliteOreRare;
|
||||||
|
|
||||||
|
public static double FortuneSecondaryOreMultiplierPerLevel;
|
||||||
|
|
||||||
// Power
|
// Power
|
||||||
public static int ThermalGenertaorOutput;
|
public static int ThermalGenertaorOutput;
|
||||||
public static int CentrifugeInputTick;
|
public static int CentrifugeInputTick;
|
||||||
|
@ -438,6 +440,15 @@ public class ConfigTechReborn {
|
||||||
.translateToLocal("config.techreborn.silverOre.rare.tooltip"))
|
.translateToLocal("config.techreborn.silverOre.rare.tooltip"))
|
||||||
.getInt();
|
.getInt();
|
||||||
|
|
||||||
|
FortuneSecondaryOreMultiplierPerLevel = config
|
||||||
|
.get(CATEGORY_WORLD,
|
||||||
|
StatCollector
|
||||||
|
.translateToLocal("config.techreborn.fortuneSecondaryOreMultiplierPerLevel"),
|
||||||
|
0.5,
|
||||||
|
StatCollector
|
||||||
|
.translateToLocal("config.techreborn.fortuneSecondaryOreMultiplierPerLevel.tooltip"))
|
||||||
|
.getDouble();
|
||||||
|
|
||||||
// Power
|
// Power
|
||||||
ThermalGenertaorOutput = config
|
ThermalGenertaorOutput = config
|
||||||
.get(CATEGORY_POWER,
|
.get(CATEGORY_POWER,
|
||||||
|
|
|
@ -710,6 +710,9 @@ config.techreborn.allow.olivineOre.tooltip=Decide whether Olivine Ore spawns or
|
||||||
config.techreborn.allow.sodaliteOre=Allow Sodalite Ore
|
config.techreborn.allow.sodaliteOre=Allow Sodalite Ore
|
||||||
config.techreborn.allow.sodaliteOre.tooltip=Decide whether Sodalite Ore spawns or not
|
config.techreborn.allow.sodaliteOre.tooltip=Decide whether Sodalite Ore spawns or not
|
||||||
|
|
||||||
|
config.techreborn.fortuneSecondaryOreMultiplierPerLevel=Fortune's Effect on Secondaries
|
||||||
|
config.techreborn.fortuneSecondaryOreMultiplierPerLevel.tooltip=How much of an increase should each level of fortune have on secondary ore drops?
|
||||||
|
|
||||||
config.techreborn.allowExpensiveMacerator=Allow Expensive Macerator
|
config.techreborn.allowExpensiveMacerator=Allow Expensive Macerator
|
||||||
config.techreborn.allowExpensiveMacerator.tooltip=
|
config.techreborn.allowExpensiveMacerator.tooltip=
|
||||||
config.techreborn.allowExpensiveDrill=Allow Expensive Drill
|
config.techreborn.allowExpensiveDrill=Allow Expensive Drill
|
||||||
|
|
Loading…
Reference in a new issue