Скорее всего находится "/в папке с сервером/data/xml/teleports.xml":
<teleport
<!-- это и есть "goto 1" -->
id="1"
<!-- loc_* -->
loc_x="-12672"
loc_y="122776"
loc_z="-3116"
<!-- количество аден -->
price="100"
<!-- 0 - значит для всех, 1 - только для баронов, нублесс. -->
fornoble="0" />
Ну или что - то, подобное.
так как в L2TeleporterInstance.java -> onBypassFeedback, onBypass, etc...:
if (command.startsWith("goto")) {
if (condition == COND_REGULAR || condition == COND_OWNER) {
doTeleport(player, chat);
}
}
А уже в L2TeleporterInstance.java -> doTeleport:
final L2TeleportLocation list = TeleportLocationTable.getInstance().getRegion(val);
Ну собственно после многочисленных проверок, приходим
player.teleToLocation(list.getLocX(), list.getLocY(), list.getLocZ(), 20);
То есть, после передачи goto 1 мы лезем в xml и смотрим этот ид, а дальше берем координаты, цену, с нублесом.
Так как в TeleportLocationTable.java, как раз собирает эти xml и делает в нужные регионы, чтобы легко можно было сразу дернуть нужный по id.
bypass -h npc_%objectId%_ - вот это собирается в итоге в NpcHtmlMessage непонятно зачем. (лучше собирать все до, чем непонятно, что на этапе сбора будет после, когда начнем промацывать, как насобирает, намешает)
Я таких никогда не понимал, которые пытаются вычислять строки и длину, через циклы и т.д., когда можно было сделать просто банальную функцию, которая положит все нам в список, а дальше оперируй, как хочешь.
public static List<String> cmd(final String cmdFullString) {
final List<String> list = new ArrayList<>();
list.addAll(Arrays.asList(cmdFullString.split(" ")));
return list;
}
И размер и все можешь спокойно узнать и удалить любой индекс без каких либо проблем и сделать любой фильтр, чтобы получать корректные байпасы.
Ну и конечно же после нужных манипуляций со списком:
final boolean isCmd = switch(cmd.length) {
case 1 -> true;
case 2 -> false;
default -> false;
};
if(isCmd) {
//correct
}
Ну это конечно просто пример, задача лишь собирать корректные и правильные байпасы.