Jump to content

Recommended Posts

Posted

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?

Posted

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.

Posted

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?

Posted

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 :)

Posted

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.

Posted

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.

Posted

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.

Posted

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

Posted

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.  ;D

So, what would happen if I did push that shiny red button over there? ... Really? ... Can I try it? ... Damn.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.