Easiest way to make configurable percentages? [MORE THAN 2 WAYS]

Discussion in 'Plugin Development' started by Tster, Feb 19, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    Tster

    For instance:
    10% chance n will happen
    20% b
    etc

    I have a working configuration, and can retrieve the values, however I have a really bad percentage calculating algorithm, It is long, and the last case doesn't work

    It is really horrendous, but I intend on getting it to work before I optimise it.
    This is what I have:
    Code:
                    oremap.put(OreGen.coal, Material.COAL_ORE);
                    oremap.put(OreGen.iron, Material.IRON_ORE);
                    oremap.put(OreGen.lapis, Material.LAPIS_ORE);
                    oremap.put(OreGen.redstone, Material.REDSTONE_ORE);
                    oremap.put(OreGen.gold, Material.GOLD_ORE);
                    oremap.put(OreGen.diamond, Material.DIAMOND_ORE);   
                    oremap.put(OreGen.stone, Material.STONE);
                    final TreeMap sortedoremap = new TreeMap(oremap);
                    //If so then it generates a random number between 0 and 999,
                    //this is easiest as the user can configure the chance as a percentage
                    randomGen = new Random();
                    percentOre = randomGen.nextInt(1000);
                    //Add one so we are dealing with 1 to 1000 (easier concept to understand)
                    percentOre = percentOre + 1;
                    //Find the number that the percentage must be greater than for each ore
                    if (percentOre > 0 && percentOre <= ((Double) sortedoremap.keySet().toArray()[0]*10)){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[0]);
                    } else if (percentOre > ((Double) sortedoremap.keySet().toArray()[1]*10) && percentOre <= ((Double) sortedoremap.keySet().toArray()[2]*10) + ((Double) sortedoremap.keySet().toArray()[1]*10)){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[1]);
                    } else if (percentOre > ((((Double) sortedoremap.keySet().toArray()[2] + (Double) sortedoremap.keySet().toArray()[1])) *10) && percentOre <= ((Double) sortedoremap.keySet().toArray()[3]*10) + ((Double) sortedoremap.keySet().toArray()[2]*10) + ((Double) sortedoremap.keySet().toArray()[1]*10)){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[2]);
                    } else if (percentOre > ((((Double) sortedoremap.keySet().toArray()[3] + (Double) sortedoremap.keySet().toArray()[2] + (Double) sortedoremap.keySet().toArray()[1]))*10) && percentOre <= (((Double) sortedoremap.keySet().toArray()[4]*10) + (Double) sortedoremap.keySet().toArray()[3]*10) + ((Double) sortedoremap.keySet().toArray()[2]*10) + ((Double) sortedoremap.keySet().toArray()[1]*10)){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[3]);
                    } else if (percentOre > ((((Double) sortedoremap.keySet().toArray()[4] + (Double) sortedoremap.keySet().toArray()[3] + (Double) sortedoremap.keySet().toArray()[2] + (Double) sortedoremap.keySet().toArray()[1]))*10) && percentOre <= ((((Double) sortedoremap.keySet().toArray()[5]*10) + ((Double) sortedoremap.keySet().toArray()[4]*10) + (Double) sortedoremap.keySet().toArray()[3]*10) + ((Double) sortedoremap.keySet().toArray()[2]*10) + ((Double) sortedoremap.keySet().toArray()[1]*10))){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[4]);
                    } else if (percentOre > ((((Double) sortedoremap.keySet().toArray()[5] + (Double) sortedoremap.keySet().toArray()[4] + (Double) sortedoremap.keySet().toArray()[3] + (Double) sortedoremap.keySet().toArray()[2] + (Double) sortedoremap.keySet().toArray()[1]))*10) && percentOre <= ((((Double) sortedoremap.keySet().toArray()[6]*10) + ((Double) sortedoremap.keySet().toArray()[5]*10) + ((Double) sortedoremap.keySet().toArray()[4]*10) + (Double) sortedoremap.keySet().toArray()[3]*10) + ((Double) sortedoremap.keySet().toArray()[2]*10) + ((Double) sortedoremap.keySet().toArray()[1]*10))){
                        event.getBlock().setType((Material) sortedoremap.values().toArray()[5]);
                    } else {
                        event.getBlock().setType(Material.STONE);
                    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 24, 2016
Thread Status:
Not open for further replies.

Share This Page