Les events en 1.8



  • Bonjour j'ai un souci avec mon event (event pour créer un portail) , j'ai récupéré qui date de la 1.7 et quand je le met en 1.8 il y a un max d'erreur.
    pouvez-vous m'aider à la corriger please

    package EpicBoss;
    
    import net.minecraft.block.Block;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    import net.minecraftforge.event.entity.player.PlayerInteractEvent;
    import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
    
    public class eventmanager {
    
    @SubscribeEvent
    public void onPlayerInteract(PlayerInteractEvent event){
    System.out.print("true event");
    final World world = event.entityLiving.worldObj;
    if (world.isRemote || !event.action.equals(PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK))
    return;
    
    ItemStack stack = event.entityPlayer.inventory.getCurrentItem();
    EntityPlayer player = event.entityPlayer;
    
    int x = event.x, y = event.y, z = event.z;
    if (event.face == 0)
    –y;
    else if (event.face == 1)
    ++y;
       else if (event.face == 2)
    --y;
    else if (event.face == 3)
    ++y;
    else if (event.face == 4)
    --x;
    else if (event.face == 5)
    ++x;
    if (stack != null && stack.getItem() instanceof ItemBlock){
    if (Item.getIdFromItem(stack.getItem()) == Block.getIdFromBlock(Blocks.diamond_block)){
    if (world.getBlock(x, y, z + 1) == Blocks.air &&
    world.getBlock(x, y, z - 1) == Blocks.air &&
       world.getBlock(x + 1, y, z) == Blocks.air &&
    world.getBlock(x - 1, y, z) == Blocks.air &&
    world.getBlock(x, y, z + 2) == Blocks.stone &&
    world.getBlock(x, y, z - 2) == Blocks.stone &&
    world.getBlock(x + 2, y, z) == Blocks.stone &&
    world.getBlock(x - 2, y, z) == Blocks.stone &&
    world.getBlock(x + 1, y, z + 1) == Blocks.air &&
    world.getBlock(x + 1, y, z - 1) == Blocks.air &&
       world.getBlock(x - 1, y, z + 1) == Blocks.air &&
    world.getBlock(x - 1, y, z - 1) == Blocks.air ) {
    
    world.setBlock(x, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x - 1, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x + 1, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x, y, z - 1, epicboss.blockteleporter, 0, 2);
    world.setBlock(x, y, z + 1, epicboss.blockteleporter, 0, 2);
    }
    
    }
    }
    }
    }
    
    

    d'avance merci



  • si tu ne nous dis pas les erreur ca va être difficile de t'aider



  • @'geekuko':

    Bonjour j'ai un souci avec mon event (event pour créer un portail) , j'ai récupéré qui date de la 1.7 et quand je le met en 1.8 il y a un max d'erreur.
    pouvez-vous m'aider à la corriger please

    package EpicBoss;
    
    import net.minecraft.block.Block;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    import net.minecraftforge.event.entity.player.PlayerInteractEvent;
    import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
    
    public class eventmanager {
    
    @SubscribeEvent
    public void onPlayerInteract(PlayerInteractEvent event){
    System.out.print("true event");
    final World world = event.entityLiving.worldObj;
    if (world.isRemote || !event.action.equals(PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK))
    return;
    
    ItemStack stack = event.entityPlayer.inventory.getCurrentItem();
    EntityPlayer player = event.entityPlayer;
    
    int x = event.x, y = event.y, z = event.z;
    if (event.face == 0)
    –y;
    else if (event.face == 1)
    ++y;
       else if (event.face == 2)
    --y;
    else if (event.face == 3)
    ++y;
    else if (event.face == 4)
    --x;
    else if (event.face == 5)
    ++x;
    if (stack != null && stack.getItem() instanceof ItemBlock){
    if (Item.getIdFromItem(stack.getItem()) == Block.getIdFromBlock(Blocks.diamond_block)){
    if (world.getBlock(x, y, z + 1) == Blocks.air &&
    world.getBlock(x, y, z - 1) == Blocks.air &&
       world.getBlock(x + 1, y, z) == Blocks.air &&
    world.getBlock(x - 1, y, z) == Blocks.air &&
    world.getBlock(x, y, z + 2) == Blocks.stone &&
    world.getBlock(x, y, z - 2) == Blocks.stone &&
    world.getBlock(x + 2, y, z) == Blocks.stone &&
    world.getBlock(x - 2, y, z) == Blocks.stone &&
    world.getBlock(x + 1, y, z + 1) == Blocks.air &&
    world.getBlock(x + 1, y, z - 1) == Blocks.air &&
       world.getBlock(x - 1, y, z + 1) == Blocks.air &&
    world.getBlock(x - 1, y, z - 1) == Blocks.air ) {
    
    world.setBlock(x, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x - 1, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x + 1, y, z, epicboss.blockteleporter, 0, 2);
    world.setBlock(x, y, z - 1, epicboss.blockteleporter, 0, 2);
    world.setBlock(x, y, z + 1, epicboss.blockteleporter, 0, 2);
    }
    
    }
    }
    }
    }
    
    

    d'avance merci

    Premièrement, serait-il possible de dire où sont les erreurs.
    Deuxièmement, tu utilises un PlayerInteractEvent donc il ne devrait apparaître nulle part dans ton code event.entityLiving.
    Troisièmement, pour le position utilise la position du joueur au lieu de celle de l'event.
    Quatrièmement, je suppose que le event.face correspond à là où regarde le joueur, pour ça il faut utiliser EnumFacing directionHorizontal = event.entityPlayer.getHorizontalFacing;
    Cinquièmement, pour trouver si l'item correspond à un certain Item, il faut faire stack.getItem == TonItem (si c'est un block, il faut faire Item.getItemFromBlock(TonBlock).
    Sixièmement, pour savoir si les blocs autour sont un certain bloc, il faut utiliser world.getBlockState(BlockPos).getBlock() == Blocks.air .



  • je comprend pas tt , puis ce code il fonctionnai tres bien en 1.7 !!
    il y a tellement d'erreur que pour les voir il te serai plus facile pour toi de copier le code et de le tester ('enfin si tu à l'envi et le temps)


  • Administrateurs

    Pour les coordonnés, si il faut utiliser ceux de l'event puisqu'il faut les coordonnés où le joueur à fait le clic droit et non les coordonnées du joueur.
    Ce qui change c'est qu'il faut utiliser les BlockPos à la place de x y z

    Pour event.entityLiving ça ne cause aucun problème puisque de toute façon EntityPlayer est extends EntityLivingBase



  • Un package avec des majuscules et une classe qui commence par une minuscule, c'est une erreur de convention.
    Utiliser event.entityLiving quand on est dans un PlayerInteractEvent, c'est une erreur de sémantique.
    Les events.face vont être remplacé par des Enum si ce n'est pas déjà fait.

    Si tu codes dans eclipse, tu as un onglet "problems", la dedans toutes les erreurs sont décrites.



  • je comprend pas comment on utilise le BlockPos …



  • @'geekuko':

    je comprend pas comment on utilise le BlockPos …

    BlockPos est simplement une classe contenant les coordonnées d'un bloc exemple : new BlockPos(x,y,z).
    il remplace la plupart des paramètres x,y,z.



  • quelqu'un pourrai me le corriger directement ? car la je tourne en rond please cela serai trop simpa



  • @'geekuko':

    quelqu'un pourrai me le corriger directement ? car la je tourne en rond please cela serai trop simpa

    Je suis en train mais j'ai un problème avec le event.face == 0, il faudrait que tu me redonnes les directions sans les numéros car pour moi 0 = south or tes nombres vont jusqu'à 5 mais il n'y a que 4 directions !



  • merde ben la … au pire ta skype? ca serai plus simple non? demande moi c'est geekuko



  • 
    @SubscribeEvent
    public void onPlayerInteract(PlayerInteractEvent event) {
    ItemStack stack = event.entityPlayer.getCurrentEquippedItem();
    
    if (!event.world.isRemote && event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK && stack != null && stack.getItem() == Items.apple && event.world.getBlockState(event.pos).getBlock() == Blocks.diamond_block) {
    BlockPos pos = event.pos;
    Block block = Blocks.air;
    Block block1 = Blocks.stone;
    boolean flag = event.world.getBlockState(pos.south()).getBlock() == block && event.world.getBlockState(pos.north()).getBlock() == block && event.world.getBlockState(pos.east()).getBlock() == block && event.world.getBlockState(pos.west()).getBlock() == block;
    boolean flag1 = event.world.getBlockState(pos.south().south()).getBlock() == block1 && event.world.getBlockState(pos.north().north()).getBlock() == block1 && event.world.getBlockState(pos.east().east()).getBlock() == block1 && event.world.getBlockState(pos.west().west()).getBlock() == block1;
    boolean flag2 = event.world.getBlockState(pos.south().east()).getBlock() == block1 && event.world.getBlockState(pos.south().west()).getBlock() == block1 && event.world.getBlockState(pos.north().east()).getBlock() == block1 && event.world.getBlockState(pos.north().west()).getBlock() == block1;
    
    if (flag && flag1 && flag2) {
    event.world.setBlockState(pos, Blocks.gold_block.getDefaultState());
    event.world.setBlockState(pos.south(), Blocks.gold_block.getDefaultState());
    event.world.setBlockState(pos.north(), Blocks.gold_block.getDefaultState());
    event.world.setBlockState(pos.east(), Blocks.gold_block.getDefaultState());
    event.world.setBlockState(pos.west(), Blocks.gold_block.getDefaultState());
    event.entityPlayer.inventory.consumeInventoryItem(Items.apple);
    }
    }
    }
    
    


  • merciiiiiiiii SCAREX!!!!!


  • Administrateurs

    Si c'est résolu, mets la balise résolu.



  • c'est ou la balise?


  • Administrateurs

    Il faut tu édites ton premier message puis que tu change la balise.