Posted July 2, 201213 yr I was working on the beginning of a mod that I'm not entirely sure I'm good enough of a modder to complete yet, but I figured I might as well learn as I go. However, I got stopped almost as soon as I got started because my new ores won't load their texture. mod_KBIMynTek: package net.minecraft.src; import java.util.Random; import java.util.Map; import java.io.File; import java.io.IOException; import net.minecraft.src.forge.*; import net.minecraft.src.KBI.MynTek.*; public class mod_KBIMynTek extends NetworkMod { public static int ore1ID; public static boolean generateCopper; public static boolean generateTin; public static Configuration config; public static Block ore; public static void initProps() { File file = new File(ModLoader.getMinecraftInstance().getMinecraftDir() + "/config/KBI"); file.mkdir(); File newFile = new File(ModLoader.getMinecraftInstance().getMinecraftDir() + "/config/KBI/MynTek.cfg"); /* Some basic debugging will go a long way */ try { newFile.createNewFile(); System.out.println("Successfully created/read Configuration file for MynTek"); } catch (IOException e) { System.out.println("Could not create Configuration file for MynTek. Reason:"); System.out.println(e); } config = new Configuration(newFile); config.load(); ore1ID = config.getOrCreateIntProperty("Metal Ore ID", "block", 3300).getInt(3300); generateCopper = config.getOrCreateBooleanProperty("Generate Copper Ore", "block", true).getBoolean(true); generateTin = config.getOrCreateBooleanProperty("Generate Tin Ore", "block", true).getBoolean(true); config.save(); } public static void defineItems() { ore = new OreBlock(ore1ID, 0).setStepSound(Block.soundStoneFootstep).setHardness(3.0F).setResistance(15.0F).setBlockName("KBIore"); } public String Version() { return "KBI MynTek v0.0.1"; } public String getVersion() { return "1.2.5."; } public mod_KBIMynTek() { MinecraftForgeClient.preloadTexture("/KBI/MynTekBlocks.png"); initProps(); defineItems(); ModLoader.registerBlock(ore, net.minecraft.src.KBI.MynTek.OreItem.class); ModLoader.addLocalization("KBICopperOre.name", "Copper Ore"); ModLoader.addLocalization("KBITinOre.name", "Tin Ore"); MinecraftForge.registerOre("oreCopper", new ItemStack(ore, 1, 0)); MinecraftForge.registerOre("oreTin", new ItemStack(ore, 1, 1)); MinecraftForge.setBlockHarvestLevel(ore, 0, "pickaxe", 1); //needs stone MinecraftForge.setBlockHarvestLevel(ore, 1, "pickaxe", 1); } @Override public void generateSurface(World world, Random random, int chunkX, int chunkZ) { WorldGen.generateOres(world, random, chunkX, chunkZ); // located in /KBI/MynTek } public void load() { MinecraftForgeClient.preloadTexture("/KBI/MynTek/Blocks.png"); } @Override public boolean clientSideRequired() { return true; } @Override public boolean serverSideRequired() { return false; } } /KBI/MynTek/OreBlock: package net.minecraft.src.KBI.MynTek; import java.util.ArrayList; import java.util.Random; import net.minecraft.src.forge.*; import net.minecraft.src.*; public class OreBlock extends Block implements ITextureProvider { protected int metaData; //not really metadata; I should change the variable name to something else protected int ID; public OreBlock(int i, int j) { super(i, j, Material.rock); metaData = j; ID = i; } public int idDropped(int md, Random random, int fortune) { return ID; } public int damageDropped(int i) { return i; } public static int getHeight(Random rand, int top, int bottom) { int check = rand.nextInt(top); if(check >= bottom) { return check; } else { return getHeight(rand, top, bottom); } } public int quantityDropped(Random random) { return 1; } public int getBlockTextureFromSideAndMetadata(int i, int j) { return j; // + metaData; } public String getTextureFile() { return "/KBI/MynTekBlocks.png"; } public void addCreativeItems(ArrayList arraylist) { arraylist.add(new ItemStack(mod_KBIMynTek.ore, 1, 0)); arraylist.add(new ItemStack(mod_KBIMynTek.ore, 1, 1)); } } I've tried renaming it, repositioning it, and still it shows the white-and-black no-texture-loaded texture when I start the client via MCP. I cannot figure out how it is different from my previous mod which DOES work. What am I doing wrong?
July 2, 201213 yr First, do not load things in your mod_ constructor, load in your load() callback. Second, I am unsure from a cursory look... Wait for the next person unless I get some time soon. You should also put the @Override decoration on functions you are overriding.
July 2, 201213 yr Author To the first; okay, I did try that but it wasn't working. Like I said I tweaked stuff around. To the second; alright, I still have a lot of researching and repetitive code to write -- my ores are biome-specific as they are in the real world. To the third; I use @Override where it's used in the code I'm learning from, but I think I read somewhere that it really doesn't matter; what's the difference between using it and not?
July 2, 201213 yr first i see is that u preload 2 diffrent textures both are block sprites. can it be that u missplelled in gettexturefile your path? little tip use public static final String blockTxtPath = "YOUR/PATH/HERE"; and in getTextureFile return mod_YOURMODNAME.blockTxtPath; so you just need to write the path 1 time down and prevent misspellings Developing CocktailsMod
July 2, 201213 yr Author The file was originally located at "/KBI/MynTek/Blocks.png" and then when I thought that perhaps it could only read sprite files from one folder in, I changed it to "/KBI/MynTekBlocks.png" but must have forgotten to change the "extra" call inside load() in addition to the call in the constructor. It is the same inside both the block file and the main mod file -- I copied and pasted it back and forth and quadruple-checked the path and everything. I have confirmed that it is not an issue with MCP's startclient.bat not including the file; I reobfuscated it and tested it in my normal Minecraft setup with the same results. I didn't really think that it was the issue but it was worth ruling out.
July 3, 201213 yr Author I'm suspecting that maybe my image is not in a supported format even though it's png. I just tried "/terrain.png" and it worked fine. So I think maybe Forge and Minecraft can't read my image properly. EDIT: Nope, I replaced it with a terrain image from another mod and it still wouldn't read it.
July 3, 201213 yr Author Okay, I've gotten a slight success. Instead of including it in the MCP-built minecraft.jar, I need to put the image inside a new folder in the MCP-built /mods directory for it to work when using startclient.bat. Not sure how everything will work when I finally export it out of MCP and into a usable ZIP file, but it'll work for now.
July 3, 201213 yr To the third; I use @Override where it's used in the code I'm learning from, but I think I read somewhere that it really doesn't matter; what's the difference between using it and not? if you put it, you get an error if youve put an out of place capital letter or parameter
July 6, 201213 yr Did you create the folders inside of minecraft.jar in /<MCPDIR>/jars/bin/ ? It needs to find the texture file there to make it work. Oh, and this is the 1337th post in this board. So, what would happen if I did push that shiny red button over there? ... Really? ... Can I try it? ... Damn.
July 10, 201213 yr put you folder with you textures in the minecraft.jar in you mcp/jars/bin/minecraft.jar then try to use your code
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.