Mod Java 1.7.10 Forge RandomItem Rightclick

  • Auteur de la discussion Auteur de la discussion Retorks
  • Date de début Date de début

Retorks

Bucheron
22 Mai 2018
16
0
12
27
Bonjour,



J'aimerais que lorsque l'on clique droit avec un item, il nous give un item dans notre inventaire au hasard parmi une liste pré-définis.
Avec un pourcentage de chance si possible
Pour le moment j'ai un script fonctionnel mais uniquement avec les items de bases de minecraft (non moddé), et il n'y a pas de pourcentage de chance

(Je débute vraiment dans le java et je ne sais pas aller plus loin)


Voici le code

Code:
package com.mod.exodia.items;

import java.util.Random;
import java.util.Set;

import com.google.common.collect.Sets;
import com.mod.exodia.init.ItemMod;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;
import net.minecraft.world.World;

public class ItemRandom extends Item {



    Item[] items = new Item[] { Items.apple, Items.iron_ingot, Items.bread};

    public ItemStack onItemRightClick(ItemStack itemstack,World world, EntityPlayer player)
    {
    int random = world.rand.nextInt(items.length);
    player.inventory.addItemStackToInventory(new ItemStack(items[random]));
    return itemstack;
    }
   
}

Et le code dans ItemMod.java (Pas très utile)

Code:
        randomItem = new ItemRandom().setUnlocalizedName("randomItem").setCreativeTab(CreativeTabs.tabDecorations).setTextureName(Reference.MOD_ID + ":randomItem");

Les items que j'aimerais mettre par exemple, en voici 2
"gemmeCitrine"
"gemmeAdamantine"
Ils sont définis dans le fichier ItemMod comme le "randomItem"


Merci d'avance pour votre aide
 
Voilà ce que ça donne du coup

Et quand je clique droit avec l'item, il y a des moments ou je ne reçois aucun item

1527078155-de.png
 
Hum dans ce cas je ne sais plus comment fonctionne un switch x)
Essais comme ceci :
Code:
ItemStack stack = null;
switch(world.rand.nextInt(6)) // un nombre entre 0 et 5 inclus
{
   case 0:
       stack = new ItemStack(Blocks.dirt); // va être pris seulement si la valeur est 0, donc 1 chance sur 6.
       break;
   case 1:
   case 2:
       stack = new ItemStack(Blocks.cobblestone); // va être pris si la valeur est 1 ou 2, donc 2 chance sur 6.
       break;
   case 3:
   case 4:
   case 5:
       stack = new ItemStack(ItemMod.gemmeAdamantine); // 3, 4, ou 5, ce qui donne 3 chance sur 6.
       break;
}
player.inventory.addItemStackToInventory(stack);
(clairement ce n'est pas très joli comme code, avec des if else ça serait plus lisible je pense).
 
Dernière édition:
  • J'aime
Reactions: Retorks
Le code est fonctionnel,
Après oui c'est vrai qu'avec beaucoup d'items et des pourcentages assez haut, le code sera énorme
Je vais essayez de voir comment le faire avec des else if
 
Bonjour,


Avec un amis on a regardé pour approfondir le mod, on a essayé avec plusieurs méthodes, mais moi ce que je veux exactement, c'est avec un pourcentage, plutôt qu'ajouter 50 000 cases.
Et que les items ne soient pas donné a la suite avec les cases, je veux que ce soit full random
Voici le code que nous avons commencé, mais je ne saurais le terminé

Code:
package com.mod.exodia.items;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import com.mod.exodia.init.ItemMod;
import com.sun.istack.internal.NotNull;

import net.minecraft.item.Item;
import net.minecraft.item.Item;

public class ItemRandom extends Item {

    @NotNull
    public Object chooseRandomItem() {
        Map<Item, Integer> items = new HashMap<Item, Integer>();
        items.put(ItemMod.gemmeCitrine, 25);
        items.put(ItemMod.gemmeAdamantine, 75);
    
        int r  = new Random().nextInt(100);
        Item item = null;

        while (item == null) {
            Object[] keys = items.keySet().toArray();
            Item it = (Item) keys[new Random().nextInt(keys.length)];
            if (r <= items.get(it)) {
                item = it;
            }

        }

        return item;
    }
    }


Pouvez vous m'aider,
Merci d'avance,