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
-