Modèles d'une boussole custom



  • Bonjour,

    Je me demandais comment faire pour créer sa boussole custom ?
    J'ai, comme pour la boussole officielle, créé 32 fichiers jsons qui pointent vers 32 textures (0 à 31), et j'ai recopié le code de la boussole dans ma classe Item.

    La question est, comment enregistrer tous les modèles ?



  • Je rajoute le code de la boussole (c'est le même que celle de base) :

    
    package net.dylem.styx.item;
    
    import javax.annotation.Nullable;
    
    import net.dylem.styx.init.StyxInitLabels;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.item.EntityItemFrame;
    import net.minecraft.item.IItemPropertyGetter;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.util.math.MathHelper;
    import net.minecraft.world.World;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    
    public class ItemAncientCompass extends ItemStyx {
    
    public ItemAncientCompass(final String itemName) {
    
    super(itemName);
    this.addPropertyOverride(new ResourceLocation("angle"), new IItemPropertyGetter()
            {
                @SideOnly(Side.CLIENT)
                double rotation;
                @SideOnly(Side.CLIENT)
                double rota;
                @SideOnly(Side.CLIENT)
                long lastUpdateTick;
                @SideOnly(Side.CLIENT)
                public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn)
                {
                    if (entityIn == null && !stack.isOnItemFrame())
                    {
                        return 0.0F;
                    }
                    else
                    {
                        boolean flag = entityIn != null;
                        Entity entity = (Entity)(flag ? entityIn : stack.getItemFrame());
    
                        if (worldIn == null)
                        {
                            worldIn = entity.world;
                        }
    
                        double d0;
    
                        if (worldIn.provider.isSurfaceWorld())
                        {
                            double d1 = flag ? (double)entity.rotationYaw : this.getFrameRotation((EntityItemFrame)entity);
                            d1 = MathHelper.positiveModulo(d1 / 360.0D, 1.0D);
                            double d2 = this.getSpawnToAngle(worldIn, entity) / (Math.PI * 2D);
                            d0 = 0.5D - (d1 - 0.25D - d2);
                        }
                        else
                        {
                            d0 = Math.random();
                        }
    
                        if (flag)
                        {
                            d0 = this.wobble(worldIn, d0);
                        }
    
                        return MathHelper.positiveModulo((float)d0, 1.0F);
                    }
                }
                @SideOnly(Side.CLIENT)
                private double wobble(World worldIn, double p_185093_2_)
                {
                    if (worldIn.getTotalWorldTime() != this.lastUpdateTick)
                    {
                        this.lastUpdateTick = worldIn.getTotalWorldTime();
                        double d0 = p_185093_2_ - this.rotation;
                        d0 = MathHelper.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D;
                        this.rota += d0 * 0.1D;
                        this.rota *= 0.8D;
                        this.rotation = MathHelper.positiveModulo(this.rotation + this.rota, 1.0D);
                    }
    
                    return this.rotation;
                }
                @SideOnly(Side.CLIENT)
                private double getFrameRotation(EntityItemFrame p_185094_1_)
                {
                    return (double)MathHelper.clampAngle(180 + p_185094_1_.facingDirection.getHorizontalIndex() * 90);
                }
                @SideOnly(Side.CLIENT)
                private double getSpawnToAngle(World p_185092_1_, Entity p_185092_2_)
                {
                    BlockPos blockpos = p_185092_1_.getSpawnPoint();
                    return Math.atan2((double)blockpos.getZ() - p_185092_2_.posZ, (double)blockpos.getX() - p_185092_2_.posX);
                }
            });
        }
    
    }
    
    

    Et le code d'enregistrement du modèle pour un item "classique" de mon mod :

    
     private void registerItemModel(final Item item, final ModelResourceLocation fullModelLocation) {
            ModelBakery.registerItemVariants(item, fullModelLocation);
            registerItemModel(item, MeshDefinitionFix.create(stack -> fullModelLocation));
        }
    
        private void registerItemModel(final Item item, final ItemMeshDefinition meshDefinition) {
            itemsRegistered.add(item);
            ModelLoader.setCustomMeshDefinition(item, meshDefinition);
        }
    
    


  • 32 fichiers ?! Ou la la x) enfin bon regardes comment Minecraft gère ça dans son code source dans ton workspace sur eclipse, les petits livres horizontaux dans ton projet: tu trouveras un truc Minecraft et essayes de te repérer avec le nom des packages 😉


  • Rédacteurs