Jump to content

OwnAgePau

Forge Modder
  • Posts

    217
  • Joined

  • Last visited

Posts posted by OwnAgePau

  1. But isn't it so in this case that on remote it sets the output and thus the enchantment on that output, but then on local it doesn't put anything in the output at all. And therefor I am not able to take anything out? Because If I turn this around, visually it doesn't set the output but locally and "underwater" there is something in the output and when I click the output slot I get the output with an enchantment.

     

    It seems that on remote it sets what the output looks like but what you actually get from the output happens on the !remote side....

  2. It is a bit messy though and I currently removed the split between remote or not.

     

    public void onCraftMatrixChanged(IInventory par1IInventory){
    ItemStack result = GemmingCraftingRecipes.getInstance().findMatchingRecipe(this.craftMatrix, this.worldObj);
    if(!this.worldObj.isRemote){
        if(result != null){
    	ItemStack input = null;
    	if(this.getSlot(0).getStack() != null){
    	    input = this.getSlot(0).getStack();
    	} 
    	if(this.getSlot(1).getStack() != null){
    	    input = this.getSlot(1).getStack();
    	}
    	if(input != null){
    	    if(input.getItem() != SoulItems.ScarletiteAmuletStone.get()){
    		ArrayList<Enchantment> enchants = new ArrayList();
    		for(Enchantment e : Enchantment.enchantmentsList){
    		    if(e != null){
    			if(e.canApply(input)){
    			    enchants.add(e);
    			}
    		    }
    		}
    		System.out.println("--------------------------");
    		int random = new Random().nextInt(enchants.size());
    		Enchantment newEnchantment = enchants.get(random);
    		System.out.println("New Enchantment : " + newEnchantment.getName());
    
    		Map map = EnchantmentHelper.getEnchantments(input);
    		Iterator iterator = map.keySet().iterator();
    		int newEnchLevel = 0;
    		boolean flag = false;
    
    		while (iterator.hasNext()){
    		    int i = ((Integer)iterator.next()).intValue();
    		    Enchantment ench = Enchantment.enchantmentsList[i];
    		    int enchLevel = map.containsKey(Integer.valueOf(i)) ? ((Integer)map.get(Integer.valueOf(i))).intValue() : 0;
    		    System.out.println(ench.effectId + ", " + newEnchantment.effectId);
    		    if(ench.effectId == newEnchantment.effectId){
    			flag = true;
    			enchLevel += 1;
    		    }
    
    		    boolean flag1 = ench.canApply(result);
    		    if("enchantment.lootBonusDigger".equals(newEnchantment.getName())){
    			if("enchantment.untouching".equals(ench.getName())){
    			    flag1 = false;
    			}
    		    }
    		    if("enchantment.untouching".equals(newEnchantment.getName())){
    			if("enchantment.lootBonusDigger".equals(ench.getName())){
    			    flag1 = false;
    			}
    		    }
    		    if(!(newEnchantment.canApplyTogether(ench) && ench.canApplyTogether(newEnchantment))){
    			flag1 = false;
    		    }
    		    if(flag1){
    			if (enchLevel > ench.getMaxLevel()){
    			    enchLevel = ench.getMaxLevel();
    			}
    			System.out.println("ID : " + ench.getName() + ", lvl : " + enchLevel);
    			map.put(Integer.valueOf(ench.effectId), Integer.valueOf(enchLevel));
    		    }      
    		    else{
    			if (enchLevel > ench.getMaxLevel()){
    			    enchLevel = ench.getMaxLevel();
    			}
    			System.out.println("ID : " + ench.getName() + ", lvl : " + enchLevel);
    			map.put(Integer.valueOf(ench.effectId), Integer.valueOf(enchLevel));
    		    }
    		}
    		if(!flag){
    		    if (newEnchLevel > newEnchantment.getMaxLevel()){
    			newEnchLevel = newEnchantment.getMaxLevel();
    		    }
    		    if(newEnchLevel == 0){
    			newEnchLevel += 1;
    		    }
    		    boolean canApply = newEnchantment.canApply(result);
    		    if(canApply){
    			System.out.println("NEW -> ID : " + newEnchantment.getName() + ", lvl : " + newEnchLevel);
    			map.put(Integer.valueOf(newEnchantment.effectId), Integer.valueOf(newEnchLevel));
    		    }
    		}
    		EnchantmentHelper.setEnchantments(map, result);
    	    }
    	}
        }
    }
    this.craftResult.setInventorySlotContents(0, result);
        }
    

  3. Hi there,

     

    I have succesfully created a block that allows me to combine a tool or armor with a magical stone to give the tool or armor a random enchantment. However I want to see the actual output on the right side. What happens right now is that it randomly selects an enchantment both on remote and !remote. So the enchantment you see in the output is not the enchantment that is being added to the tool/armor.

     

    I tried placing the randomization only on !remote side or on remote but this either results in the output not showing an enchantment and recieving an enchantment upon creation or showing an enchantment in the ouput and not recieving an enchantment upon creation.

     

    How could I make it so it selects a randomized enchantment and gives that enchantment to the weapon.

  4. So I have made a few items that will manipulate the damage done to or by the player and I have succesfully made a check that checks whether this is the case.

    I want to check how much damage is done (in both cases) and decrease or increase the total damage by half the amount.

     

    Item A is there to increase the damage done by the player to other entities by 50%. - The Black Diamond Ring in this case.

    Item B is there to decrease the damage done to the player by other entities by 50%.

     

    To do this I thought it would be best to do this in a forge event and the entityAttacked(LivingAttackEvent event) seemed perfect for that.

     

    So far I have not found a way to alter the amount of damage done by that specific attack so I made it so the entity is attacked another time but now its damageSource is "bonus magic" so that the event wont trigger my check.

     

    My code to do this so far:

    @SubscribeEvent
        public void entityAttacked(LivingAttackEvent event){
    if(event.entityLiving.worldObj.isRemote){
           if(!(event.entityLiving instanceof EntityPlayer)){
                  EntityLiving attackedEnt = (EntityLiving) event.entityLiving;
          DamageSource attackSource = event.source;
          Entity player = event.source.getEntity();
                  if(player instanceof EntityPlayer){
                         EntityPlayer thePlayer = (EntityPlayer)player;
                         if("generic".equals(attackSource.damageType) || "magic".equals(attackSource.damageType) || 
    		    "player".equals(attackSource.damageType)){
    	            if(this.checkPlayerHasAmulet(thePlayer)){
    		           System.out.println("Normal Damage : " + event.ammount);
    		           System.out.println("Bonus Damage from Ring : " + event.ammount / 2);
    		           attackedEnt.attackEntityFrom(new DamageSource("bonus magic"), event.ammount / 2);
    		    }
    	     }
                  }
           }
    }
    }
    
    private boolean checkPlayerHasAmulet(EntityPlayer player){
    ItemStack[] inventoryPlayer = player.inventory.mainInventory;
    for(int i = 0; i < inventoryPlayer.length;i++){
        ItemStack stack = inventoryPlayer[i];
        if(stack != null){
    	if(stack.stackSize > 0){
    	    Item item = stack.getItem();
    	    // Check if Black Diamond Ring is in your hotbar
    	    if(item.equals(SoulItems.BlackdiamondAmuletRing.get()) && i < 9){
    		item.setDamage(stack, item.getDamage(stack) + 1);
    		return true;
    	    }
    	}
        }
    }
    return true;
        }
    

     

    As you can probably see I now attack the entity with half the event.ammount (which is always 0.5, or in cases of a critical attack 0.75) as somehow the event.ammount is always 1, it seems it uses the base player damage or something.

     

    Is there any way to check how much damage is actually done? And is there perhaps an easier way to go about doing this?

  5. Hi there,

     

    I desided to take some time to create myself a nice custom model to use in my mod, when I finally had all the rotations and such as I wanted it to be and completed the texture for the model, I exported it to java and added it to minecraft. Soon though I noticed that some of the blocks on the staff were rotated differently then I created, and most blocks (even with rotations) came up just fine.

    Here is a picture of it in mc:

    http://gyazo.com/f9893308041eac5cbe6e448367829612

     

    and here is it while it is still in Techne:

    http://gyazo.com/4b8959ae131c309f2e7dcd4c963d5d75

     

    If you look at the top of the staff, it goes terrible wrong on that part. But why??

     

    Thanks for the help in advance!

  6. Ok so, I worked on porting my mod from 1.6.2 to 1.7.2 a while back, and I wanted to continue this so I started setting up Gradle and eclipse.

    After a couple of hickups I got it (I think), but now it FML seems to throw an error when trying to process my file :

    [16:16:37] [Client thread/ERROR] [FML]: Unable to read a class file correctly
    java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:170) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:153) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:424) ~[asm-debug-all-4.1.jar:4.1]
    at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52) [ASMModParser.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:100) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.discover(DirectoryDiscoverer.java:53) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42) [ContainerType.class:?]
    at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71) [ModCandidate.class:?]
    at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:123) [ModDiscoverer.class:?]
    at cpw.mods.fml.common.Loader.identifyMods(Loader.java:346) [Loader.class:?]
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:467) [Loader.class:?]
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:510) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:880) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_79]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_79]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
    [16:16:37] [Client thread/ERROR] [FML]: There was a problem reading the file F:\MinecraftModding\Forge\bin\com\Mod_Ores\BiomeGen\BiomeEventMarona.class - probably this is a corrupt file
    cpw.mods.fml.common.LoaderException: java.lang.IllegalArgumentException
    at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:58) ~[ASMModParser.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:100) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.discover(DirectoryDiscoverer.java:53) [DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42) [ContainerType.class:?]
    at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71) [ModCandidate.class:?]
    at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:123) [ModDiscoverer.class:?]
    at cpw.mods.fml.common.Loader.identifyMods(Loader.java:346) [Loader.class:?]
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:467) [Loader.class:?]
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:510) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:880) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_79]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_79]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
    Caused by: java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:170) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:153) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:424) ~[asm-debug-all-4.1.jar:4.1]
    at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52) ~[ASMModParser.class:?]
    ... 22 more
    [16:16:37] [Client thread/WARN] [FML]: Identified a problem with the mod candidate F:\MinecraftModding\Forge\bin, ignoring this source
    cpw.mods.fml.common.LoaderException: java.lang.IllegalArgumentException
    at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:58) ~[ASMModParser.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:100) ~[DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) ~[DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) ~[DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.exploreFileSystem(DirectoryDiscoverer.java:89) ~[DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.DirectoryDiscoverer.discover(DirectoryDiscoverer.java:53) ~[DirectoryDiscoverer.class:?]
    at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42) ~[ContainerType.class:?]
    at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71) ~[ModCandidate.class:?]
    at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:123) [ModDiscoverer.class:?]
    at cpw.mods.fml.common.Loader.identifyMods(Loader.java:346) [Loader.class:?]
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:467) [Loader.class:?]
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:510) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:880) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_79]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_79]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_79]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
    Caused by: java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:170) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:153) ~[asm-debug-all-4.1.jar:4.1]
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:424) ~[asm-debug-all-4.1.jar:4.1]
    at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52) ~[ASMModParser.class:?]
    ... 22 more
    [16:16:37] [Client thread/ERROR] [FML]: FML has detected a mod that is using a package name based on 'net.minecraft.src' : net.minecraft.src.FMLRenderAccessLibrary. This is generally a severe programming error.  There should be no mod code in the minecraft namespace. MOVE YOUR MOD! If you're in eclipse, select your source code and 'refactor' it into a new package. Go on. DO IT NOW!
    [16:16:38] [Client thread/INFO] [FML]: Forge Mod Loader has identified 3 mods to load
    [16:16:38] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge
    [16:16:38] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
    [16:16:38] [Client thread/INFO] [FML]: Found 341 ObjectHolder annotations
    [16:16:38] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
    [16:16:38] [Client thread/INFO] [FML]: Applying holder lookups
    [16:16:38] [Client thread/INFO] [FML]: Holder lookups applied
    

     

    I tried creating a new file and moving the content from the old file to the new, but that didnt change a thing.

    I also tried cleaning and building gradle.

     

    This is the file it says being corrupt:

    package com.Mod_Ores.BiomeGen;
    
    import net.minecraft.world.biome.BiomeDecorator;
    import net.minecraft.world.biome.BiomeGenBase;
    import cpw.mods.fml.common.eventhandler.Event;
    import cpw.mods.fml.common.eventhandler.Event.HasResult;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    public class BiomeEventMarona extends Event
    {
        public final BiomeGenBase biome;
    
        
        public BiomeEventMarona(BiomeGenBase biome)
        {
            this.biome = biome;
        }
        
        public static class CreateDecorator extends BiomeEventMarona
        {
            public final BiomeDecorator originalTheBiomeDeco;
            public BiomeDecorator newTheBiomeDeco;
            
            public CreateDecorator(BiomeGenBase biome, BiomeDecorator original)
            {
                super(biome);
                originalTheBiomeDeco = original;
                newTheBiomeDeco = original;
            }
        }
    
        public static class BlockReplacement extends BiomeEventMarona
        {
            public final int original;
            public int replacement;
    
            public BlockReplacement(BiomeGenBase biome, int original, int replacement)
            {
                super(biome);
                this.original = original;
                this.replacement = replacement;
            }
        }
        
    
        @SideOnly(Side.CLIENT)
        public static class BiomeColor extends BiomeEventMarona
        {
            public final int originalColor;
            public int newColor;
            
            public BiomeColor(BiomeGenBase biome, int original)
            {
                super(biome);
                originalColor = original;
                newColor = original;
            }
        }
    
        @HasResult
        public static class GetVillageBlockID extends BlockReplacement
        {
            public GetVillageBlockID(BiomeGenBase biome, int original, int replacement)
            {
                super(biome, original, replacement);
            }
        }
    
        @HasResult
        public static class GetVillageBlockMeta extends BlockReplacement
        {
            public GetVillageBlockMeta(BiomeGenBase biome, int original, int replacement)
            {
                super(biome, original, replacement);
            }
        }
        
        @SideOnly(Side.CLIENT)
        public static class GetGrassColor extends BiomeColor
        {
            public GetGrassColor(BiomeGenBase biome, int original)
            {
                super(biome, original);
            }
        }
        
        @SideOnly(Side.CLIENT)
        public static class GetFoliageColor extends BiomeColor
        {
            public GetFoliageColor(BiomeGenBase biome, int original)
            {
                super(biome, original);
            }
        }
        
        @SideOnly(Side.CLIENT)
        public static class GetWaterColor extends BiomeColor
        {
            public GetWaterColor(BiomeGenBase biome, int original)
            {
                super(biome, original);
            }
        }
    }
    

     

    Thanks for the help in advance!

  7. Hi there,

     

    Up to 1.6.4 I had my custom dimension generate like hell with a custom stone and multiple biomes. I also had custom top and filler blocks in each biome that generated throughout my custom dimension on different layered noises. Somehow now on 1.7.2 it generates the top and filler block right under the bedrock at the top of the world and only there..... I can't seem to figure out why it does not longer generate it throughout the level.

     

    I think all you need is the next class, but if you need more classes to provide help. Ask and ill provide! Thanks in advance for your help.

     

    ChunkProviderClass :

     

     

     

    package com.Mod_Ores.Dimension;
    
    import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM;
    import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.NETHER_LAVA;
    
    import java.util.List;
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockSand;
    import net.minecraft.block.material.Material;
    import net.minecraft.entity.EnumCreatureType;
    import net.minecraft.init.Blocks;
    import net.minecraft.util.IProgressUpdate;
    import net.minecraft.world.ChunkPosition;
    import net.minecraft.world.World;
    import net.minecraft.world.biome.BiomeGenBase;
    import net.minecraft.world.chunk.Chunk;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.MapGenBase;
    import net.minecraft.world.gen.MapGenCavesHell;
    import net.minecraft.world.gen.NoiseGenerator;
    import net.minecraft.world.gen.NoiseGeneratorOctaves;
    import net.minecraft.world.gen.feature.WorldGenMinable;
    import net.minecraft.world.gen.structure.MapGenNetherBridge;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.terraingen.ChunkProviderEvent;
    import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
    import net.minecraftforge.event.terraingen.PopulateChunkEvent;
    import net.minecraftforge.event.terraingen.TerrainGen;
    
    import com.Mod_Ores.soul_forest;
    import com.Mod_Ores.Init.SoulBlocks;
    
    import cpw.mods.fml.common.eventhandler.Event.Result;
    
    public class ChunkProviderMarona implements IChunkProvider
    {
    //NETHER SOUL FOREST IDEA	
    
    private Random soulRNG;
    
        /** A NoiseGeneratorOctaves used in generating nether terrain */
        private NoiseGeneratorOctaves netherNoiseGen1;
        private NoiseGeneratorOctaves netherNoiseGen2;
        private NoiseGeneratorOctaves netherNoiseGen3;
        public NoiseGeneratorOctaves mobSpawnerNoise;
    
        /** Determines whether lateriteGrass or porphyry can be generated at a location */
        private NoiseGeneratorOctaves lateriteGrassPorphyryNoise;
    
        /**
         * Determines whether something other than porphyry can be generated at a location
         */
        private NoiseGeneratorOctaves porphyryExclusivityNoiseGen;
        public NoiseGeneratorOctaves netherNoiseGen6;
        public NoiseGeneratorOctaves netherNoiseGen7;
    
        /** The biomes that are used to generate the chunk */
        private BiomeGenBase[] biomesForGeneration;
       
        /** Is the world that the nether is getting generated. */
        private World worldObj;
        private double[] noiseField;
        public MapGenNetherBridge genNetherBridge = new MapGenNetherBridge();
    
        /**
         * Holds the noise used to determine whether lateriteGrass can be generated at a location
         */
        private double[] lateriteGrassNoise = new double[256];
        private double[] porphyryNoise = new double[256];
    
        /**
         * Holds the noise used to determine whether something other than porphyry can be generated at a location
         */
        private double[] porphyryExclusivityNoise = new double[256];
        private MapGenBase netherCaveGenerator = new MapGenCavesHell();
        double[] noiseData1;
        double[] noiseData2;
        double[] noiseData3;
        double[] noiseData4;
        double[] noiseData5;
    
    private Object theBiomeDecorator;
    
        public ChunkProviderMarona(World par1World, long par2, boolean b)
        {
            this.worldObj = par1World;
            this.soulRNG = new Random(par2);
            this.netherNoiseGen1 = new NoiseGeneratorOctaves(this.soulRNG, 16);
            this.netherNoiseGen2 = new NoiseGeneratorOctaves(this.soulRNG, 16);
            this.netherNoiseGen3 = new NoiseGeneratorOctaves(this.soulRNG, ;
            this.lateriteGrassPorphyryNoise = new NoiseGeneratorOctaves(this.soulRNG, 4);
            this.porphyryExclusivityNoiseGen = new NoiseGeneratorOctaves(this.soulRNG, 4);
            this.netherNoiseGen6 = new NoiseGeneratorOctaves(this.soulRNG, 10);
            this.netherNoiseGen7 = new NoiseGeneratorOctaves(this.soulRNG, 16);
            this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.soulRNG, ;
    
            NoiseGenerator[] noiseGens = {netherNoiseGen1, netherNoiseGen2, netherNoiseGen3, lateriteGrassPorphyryNoise, porphyryExclusivityNoiseGen, netherNoiseGen6, netherNoiseGen7, mobSpawnerNoise};
            noiseGens = TerrainGen.getModdedNoiseGenerators(par1World, this.soulRNG, noiseGens);
            this.netherNoiseGen1 = (NoiseGeneratorOctaves) noiseGens[0];
            this.netherNoiseGen2 = (NoiseGeneratorOctaves) noiseGens[1];
            this.netherNoiseGen3 = (NoiseGeneratorOctaves) noiseGens[2];
            this.lateriteGrassPorphyryNoise = (NoiseGeneratorOctaves) noiseGens[3];
            this.porphyryExclusivityNoiseGen = (NoiseGeneratorOctaves) noiseGens[4];
            this.netherNoiseGen6 = (NoiseGeneratorOctaves) noiseGens[5];
            this.netherNoiseGen7 = (NoiseGeneratorOctaves) noiseGens[6];
            this.mobSpawnerNoise = (NoiseGeneratorOctaves) noiseGens[7];
        }
    
        
        /**
         * Generates the shape of the terrain in the nether.
         */
        public void generateNetherTerrain(int par1, int par2, Block[] abyte)
        {
    
            byte b0 = 4;
            byte b1 = 32;
            int k = b0 + 1;
            byte b2 = 17;
            int l = b0 + 1;
            BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);
            float t = biomegenbase.getFloatTemperature(k, 16, l);
            this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, k + 5, l + 5);
            //System.out.println(", Biomes For Generation Size : " + this.biomesForGeneration.length);
            this.noiseField = this.initializeNoiseField(this.noiseField, par1 * b0, 0, par2 * b0, k, b2, l);
    
            for (int i1 = 0; i1 < b0; ++i1)
            {
                for (int j1 = 0; j1 < b0; ++j1)
                {
                    for (int k1 = 0; k1 < 16; ++k1)
                    {
                        double d0 = 0.125D;
                        double d1 = this.noiseField[((i1 + 0) * l + j1 + 0) * b2 + k1 + 0];
                        double d2 = this.noiseField[((i1 + 0) * l + j1 + 1) * b2 + k1 + 0];
                        double d3 = this.noiseField[((i1 + 1) * l + j1 + 0) * b2 + k1 + 0];
                        double d4 = this.noiseField[((i1 + 1) * l + j1 + 1) * b2 + k1 + 0];
                        double d5 = (this.noiseField[((i1 + 0) * l + j1 + 0) * b2 + k1 + 1] - d1) * d0;
                        double d6 = (this.noiseField[((i1 + 0) * l + j1 + 1) * b2 + k1 + 1] - d2) * d0;
                        double d7 = (this.noiseField[((i1 + 1) * l + j1 + 0) * b2 + k1 + 1] - d3) * d0;
                        double d8 = (this.noiseField[((i1 + 1) * l + j1 + 1) * b2 + k1 + 1] - d4) * d0;
    
                        for (int l1 = 0; l1 < 8; ++l1)
                        {
                            double d9 = 0.25D;
                            double d10 = d1;
                            double d11 = d2;
                            double d12 = (d3 - d1) * d9;
                            double d13 = (d4 - d2) * d9;
    
                            for (int i2 = 0; i2 < 4; ++i2)
                            {
                            	//int j2 = i2 + i1 * 4 << 12 | 0 + j1 * 4 << 8 | k1 * 8 + l1;
                                int j2 = i2 + i1 * 4 << 11 | 0 + j1 * 4 << 7 | k1 * 8 + l1;
                                //short short1 = 256;
                                //j2 -= short1;
                                short short1 = 128;
                                double d14 = 0.25D;
                                double d15 = d10;
                                double d16 = (d11 - d10) * d14;
                                //ouble d15 = d10 - d16;    
    
                                for (int k2 = 0; k2 < 4; ++k2)
                                {
                                    Block l2 = null;
    
                                    if (k1 * 8 + l1 < b1)
                                    {
                                    	l2 = SoulBlocks.SoulWater.get();
                                    }
                                    else if (d15 > 0.0D)
                                    {
                                    	l2 = SoulBlocks.Porphyry.get();
                                    }
    
                                    abyte[j2] = l2;
                                    j2 += short1;
                                    d15 += d16;
                                }
    
                                d10 += d12;
                                d11 += d13;
                            }
    
                            d1 += d5;
                            d2 += d6;
                            d3 += d7;
                            d4 += d8;
                        }
                    }
                }
            }
        }
    
        /**
         * name based on ChunkProviderGenerate
         */
        public void replaceBlocksForBiome(int par1, int par2, Block[] par3ArrayOfByte, BiomeGenBase[] biomesForGeneration2)
        {
            ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, par1, par2, par3ArrayOfByte, biomesForGeneration2);
            MinecraftForge.EVENT_BUS.post(event);
            if (event.getResult() == Result.DENY) return;
    
            byte b0 = 64;
            double d0 = 0.03125D;
            this.lateriteGrassNoise = this.lateriteGrassPorphyryNoise.generateNoiseOctaves(this.lateriteGrassNoise, par1 * 16, par2 * 16, 0, 16, 16, 1, d0, d0, 1.0D);
            this.porphyryNoise = this.lateriteGrassPorphyryNoise.generateNoiseOctaves(this.porphyryNoise, par1 * 16, 109, par2 * 16, 16, 1, 16, d0, 1.0D, d0);
            this.porphyryExclusivityNoise = this.porphyryExclusivityNoiseGen.generateNoiseOctaves(this.porphyryExclusivityNoise, par1 * 16, par2 * 16, 0, 16, 16, 1, d0 * 2.0D, d0 * 2.0D, d0 * 2.0D);
    
            for (int k = 0; k < 16; ++k)
            {
                for (int l = 0; l < 16; ++l)
                {
                	BiomeGenBase biomegenbase = biomesForGeneration2[l + k * 16];
                	float f = biomegenbase.getFloatTemperature(k, 1, l);
                    boolean flag = this.lateriteGrassNoise[k + l * 16] + this.soulRNG.nextDouble() * 0.2D > 0.0D;
                    boolean flag1 = this.porphyryNoise[k + l * 16] + this.soulRNG.nextDouble() * 0.2D > 0.0D;
                    int i1 = (int)(this.porphyryExclusivityNoise[k + l * 16] / 3.0D + 3.0D + this.soulRNG.nextDouble() * 0.25D);
                    int j1 = -1;
                    Block b1 = biomegenbase.topBlock;
                    Block b2 = biomegenbase.fillerBlock;                
    
                    for (int k1 = 127; k1 >= 0; --k1)
                    {
                        int l1 = (l * 16 + k) * 128 + k1;
    
                        if (k1 < 127 - this.soulRNG.nextInt(5) && k1 > 0 + this.soulRNG.nextInt(5))
                        {
                            Block b3 = par3ArrayOfByte[l1];
    
                            if (b3 != null && b3.getMaterial() != Material.air)
                            {
                            if (b3 == SoulBlocks.Porphyry.get())
                            {
                                if (j1 == -1)
                                {
                                	System.out.println("i1 : " + i1);
                                    if (i1 <= 0)
                                    {
                                  		b1 = null;
                                        b2 = SoulBlocks.Porphyry.get();  
                                    }
                                    //else if (k1 >= b0 - 4 && k1 <= b0 + 1)
                                    else if (k1 >= 0 + 4 && k1 <= b0 + 1)
                                    {
                                    	 b1 = biomegenbase.topBlock;
                                         b2 = biomegenbase.fillerBlock;
    
                                        if (flag1)
                                        {
                                            b1 = biomegenbase.topBlock;
                                            //b2 = SoulBlocks.Porphyry.get();   
                                            b2 = biomegenbase.fillerBlock;
                                        }
                                        
                                        System.out.println("Block1 : " + biomegenbase.topBlock);
                                    	System.out.println("Block2 : " + biomegenbase.fillerBlock);
                                    	
                                        if (flag)
                                        {
                                            b1 = biomegenbase.topBlock;
                                            b2 = SoulBlocks.Slate.get();
                                        }
                                    }
    
                                    if (k1 < b0 && (b1 == null || b1.getMaterial() == Material.air))
                                    {
                                    	if (biomegenbase == soul_forest.FrostCaves || biomegenbase == soul_forest.FrozenPlains) // Generate ice when temp below certain value
                                    	{
                                    		//b1 = (byte) SoulBlocks.soulIceID;
                                    	} 
                                    	else 
                                    	{
                                    		b1 = SoulBlocks.SoulWater.get();
                                    	}
                                    }
    
                                    j1 = i1;
    
                                    if (k1 >= b0 - 1)
                                    {
                                        par3ArrayOfByte[l1] = b1; 
                                    }
                                    else
                                    {
                                        par3ArrayOfByte[l1] = b2;
                                    }
                                }
                                else if (j1 > 0)
                                {
                                    --j1;
                                    par3ArrayOfByte[l1] = b2;
                                }
                            }
                            }
                        }
                        else
                        {
                            par3ArrayOfByte[l1] = Blocks.bedrock;
                        }
                    }
                }
            }
        }
    
        /**
         * loads or generates the chunk at the chunk location specified
         */
        public Chunk loadChunk(int par1, int par2)
        {
            return this.provideChunk(par1, par2);
        }
    
        /**
         * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
         * specified chunk from the map seed and chunk seed
         */
        @Override
        public Chunk provideChunk(int par1, int par2)
        {
            this.soulRNG.setSeed((long)par1 * 341873128712L + (long)par2 * 132897987541L);
            Block[] abyte = new Block[32768];
            this.generateNetherTerrain(par1, par2, abyte);
            this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);
            this.replaceBlocksForBiome(par1, par2, abyte, this.biomesForGeneration);
            this.netherCaveGenerator.func_151539_a(this, this.worldObj, par1, par2, abyte);
            //this.genNetherBridge.generate(this, this.worldObj, par1, par2, abyte);
            Chunk chunk = new Chunk(this.worldObj, abyte, par1, par2);
            //BiomeGenBase[] abiomegenbase = (BiomeGenBase[]) this.worldObj.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, par1 * 16, par2 * 16, 16, 16);
            byte[] abyte1 = chunk.getBiomeArray();
    
            for (int k = 0; k < abyte1.length; ++k)
            {
                abyte1[k] = (byte)biomesForGeneration[k].biomeID;
            }
    
            chunk.resetRelightChecks();
            return chunk;
        }
    
        public void decorate(World par1World, Random par2Random, int par3, int par4)
        {
            ((BiomeGenBase) this.theBiomeDecorator).decorate(par1World, par2Random, par3, par4);
        }
        /**
         * generates a subset of the level's terrain data. Takes 7 arguments: the [empty] noise array, the position, and the
         * size.
         */
        private double[] initializeNoiseField(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7)
        {
            ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, par1ArrayOfDouble, par2, par3, par4, par5, par6, par7);
            MinecraftForge.EVENT_BUS.post(event);
            if (event.getResult() == Result.DENY) return event.noisefield;
            if (par1ArrayOfDouble == null)
            {
                par1ArrayOfDouble = new double[par5 * par6 * par7];
            }
    
            double d0 = 684.412D;
            double d1 = 2053.236D;
            this.noiseData4 = this.netherNoiseGen6.generateNoiseOctaves(this.noiseData4, par2, par3, par4, par5, 1, par7, 1.0D, 0.0D, 1.0D);
            this.noiseData5 = this.netherNoiseGen7.generateNoiseOctaves(this.noiseData5, par2, par3, par4, par5, 1, par7, 100.0D, 0.0D, 100.0D);
            this.noiseData1 = this.netherNoiseGen3.generateNoiseOctaves(this.noiseData1, par2, par3, par4, par5, par6, par7, d0 / 80.0D, d1 / 60.0D, d0 / 80.0D);
            this.noiseData2 = this.netherNoiseGen1.generateNoiseOctaves(this.noiseData2, par2, par3, par4, par5, par6, par7, d0, d1, d0);
            this.noiseData3 = this.netherNoiseGen2.generateNoiseOctaves(this.noiseData3, par2, par3, par4, par5, par6, par7, d0, d1, d0);
            int k1 = 0;
            int l1 = 0;
            double[] adouble1 = new double[par6];
            int i2;       
            
            for (i2 = 0; i2 < par6; ++i2)
            {
                adouble1[i2] = Math.cos((double)i2 * Math.PI * 6.0D / (double)par6) * 2.0D;
                double d2 = (double)i2;
    
                if (i2 > par6 / 2)
                {
                    d2 = (double)(par6 - 1 - i2);
                }
    
                if (d2 < 4.0D)
                {
                    d2 = 4.0D - d2;
                    adouble1[i2] -= d2 * d2 * d2 * 10.0D;
                }
            }
    
            for (i2 = 0; i2 < par5; ++i2)
            {
                for (int j2 = 0; j2 < par7; ++j2)
                {
                    double d3 = (this.noiseData4[l1] + 256.0D) / 512.0D;
    
                    if (d3 > 1.0D)
                    {
                        d3 = 1.0D;
                    }
    
                    double d4 = 0.0D;
                    double d5 = this.noiseData5[l1] / 8000.0D;
    
                    if (d5 < 0.0D)
                    {
                        d5 = -d5;
                    }
    
                    d5 = d5 * 3.0D - 3.0D;
    
                    if (d5 < 0.0D)
                    {
                        d5 /= 2.0D;
    
                        if (d5 < -1.0D)
                        {
                            d5 = -1.0D;
                        }
    
                        d5 /= 1.4D;
                        d5 /= 2.0D;
                        d3 = 0.0D;
                    }
                    else
                    {
                        if (d5 > 1.0D)
                        {
                            d5 = 1.0D;
                        }
    
                        d5 /= 6.0D;
                    }
    
                    d3 += 0.5D;
                    d5 = d5 * (double)par6 / 16.0D;
                    ++l1;
    
                    for (int k2 = 0; k2 < par6; ++k2)
                    {
                        double d6 = 0.0D;
                        double d7 = adouble1[k2];
                        double d8 = this.noiseData2[k1] / 512.0D;
                        double d9 = this.noiseData3[k1] / 512.0D;
                        double d10 = (this.noiseData1[k1] / 10.0D + 1.0D) / 2.0D;
    
                        if (d10 < 0.0D)
                        {
                            d6 = d8;
                        }
                        else if (d10 > 1.0D)
                        {
                            d6 = d9;
                        }
                        else
                        {
                            d6 = d8 + (d9 - d8) * d10;
                        }
    
                        d6 -= d7;
                        double d11;
    
                        if (k2 > par6 - 4)
                        {
                            d11 = (double)((float)(k2 - (par6 - 4)) / 3.0F);
                            d6 = d6 * (1.0D - d11) + -10.0D * d11;
                        }
    
                        if ((double)k2 < d4)
                        {
                            d11 = (d4 - (double)k2) / 4.0D;
    
                            if (d11 < 0.0D)
                            {
                                d11 = 0.0D;
                            }
    
                            if (d11 > 1.0D)
                            {
                                d11 = 1.0D;
                            }
    
                            d6 = d6 * (1.0D - d11) + -10.0D * d11;
                        }
    
                        par1ArrayOfDouble[k1] = d6;
                        ++k1;
                    }
                }
            }
    
            return par1ArrayOfDouble;
        }
    
        /**
         * Checks to see if a chunk exists at x, y
         */
    public boolean chunkExists(int par1, int par2)
        {
            return true;
        }
    
        /**
         * Populates chunk with ores etc etc
         */
        public void populate(IChunkProvider par1IChunkProvider, int par2, int par3)
        {
            BlockSand.fallInstantly = true;
    
            MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, worldObj, soulRNG, par2, par3, false));
    
            int k = par2 * 16;
            int l = par3 * 16;
            BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);
            //this.genNetherBridge.generateStructuresInChunk(this.worldObj, this.soulRNG, par2, par3);
            int i1;
            int j1;
            int k1;
            int l1 = 0;
            int j2;
    
            boolean doGen = TerrainGen.populate(par1IChunkProvider, worldObj, soulRNG, par2, par3, false, NETHER_LAVA);
             
            //doGen = TerrainGen.populate(par1IChunkProvider, worldObj, soulRNG, par2, par3, false, DUNGEON);
    
            MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(worldObj, soulRNG, k, l));
    
            i1 = this.soulRNG.nextInt(this.soulRNG.nextInt(10) + 1) + 1;
            int i2;
            
            doGen = TerrainGen.decorate(worldObj, soulRNG, k, l, SHROOM);
            // Everything not biome related       
        	
            // #region Ore Gen
            WorldGenMinable worldgenminable;
            
    	for (int i = 0; i < 5; i++)
    	{
    		int randPosX = k + soulRNG.nextInt(16);
    		int randPosY = soulRNG.nextInt(128);
    		int randPosZ = l + soulRNG.nextInt(16);
    		(new WorldGenMinable(SoulBlocks.Bauxite.get(), 30, SoulBlocks.Porphyry.get())).generate(worldObj, soulRNG, randPosX, randPosY, randPosZ);
    	}	
    
    	for (int i = 0; i < 5; i++)
    	{
    		int randPosX = k + soulRNG.nextInt(16);
    		int randPosY = soulRNG.nextInt(128);
    		int randPosZ = l + soulRNG.nextInt(16);
    		(new WorldGenMinable(SoulBlocks.SoulSnowBottom.get(), 40, SoulBlocks.SoulSnowTop.get())).generate(worldObj, soulRNG, randPosX, randPosY, randPosZ);
    	}	
    
            MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(worldObj, soulRNG, k, l));
            MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, worldObj, soulRNG, par2, par3, false));
    
            BlockSand.fallInstantly = false;
        }
    
        /**
         * Two modes of operation: if passed true, save all Chunks in one go.  If passed false, save up to two chunks.
         * Return true if all chunks have been saved.
         */
        public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate)
        {
            return true;
        }
    
        /**
         * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.
         */
        public boolean unloadQueuedChunks()
        {
            return false;
        }
    
        /**
         * Returns if the IChunkProvider supports saving.
         */
        public boolean canSave()
        {
            return true;
        }
    
        /**
         * Converts the instance data to a readable string.
         */
        public String makeString()
        {
            return "SoulForestLevelSource";
        }
    
        /**
         * Returns a list of creatures of the specified type that can spawn at the given location.
         */
        public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4)
        {
            BiomeGenBase biomegenbase = (BiomeGenBase) this.worldObj.getBiomeGenForCoords(par2, par4);
            return biomegenbase == null ? null : biomegenbase.getSpawnableList(par1EnumCreatureType);
        }
    
        /**
         * Returns the location of the closest structure of the specified type. If not found returns null.
         */
        public ChunkPosition findClosestStructure(World par1World, String par2Str, int par3, int par4, int par5)
        {
            return null;
        }
    
        public int getLoadedChunkCount()
        {
            return 0;
        }
    
        public void recreateStructures(int par1, int par2)
        {
            //this.genNetherBridge.generate(this, this.worldObj, par1, par2, (byte[])null);
        }
    
    
    @Override
    public ChunkPosition func_147416_a(World var1, String var2, int var3,
    		int var4, int var5) {
    	return null;
    }
    
    
    @Override
    public void saveExtraData() {}
    }
    

     

     

  8. Hi there,

     

    I had a custom dimension with multilple biomes and lots of things working for quite some time, but the new update to 1.7.2 seem to have broken it. I have highlighted the part where it crashes, it seems to go out of bounds of the Block[]. I can't seem to figure out why while looking through the code from the minecraft ChunkProviderHell. I hope some of you can provide me some insight why. This would be much appreciated.

     

     

     

        /**
         * Generates the shape of the terrain in the nether.
         */
        public void generateNetherTerrain(int par1, int par2, Block[] abyte)
        {
    
            byte b0 = 4;
            byte b1 = 32;
            int k = b0 + 1;
            byte b2 = 17;
            int l = b0 + 1;
            BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);
            float t = biomegenbase.getFloatTemperature(k, 16, l);
            this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, k + 5, l + 5);
            this.noiseField = this.initializeNoiseField(this.noiseField, par1 * b0, 0, par2 * b0, k, b2, l);
    
            for (int i1 = 0; i1 < b0; ++i1)
            {
                for (int j1 = 0; j1 < b0; ++j1)
                {
                    for (int k1 = 0; k1 < 16; ++k1)
                    {
                        double d0 = 0.125D;
                        double d1 = this.noiseField[((i1 + 0) * l + j1 + 0) * b2 + k1 + 0];
                        double d2 = this.noiseField[((i1 + 0) * l + j1 + 1) * b2 + k1 + 0];
                        double d3 = this.noiseField[((i1 + 1) * l + j1 + 0) * b2 + k1 + 0];
                        double d4 = this.noiseField[((i1 + 1) * l + j1 + 1) * b2 + k1 + 0];
                        double d5 = (this.noiseField[((i1 + 0) * l + j1 + 0) * b2 + k1 + 1] - d1) * d0;
                        double d6 = (this.noiseField[((i1 + 0) * l + j1 + 1) * b2 + k1 + 1] - d2) * d0;
                        double d7 = (this.noiseField[((i1 + 1) * l + j1 + 0) * b2 + k1 + 1] - d3) * d0;
                        double d8 = (this.noiseField[((i1 + 1) * l + j1 + 1) * b2 + k1 + 1] - d4) * d0;
    
                        for (int l1 = 0; l1 < 8; ++l1)
                        {
                            double d9 = 0.25D;
                            double d10 = d1;
                            double d11 = d2;
                            double d12 = (d3 - d1) * d9;
                            double d13 = (d4 - d2) * d9;
    
                            for (int i2 = 0; i2 < 4; ++i2)
                            {
                                int j2 = i2 + i1 * 4 << 11 | 0 + j1 * 4 << 7 | k1 * 8 + l1;
                                short short1 = 128;
                                double d14 = 0.25D;
                                double d15 = d10;
                                double d16 = (d11 - d10) * d14; 
    
                                for (int k2 = 0; k2 < 4; ++k2)
                                {
                                    Block l2 = null;
    
                                    if (k1 * 8 + l1 < b1)
                                    {
                                    	l2 = SoulBlocks.SoulWater.get();
                                    }
                                    else if (d15 > 0.0D)
                                    {
                                    	l2 = SoulBlocks.Porphyry.get();
                                    }
                                    else
                                    {
                                    	l2 = null;
                                    }
                                    abyte[j2] = l2;
                                    j2 += short1;
                                    d15 += d16;
                                }
    
                                d10 += d12;
                                d11 += d13;
                            }
    
                            d1 += d5;
                            d2 += d6;
                            d3 += d7;
                            d4 += d8;
                        }
                    }
                }
            }
        }
    

     

     

  9. Hi there,

     

    I have been making a custom TileEntity and the basic idea is that you put 9 Gel into the block and when 9 of those are extracted (the number increases every time after 1 is extracted) a certain item is "created". So i have it all working, but i wanted to make it so that my GUI shows the correct number so i thought of using the NBTTagCompound Read and Write to save the ammount of gel (also because i wanted it to be saved whenever you close the game etc). To see what it is writing and reading i did the following:

    @Override
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
    super.writeToNBT(par1NBTTagCompound);
    System.out.println("[soul Forest] write : " + (short)this.gelAmmountExtracted);
    par1NBTTagCompound.setShort("Gel", (short)this.gelAmmountExtracted);
    // Some more code below (but thats for itemstacks) so i left it out
    }
    

    Now in the console i get the following values 1, 0. And whenever another gel is updated i get 2 and 0 etc. So 2 lines are being printed with 2 values and thats why my GUI picks up 0 continuesly, but how do i make it so that i don't read and write 2 values.

  10.  

    timeElapsed = 0;

    if(timeElapsed == 1000);

          {

    onUpdate(par1ItemStack, par2World, par3EntityPlayer, timeElapsed, bFull3D);

    timeElapsed++;

    }

    }

     

    Well i am not sure if that is what you want there, but i guess that you would want it to (lets say you fire 3 times and after that you want it to be delayed untill you can fire again, atleast thats how i read your intention) I would make it so that you have an int that counts up to lets say 5 and for the first 3 it would fire a shot and the last 2 wouldn't do anything.

  11. Well i obviosly registered the block, and i used this method as in Blockslist[theTallgrassID] before and it was working fine, but now that i change a couple of canBlockBePlacedOn methods and such it is somehow not working anymore.

     

    For example i registered the block BogTallGrassGrey, with an idea bogTallGrassGreyID of 3517 (in my config) Then when i use the block.blockID which i checked is not null when entering that method, i also tried checking wether Blockslist[theTallGrassID] was null, but that was also not null. I am pretty confused why it is throwing this error, because if i remove this little bit of code and start testing. It then throws errors in long not changed code from generating custom fires or custom trees. Its just odd...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.