Action Custom Dispenser



  • Salut,
    Voici mon premier tutoriel. Il fonctionne en 1.6.x mais je n'ai pas testé en 1.7. Si vous n'avez pas compris le titre, vous allez apprendre à faire une action spéciale lorsque votre item ou bloc sera droppé par un dispenser. Cela peut être très utile notamment pour des TNT, des projectiles… J'ai mis beaucoup de temps à trouver mais j'y suis arriver.

    Dispenser Behavior

    Si vous ne savez pas ce que ça veut dire, moi non plus mais je sais juste que c'est la classe qui dit qu'est-ce qui se passe lorsque votre bloc est droppé par un dispenser.

    Code de base :

    package votrepackage_;
    
    import net.minecraft.block.BlockDispenser;
    import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.world.World;
    
    final class DispenserBehaviorTuto extends BehaviorDefaultDispenseItem
    {
        protected ItemStack dispenseStack(ItemStack stack)
        {
            //code spécial à effectuer
    
            //Pas obligatoire mais je le conseille --stack.stackSize;
            return stack;
        }
    }
    

    Et voilà ! Il ne vous reste plus qu'à rajouter votre code spécial.
    Mais ce n'est pas fini !

    Classe Principale, Register

    Maintenant, dans votre classe principale, dans le INIT, rajoutez :

    BlockDispenser.dispenseBehaviorRegistry.putObject(VotreItem, new DispenserBehaviorTuto());
    

    Pensez à remplacer "VotreItem" et "DispenserBehaviorTuto" !
    Si ce n'est pas un item mais un bloc, écrivez à la place :

    BlockDispenser.dispenseBehaviorRegistry.putObject(Item.itemsList[VotreBloc.blockID], new DispenserBehaviorTuto());
    

    Exemple

    La plupart du temps(peut-être même tout le temps), l'action à effectuer est de faire spawner une entité. Code :

    package votrepackage_;
    
    import net.minecraft.block.BlockDispenser;
    import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.world.World;
    
    final class DispenserBehaviorTuto extends BehaviorDefaultDispenseItem
    {
        protected ItemStack dispenseStack(IBlockSource blockSource, ItemStack stack)
        {
            //Obtenir le monde
            World world = blockSource.getWorld();
            //instancier l'entité
            EntityTuto entitytuto = new EntityTuto(/*paramètres de l'entité*/);
            //spawn de l'entité dans le monde
            world.spawnEntityInWorld(entitytuto);
    
            //Enlever 1 au stack
            –stack.stackSize;
            return stack;
        }
    }
    

    Voilà, c'est fini ! Si vous trouvez des erreurs, merci de m'en informer.


  • Moddeurs confirmés Rédacteurs Administrateurs

    par2ItemStack -> stack, plus joli.
    //code spécial à effectuer
    Des exemples peut être ?



  • Copier-coller 😄


Log in to reply