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
28
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
Réactions: Retorks
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,