Introduction
Voila, dans ce tutoriel, vous allez apprendre à créer un Item simple ayant lors du clique droit, la possibilité de vous donner un ou plusieurs effet(s), invoquez une entité ou encore faire un choix entre différents effets prevu.
#Pré-Requis(Pré-Requis)
Code
Classe principale.
Commencez simplement par déclarer votre Item
public class ItemsMod
{
public static Item stick; //Vous déclarez votre Item
public static void init()
{
stick = new **Stick**().setUnlocalizedName("LeNomDeVotreitem").setCreativeTab(ModTuto.tabTuto); //Vous l'initiez
}
public static void register()
{
GameRegistry.registerItem(stick, stick.getUnlocalizedName().substring(5)); //Vous l'enregistrez
}
public static void registerRenders()
{
registerRender(stick); //Vous faites le rendu
}
private static void registerRender(Item item)
{
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(References.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
}
}
Ceci est la base de la création des Items
Vous allez avoir une erreur sur l’initialisation du votre item, ici : new Stick().
Créons donc alors la classe de l’item dans votre package Items !
La classe de l’Item
Voila où tout ce passe !
Ici nous allons voir le B-A-BA de la création de ce genre d’Item, vu que notre Item est normal, nous extendons alors par Item, comme d’habitude, vous ajoutez les constructeurs. Ce qui vous donne donc quelque chose comme cela:
public class Stick extends Item
{
public Stick()
{
}
}
On va ensuite ajoutez comme constructeur différentes choses (vous pouvez bien sur rajoutez ce que vous voulez)
public class Stick extends Item
{
public Stick()
{
this.setMaxDamage(10); //La durabilité de votre Item, ici il pourra être utilisé 10 fois
this.maxStackSize = 1; //Nous déclarons la taille du stack de l'item, ici l'item est instackable
}
}
Puis ensuite on ajoute cette fonction, elle détecte le clique droit sur un Item
@Override
public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
{
if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
{
//Mettez ici ce qu'il va suivre
}
itemStack.damageItem(1, player); //Ici, nous enlevons 1 de durabilité a l'item
return new ActionResult(EnumActionResult.PASS, itemStack);
}
}
Dans ce script, nous déclarons la détection du clique droit de l’Item :-3
Maintenant, nous allons mettre ce qu’il nous intéresse, cet à dire les effets ! Voila le code principal pour ajouter un effet. Pour rajouter plusieurs effets, allez à la ligne à la fin du premier effet
player.addPotionEffect(new PotionEffect(Potion.getPotionById(16), 140, 1)); //"16" L'ID de la potion, ici Nyctalopie, "140" le temps en TICK, 20= 1seconde, ici il y a donc 7 secondes, "1" l'amplificateur de votre effet, ici la potion est de level 2
Json**.**
Ici, rien de bien dur, nous déclarons juste la posture de votre Item en main.
{
"parent": "item/handheld",
"textures": {
"layer0": "tuto:items/StickOfRandom"
}
}
#Résultats(Résultats)
Ce qui donne alors :
public class Stick extends Item
{
public Stick()
{
this.setMaxDamage(10); //La durabilité de votre Item, ici il pourra être utilisé 10 fois
this.maxStackSize = 1; //Nous déclarons la taille du stack de l'item, ici l'item est instackable
}
@Override
public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
{
if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
{
player.addPotionEffect(new PotionEffect(Potion.getPotionById(16), 140, 1)); //Nyctalopie
player.addPotionEffect(new PotionEffect(Potion.getPotionById(1), 140, 1)); //Vitesse
}
itemStack.damageItem(1, player); //Ici, nous enlevons 1 de durabilité a l'item
return new ActionResult(EnumActionResult.PASS, itemStack);
}
}
Bonus
Ici, tache un poil plus complexe, créer un Stick faisant des actions aléatoires parmi des actions définies.
Comme vu dessus, nous déclarons exactement la même chose SAUF deux choses, nous allons définir notre random avant les constructeurs de notre Item et définir un nouveau int :
public final Random rand = new Random();
Ce qui donne alors :
public class Stick extends Item
{
public final Random rand = new Random();
public Stick()
{
this.setMaxDamage(20);
this.maxStackSize = 1;
}
@Override
public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
{
if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT
{
int i = rand.nextInt(1); //Le 1 de ce code signifie le nombre de vos différentes actions, l'action numéro 0 est compté comme 1 (une action) exemple, vous avez 5 effets en comptant la 1ere qui défini i==0, vous allez donc déclarez après le nextInt le nombre 6
}
itemStack.damageItem(1, player);
return new ActionResult(EnumActionResult.PASS, itemStack);
}
}
En dessous de votre int, vous allez déclarez vos actions à base de :
if(i == 0)
{
EntityTNTPrimed entityTNT = new EntityTNTPrimed(world); // instance de la class de l'entité
entityTNT.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
world.spawnEntityInWorld(entityTNT); // je fais spawn l'entité
}
else if(i == 1)
{
EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.itemTest));
world.spawnEntityInWorld(entityItem); // je fais spawn l'entité
}
else if(i == 2)
{
EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.itemTest));
world.spawnEntityInWorld(entityItem); // je fais spawn l'entité
}
Pour cet exemple, nous allons donc rajouter à notre int le chiffre “3” car l’int compte à partir de 0 !
Dans ce code, le premier random fait spawn une TNT allumé, le deuxième et le troisième random, font spawner un Item de mon mod.
#Résultats(Résultats)
J’ai coder un Item me mettant Vitesse et me rajoutant de l’xp ayant 10 de durabilité et n’étant pas stackable. (Je n’ai pas fait le Json, l’Item en main est donc étrange)
Avant appuis
Après appuis, nous voyons que la durabilité a baissé et que mon xp a monté.
#Crédit(Crédit)
Rédacteur : Tituya
Merci, j’espere que vous avez compris le principal de la création de ce genre d’Item très simple.
Si vous avez des questions, des remarques n’hésitez surtout pas, je suis la pour apprendre !</itemstack></itemstack></itemstack>