Создание нового объекта:
code forth
: test
player@ "ObjectId" p@
4625
3
player@ coords@ 50 coords-randomize
"net.sf.l2j.gameserver.serverpackets.Dice" 6 jnew
;
слово
jnew ( arg1 arg2 ... argN "ClassName" N — Object ) создаёт новый объект, передавая ему N аргументов. Конструктор выбирается исходя из типа аргументов (Их число может быть и нулевым).
Помните, что int != Integer. Более того, боюсь, что слова с аргументами int вообще невозможно вызвать через Java Reflection. Так что, возможно, вам придётся переписывать некоторые классы с int на Integer.
Вызов метода, возвращающего результат:
code forth
player@ "getAccessLevel" 0 jget
(хотя этот пример лучше писать в виде
player@ "AccessLevel" p@)
Формат вызова:
jget ( arg1 arg2 ... arg N object "MethodName" — result )
Аналогично используется и слово
jexec, но оно не возвращает результата. Используется для вызова методов, не возвращающих результат.
внимание! конструкция вида
code forth
( на входе объект Dice из предыдущего примера )
player@ "broadcastPacket" 1 jexec
Почему-то не работает
Не находит нужный класс (BaseSystemPacket). Вероятно, нужно преобразовывать к нему принудительно. Подобные слова для преобразования к базовым классам, если возможны, напишу позднее. Пока для броадкаста используйте
code forth
( ServerPacket ) player@ broadcast