2017-05-06 1 views
0

tout le monde. J'essaye de faire un plugin de caisses dans Bukkit (ça n'a pas vraiment d'importance), et j'ai des problèmes avec le tirage aléatoire. Puisque tout est personnalisable (Vous pouvez créer une quantité indéfinie de prix avec la chance que vous voulez), j'ai du mal à faire le dessin en pourcentage. Ce est mon code en ce moment:Bukkit/Java chances de pourcentage personnalisables

  for (DoubleStack ds : items.values()) { 
       double chance = ds.getChance(); 
       p.sendMessage(chance + " " + random + " " + ds.getItemStack().getType()); 
       if (random >= chance) { 
        p.getInventory().addItem(ds.getItemStack()); 
        break; 
       } 
      } 

Un gerbés est juste une classe que je fait que les magasins l'article et la chance de l'obtenir. Comme vous pouvez le voir, la méthode que je me sers est bogué, les chances ne sont pas réalistes, et vous avez une chance d'obtenir plusieurs éléments (je ne veux pas)

Alors, comment pourrais-je pour faire ça?

Merci!

Aussi, j'ai regardé tous les autres fils de probabilité, mais ils ne couvrent pas de ne pas savoir précisément ce que les probabilités sont, ils font juste des choses comme:

int x = new Random().nextInt(100); 
if(x <= 10 && x >= 20) { 
    doSomething(); } 
//Repeats with different numbers 

Répondre

1

Essayez ceci:

for (DoubleStack ds : items.values()) { 
    int random = new Random().nextInt(100);  
    int chance = ds.getChance(); // Must be in percentage 
    if (random < chance) { 
     p.getInventory().addItem(ds.getItemStack()); 
     break; 
    } 
} 

pour toujours obtenir une récompense (les chances doivent ajouter jusqu'à 100):

int random = new Random().nextInt(100); 
int counter = 0; 
for (DoubleStack ds : items.values()) { 
    int chance = ds.getChance(); 
    if (random < (chance + counter) && random >= counter) { 
     p.getInventory().addItem(ds.getItemStack()); 
     break; 
    } 
    counter+=chance; 
} 
+0

C'est beaucoup mieux qu'avant, grâce, mais parfois je n'ai absolument aucune récompense. – Knightz

+0

J'ai édité ma réponse, si cela a résolu votre question, veuillez cliquer sur la coche pour l'accepter. –

+0

Je ne reçois toujours pas toujours un prix, voici un exemple de fichier de configuration pour aider à comprendre pourquoi https://hastebin.com/ofowibatax.css Dans cet exemple, je reçois seulement des plastrons – Knightz