auracore/src/main/java/dev/tilera/auracore/mixins/MixinThaumcraftWorldGenerat...

130 lines
5.6 KiB
Java

package dev.tilera.auracore.mixins;
import java.util.Random;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import dev.tilera.auracore.api.EnumNodeType;
import dev.tilera.auracore.aura.AuraManager;
import dev.tilera.auracore.world.WorldGenSilverwoodTreesOld;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.common.config.Config;
import thaumcraft.common.config.ConfigBlocks;
import thaumcraft.common.lib.world.ThaumcraftWorldGenerator;
import thaumcraft.common.lib.world.WorldGenSilverwoodTrees;
import thaumcraft.common.lib.world.biomes.BiomeHandler;
@Mixin(ThaumcraftWorldGenerator.class)
public abstract class MixinThaumcraftWorldGenerator {
/**
* @author tilera
* @reason Old Silverwood trees
*/
@Overwrite(remap = false)
public static boolean generateSilverwood(World world, Random random, int chunkX, int chunkZ) {
int x = chunkX * 16 + random.nextInt(16);
int z = chunkZ * 16 + random.nextInt(16);
int y = world.getHeightValue(x, z);
BiomeGenBase bio = world.getBiomeGenForCoords(x, z);
if (bio.equals(ThaumcraftWorldGenerator.biomeMagicalForest) || bio.equals(ThaumcraftWorldGenerator.biomeTaint) || !BiomeDictionary.isBiomeOfType(bio, Type.MAGICAL) && BiomeDictionary.isBiomeOfType(bio, Type.FOREST)) {
return false;
} else if (dev.tilera.auracore.Config.replaceSilverwood) {
boolean t = (new WorldGenSilverwoodTreesOld(false)).generate(world, random, x, y, z);
if (t) {
int value = random.nextInt(200) + 200;
AuraManager.registerAuraNode(world, (short)value, EnumNodeType.PURE, world.provider.dimensionId, x, y + 1, z);
ThaumcraftWorldGenerator.generateFlowers(world, random, x, y, z, 2);
}
return t;
} else {
return (new WorldGenSilverwoodTrees(false, 7, 4)).generate(world, random, x, y, z);
}
}
/**
* @author tilera
* @reason Generate infused ores
*/
@Overwrite(remap = false)
private void generateOres(World world, Random random, int chunkX, int chunkZ, boolean newGen) {
BiomeGenBase bgb = world.getBiomeGenForCoords(chunkX * 16 + 8, chunkZ * 16 + 8);
if (ThaumcraftWorldGenerator.getBiomeBlacklist(bgb.biomeID) != 0 && ThaumcraftWorldGenerator.getBiomeBlacklist(bgb.biomeID) != 2) {
int i;
int randPosX;
int randPosZ;
int randPosY;
Block block;
if (Config.genCinnibar && (newGen || Config.regenCinnibar)) {
for(i = 0; i < 18; ++i) {
randPosX = chunkX * 16 + random.nextInt(16);
randPosZ = random.nextInt(world.getHeight() / 5);
randPosY = chunkZ * 16 + random.nextInt(16);
block = world.getBlock(randPosX, randPosZ, randPosY);
if (block != null && block.isReplaceableOreGen(world, randPosX, randPosZ, randPosY, Blocks.stone)) {
world.setBlock(randPosX, randPosZ, randPosY, ConfigBlocks.blockCustomOre, 0, 0);
}
}
}
if (Config.genAmber && (newGen || Config.regenAmber)) {
for(i = 0; i < 20; ++i) {
randPosX = chunkX * 16 + random.nextInt(16);
randPosZ = chunkZ * 16 + random.nextInt(16);
randPosY = world.getHeightValue(randPosX, randPosZ) - random.nextInt(25);
block = world.getBlock(randPosX, randPosY, randPosZ);
if (block != null && block.isReplaceableOreGen(world, randPosX, randPosY, randPosZ, Blocks.stone)) {
world.setBlock(randPosX, randPosY, randPosZ, ConfigBlocks.blockCustomOre, 7, 2);
}
}
}
if (Config.genInfusedStone && (newGen || Config.regenInfusedStone)) {
for(i = 0; i < 8; ++i) {
randPosX = chunkX * 16 + random.nextInt(16);
randPosZ = chunkZ * 16 + random.nextInt(16);
randPosY = random.nextInt(Math.max(5, world.getHeightValue(randPosX, randPosZ) - 5));
int md = random.nextInt(7) + 1;
if (random.nextInt(3) == 0) {
Aspect tag = BiomeHandler.getRandomBiomeTag(world.getBiomeGenForCoords(randPosX, randPosZ).biomeID, random);
if (tag == null) {
md = 1 + random.nextInt(7);
} else if (tag == Aspect.AIR) {
md = 1;
} else if (tag == Aspect.FIRE) {
md = 2;
} else if (tag == Aspect.WATER) {
md = 3;
} else if (tag == Aspect.EARTH) {
md = 4;
} else if (tag == Aspect.ORDER) {
md = 5;
} else if (tag == Aspect.ENTROPY) {
md = 6;
}
}
if (md > 6) {
md = 8;
}
try {
(new WorldGenMinable(ConfigBlocks.blockCustomOre, md, 6, Blocks.stone)).generate(world, random, randPosX, randPosY, randPosZ);
} catch (Exception var13) {
var13.printStackTrace();
}
}
}
}
}
}