Résolu Double drop
-
voila j’ai réussi a faire loot des item a mon bloc, mais j’aimerai lui en faire loot deux, mais cette méthode ne marche pas…
public int idDropped(int metadata, Random rand, int fortune) { return MineralherbMain.coppermineralitem.itemID; } public int idDropped1(int metadata, Random rand, int fortune) { return MineralherbMain.pierrebruteitem.itemID; } public int quantityDropped(Random par1Random) { int randomloot; int lower = 1; int higher = 6; int random = (int)(Math.random() * (higher-lower)) + lower; return this.blockID == MineralherbMain.coppermineralitem.itemID ? 4 + par1Random.nextInt(3) : random; } public int quantityDropped1(Random par1Random) { int randomloot; int lower = 2; int higher = 8; int random = (int)(Math.random() * (higher-lower)) + lower; return this.blockID == MineralherbMain.pierrebruteitem.itemID ? 4 + par1Random.nextInt(3) : random; }
comment faire?
-
Alors, petite leçon de java:
La méthode quantityDropped(Random rand) n’est pas exécutée toute seule, c’est justement pour ça que la classe est extends Block, car dans la classe Block tu as exatement la même méthode qui elle, est exécutée par le jeu lui même, etc etc.
Donc, créer un méthode avec juste un 1 dedans ne sera pas appelée sauf si tu l’appelle, ce qui ici n’est pas possible sans modification des classes de Minecraft.
Il existe donc la méthode:public ArrayList <itemstack>getDrops(World world, int x, int y, int z, int metadata, int fortune)
qui permet de dropper plusieurs items, pour l’utiliser tu créé une ArrayList d’ItemStack et tu lui ajoute les ItemStack que le bloc doit dropper:
ArrayList <itemstack>ret = new ArrayList<itemstack>(); ItemStack stack1 = new ItemStack(item1, 1); ItemStack stack2 = new ItemStack(item2, 1); ret.add(0, stack1); ret.add(1, stack2); return ret;
A mettre dans la méthode.</itemstack></itemstack></itemstack>
-
ok merci je teste ca
bon je n’ai pas du tout compris comme marche le public ArrayList<itemstack></itemstack>
-
public ArrayList <itemstack>getDrops(World world, int x, int y, int z, int metadata, int fortune) { ArrayList <itemstack>ret = new ArrayList<itemstack>(); ItemStack stack1 = new ItemStack(item1, 1); ItemStack stack2 = new ItemStack(item2, 1); ret.add(0, stack1); ret.add(1, stack2); return ret; } ```</itemstack></itemstack></itemstack>
-
sa je sais mais du coup j’ai plein d’erreur et il veux me modifier du code dans block.java
-
Mais ça, sa marche.
@Override public ArrayList <itemstack>getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) { ArrayList <itemstack>ret = new ArrayList<itemstack>(); ret.add(new ItemStack(Item.appleGold, 1, damageDropped(metadata))); ret.add(new ItemStack(Item.arrow, 1, damageDropped(metadata))); { return ret; } }
“Item.arrow”, “Item.appleGold” = les items que tu veut dropper
“1” = quantité dropper par chacunSi tu veut du random dit le moi et je te modifirai le code.</itemstack></itemstack></itemstack>
-
oui je veux du random, le minerai de cuivre: en 1 et 5 item et la pierre brute: entre 3 et 8
-
Le mieux que je peut te faire vite comme ça, c’est ceci:
@Override public ArrayList <itemstack>getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) { ArrayList <itemstack>ret = new ArrayList<itemstack>(); for(int i = 0; 0 < world.rand.nextInt(3); i++) ret.add(new ItemStack(Item.appleRed, 1, damageDropped(metadata))); for(int i = 0; i < world.rand.nextInt(3); i++) ret.add(new ItemStack(Item.arrow, 1, damageDropped(metadata))); } return ret; }
Le problème avec ce code c’est que tu peut aussi ne rien dropper. Joue avec les pourcentage et les randoms et tu arrivera peut-être à ce que tu veut.
Je chercherai une autre solution quand j’aurai du temps :)</itemstack></itemstack></itemstack>
-
ok merci
Syntax error on token “return”, invalid Type
-
world.rand, pour une instance de random
-
@Override public ArrayList <itemstack>getBlockDropped(World world, int x, int y, int z, int metadata, int fortune) { ArrayList <itemstack>ret = new ArrayList<itemstack>(); for(int i = 0; i < world.rand.nextInt(3) + 1; i++) ret.add(new ItemStack(Item.appleRed, 1, damageDropped(metadata))); for(int i = 0; i < world.rand.nextInt(3) + 1; i++) ret.add(new ItemStack(Item.arrow, 1, damageDropped(metadata))); return ret; }
Pas de problème comme ça.</itemstack></itemstack></itemstack>
-
Pour l’item je met coppermineralitem ou coppermineralitem.itemID?
-
cheminItem.tonItem
car comme tu peux le voire, y’a pas de .itemID dans les codes que l’on a fournis
-
Je préféré demander. Mineralherb.Items.coppermineralitem?
-
Items.coppermineralitem
-
Daccord bha des que je go au pc je teste___
bug: “coppermineralitem cannot be resolved or is not a field” je fait quoi?-create field
ou
-create constant? -
ca marche.
par contre ca drop 1 copper et 2 pierre. on peut pas ajouter un random?
-
De la part de Fireblade51: nom je n’ai pas réussi pour l’instant pour le drop aléatoire je le test dès que j’ai internet et du temps
-
Tu pourra lui dire que ce n’est plus la peine, j’ai réussi
-
Il faut passer en résolu dans cas !