Il reste moins de 24h pour s'inscrire à la MFFJam !

Block invisible avec ItemBlock custom



  • Bonjours,

    suite à la nécessité de poser un multiblock d'un coup, j'ai créer un item pour poser les block, cependant, le block apparait pour la personne qui la posait ainsi que sur le serveur mais les autre joueur doivent deco-reco pour voir le block. Les joueurs on seulement la colision du block si il ne deco-reco pas, cependant il est possible pour eux de le faire apparaître parfois avec des clic-droit sur l'emplacement du block.

    code de l'item :

    package fr.chokearth.rpm.object.item;
    
    import fr.chokearth.rpm.init.BlockInit;
    import fr.chokearth.rpm.object.item.base.ItemBase;
    import net.minecraft.advancements.CriteriaTriggers;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.EnumActionResult;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.util.EnumHand;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.World;
    
    public class ItemPlaceStand extends ItemBase{
    
       public ItemPlaceStand(String name, CreativeTabs creativeTabs) {
           super(name, creativeTabs);
       }
    
       @Override
       public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
           BlockPos pos1 = new BlockPos(pos.getX(), pos.getY()+1, pos.getZ());
           BlockPos pos2 = new BlockPos(pos.getX(), pos.getY()+2, pos.getZ());
           ItemStack itemstack = player.getHeldItem(hand);
    
           if (worldIn.mayPlace(BlockInit.STANDSTORAGE, pos1, false, facing, player) && worldIn.mayPlace(BlockInit.STANDSELL, pos2, false, facing, player)){
    
               IBlockState storage = BlockInit.STANDSTORAGE.getDefaultState();
               IBlockState sell = BlockInit.STANDSELL.getDefaultState();
    
               worldIn.setBlockState(pos1, storage, 11);
               IBlockState state1 = worldIn.getBlockState(pos1);
               BlockInit.STANDSTORAGE.onBlockPlacedBy(worldIn, pos1, state1, player, itemstack);
    
               worldIn.setBlockState(pos2, sell, 11);
               IBlockState state2 = worldIn.getBlockState(pos2);
               BlockInit.STANDSELL.onBlockPlacedBy(worldIn, pos2, state2, player, itemstack);
               itemstack.setCount(itemstack.getCount()-1);
           }
           return super.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ);
       }
    }
    

    Merci d'avance.


  • Administrateurs

    Salut,
    Remplaces les 11 de la fonction setBlockState par 3 (ce nombre correspond au flag, 3 (flag 1 et 2 cumulé) déclenche l’envoie d'un paquet de mise à jour au client + une mise à jour de la lumière).



  • @'robin4002':

    Salut,
    Remplaces les 11 de la fonction setBlockState par 3 (ce nombre correspond au flag, 3 (flag 1 et 2 cumulé) déclenche l’envoie d'un paquet de mise à jour au client + une mise à jour de la lumière).

    J'ai essayer, cela ne change rien.


  • Administrateurs

    Tu as bien tout recompilé et relancé le serveur après modification ?



  • @'robin4002':

    Tu as bien tout recompilé et relancé le serveur après modification ?

    Oui, je lance avec la commande runClient de Graddle ( je programme sur IntelliJ IDEA ) et pour les test server j'ouvre deux client et je fais une LAN.


  • Administrateurs

    Dans ce cas je ne sais pas d'où cela vient 😕



  • @'robin4002':

    Dans ce cas je ne sais pas d'où cela vient 😕

    D'accord, merci quand même. 🙂