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:
P0nk
2021-04-18 11:26:05 +02:00
parent 58e69654a2
commit 46c2d92082
10 changed files with 182 additions and 195 deletions

View File

@@ -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);
}

View File

@@ -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);