29 mai 2017, 16:02

Ce tutoriel est également disponible en vidéo.

Sommaire

Introduction

Bonjour à tous !
Ce tutoriel va vous montrer comment créer un multi-tool
En gros un outil qui fais à la fois pioche, épée et hache

Pré-requis

Code

Création de l’outil:

Tout d’abord, créez une classe qui servira pour votre outil.

public class MultiTool {

}

Vous ferez hériter votre classe de ItemTool et mettrez le constructeur

public class MultiTool extends ItemTool {
    public MultiTool(ToolMaterial material, Set<Block> effectives){
        super(material, effectives);
    }
}

Le premier paramètre est un ToolMaterial qui servira comme pour un outil, puis vous aurez un Set a créer qui dira à Minecraft quels blocks l’outil peut casser.

private static Set <block> effectives = Sets.newHashSet(blocs que vous souhaitez);

Propriétés de l’outil

Par exemple dans mon cas je veux que l’outil puisse casser à peu près tout les blocks.Nous allons déjà créer une fonction pour dire à Minecraft que l’outil est une pioche, une hache et une pelle.

@Override
public Set<String> getToolClasses(ItemStack stack) { return ImmutableSet.of("pickaxe", "spade", "axe");}]

Nous allons ensuite définir les matériaux de bloc qui pourront être cassés.

@Override
public boolean canHarvestBlock(IBlockState state) {
    return (state.getMaterial() == Material.WOOD || state.getMaterial() == Material.IRON || state.getMaterial() == Material.ROCK || state.getMaterial() == Material.ANVIL) ? true : false;
}

Dans ce cas, tous les blocs avec le matériau WOOD, IRON, ROCK et ANVIL seront cassables.

(Cette méthode sert si vous voulez vraiment “tous les blocks” de ces types, si c’est juste un outil pour certains blocs autant utiliser le Set<block>)

Pour finir, vous devrez définir la force de “cassage” des blocs.

@Override
public float getStrVsBlock(ItemStack stack, IBlockState state) {
    if(this.canHarvestBlock(state)) {
        return this.efficiencyOnProperMaterial;
    }
    return 1F;
}

Ici j’ai fais en sorte que si la méthode canHarvestBlock vaut true alors on renvoie la valeur du ToolMaterial sinon la valeur vaut 1.

Bonus

Comme pour un outil normal vous pouvez rajouter la méthode getIsRepairable pour définir un Item pour réparer dans l’enclume ou pour que l’outil ne soit pas repairable.

@Override
public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) {
    return repair.getItem() == Items.DIAMOND;
}

Résultat

Voir la vidéo

En vidéo

https://www.youtube.com/watch?v=xUk2nEGV_8c

Crédits

Rédaction :

  • ZomDev

Correction :


Ce tutoriel de ZomDev publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

Retour vers le sommaire des tutoriels