Crach ThirstMod



  • Bonjour/Bonsoir 
    j ai installé les source du thirstmod dans mon mod mais quand je tente de lancer le minecraft de dev le jeu crach

    Erreur :

    at java.io.Reader.<init>(Unknown Source)
    at java.io.InputStreamReader.<init>(Unknown Source)
    at com.thetorine.thirstmod.core.content.packs.ContentLoader.parseTemplate(ContentLoader.java:43)
    at com.thetorine.thirstmod.core.content.packs.ContentLoader.<init>(ContentLoader.java:36)
    at com.thetorine.thirstmod.core.main.ThirstMod.loadMain(ThirstMod.java:60)
    at com.thetorine.thirstmod.core.main.ThirstMod.preInit(ThirstMod.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
    at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:556)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:243)
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)
    
    

    le code de la classe thirstMod

    package com.thetorine.thirstmod.core.main;
    
    import java.io.File;
    import java.lang.reflect.Field;
    
    import com.thetorine.thirstmod.core.content.BlockLoader;
    import com.thetorine.thirstmod.core.content.ItemLoader;
    import com.thetorine.thirstmod.core.content.packs.ContentLoader;
    import com.thetorine.thirstmod.core.content.packs.DrinkRegistry;
    import com.thetorine.thirstmod.core.network.*;
    import com.thetorine.thirstmod.core.player.PlayerContainer;
    import com.thetorine.thirstmod.core.utils.Config;
    import com.thetorine.thirstmod.core.utils.Constants;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.event.*;
    import cpw.mods.fml.common.network.*;
    import cpw.mods.fml.common.*;
    import cpw.mods.fml.relauncher.Side;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraftforge.common.*;
    
    @Mod(modid = Constants.MODID, version = Constants.VERSION, name = Constants.NAME)
    public class ThirstMod {
    @Instance(Constants.MODID)
    public static ThirstMod instance;
    public static EventSystem eventHook = new EventSystem();
    public static Config config = new Config();
    
    @SidedProxy(clientSide = Constants.PACKAGE + ".core.client.ClientProxy", serverSide = Constants.PACKAGE + ".core.main.CommonProxy")
    public static CommonProxy commonProxy;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
    FMLCommonHandler.instance().bus().register(eventHook);
    MinecraftForge.EVENT_BUS.register(eventHook);
    NetworkRegistry.INSTANCE.registerGuiHandler(this, eventHook);
    loadMain();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
    new DrinkRegistry();
    }
    
    @EventHandler
    public void serverClosed(FMLServerStoppedEvent event) {
    if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
    PlayerContainer.ALL_PLAYERS.clear();
    }
    }
    
    public void loadMain() {
    new NetworkHandler();
    new BlockLoader();
    new ItemLoader(); 
    new ContentLoader();
    }
    
    public static String getMinecraftDir() {
    try {
    Field mcDataDir = Loader.class.getDeclaredField("minecraftDir");
    if(mcDataDir != null) {
    mcDataDir.setAccessible(true);
    return ((File)mcDataDir.get(null)).getAbsolutePath();
    }
    throw new Exception();
    } catch(Exception e) {
    print("Unable to retrieve Minecraft Directory.");
    return null;
    }
    }
    
    public static void print(String s) {
    System.out.println("[ThirstMod] " + s);
    }
    
    public static CreativeTabs thirstCreativeTab = new CreativeTabs("drinks") {
    @Override
    public Item getTabIconItem() {
    return ItemLoader.chocolateMilk;
    }
    };
    }
    ```</init></init></init>

  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut;
    C'est le code de la classe ContentLoader qu'il faudrait.



  • ok je te donne sa tout de suite

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    import com.thetorine.thirstmod.core.content.ItemDrink;
    import com.thetorine.thirstmod.core.content.blocks.DBRecipes;
    import com.thetorine.thirstmod.core.main.ThirstMod;
    
    import cpw.mods.fml.common.registry.GameData;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.common.registry.LanguageRegistry;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class ContentLoader {
    public List <string>categories = new ArrayList<string>();
    public Map<string, arraylist<templatemodifier="">> templateLoad = new HashMap<string, arraylist<templatemodifier="">>();
    public Map<integer, arraylist<drinkmodifier="">> drinkLoad = new HashMap<integer, arraylist<drinkmodifier="">>();
    public HashMap <string, string="">languageTable = new HashMap<string, string="">();
    public List <file>filesToLoad = new ArrayList<file>();
    public String split;
    
    public ContentLoader() {
    try {
    parseTemplate();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    
    public void parseTemplate() throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(ContentLoader.class.getResourceAsStream("/assets/thirstmod/content/template.txt")));
    List <string>elements = new ArrayList<string>();
    while(reader.ready()) {
    elements.add(reader.readLine());
    }
    String prevCategory = "";
    for(String s : elements) {
    if(s.startsWith(" ")) {
    String[] modifers = s.replaceFirst(" ", "").split(" ");
    TemplateModifier c = new TemplateModifier(modifers[0], modifers[1]);
    addValues(prevCategory, c, 0);
    } else if(!s.contains("//")) {
    prevCategory = s;
    if(s.contains("split")) {
    split = s.split(" ", 2)[1];
    }
    }
    }
    reader.close();
    loadDrinks(new File(ThirstMod.getMinecraftDir(), "/thirstmod/content/"));
    }
    
    public void loadDrinks(File dir) {
    int i = 0;
    if(!dir.exists()) {
    dir.mkdirs();
    return;
    }
    findFiles(dir);
    for(File f : filesToLoad) {
    try {
    if(f.getName().endsWith(".txt")) {
    parseDrink(new BufferedReader(new FileReader(f)), i);
    i++;
    } else if(f.getName().endsWith(".zip")) {
    i = readZip(f, i);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    addDrinks();
    }
    
    public void findFiles(File root) {
        File[] files = root.listFiles(); 
        if(files != null) {
        for (File file : files) {
            if (file.isFile()) {
                if(file.getName().endsWith(".txt") || file.getName().endsWith(".zip")) {
                filesToLoad.add(file);
                }
            } else if (file.isDirectory()) {
                findFiles(file);
            }
        }
        }
    }
    
    public void parseDrink(BufferedReader reader, int currentLoad) throws IOException {
    List <string>elements = new ArrayList<string>();
    while(reader.ready()) {
    elements.add(reader.readLine());
    }
    String prevCategory = "";
    for(String s : elements) {
    if(s.startsWith(" ")) {
    String[] modifers = s.replaceFirst(" ", "").split(split, 2);
    for(TemplateModifier c: templateLoad.get(prevCategory)) {
    if(c.modifier.equals(modifers[0])) {
    DrinkModifier m = new DrinkModifier(modifers[0], parseValue(modifers[1], c.datatype));
    addValues(currentLoad, m, 1);
    }
    }
    } else {
    prevCategory = s;
    if(!categories.contains(s)) {
    categories.add(s);
    }
    }
    }
    reader.close();
    }
    
    public int readZip(File zip, int i) throws IOException {
    int load = i;
    ZipFile zf = new ZipFile(zip);
    Enumeration entries = zf.entries();
    while(entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();
    if(entry.getName().endsWith(".txt") && !entry.getName().contains("__MACOSX/._")) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(zf.getInputStream(entry)));
    parseDrink(reader, load);
    reader.close();
    load++;
    }
    }
    zf.close();
    return load;
    }
    
    public void addDrinks() {
    for(int i = 0; i < drinkLoad.size(); i++) {
    String name = "", shortname = "", item = "";
    int color = 0, stacksize = 0, bar_heal = 0, bar_heal_hunger = 0, potionID = 0, duration = 0, itemMetadata = 0;
    float sat_thirst = 0, sat_hunger = 0, poisonChance = 0;
    boolean hasEffect = false, potion_cure = false, alwaysDrinkable = false;
    
    for(DrinkModifier dm : drinkLoad.get(i)) {
    if(dm.modifier.equals("name")) 
    name = (String) dm.value;
    if(dm.modifier.equals("internal_name")) 
    shortname = (String) dm.value;
    if(dm.modifier.equals("item"))
    item = (String) dm.value;
    if(dm.modifier.equals("item_mod_id")) 
    item = ((String) dm.value) + ":" + item; 
    if(dm.modifier.equals("item_metadata"))
    itemMetadata = (Integer) dm.value;
    if(dm.modifier.equals("colour"))
    color = (Integer) dm.value;
    if(dm.modifier.equals("stacksize"))
    stacksize = (Integer) dm.value;
    if(dm.modifier.equals("bar_heal"))
    bar_heal = (Integer) dm.value;
    if(dm.modifier.equals("bar_heal_hunger"))
    bar_heal_hunger = (Integer) dm.value;
    if(dm.modifier.equals("id"))
    potionID = (Integer) dm.value;
    if(dm.modifier.equals("duration"))
    duration = (Integer) dm.value;
    if(dm.modifier.equals("saturation_heal"))
    sat_thirst = (Float) dm.value;
    if(dm.modifier.equals("saturation_heal_hunger"))
    sat_hunger = (Float) dm.value;
    if(dm.modifier.equals("poisonChance"))
    poisonChance = (Float) dm.value;
    if(dm.modifier.equals("effect")) 
    hasEffect = (Boolean) dm.value;
    if(dm.modifier.equals("potion_cure")) 
    potion_cure = (Boolean) dm.value;
    if(dm.modifier.equals("always_drinkable")) 
    alwaysDrinkable = (Boolean) dm.value;
    }
    
    ItemDrink loadedDrink = new ItemDrink(bar_heal, sat_thirst, color, stacksize, hasEffect, alwaysDrinkable, shortname)
    .healFood(bar_heal_hunger, sat_hunger).setPoisoningChance(poisonChance)
    .setPotionEffect(potionID, duration).setCuresPotions(potion_cure);
    
    if(shortname.length() > 0) {
    Item recipeItem = GameData.getItemRegistry().getObject(item);
    if(recipeItem != null) {
    loadedDrink.setRecipeItem(recipeItem);
    GameRegistry.registerItem(loadedDrink, shortname);
    DrinkLists.addDrink(new ItemStack(loadedDrink), bar_heal, sat_thirst);
    ItemStack tempRecipeStack = new ItemStack(recipeItem, 0, itemMetadata);
    DBRecipes.instance().addRecipe(tempRecipeStack.getUnlocalizedName(), itemMetadata, new ItemStack(loadedDrink));
    languageTable.put(String.format("item.%s.name", shortname), name);
    } else {
    ThirstMod.print(
    "Content Loader: Unable to aquire recipe for item id: " + item 
      + "/n Item not added: " + name);
    }
    } 
    }
    injectLanguage();
    }
    
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private void addValues(Object key, Object value, int map) {
    ArrayList tempList = null;
    switch(map) {
    case 0: {
    if (templateLoad.containsKey(key)) {
    tempList = templateLoad.get(key);
    if (tempList == null)
    tempList = new ArrayList<templatemodifier>();
    tempList.add(value);
    } else {
    tempList = new ArrayList<templatemodifier>();
    tempList.add(value);
    }
    templateLoad.put((String) key, tempList);
    break;
    }
    case 1: {
    if (drinkLoad.containsKey(key)) {
    tempList = drinkLoad.get(key);
    if (tempList == null)
    tempList = new ArrayList<templatemodifier>();
    tempList.add(value);
    } else {
    tempList = new ArrayList<templatemodifier>();
    tempList.add(value);
    }
    drinkLoad.put((Integer) key, tempList);
    break;
    }
    }
    }
    
    private Object parseValue(String s, String datatype) {
    if(datatype.equals("string")) {
    return s;
    } else if(datatype.equals("integer")) {
    return Integer.parseInt(s);
    } else if(datatype.equals("float")) {
    return Float.parseFloat(s);
    } else if(datatype.equals("boolean")) {
    return Boolean.parseBoolean(s);
    } else if(datatype.equals("hex")) {
    return Integer.parseInt(s, 16);
    }
    return null;
    }
    
    public void injectLanguage() {
    if(languageTable.size() <= 0) return;
    LanguageRegistry.instance().injectLanguage("en_US", languageTable);
    }
    
    private static class TemplateModifier {
    public String modifier;
    public String datatype;
    
    public TemplateModifier(String s, String s1) {
    this.modifier = s;
    this.datatype = s1;
    }
    }
    
    private static class DrinkModifier {
    public String modifier;
    public Object value;
    
    public DrinkModifier(String modifier, Object value) {
    this.modifier = modifier;
    this.value = value;
    }
    }
    }
    ```</templatemodifier></templatemodifier></templatemodifier></templatemodifier></string></string></string></string></file></file></string,></string,></integer,></integer,></string,></string,></string></string>

  • Moddeurs confirmés Rédacteurs Administrateurs

    Le fichier suivant est sûrement manquant : /assets/thirstmod/content/template.txt



  • merci


Log in to reply