123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- package me.km.snuviscript;
- import me.km.KajetansMod;
- import me.km.api.Module;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.UUID;
- import net.minecraft.command.ICommandSender;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.util.text.TextFormatting;
- public class ScriptAPI extends Module
- {
- private final SnuviParser qparser;
-
- private int idCounter;
-
- private final HashMap<Integer, Script> questData;
- private final HashMap<UUID, Integer> playerQuestID;
-
- private final HashMap<Integer, Script> scripts;
-
- private final HashSet<String> scriptCommands;
-
- public ScriptAPI(String mname, String prefix, TextFormatting color)
- {
- super(mname, prefix, color);
-
- questData = new HashMap<>();
- playerQuestID = new HashMap<>();
- scripts = new HashMap<>();
- idCounter = 0;
- qparser = new SnuviParser();
- scriptCommands = new HashSet<>();
- }
-
-
-
-
-
- public SnuviParser getQuestParser()
- {
- return qparser;
- }
-
-
-
-
-
- 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();
- }
-
-
-
-
- private void addPlayerToQuest(EntityPlayer p, EntityPlayer p2, Script qd)
- {
- if(hasQuest(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.getBoolean("no-join"))
- {
- this.send(p, "Du darfst dieser Quest nicht beitreten.");
- return;
- }
- playerQuestID.put(p.getUniqueID(), qd.getId());
- qd.addPlayer(p);
- if(!qd.getBoolean("no-quest-msg"))
- {
- qparser.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)
- {
- addPlayerToQuest(p, p2, getQuestData(p2));
- }
-
- public void addPlayerToQuest(EntityPlayer p, Script qd)
- {
- addPlayerToQuest(p, null, qd);
- }
-
- public Collection<Script> getQuests()
- {
- return questData.values();
- }
-
- public boolean hasQuest(EntityPlayer p)
- {
- return playerQuestID.containsKey(p.getUniqueID());
- }
-
- public Script getQuestData(EntityPlayer p)
- {
- Integer id = playerQuestID.get(p.getUniqueID());
- if(id == null)
- {
- return null;
- }
- Script qd = questData.get(id);
- if(qd == null)
- {
- qparser.sendWarningToAllDevs("Die ungültige Quest von '" + p.getName() + "' wurde entfernt.");
- return null;
- }
- return qd;
- }
-
- public void removePlayerFromQuest(EntityPlayer p, Script qd)
- {
- if(qd == null)
- {
- return;
- }
- if(qd.removePlayer(p))
- {
- qd.setIsValid(false);
- questData.remove(qd.getId());
- }
- playerQuestID.remove(p.getUniqueID());
- }
-
- public void removeQuests()
- {
- questData.values().forEach(qd -> qd.setIsValid(false));
- questData.clear();
- playerQuestID.clear();
- }
-
-
-
-
- public Script getScript(int id)
- {
- return scripts.get(id);
- }
-
- public void removeScripts()
- {
- scripts.values().forEach(qd -> qd.setIsValid(false));
- scripts.clear();
- }
-
- public Collection<Script> getScripts()
- {
- return scripts.values();
- }
-
-
-
-
-
- public void add(Script qd, EntityPlayer p)
- {
- if(p != null)
- {
- questData.put(idCounter, qd);
- playerQuestID.put(p.getUniqueID(), qd.getId());
- }
- else
- {
- scripts.put(idCounter, qd);
- }
- idCounter++;
- }
-
- public boolean term(Script qd)
- {
- if(qd == null)
- {
- return false;
- }
- qd.setIsValid(false);
- int id = qd.getId();
- if(qd.isScript())
- {
- KajetansMod.scheduler.scheduleTask(() -> scripts.remove(id), 0);
- return scripts.containsKey(id);
- }
- qd.getPlayers().stream().forEach((player) ->
- {
- playerQuestID.remove(player.getUniqueID());
- });
- questData.remove(id);
- return true;
- }
-
-
-
-
- public void startQuest(ICommandSender sender, String chosenQuest, EntityPlayer p, Entity executor, String forcedQuest)
- {
-
-
- if(hasQuest(p))
- {
- this.send(sender, "Du hast bereits eine Quest.");
- return;
- }
- Script other = getQuests().stream()
- .filter(qd -> qd.getVar("add-if-name") != null)
- .filter(qd -> qd.getVar("add-if-name").equals(chosenQuest))
- .findAny().orElse(null);
- if(other != null)
- {
- addPlayerToQuest(p, other);
- return;
- }
- Script qd = new Script(idCounter, p, chosenQuest, sender);
- ScriptVars.setPlayerVars(qd, p);
- if(executor != null)
- {
- ScriptVars.setEntityVars(qd, executor);
- }
- if(forcedQuest != null)
- {
- qd.setVar("force", forcedQuest);
- }
- add(qd, p);
- qd.runCode();
- }
-
- public void startScript(ICommandSender sender, String chosenQuest)
- {
-
-
- Script qd = new Script(idCounter, null, chosenQuest, sender);
- add(qd, null);
- if(qd.isValid())
- {
- qd.runCode();
- }
- }
- }
|