Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.example.examplemod;
  2.  
  3. import com.google.common.base.Throwables;
  4. import com.google.common.collect.ObjectArrays;
  5. import cpw.mods.fml.common.Mod;
  6. import cpw.mods.fml.common.Mod.EventHandler;
  7. import cpw.mods.fml.common.event.FMLPreInitializationEvent;
  8. import cpw.mods.fml.common.eventhandler.SubscribeEvent;
  9. import net.minecraft.world.biome.BiomeGenBase;
  10. import net.minecraft.world.gen.layer.GenLayer;
  11. import net.minecraft.world.gen.layer.GenLayerBiome;
  12. import net.minecraft.world.gen.layer.GenLayerRiverMix;
  13. import net.minecraft.world.gen.layer.MyModGenLayerAccessor;
  14. import net.minecraftforge.common.MinecraftForge;
  15. import net.minecraftforge.event.terraingen.WorldTypeEvent;
  16.  
  17. import java.lang.reflect.Field;
  18.  
  19. @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
  20. public class ExampleMod
  21. {
  22.     public static final String MODID = "examplemod";
  23.     public static final String VERSION = "1.0";
  24.  
  25.     public static BiomeGenBase myBiome;
  26.  
  27.     @EventHandler
  28.     public void preInit(FMLPreInitializationEvent event) {
  29.         MinecraftForge.TERRAIN_GEN_BUS.register(this);
  30.  
  31.         myBiome = new BiomeGenBase(245) {
  32.  
  33.         };
  34.     }
  35.  
  36.     private static Field biomePatternGeneratorChainField;
  37.     private static Field biomeArrayField;
  38.  
  39.     static {
  40.         // TODO: SRG names for non-dev environment
  41.         try {
  42.             biomePatternGeneratorChainField = GenLayerRiverMix.class.getDeclaredField("biomePatternGeneratorChain");
  43.             biomePatternGeneratorChainField.setAccessible(true);
  44.  
  45.             // this is just an example, there are 4 biome arrays in the class, i am not 100% what they do
  46.             biomeArrayField = GenLayerBiome.class.getDeclaredField("field_151621_d");
  47.             biomeArrayField.setAccessible(true);
  48.         } catch (NoSuchFieldException e) {
  49.             Throwables.propagate(e);
  50.         }
  51.     }
  52.  
  53.     @SubscribeEvent
  54.     public void onGenLayerInit(WorldTypeEvent.InitBiomeGens event) throws IllegalAccessException {
  55.         GenLayer biomeLayer = event.originalBiomeGens[1];
  56.         do {
  57.             if (biomeLayer instanceof GenLayerRiverMix) {
  58.                 biomeLayer = (GenLayer) biomePatternGeneratorChainField.get(biomeLayer);
  59.             } else {
  60.                 biomeLayer = MyModGenLayerAccessor.getParent(biomeLayer);
  61.             }
  62.         } while (biomeLayer != null && !(biomeLayer instanceof GenLayerBiome));
  63.  
  64.         if (biomeLayer == null) {
  65.             throw new IllegalStateException("couldn't locate GenLayerBiome!");
  66.         }
  67.  
  68.         BiomeGenBase[] biomes = (BiomeGenBase[]) biomeArrayField.get(biomeLayer);
  69.         biomes = ObjectArrays.concat(biomes, myBiome);
  70.         biomeArrayField.set(biomeLayer, biomes);
  71.     }
  72.  
  73. }
  74.  
  75. package net.minecraft.world.gen.layer;
  76.  
  77. /**
  78.  * @author diesieben07
  79.  */
  80. public final class MyModGenLayerAccessor {
  81.  
  82.     public static GenLayer getParent(GenLayer genLayer) {
  83.         return genLayer.parent;
  84.     }
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement