下面列出了怎么用net.minecraft.util.WeightedRandom的API类实例代码及写法,或者点击链接到github查看源代码。
public static NodeManipulatorResult getRandomResult(World world, Random random, INode affectedNode, int percChance) {
int resultPositiveChance = Math.round(((float) percChance) / 5F);
List<NodeManipulatorResult> localResults = new ArrayList<NodeManipulatorResult>();
for(NodeManipulatorResult result : possibleResults) {
if(result.canAffect(world, affectedNode)) {
ResultType type = result.getResultType();
if(type == ResultType.NEGATIVE) {
if(random.nextInt(100) < resultPositiveChance) continue;
}
localResults.add(result);
}
}
if(localResults.isEmpty()) return null;
return (NodeManipulatorResult) WeightedRandom.getRandomItem(random, localResults);
}
@Override
public void prepare() {
laserOres = MFRRegistry.getLaserOres();
for (WeightedRandom.Item ore : laserOres) {
totalWeight += ore.itemWeight;
}
laserPreferredOres = new HashMap<Integer, List<ItemStack>>();
for (int i = 0; i <= 15; i++) {
List<ItemStack> preferredOres = MFRRegistry.getLaserPreferredOres(i);
laserPreferredOres.put(i, preferredOres);
}
TileEntityLaserDrillPrecharger dummyPrecharger = new TileEntityLaserDrillPrecharger();
TileEntityLaserDrill dummyDrill = new TileEntityLaserDrill();
energyPerOperation = dummyPrecharger.getActivationEnergy() * dummyDrill.getWorkMax();
dummyPrecharger = null;
dummyDrill = null;
laserFocus = GameRegistry.findItem("MineFactoryReloaded", "laserfocus");
if (laserFocus == null) {
laserFocus = GameRegistry.findItem("MineFactoryReloaded", "item.mfr.laserfocus");
}
}
@Override
public void loadAllRecipes() {
for (WeightedRandom.Item drop : laserOres) {
if (drop instanceof WeightedRandomItemStack) {
ItemStack dropStack = ((WeightedRandomItemStack) drop).getStack();
for (int i : laserPreferredOres.keySet()) {
List<ItemStack> preferredStacks = laserPreferredOres.get(i);
if (preferredStacks != null) {
for (ItemStack preferredStack : preferredStacks) {
if (Utils.areStacksSameTypeCraftingSafe(preferredStack, dropStack)) {
this.arecipes.add(new CachedLaserDrillRecipe(dropStack, drop.itemWeight, i));
}
}
}
}
}
}
}
@Override
public void loadCraftingRecipes(ItemStack result) {
for (WeightedRandom.Item drop : laserOres) {
if (drop instanceof WeightedRandomItemStack) {
if (Utils.areStacksSameTypeCraftingSafe(((WeightedRandomItemStack) drop).getStack(), result)) {
ItemStack dropStack = ((WeightedRandomItemStack) drop).getStack();
for (int i : laserPreferredOres.keySet()) {
List<ItemStack> preferredStacks = laserPreferredOres.get(i);
if (preferredStacks != null) {
for (ItemStack preferredStack : preferredStacks) {
if (Utils.areStacksSameTypeCraftingSafe(preferredStack, dropStack)) {
this.arecipes.add(new CachedLaserDrillRecipe(dropStack, drop.itemWeight, i));
}
}
}
}
}
}
}
}
@Override
public void loadUsageRecipes(ItemStack ingred) {
int dmg = ingred.getItemDamage();
if (ingred.getItem() == laserFocus && dmg <= 15) {
for (WeightedRandom.Item drop : laserOres) {
if (drop instanceof WeightedRandomItemStack) {
ItemStack dropStack = ((WeightedRandomItemStack) drop).getStack();
List<ItemStack> preferredStacks = laserPreferredOres.get(dmg);
if (preferredStacks != null) {
for (ItemStack preferredStack : preferredStacks) {
if (Utils.areStacksSameTypeCraftingSafe(preferredStack, dropStack)) {
this.arecipes.add(new CachedLaserDrillRecipe(dropStack, drop.itemWeight, dmg));
}
}
}
}
}
}
}
protected BiomeEntry getWeightedBiomeEntry()
{
if(biomeEntries == null || biomeEntries.isEmpty())
return new BiomeEntry(Biomes.OCEAN, 100);
List<BiomeEntry> biomeList = biomeEntries;
int totalWeight = WeightedRandom.getTotalWeight(biomeList);
int weight = nextInt(totalWeight / 10) * 10;
return (BiomeEntry)WeightedRandom.getRandomItem(biomeList, weight);
}
/**
* Gets a random custom mob for spawning based on XYZ coordinates
*/
public SpawnListEntry getRandomCustomMob(World worldObj, EnumCreatureType enumCreatureType, int pX, int pY, int pZ)
{
List list = getPossibleCustomCreatures(worldObj, enumCreatureType, pX, pY, pZ);
if (list == null || list.isEmpty())
{
//System.out.println("list = NULL!! for type " + enumCreatureType.name());
return null;
}
else
{
return (SpawnListEntry) WeightedRandom.getRandomItem(worldObj.rand, list);
}
}