123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package me.km.snuviscript;
- import me.km.KajetansMod;
- import me.km.api.Module;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.UUID;
- import me.hammerle.code.SnuviParser;
- import me.hammerle.code.ScriptUtils;
- import me.hammerle.exceptions.PreScriptException;
- import net.minecraft.command.ICommandSender;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.util.text.TextFormatting;
- public class ScriptModule extends Module
- {
- private final SnuviParser parser;
- protected final MinecraftFunctions logger;
- private final HashMap<UUID, Integer> playerScript;
- private final HashSet<String> scriptCommands;
-
- public ScriptModule(String mname, String prefix, TextFormatting color)
- {
- super(mname, prefix, color);
- logger = new MinecraftFunctions();
- parser = new SnuviParser(logger, KajetansMod.scheduler);
- MinecraftFunctions.registerFunctions(parser);
-
- playerScript = new HashMap<>();
- scriptCommands = new HashSet<>();
- }
-
- public SnuviParser getSnuviParser()
- {
- return parser;
- }
-
- // -------------------------------------------------------------------------
- // custom commands
- // -------------------------------------------------------------------------
-
- public boolean isRegisteredScriptCommand(String s)
- {
- return scriptCommands.contains(s);
- }
-
- public void registerScriptCommand(String s)
- {
- scriptCommands.add(s);
- }
-
- public void unregisterScriptCommand(String s)
- {
- scriptCommands.remove(s);
- }
-
- public void clearScriptCommands()
- {
- scriptCommands.clear();
- }
-
- // -------------------------------------------------------------------------
- // Quest - Control
- // -------------------------------------------------------------------------
- private void addPlayerToScript(EntityPlayer p, EntityPlayer p2, PlayerScript qd)
- {
- if(hasScript(p))
- {
- this.send(p, "Du hast bereits eine Quest.");
- return;
- }
- if(qd == null)
- {
- if(p2 != null)
- {
- this.send(p, p2.getName() + " hat keine aktive Quest.");
- }
- return;
- }
- if(qd.getBooleanVar("no_join"))
- {
- this.send(p, "Du darfst dieser Quest nicht beitreten.");
- return;
- }
- playerScript.put(p.getUniqueID(), qd.getId());
- qd.addPlayer(p);
- if(!qd.getBooleanVar("no_quest_msg"))
- {
- MinecraftFunctions.sendMessageWithSuffix(qd, p.getName() + " ist deiner Quest beigetreten.");
- if(p2 != null)
- {
- this.send(p, "Du bist nun in der Quest von " + p2.getName() + ".");
- }
- else
- {
- this.send(p, "Du bist einer bereits laufenden Quest beigetreten.");
- }
- }
- qd.setVar("event", "player_join");
- ScriptVars.setPlayerVars(qd, p);
- qd.runCode();
- }
-
- public void addPlayerToPlayer(EntityPlayer p, EntityPlayer p2)
- {
- addPlayerToScript(p, p2, getScript(p2));
- }
-
- public void addPlayerToQuest(EntityPlayer p, PlayerScript qd)
- {
- addPlayerToScript(p, null, qd);
- }
-
- public boolean hasScript(EntityPlayer p)
- {
- return playerScript.containsKey(p.getUniqueID());
- }
-
- public PlayerScript getScript(EntityPlayer p)
- {
- Integer id = playerScript.get(p.getUniqueID());
- if(id == null)
- {
- return null;
- }
- try
- {
- PlayerScript qd = (PlayerScript) parser.getScript(id);
- if(qd == null)
- {
- playerScript.remove(p.getUniqueID());
- MinecraftFunctions.sendWarningToAllDevs("Die ungültige Quest von '" + p.getName() + "' wurde entfernt.");
- return null;
- }
- return qd;
- }
- catch(ClassCastException ex)
- {
- return null;
- }
- }
-
- public void removePlayerFromScript(EntityPlayer p, PlayerScript qd)
- {
- if(qd == null)
- {
- return;
- }
- if(qd.removePlayer(p))
- {
- parser.termSafe(qd);
- }
- playerScript.remove(p.getUniqueID());
- }
-
- public boolean isActive(String name)
- {
- return parser.getScripts().stream().anyMatch(sc -> sc.getName().equals(name));
- }
- // -----------------------
- // Quests / Scripts loading and starting
- // -----------------------
-
- public void startQuest(ICommandSender sender, String name, EntityPlayer p)
- {
- if(hasScript(p))
- {
- this.send(sender, "Du hast bereits eine Quest.");
- return;
- }
- PlayerScript other = (PlayerScript) parser.getScripts().stream()
- .filter(qd -> qd.getClass() == PlayerScript.class)
- .filter(qd -> qd.getVar("add_if_name") != null)
- .filter(qd -> qd.getVar("add_if_name").equals(name))
- .findAny().orElse(null);
- if(other != null)
- {
- addPlayerToQuest(p, other);
- return;
- }
- parser.startScript(PlayerScript.class, name, ScriptUtils.readCode("scripts/" + name, ".txt"), false, p);
- }
-
- public void startScript(ICommandSender sender, String name)
- {
- try
- {
- parser.startScript(MinecraftScript.class, name, ScriptUtils.readCode("scripts/" + name, ".txt"), true);
- }
- catch(PreScriptException ex)
- {
- logger.printException(ex);
- }
- }
- }
|