Un code qui permettrait a une nouvelle pioche de casser la bedrock.



  • Salut;
    A cause de son [CODE_Java].setBlockUnbreakable()[/CODE_Java]
    Le bloque de bedrock ne peu pas etre cassé, a moi de modifier le code de se bloque "se qui est peu recommandable", je voudrais savoir si il étai possible de faire en sorte avec une nouvelle pickaxe, de lui dire de casser un seul bloque spécifique même si se bloque a le [CODE_Java].setBlockUnbreakable()[/CODE_Java] Donc en gros de lui dire d’ignoré se code.

    Merci d'avance.



  • up
    Rien trouvai.


  • Moddeurs confirmés Rédacteurs Administrateurs

    [code_java]package tutoriel.common;

    import net.minecraft.block.Block;
    import net.minecraft.entity.EntityLiving;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.EnumToolMaterial;
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;

    public class ItemTutoPickaxe extends ItemPickaxe
    {
    public ItemTutoPickaxe(int id, EnumToolMaterial enumToolMaterial)
    {
    super(id, enumToolMaterial);
    }

    public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
    {
    if(world.getBlockId(x, y, z) == Block.bedrock.blockID)
    {
    world.setBlockToAir(x, y, z);
    EntityItem entityitem = new EntityItem(world, x, y, z, new ItemStack(Block.bedrock, 1, 0));
    entityitem.delayBeforeCanPickup = 10;
    world.spawnEntityInWorld(entityitem);
    stack.damageItem(1, player);
    return true;
    }
    else
    {
    return false;
    }
    }
    }[/code_java]

    Par contre j'ai pas trouvé pour le clic gauche, il y a que avec le clic droit.
    ça détruit le bloc instantanément, et il y a un petit bug d'affichage, je sais pas pourquoi on voit deux item par terre, mais on peut que en ramacer un, pourtant j'ai prit le même code que je drop des mobs. Tu peux faire que l'item s'endommage plus en changeant ça :
    stack.damageItem(1, player);



  • Je te remercie, je vais étudier se code. par contre je ne suit pas sure d’avoirs tout compris, mais je vais te relire.
    Encor merci, je te tien au courent.

    PS: Le mieux, s'est que sa puisse dropai autre chose que le bloque en luis même, mais sa risque d’être plus compliquai je pence.


    En faite non, pour un autre drop sa sera plus facile que prévue, j'ai rien dit, désolé x).


    Effectivement sa fonctionne, et il y a le petit bug graphique comme tu ma dit plus haut;
    Mais un truc dans le cod que tu ma donnai, "tu va me prendre pour un idiot" je ne comprend pas la fonctionnalité de cette ligne:
    [CODE_Java]world.spawnEntityInWorld(entityitem);[/CODE_Java]

    peu tu m’éclairai stp ?
    Merci 🙂

    PS: Sinon je comprend en grosse partit le code que tu m'a donnais, je n'y aurai jamais pansais.


  • Administrateurs

    [code_java]
    world.spawnEntityInWorld(entityitem);
    [/code_java]

    sert à faire spawner l'entité, car les items/blocks par terre sont des "EntityItem" 🙂


  • Moddeurs confirmés Rédacteurs Administrateurs

    Je vais voir si je trouve pas un moyen de corriger ce bug d'affichage. Sinon dans la condition du peut mettre ça :
    [code_java]if(world.getBlockId(x, y, z) == Block.bedrock.blockID) && y != 0[/code_java]
    Comme ça on peut casser n'importe quel bedrock sauf celle qui se trouve sur la dernière couche.


    J'aurai du y penser plutôt, le bug d'affichage est un bug de syncronisation entre le serveur et le client, il suffit juste d'ajouter ça dans la condition :
    !world.isRemote
    ce qui donne :

    [code_java]if(world.getBlockId(x, y, z) == Block.bedrock.blockID) && y != 0 && !world.isRemote[/code_java]



  • @elias54
    Efectivement je m'en suit rendu compte juste avent d'aller me coucher x).

    @robin4002
    Je te remercie je regarde sa tout de suite, "le temps que éclipse s’allume" x).


    Yep nikel, Par contre il faut faire un clic droit avec la pioche pour casser le bloque, mais au finale ce n'est pas si grave ^^, puisque elle est senser être "magique";"spécial" enfin voila, alors du coup sens le vouloir tu a donnai une bonne idée merci :).

    Mais si tu/je/on trouve comment faire pour casser le bloque "normalement" on le signalera sur se sujet :).

    Encore merci ^^.

    Mais du coup, "entityitem.delayBeforeCanPickup = 10;" ne serre a rien, si ?
    Car on ne peu pas pour le moment casser le bloque "normalement", alors il serre a rien pour le moment x).


  • Administrateurs

    bah delayBeforeCanPickup –> délai avant de pouvoir ramasser l'item, je sais pas si t'as remarqué, mais quand un item est à terre, tout fraîchement jeté, il y a un cooldown avant de pouvoir le ramasser 🙂 Bah ce cooldown, c'est CETTE ligne ^^

    Mais pour peaufiner le truc, je te conseil d'utiliser le itemstack plutot que de créer une entity item :3



  • A Ok ! J'avais mal compris alors x) dsl robin4002 d'avoir crue autre chose :).
    Et merci a toi elias54, je regarde rapidement se que tu viens de me dire :); mais sincèrement je ne vois pas trop la '-'.



  • Up ^^.
    Rien trouvai de mieux que se qu'a mi robin.
    Et pour le itemstack a la place d'un entity item … je crois que je vais laisser comme sais x).


    Bon je fais un edit pour évitait multiple poste et pour évitait de créer un nouveau sujet exprès:

    Il y a t'il moyen de faire un effet de "poussière" quand je casse un bloque de bedrock avec cette pioche svp ? merci.
    C'est en faite pour donnais un effet "magique" rien de plus.



  • Tu peut utiliser des particules, mais c'est assez dur de faire des particules.

    Demande a quelqu'un qui en a déjà fait pour qu'il te donne une idée, car moi je sais pas dutout faire ( Je m'y suis jamais intéressé plutôt )



  • XD, je te remercie, et s'est au particule que je voulais en venir, j’avais juste pas le mot en tête ^^'.
    C'est si compliquer que sa ? O_o



  • Bah, je m'y suis pas intéressé, mais je sais que c'est assez dur a faire.
    Mais je pense que tu peut le faire, t'inquiète pas.



  • Ok ! Si tu le dit ^^, mais bon je préfère trouvai un bon tuto la dessus, car les chose difficile je préfère que l'on m'explique XD.
    PS: j'ai vue pour faire style un mélange de cane a sucre et de cactus, sa a étai dure pour moi x).


  • Administrateurs

    Cela dépend de ce que tu veux utiliser au niveau des particules… (Custom ou celles du jeux ?)



  • A et bien celle du jeu ^^, je voudrais faire un peu comme avec la bonne meal quand on clic droit sur du crop et autre ^^.


  • Moddeurs confirmés

    essaie ça:
    [code_java]package tutoriel.common;

    import net.minecraft.block.Block;
    import net.minecraft.entity.EntityLiving;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.EnumToolMaterial;
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    import cpw.mods.fml.relauncher.Side;

    public class ItemTutoPickaxe extends ItemPickaxe
    {
    public ItemTutoPickaxe(int id, EnumToolMaterial enumToolMaterial)
    {
    super(id, enumToolMaterial);
    }

    public boolean onItemUse(ItemStack stack, EntityPlayer player, World world,
    int x, int y, int z, int side, float hitX, float hitY, float hitZ)
    {
    if (!world.isRemote)
    {
    if (world.getBlockId(x, y, z) == Block.bedrock.blockID)
    {
    world.setBlockToAir(x, y, z);
    EntityItem entityitem = new EntityItem(world, x, y, z, new ItemStack(Block.bedrock, 1, 0));
    entityitem.delayBeforeCanPickup = 10;
    world.spawnEntityInWorld(entityitem);
    stack.damageItem(1, player);
    Side side2 = FMLCommonHandler.instance().getEffectiveSide();
    if (side2 == Side.CLIENT)
    {
    for (int j1 = 0; j1 < side; ++j1)
    {
    double d0 = itemRand.nextGaussian() * 0.02D;
    double d1 = itemRand.nextGaussian() * 0.02D;
    double d2 = itemRand.nextGaussian() * 0.02D;
    world.spawnParticle("happyVillager", (double) ((float) x + itemRand.nextFloat()),
    (double) y + (double) itemRand.nextFloat(), (double) ((float) z + itemRand.nextFloat()), d0, d1, d2);
    }
    }
    return true;
    }
    else
    {
    return false;
    }
    }
    return false;
    }
    }[/code_java]



  • Ok, Merci beaucoup :).



  • N'oublie pas de demander si tu ne comprends pas quelque chose dans le code !

    Tu apprendras très vite grâce a ça.


  • Moddeurs confirmés

    En fait j'ai fait ce code directement sur le forum dans le message, donc je ne l'ai pas testé et je viens de remarquer qu'il y a des erreurs, je te corrige ça demain.


Log in to reply