Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Провека itemId из FastList<Integer>
#1
Доброго времени, уважаемые юзеры.
Решил попилить Festina C4, чисто для вкачивания Java скилла.
Поскольку с явой на Вы, упёрся в примитивную проблему, помощь в решении которой у вас и прошу.

Есть у меня конфиг с парсом айди итемов


# Запускает html файл по нажатию на итем
# Путь к файлам "data/html/AIO/ + ITEM_ID + .htm"
AioItemHtmlIdList = 1048,1049

Есть код в ядре, который должен читать этот лист

[SRC="java"] private static final int[] ITEM_IDS = { Config.LIST_ALT_AIO_ITEM_HTML_ID };

public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
if (!(playable instanceof L2PcInstance))
return;
L2PcInstance activeChar = (L2PcInstance)playable;
int itemId = item.getItemId();

if (itemId == Config.LIST_ALT_AIO_ITEM_HTML_ID)
{
String htmFile = "data/html/AIO/" + item.getItemId() + ".htm";
String htmContent = HtmCache.getInstance().getHtm(htmFile);[/SRC]




Весь трабл в том, что проверка идёт конткретно на 1 шт itemId == , а как сделать, чтобы проверяло все интегеры из фастлиста я не знаю.

Подскажите, пожалуйста, на что надо заменить проверку.
Ответ
#2
list.contains(id)
Ответ
#3
упс)) Руут прав
consulo.io - Consulo - multi-language IDE
Ответ
#4
Уважаемые, к сожалению, до меня не дошло. Можете ещё больше разжевать?

Добавлено через 3 минуты
VISTALL, Не понимаю, к чему лепить contains()?
Ответ
#5
khativare Написал:Уважаемые, к сожалению, до меня не дошло. Можете ещё больше разжевать?

Добавлено через 3 минуты
VISTALL, Не понимаю, к чему лепить contains()?

А где у вас FastList в коде?

Может вы про массив?
[src=java]
private static final int[] ITEM_IDS = { Config.LIST_ALT_AIO_ITEM_HTML_ID };
[/src]

Тогда 2 варианта:
1. Пройтись по циклу и сравнить каждое значение.
2. Воспользоваться апачевской либой, классом ArrayUtils, в котором есть метод contains
[src=java]
ArrayUtils.contains(ITEM_IDS , itemId];
[/src]
Ответ
#6
Ro_0TT, вот что лог компиляции пишет

compile:
[javac] C:\!Savchenko\L2J\L2J_Festina_C4_src\build_jar.xml:49: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 18 source files to C:\!Savchenko\L2J\L2J_Festina_C4_src\build\classes
[javac] C:\!Savchenko\L2J\L2J_Festina_C4_src\java\com\festina\gameserver\handler\itemhandlers\AIOItemHTML.java:24: error: incompatible types
[javac] private static final int[] ITEM_IDS = { Config.LIST_ALT_AIO_ITEM_HTML_ID };
[javac] ^
[javac] required: int
[javac] found: List<Integer>
[javac] C:\!Savchenko\L2J\L2J_Festina_C4_src\java\com\festina\gameserver\handler\itemhandlers\AIOItemHTML.java:33: error: incomparable types: int and List<Integer>
[javac] if (itemId == Config.LIST_ALT_AIO_ITEM_HTML_ID)
[javac] ^
[javac] 2 errors

вот ещё кусок кода, который я накопипастил на основе других натсроек
[SRC="java"]
ALT_AIO_ITEM_HTML_ID = otherSettings.getProperty("AioItemHtmlIdList", "1048,1049");
//!list!
LIST_ALT_AIO_ITEM_HTML_ID = new FastList<Integer>();
for (String id : ALT_AIO_ITEM_HTML_ID.split(",")) {
LIST_ALT_AIO_ITEM_HTML_ID.add(Integer.parseInt(id));
}[/SRC]

Я вижу 3 варианта
1) либо переводить этот фаст лист в конфиге в массив интов;
2) перевести этот массив интов в моём файле в фаст лист (в чём сомневаюсь, ибо это по идее потащит за собой траблы);
3) воспользоваться какой-то командой типа лист_ту_массив;

Можете поделиться опытом, как будет лучше и вообще, как? Big Grin
Ответ
#7
[SRC="java"]if(Config.LIST_ALT_AIO_ITEM_HTML_ID.contains(itemId))
{
...
}[/SRC]

у вас LIST_ALT_AIO_ITEM_HTML_ID и есть лист, а Рут предполагал что это один предмет, проверка выше должна решить вашу задачу.
Ответ
#8
Спасибо за ответы, на их основании погуглил, по ядру поискал и нашёл аналогии.

Теперь другой вопрос.
Вот весь код.
код

Ситуация в том, что массив ITEM_IDS в итоге передаётся через getItemIds() в IItemHandler.
Поскольку я проверку сделал всё того же фаст листа, то вопрос остаётся открытым.

Каким образом мне можно мой парс из конфига залить в массив?

Откуда вообще это взялось?

Добавлено через 1 минуту
Mifesto Написал:[SRC="java"]if(Config.LIST_ALT_AIO_ITEM_HTML_ID.contains(itemId))
{
...
}[/SRC]

у вас LIST_ALT_AIO_ITEM_HTML_ID и есть лист, а Рут предполагал что это один предмет, проверка выше должна решить вашу задачу.
благодарен за отзыв.
минут бы 15 назад и мне не пришлось бы напрягать мозги)) но это даже к лучшему Smile
Ответ
#9
После

[SRC="java"] int itemId = item.getItemId();[/SRC]


писать вот это

[SRC="java"]Integer.valueOf(itemId)[/SRC]


:eek:

Вам срочно нужно, хотя бы, почитать основы ООП и введение в Java. Этого будет достаточно.
Родился, живу и когда-нибудь умру.
Ответ
#10
у любого List есть 2 метода:

toArray() - возвращает Object[]

а так же

toArray(T[] array); - возвращает T[], T - Генерик

вам нужно сделать типо такого:

[SRC="java"]ITEM_IDS.toArray(new int[ITEM_IDS.size()])[/SRC]


ITEM_IDS - List (ArrayList, FastList, и тд)
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)