12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910 |
- package me.km.snuviscript;
- import com.google.common.collect.HashBiMap;
- import me.km.KajetansMod;
- import me.km.afk.AfkListener;
- import me.km.api.Module;
- import me.km.api.Utils;
- import me.km.environment.EnvironmentAPI;
- import me.km.exception.CodeTooLongException;
- import me.km.exception.EntityNotFoundException;
- import me.km.exception.GotoLabelNotFoundException;
- import me.km.exception.HoldCodeException;
- import me.km.exception.IfWithoutStatementException;
- import me.km.exception.IllegalItemStackStringException;
- import me.km.exception.IllegalStringException;
- import me.km.exception.IllegalStringLocationException;
- import me.km.exception.NoChildTreeException;
- import me.km.exception.PlayerNotFoundException;
- import me.km.nms.NmsUtilities;
- import me.km.plots.ProtectionBank;
- import me.km.table.TableAPI;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.time.ZonedDateTime;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Collections;
- import java.util.GregorianCalendar;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import java.util.function.BiFunction;
- import java.util.function.Consumer;
- import java.util.function.Function;
- import java.util.function.BiConsumer;
- import java.util.stream.Collectors;
- import me.km.api.Location;
- import me.km.api.TitleAPI;
- import me.km.dimensions.ModDimensions;
- import me.km.effects.EffectUtils;
- import me.km.inventory.InventoryUtils;
- import me.km.permissions.Permissions;
- import me.km.table.Table;
- import me.km.utils.ItemStackUtils;
- import me.km.utils.RecipeUtils;
- import me.km.utils.ReflectionUtils;
- import me.km.utils.SpecialBlockUtils;
- import net.minecraft.block.Block;
- import net.minecraft.block.state.IBlockState;
- import net.minecraft.command.ICommandSender;
- import net.minecraft.enchantment.Enchantment;
- import net.minecraft.enchantment.EnchantmentHelper;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.EntityHanging;
- import net.minecraft.entity.EntityLiving;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.item.EntityArmorStand;
- import net.minecraft.entity.item.EntityItemFrame;
- import net.minecraft.entity.monster.EntityCreeper;
- import net.minecraft.entity.passive.EntityVillager;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.entity.projectile.EntityPotion;
- import net.minecraft.inventory.EntityEquipmentSlot;
- import net.minecraft.inventory.IInventory;
- import net.minecraft.item.ItemStack;
- import net.minecraft.network.play.client.CPacketChatMessage;
- import net.minecraft.network.play.client.CPacketClientStatus;
- import net.minecraft.network.play.server.SPacketSpawnPosition;
- import net.minecraft.potion.Potion;
- import net.minecraft.potion.PotionUtils;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.tileentity.TileEntityChest;
- import net.minecraft.tileentity.TileEntitySign;
- import net.minecraft.util.DamageSource;
- import net.minecraft.util.EnumFacing;
- import net.minecraft.util.EnumParticleTypes;
- import net.minecraft.util.ResourceLocation;
- import net.minecraft.util.SoundCategory;
- import net.minecraft.util.SoundEvent;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.util.math.Vec3d;
- import net.minecraft.util.text.TextComponentString;
- import net.minecraft.world.World;
- import net.minecraft.world.WorldServer;
- public class SnuviParser
- {
- private final BiFunction<Object[], Script, Object>[] methods;
- private final HashBiMap<String, Integer> translator;
-
- public Integer translateMethod(String s)
- {
- return translator.get(s);
- }
-
- private void registerFunction(List<BiFunction<Object[], Script, Object>> list, String s, BiFunction<Object[], Script, Object> f)
- {
- translator.put(s, list.size());
- list.add(f);
- }
-
- private void registerConsumer(List<BiFunction<Object[], Script, Object>> list, String s, BiConsumer<Object[], Script> f)
- {
- translator.put(s, list.size());
- list.add((BiFunction<Object[], Script, Object>) (args, qd) ->
- {
- f.accept(args, qd);
- return 0;
- });
- }
-
- private void registerAlias(List<BiFunction<Object[], Script, Object>> list, String s, String original)
- {
- registerFunction(list, s, list.get(translator.get(original)));
- }
-
- @SuppressWarnings("unchecked")
- public SnuviParser()
- {
- ArrayList<BiFunction<Object[], Script, Object>> list = new ArrayList<>();
- translator = HashBiMap.create(300);
-
- registerFunction(list, "nothing", (args, qd) ->
- 0);
- registerConsumer(list, "godeeper", (args, qd) ->
- qd.goDeeper(false));
- registerConsumer(list, "benchmark", (args, qd) ->
- qd.printBenchmarks((ICommandSender) args[0]));
- registerConsumer(list, "togglebenchmark", (args, qd) ->
- qd.toggleBenchmark());
- registerConsumer(list, "clearbenchmark", (args, qd) ->
- qd.clearBenchmark());
- // -------------------------------------------------------------
- // Command-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "command.add", (args, qd) ->
- KajetansMod.scripts.registerScriptCommand(args[0].toString()));
- registerConsumer(list, "command.remove", (args, qd) ->
- KajetansMod.scripts.unregisterScriptCommand(args[0].toString()));
- registerFunction(list, "command.exists", (args, qd) ->
- KajetansMod.scripts.isRegisteredScriptCommand(args[0].toString()));
- registerConsumer(list, "command.clear", (args, qd) ->
- KajetansMod.scripts.clearScriptCommands());
-
- // -------------------------------------------------------------
- // Permission-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "perm.clear", (args, qd) ->
- KajetansMod.perms.clear());
- registerConsumer(list, "perm.registergroup", (args, qd) ->
- KajetansMod.perms.registerGroupPermission(ScriptUtils.getInt(args[0]), args[1].toString()));
- registerConsumer(list, "perm.registerplayer", (args, qd) ->
- KajetansMod.perms.registerPlayerGroup(UUID.fromString(args[0].toString()), ScriptUtils.getInt(args[1])));
-
- // -------------------------------------------------------------
- // Title-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "title.settime", (args, qd) ->
- TitleAPI.setTitleTime((EntityPlayerMP) args[0], ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2]), ScriptUtils.getInt(args[3])));
- registerConsumer(list, "title.clear", (args, qd) ->
- TitleAPI.clearTitle((EntityPlayerMP) args[0]));
- registerConsumer(list, "title.reset", (args, qd) ->
- TitleAPI.resetTitle((EntityPlayerMP) args[0]));
- registerConsumer(list, "title.send", (args, qd) ->
- TitleAPI.setTitle((EntityPlayerMP) args[0], ScriptUtils.connect(args, 1)));
- registerConsumer(list, "title.setsub", (args, qd) ->
- TitleAPI.setSubTitle((EntityPlayerMP) args[0], ScriptUtils.connect(args, 1)));
-
- // -------------------------------------------------------------
- // Villager-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "villager.showtrades", (args, qd) ->
- ((EntityPlayer) args[0]).displayVillagerTradeGui(((EntityVillager) args[1])));
-
- // -------------------------------------------------------------
- // Player-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "player.getitemamount", (args, qd) ->
- InventoryUtils.searchInventoryFor(((EntityPlayer) args[0]).inventory, (ItemStack) args[2], (boolean) args[1]));
- registerFunction(list, "player.removeitem", (args, qd) ->
- removeItem(args));
- registerFunction(list, "player.giveitem", (args, qd) ->
- giveItem(args));
- registerConsumer(list, "player.shootprojectile", (args, qd) ->
- EffectUtils.launchProjectile((EntityPlayer) args[0], getClass(args[1].toString()), ScriptUtils.getDouble(args[2]), args[3]));
- registerConsumer(list, "player.respawn", (args, qd) ->
- ((EntityPlayerMP) args[0]).connection.processClientStatus(new CPacketClientStatus(CPacketClientStatus.State.PERFORM_RESPAWN)));
- registerConsumer(list, "player.inventorytolist", (args, qd) ->
- qd.setVar(args[0], ((EntityPlayer) args[1]).inventory.mainInventory));
- registerFunction(list, "player.getamount", (args, qd) ->
- KajetansMod.server.getCurrentPlayerCount());
- registerFunction(list, "player.getnearest", (args, qd) ->
- Utils.getNearestPlayer(((Location) args[0]).getWorld(), ((Location) args[0]).getPos()));
- registerConsumer(list, "player.say", (args, qd) ->
- ((EntityPlayerMP) args[0]).connection.processChatMessage(new CPacketChatMessage(ScriptUtils.connect(args, 1))));
- registerFunction(list, "player.isafk", (args, qd) ->
- KajetansMod.afkManager.getEvent(AfkListener.class).isAfk(((EntityPlayer) args[0])));
- registerConsumer(list, "player.speak", (args, qd) ->
- sendMessageToGroup(args[0], qd, "§7[§r" + args[1] + "§7] " + ScriptUtils.connect(args, 2)));
- registerFunction(list, "player.getquestleader", (args, qd) ->
- getQuestLeader(qd));
- registerConsumer(list, "player.setcompass", (args, qd) ->
- ((EntityPlayerMP) args[0]).connection.sendPacket(new SPacketSpawnPosition(((Location) args[1]).getBlockPos())));
- registerFunction(list, "player.gethunger", (args, qd) ->
- ((EntityPlayer) args[0]).getFoodStats().getFoodLevel());
- registerConsumer(list, "player.sethunger", (args, qd) ->
- ((EntityPlayer) args[0]).getFoodStats().setFoodLevel(ScriptUtils.getInt(args[1])));
- registerFunction(list, "player.getsaturation", (args, qd) ->
- ReflectionUtils.getSaturation(((EntityPlayer) args[0]).getFoodStats()));
- registerConsumer(list, "player.setsaturation", (args, qd) ->
- ReflectionUtils.setSaturation(((EntityPlayer) args[0]).getFoodStats(), ScriptUtils.getFloat(args[1])));
- registerFunction(list, "player.getname", (args, qd) ->
- getName(args));
- registerFunction(list, "player.getfullname", (args, qd) ->
- KajetansMod.chatManager.getFullName((EntityPlayer) args[0]));
- registerFunction(list, "player.getuuid", (args, qd) ->
- getUuid(args));
- registerFunction(list, "player.getip", (args, qd) ->
- ((EntityPlayerMP) args[0]).connection.netManager.getRemoteAddress().toString());
- registerFunction(list, "player.iscreative", (args, qd) ->
- ((EntityPlayer) args[0]).isCreative());
- registerFunction(list, "player.isspectator", (args, qd) ->
- ((EntityPlayer) args[0]).isSpectator());
- registerFunction(list, "player.issurvival", (args, qd) ->
- !((EntityPlayer) args[0]).isCreative() && !((EntityPlayer) args[0]).isSpectator());
- registerFunction(list, "player.isadventure", (args, qd) ->
- !((EntityPlayer) args[0]).capabilities.allowEdit);
- registerFunction(list, "player.hasfly", (args, qd) ->
- ((EntityPlayer) args[0]).capabilities.allowFlying);
- registerFunction(list, "player.getlastdamager", (args, qd) ->
- getLastDamager(args));
- registerConsumer(list, "player.settag", (args, qd) ->
- setTag(args));
- registerFunction(list, "player.gettag", (args, qd) ->
- getTag(args));
- registerConsumer(list, "player.dropinventory", (args, qd) ->
- dropInventory(args));
- registerFunction(list, "player.gettarget", (args, qd) ->
- Utils.getPlayerTarget((EntityPlayer) args[0], ScriptUtils.getInt(args[1])));
- registerFunction(list, "player.hasquest", (args, qd) ->
- KajetansMod.scripts.hasQuest((EntityPlayer) args[0]));
- registerConsumer(list, "player.action", (args, qd) ->
- sendToActionBar(args, qd));
- registerConsumer(list, "player.kick", (args, qd) ->
- kickPlayerFromQuest(args, qd));
- registerConsumer(list, "player.playsound", (args, qd) ->
- playSoundPlayer(args));
- registerFunction(list, "player.getbedspawn", (args, qd) ->
- ((EntityPlayer) args[0]).getBedLocation(ScriptUtils.getInt(args[1])));
- registerConsumer(list, "player.setbedspawn", (args, qd) ->
- ((EntityPlayer) args[0]).bedLocation = ((Location) args[1]).getBlockPos());
- registerConsumer(list, "player.damageitem", (args, qd) ->
- ((EntityPlayer) args[0]).getHeldItemMainhand().damageItem(ScriptUtils.getInt(args[1]), (EntityPlayer) args[0]));
- // -------------------------------------------------------------
- // Players-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "players.tolist", (args, qd) ->
- qd.setVar(args[0].toString(), Arrays.asList(KajetansMod.server.getOnlinePlayerNames())));
- registerConsumer(list, "players.toworldlist", (args, qd) ->
- qd.setVar(args[0].toString(), new ArrayList(ModDimensions.getWorldFromName(args[1].toString()).playerEntities)));
- registerConsumer(list, "players.near", (args, qd) ->
- qd.setVar(args[0].toString(), Utils.getNearbyEntities(((Location) args[1]).getWorld(), ((Location) args[1]).getPos(), ScriptUtils.getDouble(args[2]), EntityPlayer.class).stream().map(p -> p.getName()).collect(Collectors.toList())));
- // -------------------------------------------------------------
- // Rank-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "rank.get", (args, qd) ->
- qd.setVar(args[0], KajetansMod.chatManager.getRanks((EntityPlayer) args[1])));
- registerConsumer(list, "rank.register", (args, qd) ->
- KajetansMod.chatManager.registerRank(args[0].toString(), ScriptUtils.getInt(args[1]), args[2].toString()));
- registerConsumer(list, "rank.player", (args, qd) ->
- KajetansMod.chatManager.registerPlayerRank(UUID.fromString(args[0].toString()), args[1].toString()));
- registerConsumer(list, "rank.clear", (args, qd) ->
- KajetansMod.chatManager.clearRanks());
-
- // -------------------------------------------------------------
- // Custom-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "custom.registershapelessrecipe", (args, qd) ->
- registerShapelessRecipe(args));
- registerConsumer(list, "custom.registershapedrecipe", (args, qd) ->
- registerShapedRecipe(args));
- registerConsumer(list, "custom.registerfurnacerecipe", (args, qd) ->
- RecipeUtils.registerFurnaceRecipe((ItemStack) args[0], (ItemStack) args[1]));
- registerConsumer(list, "custom.clearrecipes", (args, qd) ->
- RecipeUtils.clearRecipes());
-
-
- // -------------------------------------------------------------
- // World-Bibliothek
- // -------------------------------------------------------------
-
- registerAlias(list, "world.getplayers", "players.toworldlist");
- registerConsumer(list, "world.setskills", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).skills = (boolean) args[1]);
- registerConsumer(list, "world.setblockprotections", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).blockProtection = (boolean) args[1]);
- registerConsumer(list, "world.setdefaultenchanting", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).defaultEnchanting = (boolean) args[1]);
- registerConsumer(list, "world.setpvpprotection", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).pvpProtection = (boolean) args[1]);
- registerConsumer(list, "world.setstatuseffects", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).statusEffects = (boolean) args[1]);
- registerConsumer(list, "world.setmanabar", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).manabar = (boolean) args[1]);
- registerConsumer(list, "world.setscrolls", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).scrolls = (boolean) args[1]);
- registerConsumer(list, "world.setdefaultproducing", (args, qd) ->
- KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).defaultProducing = (boolean) args[1]);
-
- // -------------------------------------------------------------
- // Item-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "item.drop", (args, qd) ->
- dropItem(args));
- registerFunction(list, "item.gettype", (args, qd) ->
- ((ItemStack) args[0]).getItem().getRegistryName());
- registerFunction(list, "item.getdata", (args, qd) ->
- ((ItemStack) args[0]).getMetadata());
- registerConsumer(list, "item.setdata", (args, qd) ->
- ((ItemStack) args[0]).setItemDamage(ScriptUtils.getInt(args[1])));
- registerFunction(list, "item.getamount", (args, qd) ->
- ((ItemStack) args[0]).getCount());
- registerConsumer(list, "item.setamount", (args, qd) ->
- ((ItemStack) args[0]).setCount(ScriptUtils.getInt(args[1])));
- registerFunction(list, "item.getname", (args, qd) ->
- ((ItemStack) args[0]).getDisplayName());
- registerConsumer(list, "item.setname", (args, qd) ->
- ((ItemStack) args[0]).setStackDisplayName(ScriptUtils.connect(args, 1)));
- registerConsumer(list, "item.getlore", (args, qd) ->
- qd.setVar(args[0], ItemStackUtils.getLore((ItemStack) args[1])));
- registerConsumer(list, "item.setlore", (args, qd) ->
- ItemStackUtils.setLore((ItemStack) args[0], (List<String>) args[1]));
- registerConsumer(list, "item.addlore", (args, qd) ->
- ItemStackUtils.addLore((ItemStack) args[0], ScriptUtils.connect(args, 2), ScriptUtils.getInt(args[1])));
- registerFunction(list, "item.getenchantlevel", (args, qd) ->
- EnchantmentHelper.getEnchantmentLevel(Enchantment.getEnchantmentByLocation(args[1].toString()), (ItemStack) args[0]));
- registerConsumer(list, "item.setcooldown", (args, qd) ->
- ((EntityPlayer) args[0]).getCooldownTracker().setCooldown(((ItemStack) args[1]).getItem(), ScriptUtils.getInt(args[2])));
- registerFunction(list, "item.gettooltype", (args, qd) ->
- Utils.getToolType((ItemStack) args[0]));
- // -------------------------------------------------------------
- // Location-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "loc.distance", (args, qd) ->
- ((Location) args[0]).getPos().distanceTo(((Location) args[1]).getPos()));
- registerFunction(list, "loc.mod", (args, qd) ->
- ((Location) args[0]).add(ScriptUtils.getDouble(args[1]), ScriptUtils.getDouble(args[2]), ScriptUtils.getDouble(args[3])));
- registerFunction(list, "loc.getcoord", (args, qd) ->
- getCoordOfLocation(args));
- registerFunction(list, "loc.gettime", (args, qd) ->
- ((Long) ((Location) args[0]).getWorld().getWorldTime()).intValue());
- registerFunction(list, "loc.hasstorm", (args, qd) ->
- ((Location) args[0]).getWorld().isRaining());
- registerFunction(list, "loc.isbetween", (args, qd) ->
- isBetween(args));
- // -------------------------------------------------------------
- // Block-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "block.gettype", (args, qd) ->
- ((Location) args[0]).getWorld().getBlockState(((Location) args[0]).getBlockPos()).getBlock().getRegistryName());
- registerFunction(list, "block.getdata", (args, qd) ->
- getBlockData((Location) args[0]));
- registerConsumer(list, "block.clone", (args, qd) ->
- cloneBlock(args));
- registerConsumer(list, "block.set", (args, qd) ->
- setBlock(args, qd));
- registerConsumer(list, "block.set2", (args, qd) ->
- setBlockWithData(args, qd));
- registerConsumer(list, "block.setsign", (args, qd) ->
- setSign(args));
- registerFunction(list, "block.getsign", (args, qd) ->
- getSign(args));
- registerFunction(list, "block.issolid", (args, qd) ->
- getBlockState((Location) args[0]).isFullCube());
- registerFunction(list, "block.tostack", (args, qd) ->
- getStackFromBlock((Location) args[0]));
- registerFunction(list, "block.getitemamount", (args, qd) ->
- getItemAmountChest(args));
- registerFunction(list, "block.additem", (args, qd) ->
- addItemAmountChest(args));
- registerFunction(list, "block.subitem", (args, qd) ->
- removeItemAmountChest(args));
- // -------------------------------------------------------------
- // Event-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "event.addloc", (args, qd) ->
- qd.addLocation(ScriptUtils.roundLocation((Location) args[0])));
- registerConsumer(list, "event.removeloc", (args, qd) ->
- qd.removeLocation(ScriptUtils.roundLocation((Location) args[0])));
- registerConsumer(list, "event.clearlocs", (args, qd) ->
- qd.clearLocations());
- registerConsumer(list, "event.load", (args, qd) ->
- qd.loadEvent(args[0].toString()));
- registerConsumer(list, "event.unload", (args, qd) ->
- qd.unloadEvent(args[0].toString()));
- // -------------------------------------------------------------
- // Skill-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "skill.register", (args, qd) ->
- KajetansMod.skills.registerSkill(ScriptUtils.getInt(args[0]), (ItemStack) args[1], me.km.effects.Effect.valueOf(args[2].toString()), args[3].toString(), args[4].toString()));
- registerConsumer(list, "skill.clear", (args, qd) ->
- KajetansMod.skills.clearSkills());
-
- // -------------------------------------------------------------
- // Job-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "job.getlevel", (args, qd) ->
- KajetansMod.jobs.getLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
- registerConsumer(list, "job.addlevel", (args, qd) ->
- KajetansMod.jobs.addLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
- registerConsumer(list, "job.setlevel", (args, qd) ->
- KajetansMod.jobs.setLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
- registerFunction(list, "job.getxp", (args, qd) ->
- KajetansMod.jobs.getXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
- registerConsumer(list, "job.addxp", (args, qd) ->
- KajetansMod.jobs.addXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
- registerConsumer(list, "job.setxp", (args, qd) ->
- KajetansMod.jobs.setXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
- registerConsumer(list, "job.registerjob", (args, qd) ->
- KajetansMod.jobs.registerJob(ScriptUtils.getByte(args[0]), ScriptUtils.connect(args, 1)));
- registerConsumer(list, "job.registerrecipe", (args, qd) ->
- KajetansMod.jobs.registerRecipe(ScriptUtils.getByte(args[0]), ScriptUtils.getItem(args[1].toString()), ScriptUtils.getByte(args[2])));
- registerConsumer(list, "job.registermaterial", (args, qd) ->
- KajetansMod.jobs.registerPreferedBlock(ScriptUtils.getByte(args[0]), Block.getBlockFromName(args[1].toString())));
- registerConsumer(list, "job.registerskill", (args, qd) ->
- KajetansMod.jobs.registerSkill(ScriptUtils.getByte(args[0]), KajetansMod.skills.getSkill(ScriptUtils.getInt(args[1])), ScriptUtils.getByte(args[2]), ScriptUtils.getByte(args[3])));
- registerFunction(list, "job.getamount", (args, qd) ->
- KajetansMod.jobs.getNumberOfJobs());
- registerFunction(list, "job.getname", (args, qd) ->
- KajetansMod.jobs.getJobName(ScriptUtils.getByte(args[0])));
- registerFunction(list, "job.geteffectlevel", (args, qd) ->
- EffectUtils.getEffectLevel((EntityPlayer) args[0], me.km.effects.Effect.valueOf(args[1].toString())));
- registerFunction(list, "job.hasjob", (args, qd) ->
- KajetansMod.jobs.hasJob((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
- registerFunction(list, "job.hasrecipe", (args, qd) ->
- KajetansMod.jobs.hasRecipe((EntityPlayer) args[0], ScriptUtils.getItem(args[1].toString())));
- registerConsumer(list, "job.getjobs", (args, qd) ->
- qd.setVar(args[0], KajetansMod.jobs.getJobs((EntityPlayer) args[1])));
- registerFunction(list, "job.isregmaterial", (args, qd) ->
- KajetansMod.jobs.isPreferedMaterial((EntityPlayer) args[0],Block.getBlockFromName(args[1].toString())));
- registerConsumer(list, "job.setjob", (args, qd) ->
- KajetansMod.jobs.setJob((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), (boolean) args[2]));
- registerConsumer(list, "job.reset", (args, qd) ->
- KajetansMod.jobs.resetAll());
- // -------------------------------------------------------------
- // Bit-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "bit.rightshift", (args, qd) ->
- ScriptUtils.getInt(args[0]) >> ScriptUtils.getInt(args[1]));
- registerFunction(list, "bit.leftshift", (args, qd) ->
- ScriptUtils.getInt(args[0]) << ScriptUtils.getInt(args[1]));
- registerFunction(list, "bit.and", (args, qd) ->
- ScriptUtils.getInt(args[0]) & ScriptUtils.getInt(args[1]));
- registerFunction(list, "bit.or", (args, qd) ->
- ScriptUtils.getInt(args[0]) | ScriptUtils.getInt(args[1]));
- registerFunction(list, "bit.xor", (args, qd) ->
- ScriptUtils.getInt(args[0]) ^ ScriptUtils.getInt(args[1]));
- registerFunction(list, "bit.invert", (args, qd) ->
- ~ScriptUtils.getInt(args[0]));
- registerFunction(list, "bit.set", (args, qd) ->
- ScriptUtils.getInt(args[0]) | (1 << ScriptUtils.getInt(args[1])));
- registerFunction(list, "bit.get", (args, qd) ->
- (ScriptUtils.getInt(args[0]) & (1 << ScriptUtils.getInt(args[1]))) != 0);
- // -------------------------------------------------------------
- // Mathe-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "math.mod", (args, qd) ->
- numberHandler(args[0], args[1], (a, b) -> a % b, (a, b) -> a % b, (a, b) -> a % b));
- registerFunction(list, "math.abs", (args, qd) ->
- numberHandler(args[0], (a) -> Math.abs(a), (a) -> Math.abs(a), (a) -> Math.abs(a)));
- registerFunction(list, "math.pow", (args, qd) ->
- Math.pow(ScriptUtils.getDouble(args[0]), ScriptUtils.getDouble(args[1])));
- registerFunction(list, "math.root", (args, qd) ->
- Math.pow(ScriptUtils.getDouble(args[0]), 1d / ScriptUtils.getDouble(args[1])));
- registerFunction(list, "math.sin", (args, qd) ->
- Math.sin(ScriptUtils.getDouble(args[0])));
- registerFunction(list, "math.cos", (args, qd) ->
- Math.cos(ScriptUtils.getDouble(args[0])));
- registerFunction(list, "math.e", (args, qd) ->
- Math.E);
- registerFunction(list, "math.pi", (args, qd) ->
- Math.PI);
- registerFunction(list, "math.ln", (args, qd) ->
- Math.log(ScriptUtils.getDouble(args[0])));
- registerFunction(list, "math.log", (args, qd) ->
- Math.log10(ScriptUtils.getDouble(args[0])));
- registerFunction(list, "math.random", (args, qd) ->
- Utils.randomInt(ScriptUtils.getInt(args[0]), ScriptUtils.getInt(args[1])));
- registerFunction(list, "math.round", (args, qd) ->
- round(args[0]));
- registerFunction(list, "math.rounddown", (args, qd) ->
- roundDown(args[0]));
- registerFunction(list, "math.roundup", (args, qd) ->
- roundUp(args[0]));
- registerFunction(list, "math.roundcomma", (args, qd) ->
- new BigDecimal(ScriptUtils.getDouble(args[0])).setScale(ScriptUtils.getInt(args[1]), RoundingMode.HALF_UP).doubleValue());
- // -------------------------------------------------------------
- // Entity - Befehle
- // -------------------------------------------------------------
- registerFunction(list, "entity.getlocation", (args, qd) ->
- new Location(((Entity) args[0])));
- registerConsumer(list, "entity.damage", (args, qd) ->
- damageEntity(args));
- registerFunction(list, "entity.gethealth", (args, qd) ->
- ((EntityLivingBase) args[0]).getHealth());
- registerConsumer(list, "entity.sethealth", (args, qd) ->
- ((EntityLivingBase) args[0]).setHealth(ScriptUtils.getFloat(args[1])));
- registerConsumer(list, "entity.setname", (args, qd) ->
- nameEntity(args));
- registerConsumer(list, "entity.throw", (args, qd) ->
- Utils.setVelocity((Entity) args[0], ScriptUtils.getDouble(args[1]), ScriptUtils.getDouble(args[2]), ScriptUtils.getDouble(args[3])));
- registerConsumer(list, "entity.teleport", (args, qd) ->
- Utils.teleportEntity((Entity) args[0], (Location) args[1]));
- registerConsumer(list, "entity.setequip", (args, qd) ->
- setEntityEquip(args));
- registerFunction(list, "entity.getequip", (args, qd) ->
- getEntityEquip(args));
- registerConsumer(list, "entity.removeall", (args, qd) ->
- removeEntities(args));
- registerConsumer(list, "entity.remove", (args, qd) ->
- ((Entity) args[0]).setDead());
- registerConsumer(list, "entity.setinvulnerable", (args, qd) ->
- ((Entity) args[0]).setEntityInvulnerable((boolean) args[1]));
- registerConsumer(list, "entity.setsilent", (args, qd) ->
- ((Entity) args[0]).setSilent((boolean) args[1]));
- registerConsumer(list, "entity.hide", (args, qd) ->
- ((Entity) args[0]).setInvisible(true));
- registerConsumer(list, "entity.show", (args, qd) ->
- ((Entity) args[0]).setInvisible(false));
- registerConsumer(list, "entity.ride", (args, qd) ->
- ((Entity) args[0]).startRiding(((Entity) args[1])));
- registerConsumer(list, "entity.setvars", (args, qd) ->
- ScriptVars.setEntityVars(qd, Utils.getNearestEntity(((Location) args[0]).getWorld(), ((Location) args[0]).getPos(), 3, (Class<? extends Entity>) getClass("net.minecraft.entity." + args[1]))));
- registerConsumer(list, "entity.addeffect", (args, qd) ->
- EffectUtils.addPotionTo((EntityLivingBase) args[0], Potion.getPotionFromResourceLocation(args[1].toString()), ScriptUtils.getInt(args[2]), ScriptUtils.getInt(args[3])));
- registerFunction(list, "entity.haseffect", (args, qd) ->
- ((EntityLivingBase) args[0]).isPotionActive(Potion.getPotionFromResourceLocation(args[1].toString())));
- registerConsumer(list, "entity.goto", (args, qd) ->
- NmsUtilities.walkTo((EntityLiving) args[0], ((Location) args[1]).getPos(), ScriptUtils.getDouble(args[2])));
- registerConsumer(list, "entity.explode", (args, qd) ->
- ((EntityCreeper) args[0]).ignite());
- registerConsumer(list, "entity.spawnitemframe", (args, qd) ->
- spawnItemFrame(args));
- registerFunction(list, "entity.getitemframe", (args, qd) ->
- Utils.getNearestEntity(((Location) args[0]).getWorld(), ((Location) args[0]).getPos().addVector(0.5, 0, 0.5), 1, EntityItemFrame.class).getDisplayedItem());
- registerFunction(list, "entity.getpotiontype", (args, qd) ->
- getPotionType(args));
- registerConsumer(list, "entity.setgravity", (args, qd) ->
- ((Entity) args[0]).setNoGravity(!(boolean) args[1]));
- // -------------------------------------------------------------
- // Status-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "status.getmana", (args, qd) ->
- EnvironmentAPI.getMana(((EntityPlayer) args[0])));
- registerFunction(list, "status.getcold", (args, qd) ->
- EnvironmentAPI.getCold(((EntityPlayer) args[0])));
- registerFunction(list, "status.getenergy", (args, qd) ->
- EnvironmentAPI.getEnergy(((EntityPlayer) args[0])));
- registerFunction(list, "status.getthirst", (args, qd) ->
- EnvironmentAPI.getThirst(((EntityPlayer) args[0])));
- registerConsumer(list, "status.changemange", (args, qd) ->
- EnvironmentAPI.changeMana(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
- registerConsumer(list, "status.changecold", (args, qd) ->
- EnvironmentAPI.changeCold(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
- registerConsumer(list, "status.changeenergie", (args, qd) ->
- EnvironmentAPI.changeEnergy(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
- registerConsumer(list, "status.changethirst", (args, qd) ->
- EnvironmentAPI.changeThirst(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
- registerConsumer(list, "status.resetmana", (args, qd) ->
- EnvironmentAPI.resetMana(((EntityPlayer) args[0])));
- registerConsumer(list, "status.resetcold", (args, qd) ->
- EnvironmentAPI.resetCold(((EntityPlayer) args[0])));
- registerConsumer(list, "status.resetenergy", (args, qd) ->
- EnvironmentAPI.resetEnergy(((EntityPlayer) args[0])));
- registerConsumer(list, "status.resetthirst", (args, qd) ->
- EnvironmentAPI.resetThirst(((EntityPlayer) args[0])));
- registerConsumer(list, "status.gettemperature", (args, qd) ->
- EnvironmentAPI.getTemperature(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
- // -------------------------------------------------------------
- // Listen-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "list.new", (args, qd) ->
- qd.setVar(args[0], new ArrayList<>()));
- registerFunction(list, "list.exists", (args, qd) ->
- args[0] instanceof List);
- registerConsumer(list, "list.add", (args, qd) ->
- ((List) args[0]).add(args[1]));
- registerConsumer(list, "list.remove", (args, qd) ->
- ((List) args[0]).remove(args[1]));
- registerConsumer(list, "list.removeindex", (args, qd) ->
- ((List) args[0]).remove(ScriptUtils.getInt(args[1])));
- registerFunction(list, "list.contains", (args, qd) ->
- ((List) args[0]).contains(args[1]));
- registerFunction(list, "list.getsize", (args, qd) ->
- ((List) args[0]).size());
- registerFunction(list, "list.getindex", (args, qd) ->
- ((List) args[0]).get(ScriptUtils.getInt(args[1])));
- registerConsumer(list, "list.setindex", (args, qd) ->
- ((List) args[0]).set(ScriptUtils.getInt(args[1]), args[2]));
- registerConsumer(list, "list.clear", (args, qd) ->
- ((List) args[0]).clear());
- registerFunction(list, "list.getindexof", (args, qd) ->
- ((List) args[0]).indexOf(args[1]));
- registerConsumer(list, "list.sort", (args, qd) ->
- sortList((List<Object>) args[0], qd));
- registerConsumer(list, "list.reverse", (args, qd) ->
- Collections.reverse((List<Object>) args[0]));
- registerConsumer(list, "list.shuffle", (args, qd) ->
- Collections.shuffle((List<Object>) args[0]));
- // -------------------------------------------------------------
- // Map-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "map.new", (args, qd) ->
- qd.setVar(args[0], new HashMap<>()));
- registerFunction(list, "map.exists", (args, qd) ->
- args[0] instanceof HashMap);
- registerConsumer(list, "map.add", (args, qd) ->
- ((HashMap) args[0]).put(args[1], args[2]));
- registerConsumer(list, "map.remove", (args, qd) ->
- ((HashMap) args[0]).remove(args[1]));
- registerFunction(list, "map.contains", (args, qd) ->
- ((HashMap) args[0]).containsKey(args[1]));
- registerFunction(list, "map.getsize", (args, qd) ->
- ((HashMap) args[0]).size());
- registerFunction(list, "map.get", (args, qd) ->
- ((HashMap) args[0]).get(args[1]));
- registerConsumer(list, "map.clear", (args, qd) ->
- ((HashMap) args[0]).clear());
-
- // -------------------------------------------------------------
- // Set-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "set.new", (args, qd) ->
- qd.setVar(args[0], new HashSet<>()));
- registerFunction(list, "set.exists", (args, qd) ->
- args[0] instanceof HashSet);
- registerConsumer(list, "set.add", (args, qd) ->
- ((HashSet) args[0]).add(args[1]));
- registerConsumer(list, "set.remove", (args, qd) ->
- ((HashSet) args[0]).remove(args[1]));
- registerFunction(list, "set.contains", (args, qd) ->
- ((HashSet) args[0]).contains(args[1]));
- registerFunction(list, "set.getsize", (args, qd) ->
- ((HashSet) args[0]).size());
- // -------------------------------------------------------------
- // GMap-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "gmap.removeall", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).removeMap(args[0].toString()));
- registerConsumer(list, "gmap.add", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).addMapElement(args[0].toString(), args[1].toString(), args[2].toString()));
- registerConsumer(list, "gmap.remove", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).removeMapElement(args[0].toString(), args[1].toString()));
- registerConsumer(list, "gmap.totable", (args, qd) ->
- qd.setVar(args[0], KajetansMod.scripts.getDataBank(ScriptBank.class).getGlobalMapAsTable(args[1].toString())));
- registerFunction(list, "gmap.get", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).getMapValue(args[0].toString(), args[1].toString()));
-
- // -------------------------------------------------------------
- // GDMap-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "gdmap.removeall", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).removeDualMap(args[0].toString()));
- registerConsumer(list, "gdmap.add", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).addDualMapElement(args[0].toString(), args[1].toString(), args[2].toString(), args[3].toString()));
- registerConsumer(list, "gdmap.remove", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).removeDualMapElement(args[0].toString(), args[1].toString(), args[2].toString()));
- registerConsumer(list, "gdmap.totable", (args, qd) ->
- qd.setVar(args[0], KajetansMod.scripts.getDataBank(ScriptBank.class).getGlobalDualMapAsTable(args[1].toString(), args[2].toString())));
- registerFunction(list, "gdmap.get", (args, qd) ->
- KajetansMod.scripts.getDataBank(ScriptBank.class).getDualMapValue(args[0].toString(), args[1].toString(), args[2].toString()));
- // -------------------------------------------------------------
- // Table-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "table.printstart", (args, qd) ->
- sendMessageToGroup(args[0], qd, TableAPI.getTableStart(ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2]), args[3].toString())));
- registerConsumer(list, "table.printmiddle", (args, qd) ->
- sendMessageToGroup(args[0], qd, TableAPI.getTableMiddle(ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2]), args[3].toString())));
- registerConsumer(list, "table.print", (args, qd) ->
- sendMessageToGroup(args[0], qd, TableAPI.getTable(ScriptUtils.getInt(args[1]), args[2].toString(), Arrays.stream(args, 3, args.length).map(o -> o.toString()).collect(Collectors.toList()))));
- registerConsumer(list, "table.printend", (args, qd) ->
- sendMessageToGroup(args[0], qd, TableAPI.getTableEnd(ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2]), args[3].toString())));
- registerConsumer(list, "table.new", (args, qd) ->
- qd.setVar(args[0], new Table(ScriptUtils.getInt(args[1]))));
- registerConsumer(list, "table.frommap", (args, qd) ->
- qd.setVar(args[0], new Table((Map<Object, Object>) args[1])));
- registerConsumer(list, "table.sort", (args, qd) ->
- ((Table) args[0]).sort());
- registerConsumer(list, "table.reverse", (args, qd) ->
- ((Table) args[0]).reverse());
- registerConsumer(list, "table.shuffle", (args, qd) ->
- ((Table) args[0]).shuffle());
- registerConsumer(list, "table.clear", (args, qd) ->
- ((Table) args[0]).clear());
- registerConsumer(list, "table.addrow", (args, qd) ->
- ((Table) args[0]).addRow(Arrays.copyOfRange(args, 1, args.length)));
- registerConsumer(list, "table.removerow", (args, qd) ->
- ((Table) args[0]).removeRow(ScriptUtils.getInt(args[1])));
- registerFunction(list, "table.get", (args, qd) ->
- ((Table) args[0]).getElement(ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2])));
- registerFunction(list, "table.getindexof", (args, qd) ->
- ((Table) args[0]).getIndexOf(args[1]));
- registerConsumer(list, "table.setsortcolumn", (args, qd) ->
- ((Table) args[0]).setSortColumn(ScriptUtils.getInt(args[1])));
- registerFunction(list, "table.getsize", (args, qd) ->
- ((Table) args[0]).getSize());
- // -------------------------------------------------------------
- // Plot-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "plot.hastag", (args, qd) ->
- KajetansMod.plots.getDataBank(ProtectionBank.class).hasTag(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos(), args[1].toString()));
- registerConsumer(list, "plot.add", (args, qd) ->
- addPlot(args));
- registerFunction(list, "plot.getid", (args, qd) ->
- KajetansMod.plots.getDataBank(ProtectionBank.class).getFirstRegionId(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
- registerFunction(list, "plot.canbuild", (args, qd) ->
- KajetansMod.plots.getDataBank(ProtectionBank.class).canBuild(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos(), (EntityPlayer) args[1]));
- registerFunction(list, "plot.getname", (args, qd) ->
- KajetansMod.plots.getDataBank(ProtectionBank.class).getFirstRegionName(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
- // -------------------------------------------------------------
- // Quest-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "quest.setinfo", (args, qd) ->
- qd.setInfo(ScriptUtils.connect(args, 0)));
- registerConsumer(list, "quest.end", (args, qd) ->
- endQuest(args, qd));
- registerConsumer(list, "quest.playerstolist", (args, qd) ->
- questersToList(args, qd));
- registerFunction(list, "quest.getplayeramount", (args, qd) ->
- getNumberOfQuesters(qd));
- registerConsumer(list, "quest.give", (args, qd) ->
- giveQuest(args, qd));
- registerFunction(list, "quest.isactive", (args, qd) ->
- KajetansMod.scripts.getQuests().stream().anyMatch(q -> q.getName().equals(args[0])));
- // -------------------------------------------------------------
- // Scoreboard-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "sb.add", (args, qd) ->
- addToScoreBoard(args, qd));
- registerConsumer(list, "sb.remove", (args, qd) ->
- removeFromScoreBoard(args, qd));
- registerConsumer(list, "sb.reset", (args, qd) ->
- doForGroup(args[0], qd, p -> KajetansMod.scoreboard.resetScoreboard((EntityPlayerMP) p)));
- // -------------------------------------------------------------
- // Effect-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "effect.playsound", (args, qd) ->
- playSound(args));
- registerConsumer(list, "effect.play", (args, qd) ->
- playParticle(args));
- // -------------------------------------------------------------
- // Inventory-Bibliothek
- // -------------------------------------------------------------
- registerConsumer(list, "inv.new", (args, qd) ->
- qd.setVar(args[0], new SnuviInventory(args[2].toString(), ScriptUtils.getInt(args[1]), qd.getNewId())));
- registerConsumer(list, "inv.loadblock", (args, qd) ->
- qd.setVar(args[0], newInventory((Location) args[1], qd, args[2].toString())));
- registerConsumer(list, "inv.setitem", (args, qd) ->
- ((IInventory) args[0]).setInventorySlotContents(ScriptUtils.getInt(args[1]), (ItemStack) args[2]));
- registerFunction(list, "inv.getitem", (args, qd) ->
- ((IInventory) args[0]).getStackInSlot(ScriptUtils.getInt(args[1])));
- registerConsumer(list, "inv.open", (args, qd) ->
- new ScriptInventoryHolder((SnuviInventory) args[0], (EntityPlayerMP) args[1], qd).openForPlayer((EntityPlayerMP) args[1]));
- registerConsumer(list, "inv.close", (args, qd) ->
- ((EntityPlayer) args[0]).closeScreen());
- // -------------------------------------------------------------
- // Time-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "time.get", (args, qd) ->
- System.currentTimeMillis());
- registerFunction(list, "time.nextday", (args, qd) ->
- getNextDay(args));
- registerFunction(list, "time.getyear", (args, qd) ->
- getYear(args));
- registerFunction(list, "time.getmonth", (args, qd) ->
- getMonth(args));
- registerFunction(list, "time.getday", (args, qd) ->
- getDay(args));
- registerFunction(list, "time.gethour", (args, qd) ->
- getHour(args));
- registerFunction(list, "time.getminute", (args, qd) ->
- getMinute(args));
- registerFunction(list, "time.getsecond", (args, qd) ->
- getSecond(args));
- // -------------------------------------------------------------
- // Read-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "read.player", (args, qd) ->
- Utils.getPlayerByName(args[0].toString()));
- registerFunction(list, "read.location", (args, qd) ->
- ScriptUtils.getLocation(args[0].toString()));
- registerFunction(list, "read.item", (args, qd) ->
- ScriptUtils.getItemStack(args, 0));
- registerFunction(list, "read.spawnmob", (args, qd) ->
- NmsUtilities.getEntityFromNbtString(ScriptUtils.connect(args," ", 1).replace("'", "\""), (Location) args[0]));
- // -------------------------------------------------------------
- // Text-Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "text.location", (args, qd) ->
- ScriptUtils.getLocationString((Location) args[0]));
- registerFunction(list, "text.item", (args, qd) ->
- ScriptUtils.getItemStackString((ItemStack) args[0]));
- // -------------------------------------------------------------
- // Ohne Bibliothek
- // -------------------------------------------------------------
- registerFunction(list, "add", (args, qd) ->
- convertDouble(Arrays.stream(args).mapToDouble(s -> ScriptUtils.getDouble(s)).sum()));
- registerFunction(list, "sub", (args, qd) ->
- numberHandler(args[0], args[1], (a, b) -> a - b, (a, b) -> a - b, (a, b) -> a - b));
- registerFunction(list, "inc", (args, qd) ->
- increaseVar(args[0], qd, 1));
- registerFunction(list, "dec", (args, qd) ->
- increaseVar(args[0], qd, -1));
- registerFunction(list, "mul", (args, qd) ->
- numberHandler(args[0], args[1], (a, b) -> a * b, (a, b) -> a * b, (a, b) -> a * b));
- registerFunction(list, "div", (args, qd) ->
- ScriptUtils.getDouble(args[0]) / ScriptUtils.getDouble(args[1]));
- registerFunction(list, "getvar", (args, qd) ->
- qd.getVar(args[0].toString()));
- registerConsumer(list, "setvar", (args, qd) ->
- qd.setVar(args[0].toString(), args[1]));
- registerConsumer(list, "removevar", (args, qd) ->
- qd.removeVar(args[0].toString()));
- registerFunction(list, "getglobalvar", (args, qd) ->
- getGlobalVar(args));
- registerAlias(list, "ggv", "getglobalvar");
- registerConsumer(list, "setglobalvar", (args, qd) ->
- setGlobalVar(args));
- registerAlias(list, "sgv", "setglobalvar");
- registerConsumer(list, "msg", (args, qd) ->
- sendMessageToGroup(args[0], qd, ScriptUtils.connect(args, 1)));
- registerConsumer(list, "reset", (args, qd) ->
- qd.resetOverflowProtection());
- registerConsumer(list, "wait", (args, qd) ->
- { qd.resetOverflowProtection(); throw new HoldCodeException(); });
- registerConsumer(list, "term", (args, qd) ->
- { KajetansMod.scripts.term(qd); throw new HoldCodeException(); });
- registerConsumer(list, "goto", (args, qd) ->
- qd.gotoLabel(args[0].toString()));
- registerConsumer(list, "sgoto", (args, qd) ->
- scheduleGoto(args, qd));
- registerConsumer(list, "gosub", (args, qd) ->
- qd.gotoLabelWithReturn(args[0].toString()));
- registerConsumer(list, "return", (args, qd) ->
- qd.doReturn());
- registerConsumer(list, "try", (args, qd) ->
- tryFunction(args, qd));
- registerConsumer(list, "catch", (args, qd) ->
- catchFunction(qd));
- registerConsumer(list, "if", (args, qd) ->
- ifFunction(args, qd));
- registerConsumer(list, "else", (args, qd) ->
- elseFunction(args, qd));
- registerConsumer(list, "while", (args, qd) ->
- whileFunction(args, qd));
- registerFunction(list, "equal", (args, qd) ->
- isEqual(args));
- registerAlias(list, "equals", "equal");
- registerFunction(list, "less", (args, qd) ->
- ScriptUtils.getDouble(args[0]) < ScriptUtils.getDouble(args[1]));
- registerFunction(list, "greater", (args, qd) ->
- ScriptUtils.getDouble(args[0]) > ScriptUtils.getDouble(args[1]));
- registerFunction(list, "notequal", (args, qd) ->
- !isEqual(args));
- registerFunction(list, "lessequal", (args, qd) ->
- ScriptUtils.getDouble(args[0]) <= ScriptUtils.getDouble(args[1]));
- registerFunction(list, "greaterequal", (args, qd) ->
- ScriptUtils.getDouble(args[0]) >= ScriptUtils.getDouble(args[1]));
- registerFunction(list, "invert", (args, qd) ->
- !((boolean) args[0]));
- registerFunction(list, "and", (args, qd) ->
- Arrays.stream(args).allMatch(s -> s.equals(true)));
- registerFunction(list, "or", (args, qd) ->
- Arrays.stream(args).anyMatch(s -> s.equals(true)));
- registerFunction(list, "removeformat", (args, qd) ->
- ScriptUtils.connect(args, 0).replaceAll("§.", ""));
- registerFunction(list, "concatlist", (args, qd) ->
- ((List<Object>) args[0]).stream().limit(ScriptUtils.getInt(args[3]) + 1).skip(ScriptUtils.getInt(args[2])).map(o -> o.toString()).collect(Collectors.joining(args[1].toString())));
- registerConsumer(list, "split", (args, qd) ->
- split(args, qd));
- registerFunction(list, "concat", (args, qd) ->
- ScriptUtils.connect(args, 0));
- registerFunction(list, "tolowercase", (args, qd) ->
- ScriptUtils.connect(args, 0).toLowerCase());
- registerFunction(list, "touppercase", (args, qd) ->
- ScriptUtils.connect(args, 0).toUpperCase());
- registerFunction(list, "concatspace", (args, qd) ->
- ScriptUtils.connect(args, " ", 0));
- registerFunction(list, "onlyletters", (args, qd) ->
- onlyLetters(ScriptUtils.connect(args, 0)));
- registerConsumer(list, "command", (args, qd) ->
- KajetansMod.server.commandManager.executeCommand(KajetansMod.server, ScriptUtils.connect(args, 0)));
- registerConsumer(list, "waitfor", (args, qd) ->
- waitFor(args, qd));
-
- methods = list.toArray(new BiFunction[list.size()]);
- }
-
- public boolean printStack = false;
- @SuppressWarnings("unchecked")
- public Object parseFunction(Script qd, int function, Object[] args)
- {
- try
- {
- qd.exeClock.pushTime(qd.isBenchmarking());
- Object o = methods[function].apply(args, qd);
- qd.exeClock.pushTime(qd.isBenchmarking());
- return o;
- }
- catch(Exception ex)
- {
- if(ex instanceof HoldCodeException)
- {
- throw new HoldCodeException();
- }
- if(printStack)
- {
- ex.printStackTrace();
- }
- if(qd.getTryMode())
- {
- qd.setTryMode(false);
- qd.setTryFail(true);
- qd.setVar("error", ex.getClass().getSimpleName());
- qd.goHigher();
- return 0;
- }
- printQuestException(qd, ex, translator.inverse().get(function) + "(" + Arrays.stream(args).map(o -> String.valueOf(o)).collect(Collectors.joining(", ")) + ")");
- throw new HoldCodeException();
- }
- }
-
- public void printQuestException(Script qd, Exception ex, String line)
- {
- qd.resetOverflowProtection();
- sendToDevsWithSuffix(qd, "§cError in");
- if(qd.isScript())
- {
- sendToDevsWithHelpList(qd, "§cScript", qd.getName());
- }
- else
- {
- sendToDevsWithHelpList(qd, "§cQuest", qd.getName());
- }
- sendToDevsWithHelpList(qd, "§cZeile", line);
- sendToDevsWithHelpList(qd, "§cZeilennummer", String.valueOf(qd.getActualCodeLine() + 1));
- sendToDevsWithHelpList(qd, "§cZeilenpfad", qd.getTreePath());
- if(ex.getLocalizedMessage() == null)
- {
- sendToDevsWithHelpList(qd, "§cException", ex.getClass().getSimpleName());
- }
- else
- {
- sendToDevsWithHelpList(qd, "§cException", ex.getClass().getSimpleName() + " - " + ex.getLocalizedMessage());
- }
- if(ex instanceof IllegalStringException)
- {
- sendToDevsWithHelpList(qd, "§cUngültiger Wert", ((IllegalStringException) ex).getBadString());
- }
- }
-
- // -----------------------
- // Quest Befehle
- // -----------------------
-
- private Class getClass(String s)
- {
- try
- {
- return Class.forName(s);
- }
- catch(ClassNotFoundException ex)
- {
- throw new IllegalStringException(s);
- }
- }
-
- private int getItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = (Location) args[0];
- TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
- if(te == null || !(te instanceof TileEntityChest))
- {
- return 0;
- }
- return InventoryUtils.searchInventoryFor(((TileEntityChest) te), (ItemStack) args[2], (boolean) args[1]);
- }
-
- private ItemStack addItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = (Location) args[0];
- ItemStack stack = ((ItemStack) args[1]);
- TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
- if(te == null || !(te instanceof TileEntityChest))
- {
- return stack;
- }
- stack.setCount(InventoryUtils.addToInventory((TileEntityChest) te, stack));
- return stack;
- }
-
- private ItemStack removeItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = (Location) args[0];
- ItemStack stack = ((ItemStack) args[1]);
- TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
- if(te == null || !(te instanceof TileEntityChest))
- {
- return stack;
- }
- stack.setCount(InventoryUtils.removeFromInventory((TileEntityChest) te, stack));
- return stack;
- }
-
- private Object getCoordOfLocation(Object[] args) throws IllegalStringLocationException
- {
- Location l = (Location) args[0];
- switch(args[1].toString())
- {
- case "x":
- return l.getPos().xCoord;
- case "y":
- return l.getPos().yCoord;
- case "z":
- return l.getPos().zCoord;
- case "bx":
- return (int) l.getPos().xCoord;
- case "by":
- return (int) l.getPos().yCoord;
- case "bz":
- return (int) l.getPos().zCoord;
- case "w":
- return ModDimensions.getWorldName(l.getWorld());
- default:
- return null;
- }
- }
-
- private void cloneBlock(Object[] args) throws IllegalStringLocationException
- {
- Location l = (Location) args[1];
- IBlockState state = getBlockState((Location) args[0]);
- l.getWorld().setBlockState(l.getBlockPos(), state);
- }
-
- private ItemStack removeItem(Object[] args) throws PlayerNotFoundException, IllegalItemStackStringException
- {
- ItemStack stack = ((ItemStack) args[1]).copy();
- stack.setCount(InventoryUtils.removeFromInventory(((EntityPlayer) args[0]).inventory, stack));
- return stack;
- }
-
- private void dropItem(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = (Location) args[0];
- World w = l.getWorld();
- BlockPos pos = l.getBlockPos();
- ItemStack stack = ((ItemStack) args[1]).copy();
- int amount = stack.getCount();
- while(amount > stack.getMaxStackSize())
- {
- stack.setCount(stack.getMaxStackSize());
- amount -= stack.getMaxStackSize();
- ItemStackUtils.drop(w, pos, stack.copy());
- }
- if(amount > 0)
- {
- stack.setCount(amount);
- ItemStackUtils.drop(w, pos, stack);
- }
- }
-
- private ItemStack giveItem(Object[] args) throws PlayerNotFoundException, IllegalItemStackStringException
- {
- ItemStack stack = ((ItemStack) args[1]).copy();
- stack.setCount(InventoryUtils.addToInventory(((EntityPlayer) args[0]).inventory, stack));
- return stack;
- }
-
- private void endQuest(Object[] args, Script qd) throws NumberFormatException, UnsupportedOperationException
- {
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- qd.getPlayers().stream().forEach((p) ->
- {
- KajetansMod.scripts.send(p, "Du hast die Quest geschafft!");
- });
- KajetansMod.scripts.term(qd);
- throw new HoldCodeException();
- }
-
- private void setBlock(Object[] args, Script qd) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = (Location) args[0];
- ItemStack stack = (ItemStack) args[1];
- l.getWorld().setBlockState(l.getBlockPos(), Block.getBlockFromItem(stack.getItem()).getStateFromMeta(stack.getMetadata()));
- qd.increaseOverflowProtection();
- }
-
- private void setBlockWithData(Object[] args, Script qd) throws IllegalStringLocationException
- {
- Location l = (Location) args[0];
- if(args.length >= 4)
- {
- NmsUtilities.setBlockWithData(l.getWorld(), l.getBlockPos(), ScriptUtils.getInt(args[2]), Block.getBlockFromName(args[1].toString()), ScriptUtils.connect(args, 3));
- }
- else
- {
- NmsUtilities.setBlockWithData(l.getWorld(), l.getBlockPos(), ScriptUtils.getInt(args[2]), Block.getBlockFromName(args[1].toString()), null);
- }
- qd.increaseOverflowProtection();
- }
-
- private void dropInventory(Object[] args)
- {
- ((EntityPlayer) args[0]).inventory.dropAllItems();
- }
-
- private void playSound(Object[] args) throws IllegalStringLocationException
- {
- Location l = ((Location) args[0]);
- Vec3d v = l.getPos();
- EffectUtils.playSound((WorldServer) l.getWorld(), SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER, v.xCoord, v.yCoord, v.zCoord);
- }
-
- private void playSoundPlayer(Object[] args) throws IllegalStringLocationException
- {
- EffectUtils.playSound((EntityPlayerMP) args[0], SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER);
- }
-
- private void playParticle(Object[] args) throws IllegalStringLocationException
- {
- Location l = ((Location) args[0]).add(0.5, 0.5, 0.5);
- EffectUtils.spawnParticle((WorldServer) l.getWorld(), EnumParticleTypes.getByName(args[1].toString()), l.getPos(), ScriptUtils.getInt(args[2]));
- }
-
- private void setEntityEquip(Object[] args) throws IllegalStringLocationException, EntityNotFoundException, IllegalItemStackStringException
- {
- EntityLivingBase liv = (EntityLivingBase) args[0];
- ItemStack stack = ((ItemStack) args[2]).copy();
- switch(args[1].toString())
- {
- case "hand":
- liv.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, stack);
- return;
- case "head":
- liv.setItemStackToSlot(EntityEquipmentSlot.HEAD, stack);
- return;
- case "chest":
- liv.setItemStackToSlot(EntityEquipmentSlot.CHEST, stack);
- return;
- case "legs":
- liv.setItemStackToSlot(EntityEquipmentSlot.LEGS, stack);
- return;
- case "feet":
- liv.setItemStackToSlot(EntityEquipmentSlot.FEET, stack);
- return;
- case "offhand":
- liv.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, stack);
- }
- }
-
- private ItemStack getEntityEquip(Object[] args) throws IllegalStringLocationException, EntityNotFoundException
- {
- EntityLivingBase liv = (EntityLivingBase) args[0];
- switch(args[1].toString())
- {
- case "hand":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
- case "head":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
- case "chest":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
- case "legs":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
- case "feet":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.FEET);
- case "offhand":
- return liv.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
- }
- return ItemStack.EMPTY;
- }
-
- @SuppressWarnings("unchecked")
- private void removeEntities(Object[] args) throws IllegalStringLocationException
- {
- Class<? extends Entity> c = (Class<? extends Entity>) getClass("org.bukkit.entity." + args[0]);
- if(c == Entity.class || c == EntityVillager.class || c == EntityArmorStand.class || c == EntityItemFrame.class || c == EntityHanging.class)
- {
- return;
- }
- Location l = (Location) args[1];
- Utils.getNearbyEntities(l.getWorld(), l.getPos(), ScriptUtils.getDouble(args[2]), c).stream().forEach(ent ->
- {
- ent.setDead();
- });
- }
-
- private void ifFunction(Object[] args, Script qd) throws IfWithoutStatementException, NoChildTreeException
- {
- if(Arrays.stream(args).allMatch(s -> s.equals(true)))
- {
- qd.goDeeper(false);
- qd.setElseMode(false);
- return;
- }
- qd.setElseMode(true);
- }
-
- private void elseFunction(Object[] args, Script qd) throws IfWithoutStatementException, NoChildTreeException
- {
- if(qd.getElseMode())
- {
- qd.setElseMode(false);
- qd.goDeeper(false);
- }
- }
-
- private void whileFunction(Object[] args, Script qd) throws IfWithoutStatementException, NoChildTreeException
- {
- if(Arrays.stream(args).allMatch(s -> s.equals(true)))
- {
- qd.goDeeper(true);
- }
- }
-
- private void setSign(Object[] args) throws IllegalStringLocationException
- {
- Location l = (Location) args[0];
- TileEntitySign sign = (TileEntitySign) l.getWorld().getTileEntity(l.getBlockPos());
- SpecialBlockUtils.setSignLine(sign, ScriptUtils.getInt(args[1]), ScriptUtils.connect(args, 2));
- }
-
- private String getSign(Object[] args) throws IllegalStringLocationException
- {
- Location l = (Location) args[0];
- TileEntitySign sign = (TileEntitySign) l.getWorld().getTileEntity(l.getBlockPos());
- return sign.signText[ScriptUtils.getInt(args[1])].getUnformattedText();
- }
- private void spawnItemFrame(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
- {
- Location l = ((Location) args[0]);
- EntityItemFrame frame = new EntityItemFrame(l.getWorld(), l.getBlockPos(), EnumFacing.byName(args[1].toString()));
- frame.setDisplayedItem(((ItemStack) args[2]).copy());
- }
-
- private void nameEntity(Object[] args) throws EntityNotFoundException
- {
- Entity ent = (Entity) args[0];
- ent.setCustomNameTag(ScriptUtils.connect(args, 1));
- if(args.length >= 3)
- {
- ent.setAlwaysRenderNameTag((boolean) args[2]);
- return;
- }
- ent.setAlwaysRenderNameTag(true);
- }
-
- private EntityPlayer getQuestLeader(Script qd) throws PlayerNotFoundException
- {
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- return qd.getPlayers().get(0);
- }
-
- @SuppressWarnings(value = "unchecked")
- private void sortList(List<Object> args, Script qd)
- {
- Collections.sort(args, (Object o1, Object o2) -> ((Comparable) o1).compareTo(o2));
- }
-
- private void questersToList(Object[] args, Script qd) throws UnsupportedOperationException
- {
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- qd.setVar(args[0], qd.getPlayers());
- }
-
- private int getNumberOfQuesters(Script qd) throws UnsupportedOperationException
- {
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- return qd.getPlayers().size();
- }
-
- private void giveQuest(Object[] args, Script qd) throws PlayerNotFoundException
- {
- if(qd.isScript())
- {
- EntityPlayer p = ((EntityPlayer) args[0]);
- if(!KajetansMod.scripts.hasQuest(p))
- {
- KajetansMod.scripts.startQuest(KajetansMod.server, args[1].toString(), p, null, null);
- }
- return;
- }
- EntityPlayer p = qd.getPlayers().get(0);
- if(KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR))
- {
- qd.loadNewCode(args[0].toString(), p);
- return;
- }
- qd.loadNewCode(args[0].toString(), KajetansMod.server);
- }
-
- private void addToScoreBoard(Object[] args, Script qd) throws PlayerNotFoundException
- {
- int id = ScriptUtils.getInt(args[1]);
- String message = ScriptUtils.connect(args, 2);
- doForGroup(args[0], qd, p -> KajetansMod.scoreboard.getScoreboard((EntityPlayerMP) p).addText(id, message));
- }
-
- private void removeFromScoreBoard(Object[] args, Script qd) throws PlayerNotFoundException
- {
- int id = ScriptUtils.getInt(args[1]);
- doForGroup(args[0], qd, p -> KajetansMod.scoreboard.getScoreboard((EntityPlayerMP) p).removeText(id));
- }
- private void sendToActionBar(Object[] args, Script qd) throws PlayerNotFoundException
- {
- String text = ScriptUtils.connect(args, 1);
- doForGroup(args[0], qd, p -> NmsUtilities.sendActionBar((EntityPlayerMP) p, text));
- }
- private void kickPlayerFromQuest(Object[] args, Script qd) throws PlayerNotFoundException, UnsupportedOperationException
- {
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- KajetansMod.scripts.removePlayerFromQuest((EntityPlayer) args[0], qd);
- }
-
- private void scheduleGoto(Object[] args, Script qd)
- {
- KajetansMod.scheduler.scheduleTask(() ->
- {
- if(!qd.isValid())
- {
- return;
- }
- try
- {
- qd.gotoLabel(args[1].toString());
- qd.setIsWaiting(false);
- qd.runCode();
- }
- catch(NoChildTreeException | CodeTooLongException | GotoLabelNotFoundException ex)
- {
- printQuestException(qd, ex, "(Scheduled Goto)");
- }
- }, ScriptUtils.getInt(args[0]));
- }
-
- private void waitFor(Object[] args, Script qd) throws UnsupportedOperationException
- {
- qd.resetOverflowProtection();
- int i = ScriptUtils.getInt(args[0]);
- if(i < 1)
- {
- throw new UnsupportedOperationException();
- }
- qd.setIsWaiting(true);
- KajetansMod.scheduler.scheduleTask(() ->
- {
- if(qd == null || !qd.isValid())
- {
- return;
- }
- qd.setIsWaiting(false);
- qd.runCode();
- }, i);
- throw new HoldCodeException();
- }
-
- private void damageEntity(Object[] args)
- {
- if(args.length >= 4)
- {
- ((EntityLivingBase) args[0]).attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase) args[2]), ScriptUtils.getFloat(args[1]));
- return;
- }
- ((EntityLivingBase) args[0]).attackEntityFrom(DamageSource.GENERIC, ScriptUtils.getFloat(args[1]));
- }
-
- private boolean isBetween(Object[] args)
- {
- Vec3d l1 = ((Location) args[0]).getPos();
- Vec3d l2 = ((Location) args[1]).getPos();
- Vec3d l3 = ((Location) args[2]).getPos();
- return l1.xCoord >= Math.min(l2.xCoord, l3.xCoord) &&
- l1.xCoord <= Math.max(l2.xCoord, l3.xCoord) &&
- l1.yCoord >= Math.min(l2.yCoord, l3.yCoord) &&
- l1.yCoord <= Math.max(l2.yCoord, l3.yCoord) &&
- l1.zCoord >= Math.min(l2.zCoord, l3.zCoord) &&
- l1.zCoord <= Math.max(l2.zCoord, l3.zCoord);
- }
-
- private Number increaseVar(Object var, Script qd, int value)
- {
- Number n = numberHandler(qd.getVar(var.toString()), (a) -> a + value, (a) -> a + value, (a) -> a + value);
- qd.setVar(var.toString(), n);
- return n;
- }
-
- private void addPlot(Object[] args)
- {
- Location l1 = (Location) args[0];
- Location l2 = (Location) args[1];
- BlockPos pos1 = l1.getBlockPos();
- BlockPos pos2 = l2.getBlockPos();
- KajetansMod.plots.getDataBank(ProtectionBank.class).addPlot(Math.min(pos1.getX(), pos2.getX()),
- Math.min(pos1.getY(), pos2.getY()),
- Math.min(pos1.getZ(), pos2.getZ()),
- Math.max(pos1.getX(), pos2.getX()),
- Math.max(pos1.getY(), pos2.getY()),
- Math.max(pos1.getZ(), pos2.getZ()),
- ModDimensions.getWorldName(l1.getWorld()), null, args[2].toString());
- }
-
- private boolean isEqual(Object[] args)
- {
- if(args[0] == null)
- {
- return args[1] == null;
- }
- else if(args[1] == null)
- {
- return args[0] == null;
- }
- else if(args[1] instanceof ItemStack && args[0] instanceof ItemStack)
- {
- return InventoryUtils.stackEqualExact((ItemStack) args[0], (ItemStack) args[1]);
- }
- else if(args[1] instanceof Number && args[0] instanceof Number)
- {
- return ((Number) args[0]).doubleValue() == ((Number) args[1]).doubleValue();
- }
- else if(args[0] instanceof Location && args[1] instanceof Location)
- {
- Location l = (Location) args[0];
- Location l2 = (Location) args[1];
- return l.getPos().equals(l2.getPos()) && l.getWorld().equals(l2.getWorld());
- }
- return args[0].equals(args[1]);
- }
-
- private void tryFunction(Object[] args, Script qd) throws NoChildTreeException
- {
- qd.goDeeper(false);
- qd.setTryMode(true);
- }
-
- private void catchFunction(Script qd) throws NoChildTreeException
- {
- if(qd.getTryFail())
- {
- qd.setTryFail(false);
- qd.goDeeper(false);
- }
- }
-
- private Entity getLastDamager(Object[] args)
- {
- DamageSource ds = ((EntityPlayer) args[0]).getLastDamageSource();
- if(ds == null)
- {
- return null;
- }
- return ds.getSourceOfDamage();
- }
-
- private SnuviInventory newInventory(Location l, Script qd, String s)
- {
- TileEntityChest chest = (TileEntityChest) l.getWorld().getTileEntity(l.getBlockPos());
- int size = chest.getSizeInventory();
- if(size % 9 != 0)
- {
- size /= 9;
- size++;
- size *= 9;
- }
- SnuviInventory inv = new SnuviInventory(s, size, qd.getNewId());
- for(int i = 0; i < chest.getSizeInventory(); i++)
- {
- inv.setInventorySlotContents(i, chest.getStackInSlot(i).copy());
- }
- return inv;
- }
-
- private void split(Object[] args, Script qd)
- {
- String[] parts = ScriptUtils.connect(args, 2).split(args[1].toString());
- ArrayList<Object> list = new ArrayList<>();
- for(String s : parts)
- {
- list.add(ScriptUtils.convertInput(s));
- }
- qd.setVar(args[0], list);
- }
-
- private boolean onlyLetters(String s)
- {
- for(char c : s.toCharArray())
- {
- if(!Character.isLetter(c))
- {
- return false;
- }
- }
- return true;
- }
-
- private String getName(Object[] args)
- {
- Object o = args[0];
- if(o instanceof EntityPlayer)
- {
- return ((EntityPlayer) o).getName();
- }
- return KajetansMod.playerbank.getDataBank().getName(o.toString());
- }
-
- private String getUuid(Object[] args)
- {
- Object o = args[0];
- if(o instanceof EntityPlayer)
- {
- return ((EntityPlayer) o).getUniqueID().toString();
- }
- return KajetansMod.playerbank.getDataBank().getUUID(o.toString());
- }
-
- private String getPotionType(Object[] args)
- {
- return PotionUtils.getPotionFromItem(((EntityPotion) args[0]).getPotion()).getRegistryName().getResourcePath();
- }
-
- private void setTag(Object[] args)
- {
- if(args[0] instanceof EntityPlayer)
- {
- KajetansMod.playerbank.getDataBank().setTag((EntityPlayer) args[0], args[1].toString(), ScriptUtils.getInt(args[2]));
- return;
- }
- KajetansMod.playerbank.getDataBank().setTag(KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()), args[1].toString(), ScriptUtils.getInt(args[2]));
- }
-
- private int getTag(Object[] args)
- {
- if(args[0] instanceof EntityPlayer)
- {
- return KajetansMod.playerbank.getDataBank().getTag((EntityPlayer) args[0], args[1].toString());
- }
- return KajetansMod.playerbank.getDataBank().getTag(KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()), args[1].toString());
- }
-
- private void setGlobalVar(Object[] args)
- {
- if(args[0] instanceof EntityPlayer)
- {
- KajetansMod.scripts.getDataBank(ScriptBank.class).setVar(args[2].toString(), args[1].toString(), ((EntityPlayer) args[0]).getUniqueID().toString());
- return;
- }
- KajetansMod.scripts.getDataBank(ScriptBank.class).setVar(args[2].toString(), args[1].toString(), KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()));
- }
-
- private Object getGlobalVar(Object[] args)
- {
- if(args[0] instanceof EntityPlayer)
- {
- return KajetansMod.scripts.getDataBank(ScriptBank.class).getVar(args[1].toString(), ((EntityPlayer) args[0]).getUniqueID().toString());
- }
- return KajetansMod.scripts.getDataBank(ScriptBank.class).getVar(args[1].toString(), KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()));
- }
- // -------------------------------------------------------------------------
- // Block
- // -------------------------------------------------------------------------
-
- private int getBlockData(Location l)
- {
- IBlockState state = l.getWorld().getBlockState(l.getBlockPos());
- return state.getBlock().getMetaFromState(state);
- }
-
- private IBlockState getBlockState(Location l)
- {
- return l.getWorld().getBlockState(l.getBlockPos());
- }
-
- private ItemStack getStackFromBlock(Location l)
- {
- World w = l.getWorld();
- BlockPos pos = l.getBlockPos();
- IBlockState state = w.getBlockState(pos);
- return state.getBlock().getItem(w, pos, state);
- }
-
- // -------------------------------------------------------------------------
- // Custom-Handler
- // -------------------------------------------------------------------------
-
- private void registerShapelessRecipe(Object[] args)
- {
- ItemStack[] stacks = new ItemStack[args.length - 1];
- for(int i = 0; i < stacks.length; i++)
- {
- stacks[i] = (ItemStack) args[i + 1];
- }
- RecipeUtils.registerShapelessRecipe((ItemStack) args[0], stacks);
- }
-
- private void registerShapedRecipe(Object[] args)
- {
- int counter = 0;
- while(args[counter + 1].getClass() == String.class)
- {
- counter++;
- }
- String[] s = new String[counter];
- for(int i = 0; i < s.length; i++)
- {
- s[i] = args[i + 1].toString();
- }
-
- ItemStack[] stacks = new ItemStack[args.length - 1 - s.length];
- for(int i = 0; i < stacks.length; i++)
- {
- stacks[i] = (ItemStack) args[i + 1 + counter];
- }
- RecipeUtils.registerShapedRecipe((ItemStack) args[0], s, stacks);
- }
-
- // -------------------------------------------------------------------------
- // Zeit-Handler
- // -------------------------------------------------------------------------
-
- private long getNextDay(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- cal.add(Calendar.DAY_OF_YEAR, 1);
- cal.set(Calendar.HOUR, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.MILLISECOND, 0);
- return cal.getTimeInMillis();
- }
-
- private int getYear(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.YEAR);
- }
-
- private int getMonth(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.MONTH) + 1;
- }
-
- private int getDay(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.DAY_OF_MONTH);
- }
-
- private int getHour(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.HOUR_OF_DAY);
- }
-
- private int getMinute(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.MINUTE);
- }
-
- private int getSecond(Object[] args)
- {
- GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
- cal.setTimeInMillis((long) args[0]);
- return cal.get(Calendar.SECOND);
- }
-
- // -------------------------------------------------------------------------
- // Gruppen-Handler
- // -------------------------------------------------------------------------
-
- private void doForGroup(Object group, Script qd, Consumer<ICommandSender> c) throws UnsupportedOperationException, PlayerNotFoundException
- {
- if(group instanceof String)
- {
- switch(group.toString())
- {
- case "all":
- if(qd.isScript())
- {
- throw new UnsupportedOperationException();
- }
- qd.getPlayers().forEach(p -> c.accept(p));
- break;
- case "online":
- KajetansMod.server.getPlayerList().getPlayers().forEach(p -> c.accept(p));
- break;
- case "dev":
- if(qd.isScript())
- {
- KajetansMod.server.getPlayerList().getPlayers().stream().filter(p -> KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR)).forEach(p -> c.accept(p));
- return;
- }
- qd.getPlayers().stream().filter(p -> KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR)).forEach(p -> c.accept(p));
- break;
- case "server":
- c.accept(KajetansMod.server);
- break;
- default:
- c.accept(Utils.getPlayerByName(group.toString()));
- break;
- }
- return;
- }
- c.accept((EntityPlayer) group);
- }
-
- private void sendMessageToGroup(Object group, Script qd, String message)
- {
- TextComponentString comp = new TextComponentString(message);
- doForGroup(group, qd, p -> p.sendMessage(comp));
- }
-
- public void sendMessageWithSuffix(Script qd, String message)
- {
- Module m = KajetansMod.scripts;
- int id = qd.isScript() ? 1 : 0;
- doForGroup("all", qd, p -> m.send(p, message, id));
- }
-
- private void sendToDevsWithSuffix(Script qd, String message)
- {
- Module m = KajetansMod.scripts;
- int id = qd.isScript() ? 1 : 0;
- doForGroup("dev", qd, p -> m.send(p, message, id));
- }
-
- public void sendWarningToAllDevs(String message)
- {
- Module m = KajetansMod.scripts;
- String warnMessage = "§4" + message;
- KajetansMod.server.getPlayerList().getPlayers().stream().filter(p -> KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR)).forEach(p -> m.send(p, warnMessage));
- }
-
- private void sendToDevsWithList(Script qd, String message)
- {
- Module m = KajetansMod.scripts;
- int id = qd.isScript() ? 1 : 0;
- doForGroup("dev", qd, p -> m.sendListElement(p, message, id));
- }
-
- private void sendToDevsWithHelpList(Script qd, String message, String message2)
- {
- Module m = KajetansMod.scripts;
- int id = qd.isScript() ? 1 : 0;
- doForGroup("dev", qd, p -> m.sendHelpListElement(p, message, message2, id));
- }
-
- // -------------------------------------------------------------------------
- // Integer-Double-Long-Handler
- // -------------------------------------------------------------------------
-
- private Number numberHandler(Number a,
- Function<Integer, Integer> f,
- Function<Long, Long> f2,
- Function<Double, Double> f3)
- {
- if(a instanceof Integer)
- {
- return f.apply(a.intValue());
- }
- else if(a instanceof Long)
- {
- return f2.apply(a.longValue());
- }
- return f3.apply(a.doubleValue());
- }
-
- private Number numberHandler(Object a,
- Function<Integer, Integer> f,
- Function<Long, Long> f2,
- Function<Double, Double> f3)
- {
- return numberHandler((Number) a, f, f2, f3);
- }
-
- private Number numberHandler(Number a, Number b,
- BiFunction<Integer, Integer, Integer> f,
- BiFunction<Long, Long, Long> f2,
- BiFunction<Double, Double, Double> f3)
- {
- if(a instanceof Integer && b instanceof Integer)
- {
- return f.apply(a.intValue(), b.intValue());
- }
- else if((a instanceof Long || a instanceof Integer) && (b instanceof Long || b instanceof Integer))
- {
- return f2.apply(a.longValue(), b.longValue());
- }
- return f3.apply(a.doubleValue(), b.doubleValue());
- }
-
- private Number numberHandler(Object a, Object b,
- BiFunction<Integer, Integer, Integer> f,
- BiFunction<Long, Long, Long> f2,
- BiFunction<Double, Double, Double> f3)
- {
- return numberHandler((Number) a, (Number) b, f, f2, f3);
- }
-
- private Number convertDouble(Double d)
- {
- if(d == d.intValue())
- {
- return d.intValue();
- }
- else if(d == d.longValue())
- {
- return d.longValue();
- }
- return d;
- }
-
- // -------------------------------------------------------------------------
- // Rundungs-Handler
- // -------------------------------------------------------------------------
-
- private Number round(Object o)
- {
- Long l = Math.round(ScriptUtils.getDouble(o));
- if(l == l.intValue())
- {
- return l.intValue();
- }
- return l;
- }
-
- private Number roundDown(Object o)
- {
- Double d = Math.floor(ScriptUtils.getDouble(o));
- if(d == d.intValue())
- {
- return d.intValue();
- }
- return d.longValue();
- }
-
- private Number roundUp(Object o)
- {
- Double d = Math.ceil(ScriptUtils.getDouble(o));
- if(d == d.intValue())
- {
- return d.intValue();
- }
- return d.longValue();
- }
- }
|