Список ресурсов

ASi

Каменная лига
Сообщения
21
Лучшие ответы
0
Симпатии
0
#1
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
В общем дело такое мне нужно получить массив всех файлов в определенной папке из ресурсов (не путать с папкой майна, именно мода) но сделать это нужно используя modid что бы можно было чекать файлы и в подключенном ресурс паке. Можно ли такое сделать и если да то как?
 

Agravaine

Алмазная лига
Сообщения
4,412
Лучшие ответы
182
Симпатии
578
#2
Файлы ты никак не получишь, только InputStream. Подойдет?
 

ASi

Каменная лига
Сообщения
21
Лучшие ответы
0
Симпатии
0
#3
Мне нужно сделать что то типо DLC - в ресурспаке лежит модель с текстурами и json файл конфигов вот их мне все получить и прочитать надо(конфиги). может тогда есть еще какой-то вариант реализации этого? Мне вообще и скрипт несколько раз юзать надо для подтипов итема и при рендере
 

JustAGod

Железная лига
Сообщения
884
Лучшие ответы
44
Симпатии
248
#4
Ну допустим есть такой вариант
Java:
public static List<String> getFilenamesInDir(String dir) {
        List<String> filenames = new ArrayList<String>();
        try {
            if (dir.startsWith("/")) {
                dir = dir.substring(1);
            }
            Enumeration<URL> urls = ClassPathHelper.class.getClassLoader().getResources(dir);
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                String protocol = url.getProtocol();
                if (protocol.equals("file")) {
                    File dirFile = new File(url.toURI());
                    HashMap<File, String> files = listFiles(dirFile, dir);
                    if (files != null) {
                        for (Map.Entry<File, String> entry : files.entrySet()) {
                            String filename = entry.getValue() + entry.getKey().getName();
                            filenames.add("/" + filename);
                        }
                    }
                }
                if (protocol.equals("jar") || protocol.equals("zip")) {
                    String file = URLDecoder.decode(url.getFile(), "UTF-8");
                    int bangIndex = file.indexOf('!');
                    String jarPath = file.substring(bangIndex + 2);
                    file = new URL(file.substring(0, bangIndex)).getFile();
                    ZipFile zip = new ZipFile(file);
                    Enumeration<? extends ZipEntry> entries = zip.entries();
                    while (entries.hasMoreElements()) {
                        ZipEntry entry = entries.nextElement();
                        if (entry.getName().startsWith(dir.substring(1)) && !entry.isDirectory()) {
                            filenames.add("/" + entry.getName());
                        }
                    }
                    zip.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return filenames;
Этот код я просто скопипастил из кода ск. Мб у тебя он даже не запустится, но можешь попробовать даяда.
 

hohserg

Алмазная лига
Сообщения
3,561
Лучшие ответы
90
Симпатии
396
#6
Через него содержимое каждого файла
getClass.getResourceAsStream(...)
А вот как список - хз. Наверное, в forge есть нужный код, в загрузчике
 

ASi

Каменная лига
Сообщения
21
Лучшие ответы
0
Симпатии
0
#7
А на ресурс паках работать это будет?
 

JustAGod

Железная лига
Сообщения
884
Лучшие ответы
44
Симпатии
248
#8
у вас глаза отвалились? я внезапно попал в чс для всего форума?

Ну допустим есть такой вариант
Java:
public static List<String> getFilenamesInDir(String dir) {
        List<String> filenames = new ArrayList<String>();
        try {
            if (dir.startsWith("/")) {
                dir = dir.substring(1);
            }
            Enumeration<URL> urls = ClassPathHelper.class.getClassLoader().getResources(dir);
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                String protocol = url.getProtocol();
                if (protocol.equals("file")) {
                    File dirFile = new File(url.toURI());
                    HashMap<File, String> files = listFiles(dirFile, dir);
                    if (files != null) {
                        for (Map.Entry<File, String> entry : files.entrySet()) {
                            String filename = entry.getValue() + entry.getKey().getName();
                            filenames.add("/" + filename);
                        }
                    }
                }
                if (protocol.equals("jar") || protocol.equals("zip")) {
                    String file = URLDecoder.decode(url.getFile(), "UTF-8");
                    int bangIndex = file.indexOf('!');
                    String jarPath = file.substring(bangIndex + 2);
                    file = new URL(file.substring(0, bangIndex)).getFile();
                    ZipFile zip = new ZipFile(file);
                    Enumeration<? extends ZipEntry> entries = zip.entries();
                    while (entries.hasMoreElements()) {
                        ZipEntry entry = entries.nextElement();
                        if (entry.getName().startsWith(dir.substring(1)) && !entry.isDirectory()) {
                            filenames.add("/" + entry.getName());
                        }
                    }
                    zip.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return filenames;
Этот код я просто скопипастил из кода ск. Мб у тебя он даже не запустится, но можешь попробовать даяда.
Вапще не видно?
 

CoomingSoon

Железная лига
Сообщения
1,326
Лучшие ответы
11
Симпатии
132
#9
То есть тебе нужно просто прочитать архив , путь до которого есть, и найти там файлы?
 

will0376

Каменная лига
Сообщения
244
Лучшие ответы
5
Симпатии
14
#10
А не проще ли хранить все файлы где-то в корне папки кубача? т.е. мод сам создаёт папку и закидывает туда нужые ресурсы
 

ASi

Каменная лига
Сообщения
21
Лучшие ответы
0
Симпатии
0
#11
Проще если подскажете как потом файлы моделей текстур и т.д юзать без resource location
 

will0376

Каменная лига
Сообщения
244
Лучшие ответы
5
Симпатии
14
#12
биндить через new TextureUtil().uploadTextureImage(0, ImageIO.read(new File(<file>))); Во всяком случае, у меня так работает в гл. меню.
 
Сверху