use of com.almuradev.toolbox.util.math.IntRange in project Almura by AlmuraDev.
the class Grass method getOrLoadAmountRequiredRangeForBiome.
@Nullable
public IntRange getOrLoadAmountRequiredRangeForBiome(final Biome biome) {
@Nullable IntRange found = this.biomeAmountRanges.get(biome);
if (found == null) {
for (final Map.Entry<FunctionPredicate<Biome, ResourceLocation>, IntRange> entry : this.biomeAmountPredicates.entrySet()) {
final FunctionPredicate<Biome, ResourceLocation> predicate = entry.getKey();
if (predicate.test(biome)) {
final IntRange range = entry.getValue();
this.biomeAmountRanges.put(biome, range);
found = range;
break;
}
}
}
if (found == null && this.globalAmountRange != null) {
this.biomeAmountRanges.put(biome, this.globalAmountRange);
found = this.globalAmountRange;
}
return found;
}
use of com.almuradev.toolbox.util.math.IntRange in project Almura by AlmuraDev.
the class MixinBlockTallGrass method getDrops.
/**
* @author Zidane - Chris Sanders
* @reason Add in content seeds to drop list for Tall Grass
*/
@Overwrite(remap = false)
public void getDrops(final NonNullList<ItemStack> drops, final IBlockAccess access, final BlockPos pos, final IBlockState state, final int fortune) {
World world;
if (access instanceof ChunkCache) {
world = ((ChunkCache) access).world;
} else if (access instanceof World) {
world = (World) access;
} else {
return;
}
final Random random = world.rand;
// Roll 1 is Vanilla's 1/8 chance to drop a seed
final int roll1 = random.nextInt(8);
if (roll1 == 0) {
// Forge Start - Lookup seed each time and then do random check. Almura handles its own chance code
final ItemStack modSeed = net.minecraftforge.common.ForgeHooks.getGrassSeed(random, fortune);
if (!modSeed.isEmpty()) {
drops.add(modSeed);
// Don't double up with Vanilla/mod drops
return;
}
final Biome biome = world.getBiome(pos);
// Roll 2 is shuffling Almura seeds and picking the first one after shuffling
registry.getAllOf(ItemType.class).stream().filter(itemType -> itemType instanceof SeedItem && ((SeedItem) itemType).getGrass() != null).collect(Collectors.collectingAndThen(Collectors.toList(), collected -> {
Collections.shuffle(collected);
return collected.stream();
})).findFirst().ifPresent((itemType) -> {
final SeedItem seed = (SeedItem) itemType;
final IntRange amountRange = seed.getGrass().getOrLoadAmountRequiredRangeForBiome(biome);
if (amountRange != null) {
final int stackSize = amountRange.random(random);
final DoubleRange chanceRange = seed.getGrass().getOrLoadChanceRangeForBiome(biome);
if (chanceRange != null) {
final double chance = chanceRange.random(random);
// Roll 3 is allowing the seed configuration to determine the chance for the drop
if (random.nextDouble() <= (chance / 100)) {
drops.add((ItemStack) (Object) org.spongepowered.api.item.inventory.ItemStack.of(itemType, stackSize));
}
} else {
drops.add((ItemStack) (Object) org.spongepowered.api.item.inventory.ItemStack.of(itemType, stackSize));
}
}
});
}
// Almura End
}
Aggregations