Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.examplemod;
- import com.google.common.base.Throwables;
- import com.google.common.collect.ObjectArrays;
- import cpw.mods.fml.common.Mod;
- import cpw.mods.fml.common.Mod.EventHandler;
- import cpw.mods.fml.common.event.FMLPreInitializationEvent;
- import cpw.mods.fml.common.eventhandler.SubscribeEvent;
- import net.minecraft.world.biome.BiomeGenBase;
- import net.minecraft.world.gen.layer.GenLayer;
- import net.minecraft.world.gen.layer.GenLayerBiome;
- import net.minecraft.world.gen.layer.GenLayerRiverMix;
- import net.minecraft.world.gen.layer.MyModGenLayerAccessor;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.event.terraingen.WorldTypeEvent;
- import java.lang.reflect.Field;
- @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
- public class ExampleMod
- {
- public static final String MODID = "examplemod";
- public static final String VERSION = "1.0";
- public static BiomeGenBase myBiome;
- @EventHandler
- public void preInit(FMLPreInitializationEvent event) {
- MinecraftForge.TERRAIN_GEN_BUS.register(this);
- myBiome = new BiomeGenBase(245) {
- };
- }
- private static Field biomePatternGeneratorChainField;
- private static Field biomeArrayField;
- static {
- // TODO: SRG names for non-dev environment
- try {
- biomePatternGeneratorChainField = GenLayerRiverMix.class.getDeclaredField("biomePatternGeneratorChain");
- biomePatternGeneratorChainField.setAccessible(true);
- // this is just an example, there are 4 biome arrays in the class, i am not 100% what they do
- biomeArrayField = GenLayerBiome.class.getDeclaredField("field_151621_d");
- biomeArrayField.setAccessible(true);
- } catch (NoSuchFieldException e) {
- Throwables.propagate(e);
- }
- }
- @SubscribeEvent
- public void onGenLayerInit(WorldTypeEvent.InitBiomeGens event) throws IllegalAccessException {
- GenLayer biomeLayer = event.originalBiomeGens[1];
- do {
- if (biomeLayer instanceof GenLayerRiverMix) {
- biomeLayer = (GenLayer) biomePatternGeneratorChainField.get(biomeLayer);
- } else {
- biomeLayer = MyModGenLayerAccessor.getParent(biomeLayer);
- }
- } while (biomeLayer != null && !(biomeLayer instanceof GenLayerBiome));
- if (biomeLayer == null) {
- throw new IllegalStateException("couldn't locate GenLayerBiome!");
- }
- BiomeGenBase[] biomes = (BiomeGenBase[]) biomeArrayField.get(biomeLayer);
- biomes = ObjectArrays.concat(biomes, myBiome);
- biomeArrayField.set(biomeLayer, biomes);
- }
- }
- package net.minecraft.world.gen.layer;
- /**
- * @author diesieben07
- */
- public final class MyModGenLayerAccessor {
- public static GenLayer getParent(GenLayer genLayer) {
- return genLayer.parent;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement