refactor: use Invocable instead of ScriptEngine in script managers
- Make fields final - Inject event script variable earlier - Remove redundant fields
This commit is contained in:
@@ -44,7 +44,6 @@ import server.partyquest.MapleCarnivalFactory.MCSkill;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptException;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
@@ -59,11 +58,11 @@ import java.util.logging.Logger;
|
||||
* @author Ronan
|
||||
*/
|
||||
public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
private MapleReactor reactor;
|
||||
private ScriptEngine iv;
|
||||
private final MapleReactor reactor;
|
||||
private final Invocable iv;
|
||||
private ScheduledFuture<?> sprayTask = null;
|
||||
|
||||
public ReactorActionManager(MapleClient c, MapleReactor reactor, ScriptEngine iv) {
|
||||
public ReactorActionManager(MapleClient c, MapleReactor reactor, Invocable iv) {
|
||||
super(c);
|
||||
this.reactor = reactor;
|
||||
this.iv = iv;
|
||||
@@ -320,7 +319,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
public ScheduledFuture<?> schedule(final String methodName, final EventInstanceManager eim, long delay) {
|
||||
return TimerManager.getInstance().schedule(() -> {
|
||||
try {
|
||||
((Invocable) iv).invokeFunction(methodName, eim);
|
||||
iv.invokeFunction(methodName, eim);
|
||||
} catch (ScriptException | NoSuchMethodException ex) {
|
||||
Logger.getLogger(EventManager.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
@@ -330,7 +329,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
public ScheduledFuture<?> scheduleAtTimestamp(final String methodName, long timestamp) {
|
||||
return TimerManager.getInstance().scheduleAtTimestamp(() -> {
|
||||
try {
|
||||
((Invocable) iv).invokeFunction(methodName, (Object) null);
|
||||
iv.invokeFunction(methodName, (Object) null);
|
||||
} catch (ScriptException | NoSuchMethodException ex) {
|
||||
Logger.getLogger(EventManager.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
@@ -43,23 +43,25 @@ import java.util.Map;
|
||||
* @author Lerk
|
||||
*/
|
||||
public class ReactorScriptManager extends AbstractScriptManager {
|
||||
|
||||
private static ReactorScriptManager instance = new ReactorScriptManager();
|
||||
private static final ReactorScriptManager instance = new ReactorScriptManager();
|
||||
|
||||
private final Map<Integer, List<ReactorDropEntry>> drops = new HashMap<>();
|
||||
|
||||
public static ReactorScriptManager getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private Map<Integer, List<ReactorDropEntry>> drops = new HashMap<>();
|
||||
|
||||
public void onHit(MapleClient c, MapleReactor reactor) {
|
||||
try {
|
||||
ScriptEngine iv = getScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (iv == null) return;
|
||||
|
||||
ScriptEngine engine = getInvocableScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (engine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Invocable iv = (Invocable) engine;
|
||||
ReactorActionManager rm = new ReactorActionManager(c, reactor, iv);
|
||||
iv.put("rm", rm);
|
||||
((Invocable) iv).invokeFunction("hit");
|
||||
engine.put("rm", rm);
|
||||
iv.invokeFunction("hit");
|
||||
} catch (final NoSuchMethodException e) {} //do nothing, hit is OPTIONAL
|
||||
|
||||
catch (final ScriptException | NullPointerException e) {
|
||||
@@ -69,12 +71,15 @@ public class ReactorScriptManager extends AbstractScriptManager {
|
||||
|
||||
public void act(MapleClient c, MapleReactor reactor) {
|
||||
try {
|
||||
ScriptEngine iv = getScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (iv == null) return;
|
||||
|
||||
ScriptEngine engine = getInvocableScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (engine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Invocable iv = (Invocable) engine;
|
||||
ReactorActionManager rm = new ReactorActionManager(c, reactor, iv);
|
||||
iv.put("rm", rm);
|
||||
((Invocable) iv).invokeFunction("act");
|
||||
engine.put("rm", rm);
|
||||
iv.invokeFunction("act");
|
||||
} catch (final ScriptException | NoSuchMethodException | NullPointerException e) {
|
||||
FilePrinter.printError(FilePrinter.REACTOR + reactor.getId() + ".txt", e);
|
||||
}
|
||||
@@ -115,15 +120,18 @@ public class ReactorScriptManager extends AbstractScriptManager {
|
||||
|
||||
private void touching(MapleClient c, MapleReactor reactor, boolean touching) {
|
||||
try {
|
||||
ScriptEngine iv = getScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (iv == null) return;
|
||||
|
||||
ScriptEngine engine = getInvocableScriptEngine("reactor/" + reactor.getId() + ".js", c);
|
||||
if (engine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Invocable iv = (Invocable) engine;
|
||||
ReactorActionManager rm = new ReactorActionManager(c, reactor, iv);
|
||||
iv.put("rm", rm);
|
||||
engine.put("rm", rm);
|
||||
if (touching) {
|
||||
((Invocable) iv).invokeFunction("touch");
|
||||
iv.invokeFunction("touch");
|
||||
} else {
|
||||
((Invocable) iv).invokeFunction("untouch");
|
||||
iv.invokeFunction("untouch");
|
||||
}
|
||||
} catch (final ScriptException | NoSuchMethodException | NullPointerException ute) {
|
||||
FilePrinter.printError(FilePrinter.REACTOR + reactor.getId() + ".txt", ute);
|
||||
|
||||
Reference in New Issue
Block a user