Minerais Custom, problème d'affichage
-
Utilise plutôt Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(“minecraft:blocks/stone”); pour avoir la texture de la stone.
-
Alors :
Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(“modid:blocks/custom”);
retourne correctement la TextureAtlasSprite donc ça ne vient pas des texturesC’est vraiment bizarre, parce que les blocs utilise forcément le model retourné par bake() puisque quand je modifie isgui3d() ou isbuiltinrenderer(), je perçois le changement en jeu___Bon ça avance gentiment mais on est pas sortie de l’auberge ^^
Mes minerais ont leur background de pierre qui s’affiche correctement - dans l’inventaire seulement mais c’est surement du à autre chose je m’en fous pour l’instant.public IFlexibleBakedModel bake(IModelState state, VertexFormat format, Function <resourcelocation, textureatlassprite="">bakedTextureGetter) { TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); HashMap <resourcelocation, textureatlassprite="">txMap = new HashMap<>(); Function <resourcelocation, textureatlassprite="">textureGetter; /* * Base stone and ore models */ ModelResourceLocation stoneModelLocation = new ModelResourceLocation(MODID + ":" + stoneVariant); IModel stoneModel = ModelLoaderRegistry.getModel(stoneModelLocation); ModelResourceLocation oreModelLocation = new ModelResourceLocation(oreResourcesDomain + ":" + oreType); IModel oreModel = ModelLoaderRegistry.getModel(oreModelLocation); /* * Create the textures map */ txMap.put(stoneModelLocation, textureMap.getAtlasSprite(MODID + ":blocks/" + stoneVariant)); txMap.put(oreModelLocation, textureMap.getAtlasSprite(oreResourcesDomain + ":blocks/" + providedOverlays[2])); textureGetter = Functions.forMap(txMap); /* * Build the stone background */ IBakedModel stoneBakedModel = stoneModel.bake(stoneModel.getDefaultState(), format, textureGetter); Builder b = new Builder(stoneBakedModel, textureGetter.apply(stoneModelLocation)); /* * Add the ore overlay */ IBakedModel oreBakedModel = oreModel.bake(oreModel.getDefaultState(), format, textureGetter); b.setTexture(textureGetter.apply(oreModelLocation)); @SuppressWarnings("unchecked") List <bakedquad>oreBakedQuads = oreBakedModel.getGeneralQuads(); for (BakedQuad bq : oreBakedQuads) { b.addGeneralQuad(bq); } return new IFlexibleBakedModel.Wrapper(b.makeBakedModel(), format); }Le nouveau problème, c’est que les overlays ne sont pas “enregistrés” dans minecraft, donc je dois trouver un moyen de le faire pour que le textureGetter me renvoie la bonne textures___Bump ! Quelqu’un à une idée pour enregistrer les textures d’overlays ?</bakedquad></resourcelocation,></resourcelocation,></resourcelocation,>
-
Je fusionne tous tes messages, il faut éviter les boucles posts.
Il me semble qu’il faut passer par l’event TextureSwitchEvent
-
Ok merci !
Pour enregistrer une méthode pour un event c’est avec l’annotation EventRegister ou un truc comme ça ? -
-
C’est bizarre, j’ai l’impression que les textures ne se charge toujours pas.
Qu’est-ce que je fait de mal ?@SideOnly(Side.CLIENT) public final class TexturesRegistrationHandler { @SubscribeEvent public void registerOverlays(TextureStitchEvent.Pre e) { oresTexturizer.overlaysLocations.forEach(new BiConsumer<string, resourcelocation="">() { @Override public void accept(String srt, ResourceLocation location) { e.map.registerSprite(location); } }); } }overlaysLocation est remplis comme ça :
overlaysLocations.put("oreCoal_overlay", new ResourceLocation(MODID + ":blocks/" + "coal_overlay"));et récupéré comme ça :
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); HashMap <resourcelocation, textureatlassprite="">txMap = new HashMap<>(); Function <resourcelocation, textureatlassprite="">textureGetter; /* * Base stone and ore models */ ModelResourceLocation stoneModelLocation = new ModelResourceLocation(MODID + ":" + stoneVariant); IModel stoneModel = ModelLoaderRegistry.getModel(stoneModelLocation); ModelResourceLocation oreModelLocation = new ModelResourceLocation(oreResourcesDomain + ":" + oreType); IModel oreModel = ModelLoaderRegistry.getModel(oreModelLocation); /* * Create the map with the useful textures */ TextureAtlasSprite stoneTexture = textureMap.getAtlasSprite(MODID + ":blocks/" + stoneVariant); TextureAtlasSprite oreTexture = textureMap.getAtlasSprite(MODID + ":blocks/" + oreType + "_overlay"); txMap.put(stoneModelLocation, stoneTexture); txMap.put(oreModelLocation, oreTexture); textureGetter = Functions.forMap(txMap);Et cette ligne :
MinecraftForge.EVENT_BUS.register(new TexturesRegistrationHandler());Faut la mettre dans le preInit ou le Init ?</resourcelocation,></resourcelocation,></string,>
-
Il faut utiliser e.map.setTextureEntry(“nom interne au jeu”, new UneClasseExtendsTextureAtlasSprite(“modid:chemin de la texture à partir du dossier textures”);
Pour le nom interne au jeu je mets toujours le même nom que l’emplacement de la texture (modid:chemin de la texture à partir du dossier textures) pour ne pas compliquer les choses.
Tu ne peux pas utiliser directement TextureAtlasSprite car le constructeur est protected, donc il faut faire une classe fille. -
Comment je get mon overlay ? avec ça :
Function <resourcelocation, textureatlassprite="">bakedTextureGetterou comme ça :
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); HashMap <resourcelocation, textureatlassprite="">txMap = new HashMap<>(); Function <resourcelocation, textureatlassprite="">textureGetter; ModelResourceLocation oreModelLocation = new ModelResourceLocation(oreResourcesDomain + ":" + oreType); IModel oreModel = ModelLoaderRegistry.getModel(oreModelLocation); TextureAtlasSprite oreTexture = textureMap.getAtlasSprite(MODID + ":blocks/" + overlayName); txMap.put(oreModelLocation, oreTexture); textureGetter = Functions.forMap(txMap);EDIT : la première méthode ne fonctionne pas, la deuxième oui. J’ai enfin la texture de l’overlay, par contre elle s’applique pas sur le model, parce-que faut pas pousser non plus ^^ Et seulement l’item, pas le bloc dans le monde, lui il est violet et noir.
Si quelqu’un vois un problème dans ce qui suit, le début marche, c’est la fin où ça se gâte, l’overlay n’a pas l’air d’être ajouté :public IFlexibleBakedModel bake(IModelState state, VertexFormat format, Function <resourcelocation, textureatlassprite="">bakedTextureGetter) { TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); HashMap <resourcelocation, textureatlassprite="">txMap = new HashMap<>(); Function <resourcelocation, textureatlassprite="">textureGetter; /* * Base stone and ore models */ ModelResourceLocation stoneModelLocation = new ModelResourceLocation(MODID + ":" + stoneVariant); IModel stoneModel = ModelLoaderRegistry.getModel(stoneModelLocation); ModelResourceLocation oreModelLocation = new ModelResourceLocation(oreResourcesDomain + ":" + oreType); IModel oreModel = ModelLoaderRegistry.getModel(oreModelLocation); /* * Create the map with the useful textures */ TextureAtlasSprite stoneTexture = textureMap.getAtlasSprite(MODID + ":blocks/" + stoneVariant); TextureAtlasSprite oreTexture = textureMap.getAtlasSprite(MODID + ":blocks/" + overlayName); // txMap.put(stoneModelLocation, stoneTexture); txMap.put(oreModelLocation, oreTexture); textureGetter = Functions.forMap(txMap); /* * Build the stone "background" */ IBakedModel stoneBakedModel = stoneModel.bake(stoneModel.getDefaultState(), format, textureGetter); Builder b = new Builder(stoneBakedModel, textureGetter.apply(stoneModelLocation)); /* * Add the ore overlay */ IBakedModel oreBakedModel = oreModel.bake(oreModel.getDefaultState(), format, textureGetter); b.setTexture(textureGetter.apply(oreModelLocation)); // List <bakedquad>oreBakedQuads = oreBakedModel.getGeneralQuads(); for (BakedQuad bq : oreBakedQuads) { b.addGeneralQuad(bq); } return new IFlexibleBakedModel.Wrapper(b.makeBakedModel(), format); } ```</bakedquad></resourcelocation,></resourcelocation,></resourcelocation,></resourcelocation,></resourcelocation,></resourcelocation,> -
Le problème c’est que oreBakedModel.getGeneralQuads(); retourne que dalle, pourtant, oreModel pointe vers un model de minerai de minecraft vailde !
Quelqu’un peut il m’expliquer exactement ce qu’est un BakedQuad, parce-que c’est un peu abstrait pour moi … -
Honnêtement je ne peux pas t’aider x)
Je n’ai jamais utilisé ces méthodes, la seule chose que j’ai utilisé c’est le ISmartBlockModel et je ne comprends pas grand chose non plus au système de rendu de la 1.8
-
J’ai posté sur le forum anglais, on m’a envoyé sur ça :
Le problème c’est que dans son tuto c’est pour un plateau d’échec, c’est un peu hardcore pour un exemple je trouve.
Je pense avoir compris à peu près en gros un BakedQuad c’est une texture + des coordonnées (relative au bloc), et un bloc de base est composé de 6 BakedQuad. J’ai ajouté 6 autres BakedQuad à mon model (les overlays) en suivant le tuto. Ils sont décalé de 0.001 vers l’extérieur par rapport au autres pour évité les “glitches”.Mais ce qui m’embete vraiment c’est que j’arrive a ajouté un texture de terre par dessus mes blocs, mais pas un overlay, il doit avoir un problème avec la transparence.