Hello,
I'm brand new to mod development, and have a bit of background in Java.
I've been trying to get a simple mod to work and the textures aren't loading!
This is the error:
[10:11:22] [Client thread/ERROR]: Using missing texture, unable to load lunamod:textures/items/wand.png
java.io.FileNotFoundException: lunamod:textures/items/wand.png
I've tried looking up the issue, and the only other problems that people have are messed up directories or capitalized mod IDs.
File directory structure:
├── java
│ └── lunamod
│ ├── LunaMod.java
│ ├── ModInformation.java
│ ├── config
│ │ └── ConfigHandler.java
│ ├── items
│ │ ├── ItemInformation.java
│ │ ├── ItemWand.java
│ │ └── Items.java
│ └── proxies
│ ├── ClientProxy.java
│ └── CommonProxy.java
├── mcmod.info
└── resources
└── assets
└── lunamod
├── lang
│ └── en_US.lang
└── textures
└── items
└── wand.png
(I've excluded the imports to save space)
Main mod file:
package lunamod;
@Mod(modid = ModInformation.ID, name = ModInformation.NAME, version = ModInformation.VERSION)
public class LunaMod {
@Mod.Instance(ModInformation.ID)
public static LunaMod instance;
@SidedProxy(clientSide = "lunamod.proxies.ClientProxy", serverSide = "lunamod.proxies.CommonProxy")
public static CommonProxy proxy;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent initializationEvent) {
//Loads configuration
ConfigHandler.init(initializationEvent.getSuggestedConfigurationFile());
Items.initializeItems();
//Empty methods... for now
proxy.initSounds();
proxy.initRenderers();
}
@Mod.EventHandler
public void init(FMLInitializationEvent event) {
Items.registerItems();
}
@Mod.EventHandler
public void postinit(FMLPostInitializationEvent event) {
}
}
ModInformation.java
package lunamod;
public class ModInformation {
public static final String ID = "lunamod";
public static final String NAME = "Luna Mod";
public static final String VERSION = "0.0.1";
}
Items.java
package lunamod.items;
public class Items {
public static Item wand;
public static void initializeItems() {
//Initializes items
wand = new ItemWand(ItemInformation.WAND_ID);
}
public static void registerItems() {
//Registers items
GameRegistry.registerItem(wand, ItemInformation.WAND_NAME);
}
}
ConfigHandler.java
package lunamod.config;
public class ConfigHandler {
public static void init(File file) {
Configuration config = new Configuration(file);
config.load();
ItemInformation.WAND_ID = config.get("Weapons",
ItemInformation.WAND_KEY,
ItemInformation.WAND_DEFAULT_ID).getInt() - 256;
config.save();
}
}
Items.java
package lunamod.items;
public class Items {
public static Item wand;
public static void initializeItems() {
//Initializes items
wand = new ItemWand(ItemInformation.WAND_ID);
}
public static void registerItems() {
//Registers items
GameRegistry.registerItem(wand, ItemInformation.WAND_NAME);
}
}
ItemInformation.java
package lunamod.items;
public class ItemInformation {
//Wand
public static int WAND_ID;
public static final String WAND_KEY = "wand";
public static final String WAND_NAME = "Wand";
public static final String WAND_DEFAULT_ID = "4400";
public static final String WAND_UNLOCALIZED_NAME = "wand";
public static final String WAND_ICON = "wand";
}
ItemWand.java
package lunamod.items;
public class ItemWand extends Item {
public ItemWand(int id) {
super();
setUnlocalizedName(ModInformation.ID + "_" + ItemInformation.WAND_UNLOCALIZED_NAME);
setTextureName(ModInformation.ID + ":" + ItemInformation.WAND_ICON);
setCreativeTab(CreativeTabs.tabCombat);
setMaxStackSize(1);
}
@Override
public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer player, EntityLivingBase target) {
//Checks to see if the entity is on the client or server
//If on server, do stuff. If on client, ignore.
if (!target.worldObj.isRemote) {
target.motionY = 0.5;
target.motionX = 3;
}
return false;
}
}