Так что на самом деле это довольно просто сделать с Java, встроенным из коробки.
В Java есть такая вещь, которая называется 'ScriptEngineManager'.Чтобы использовать его, вы просто делаете следующее:
ScriptEngineManager sem = new ScriptEngineManager ();
ScriptEngine se = sem.getEngineByName ( "python" );
Теперь есть несколько способов запуска скрипта.Просто вызовите метод se.eval ()
.Вы можете указать это либо String, либо Reader, и таким образом он будет запускать скрипт.
Теперь, чтобы у него были некоторые переменные, просто используйте метод se.put
.Вам нужно дать это два параметра;a String and a Object.
Например:
se.put ( "entity", entity ); // with entity being defined earlier
Важно помнить, что этот менеджер сценариев не имеет встроенной поддержки Python.Для этого вам нужно либо создать собственный ScriptEngine, либо использовать стороннее программное обеспечение.Я нашел jython , и это, кажется, работает хорошо.Если вы скачаете автономную банку и поместите ее в свой путь к классам, это сработает.Нет необходимости в вызове какой-либо функции.
Теперь в скрипте вы можете вызывать любого открытого члена сущности.Все объекты, значения и эти подобъекты передаются в сценарий.
Мой конечный код:
Класс сущности
public class Entity {
String source =
"entity.loc_x += 1\n" +
"entity.loc_z = entity.loc_x";
ScriptEngine se;
loc_x = 0;
loc_y = 0;
loc_z = 0;
public Entity () {
ScriptEngineManager sem = new ScriptEngineManager ();
se = sem.getEngineByName ( "python" );
se.put ( "entity", this );
}
public void update () {
se.eval ( source );
}
}
Надеюсь, я кому-нибудь помог с этим.Было довольно весело возиться со всем этим.