1.12.2 localiser un bloc avec une boussole



  • Re : Une boussole

    J'ai suivie cet ancien tuto et j'ai réussi à refaire correctement la boussole mais impossible de localiser un bloc a l'aide de celle-ci. Si quelqu'un sais comment récupérer les coordonnées d'un minerais généré dans le monde merci de prendre le temps de me répondre,
    bonne journée.

    Le code de ma boussole:

    package fr.arca.arcadia.items;
     
    public class FindiumCompass extends Item 
    {
     
        public FindiumCompass(String name) 
        {
            super();
        	setUnlocalizedName(name);
    		setRegistryName(name);
    		setCreativeTab(Arcadia.ArcadiaTab);
            setMaxStackSize(1);
     
            addPropertyOverride
            (
            		new ResourceLocation("angle"), new IItemPropertyGetter() 
              {
     
                @SideOnly(Side.CLIENT)
                double rotation;
                @SideOnly(Side.CLIENT)
                double rota;
                @SideOnly(Side.CLIENT)
                long lastUpdateTick;
     
                double blockX = 0;
                double blockZ = 0;
     
                @SideOnly(Side.CLIENT)
                @Override
                public float apply(ItemStack stack, World world, EntityLivingBase entityLiving) 
                {
                    if (entityLiving == null && !stack.isOnItemFrame()) return 0.0F;
                    final boolean entityExists = entityLiving != null;
     
                    final Entity entity = (Entity) (entityExists ? entityLiving : stack.getItemFrame());
     
                    if (world == null) world = entity.world;
     
                    double rotation = entityExists ? (double) entity.rotationYaw : getFrameRotation((EntityItemFrame) entity);
                    rotation %= 360.0D;
     
                    double adjusted = Math.PI - ((rotation - 90.0D) * 0.01745329238474369D - getAngle(world, entity, stack));
     
                    if (entityExists) adjusted = wobble(world, adjusted);
     
                    final float f = (float) (adjusted / (Math.PI * 2D));
                    return MathHelper.positiveModulo(f,    1.0F);
                }
     
                @SideOnly(Side.CLIENT)
                private double getFrameRotation(EntityItemFrame itemFrame) 
                {
                    return (double) MathHelper.wrapDegrees(180 + itemFrame.facingDirection.getHorizontalIndex() * 90);
                }
     
                @SideOnly(Side.CLIENT)
                private double getAngle(World world, Entity entity, ItemStack stack) 
                {
                    return Math.atan2((double) blockZ - entity.posZ, (double) blockX - entity.posX);
                }
     
                @SideOnly(Side.CLIENT)
                private double wobble(World world, double amount) 
                {
                    if (world.getTotalWorldTime() != lastUpdateTick) 
                    {
                        lastUpdateTick = world.getTotalWorldTime();
                        double d0 = amount - rotation;
                        d0 %= Math.PI * 2D;
                        d0 = MathHelper.clamp(d0, -1.0D, 1.0D);
                        rota += d0 * 0.1D;
                        rota *= 0.8D;
                        rotation += rota;
                    }
     
                    return rotation;
                }
                
              }
            
            );
        }
     
    }
    
    


  • Bonjour,
    Pour récupérer un block qui est généré dans le monde, c'est assez compliqué parce que la manière la plus simple c'est de parcourir les blocks autour du joueur et check si c'est ton block, mais le problème c'est que ça prend beaucoup de temps de faire ça, donc tu peux que check dans un rayon assez faible. ça peut aussi être une bonne idée de sauvegardé la position du block trouvé pour éviter de parcourir les blocks autour du joueur à chaque frame



  • D'accord ça a l'air extrêmement complexe donc bon je vais pas chercher plus je pense, j'ai pas les compétences pour me lancer la dedans.
    merci de ta réponse


Log in to reply