MinecraftFunctions.java 71 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448
  1. package me.km.snuviscript;
  2. import me.km.KajetansMod;
  3. import me.km.afk.AfkListener;
  4. import me.km.api.Module;
  5. import me.km.api.Utils;
  6. import me.km.environment.EnvironmentAPI;
  7. import me.km.exception.EntityNotFoundException;
  8. import me.km.exception.IllegalItemStackStringException;
  9. import me.km.exception.IllegalStringLocationException;
  10. import me.km.exception.PlayerNotFoundException;
  11. import me.km.nms.NmsUtilities;
  12. import me.km.plots.ProtectionBank;
  13. import me.km.table.TableAPI;
  14. import java.util.ArrayList;
  15. import java.util.Arrays;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.UUID;
  19. import java.util.function.Consumer;
  20. import java.util.stream.Collectors;
  21. import me.hammerle.code.ISnuviLogger;
  22. import me.hammerle.code.Script;
  23. import me.hammerle.code.ScriptUtils;
  24. import me.hammerle.exceptions.SnuviException;
  25. import me.km.api.Location;
  26. import me.km.api.TitleAPI;
  27. import me.km.dimensions.ModDimensions;
  28. import me.km.effects.EffectUtils;
  29. import me.km.inventory.InventoryUtils;
  30. import me.km.permissions.Permissions;
  31. import me.km.table.Table;
  32. import me.km.utils.ItemStackUtils;
  33. import me.km.utils.ReflectionUtils;
  34. import me.km.utils.SpecialBlockUtils;
  35. import net.minecraft.block.Block;
  36. import net.minecraft.block.BlockDoor;
  37. import net.minecraft.block.state.IBlockState;
  38. import net.minecraft.command.ICommandSender;
  39. import net.minecraft.enchantment.Enchantment;
  40. import net.minecraft.enchantment.EnchantmentHelper;
  41. import net.minecraft.entity.Entity;
  42. import net.minecraft.entity.EntityHanging;
  43. import net.minecraft.entity.EntityLiving;
  44. import net.minecraft.entity.EntityLivingBase;
  45. import net.minecraft.entity.item.EntityArmorStand;
  46. import net.minecraft.entity.item.EntityItemFrame;
  47. import net.minecraft.entity.monster.EntityCreeper;
  48. import net.minecraft.entity.passive.EntityVillager;
  49. import net.minecraft.entity.player.EntityPlayer;
  50. import net.minecraft.entity.player.EntityPlayerMP;
  51. import net.minecraft.entity.projectile.EntityPotion;
  52. import net.minecraft.inventory.EntityEquipmentSlot;
  53. import net.minecraft.inventory.IInventory;
  54. import net.minecraft.item.ItemStack;
  55. import net.minecraft.network.ThreadQuickExitException;
  56. import net.minecraft.network.play.client.CPacketChatMessage;
  57. import net.minecraft.network.play.client.CPacketClientStatus;
  58. import net.minecraft.network.play.server.SPacketSpawnPosition;
  59. import net.minecraft.potion.Potion;
  60. import net.minecraft.potion.PotionUtils;
  61. import net.minecraft.tileentity.TileEntity;
  62. import net.minecraft.tileentity.TileEntityChest;
  63. import net.minecraft.tileentity.TileEntitySign;
  64. import net.minecraft.util.DamageSource;
  65. import net.minecraft.util.EnumFacing;
  66. import net.minecraft.util.EnumParticleTypes;
  67. import net.minecraft.util.ResourceLocation;
  68. import net.minecraft.util.SoundCategory;
  69. import net.minecraft.util.SoundEvent;
  70. import net.minecraft.util.math.BlockPos;
  71. import net.minecraft.util.math.Vec3d;
  72. import net.minecraft.util.text.TextComponentString;
  73. import net.minecraft.world.World;
  74. import net.minecraft.world.WorldServer;
  75. import me.hammerle.exceptions.PreScriptException;
  76. import me.hammerle.exceptions.IllegalStringException;
  77. import me.hammerle.code.SnuviParser;
  78. import me.hammerle.exceptions.HoldCodeException;
  79. import net.minecraft.util.math.MathHelper;
  80. public class MinecraftFunctions implements ISnuviLogger
  81. {
  82. @SuppressWarnings("")
  83. public static void registerFunctions(SnuviParser parser)
  84. {
  85. // -------------------------------------------------------------
  86. // Command-Bibliothek
  87. // -------------------------------------------------------------
  88. parser.registerConsumer("command.add", (args, qd) ->
  89. KajetansMod.scripts.registerScriptCommand(args[0].toString()));
  90. parser.registerConsumer("command.remove", (args, qd) ->
  91. KajetansMod.scripts.unregisterScriptCommand(args[0].toString()));
  92. parser.registerFunction("command.exists", (args, qd) ->
  93. KajetansMod.scripts.isRegisteredScriptCommand(args[0].toString()));
  94. parser.registerConsumer("command.clear", (args, qd) ->
  95. KajetansMod.scripts.clearScriptCommands());
  96. // -------------------------------------------------------------
  97. // Permission-Bibliothek
  98. // -------------------------------------------------------------
  99. parser.registerConsumer("perm.clear", (args, qd) ->
  100. KajetansMod.perms.clear());
  101. parser.registerConsumer("perm.registergroup", (args, qd) ->
  102. KajetansMod.perms.registerGroupPermission(ScriptUtils.getInt(args[0]), args[1].toString()));
  103. parser.registerConsumer("perm.registerplayer", (args, qd) ->
  104. KajetansMod.perms.registerPlayerGroup(UUID.fromString(args[0].toString()), ScriptUtils.getInt(args[1])));
  105. // -------------------------------------------------------------
  106. // Title-Bibliothek
  107. // -------------------------------------------------------------
  108. parser.registerConsumer("title.settime", (args, qd) ->
  109. TitleAPI.setTitleTime((EntityPlayerMP) args[0], ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2]), ScriptUtils.getInt(args[3])));
  110. parser.registerConsumer("title.clear", (args, qd) ->
  111. TitleAPI.clearTitle((EntityPlayerMP) args[0]));
  112. parser.registerConsumer("title.reset", (args, qd) ->
  113. TitleAPI.resetTitle((EntityPlayerMP) args[0]));
  114. parser.registerConsumer("title.send", (args, qd) ->
  115. TitleAPI.setTitle((EntityPlayerMP) args[0], ScriptUtils.connect(args, 1)));
  116. parser.registerConsumer("title.setsub", (args, qd) ->
  117. TitleAPI.setSubTitle((EntityPlayerMP) args[0], ScriptUtils.connect(args, 1)));
  118. // -------------------------------------------------------------
  119. // Villager-Bibliothek
  120. // -------------------------------------------------------------
  121. parser.registerConsumer("villager.showtrades", (args, qd) ->
  122. ((EntityPlayer) args[0]).displayVillagerTradeGui(((EntityVillager) args[1])));
  123. // -------------------------------------------------------------
  124. // Player-Bibliothek
  125. // -------------------------------------------------------------
  126. parser.registerFunction("player.getitemamount", (args, qd) ->
  127. InventoryUtils.searchInventoryFor(((EntityPlayer) args[0]).inventory, (ItemStack) args[2], (boolean) args[1]));
  128. parser.registerFunction("player.removeitem", (args, qd) ->
  129. removeItem(args));
  130. parser.registerFunction("player.giveitem", (args, qd) ->
  131. giveItem(args));
  132. parser.registerConsumer("player.shootprojectile", (args, qd) ->
  133. EffectUtils.launchProjectile((EntityPlayer) args[0], getClass(args[1].toString()), ScriptUtils.getDouble(args[2]), args[3]));
  134. parser.registerConsumer("player.respawn", (args, qd) ->
  135. respawnPlayer(args));
  136. parser.registerConsumer("player.inventorytolist", (args, qd) ->
  137. qd.setVar(args[0].toString(), ((EntityPlayer) args[1]).inventory.mainInventory));
  138. parser.registerFunction("player.getnearest", (args, qd) ->
  139. Utils.getNearestPlayer(((Location) args[0]).getWorld(), ((Location) args[0]).getPos()));
  140. parser.registerConsumer("player.say", (args, qd) ->
  141. playerSay(args));
  142. parser.registerFunction("player.isafk", (args, qd) ->
  143. KajetansMod.afkManager.getEvent(AfkListener.class).isAfk(((EntityPlayer) args[0])));
  144. parser.registerConsumer("player.speak", (args, qd) ->
  145. sendMessageToGroup(args[0], qd, "§7[§r" + args[1] + "§7] " + ScriptUtils.connect(args, 2)));
  146. parser.registerConsumer("player.setcompass", (args, qd) ->
  147. ((EntityPlayerMP) args[0]).connection.sendPacket(new SPacketSpawnPosition(((Location) args[1]).getBlockPos())));
  148. parser.registerFunction("player.gethunger", (args, qd) ->
  149. ((EntityPlayer) args[0]).getFoodStats().getFoodLevel());
  150. parser.registerConsumer("player.sethunger", (args, qd) ->
  151. ((EntityPlayer) args[0]).getFoodStats().setFoodLevel(ScriptUtils.getInt(args[1])));
  152. parser.registerFunction("player.getsaturation", (args, qd) ->
  153. ReflectionUtils.getSaturation(((EntityPlayer) args[0]).getFoodStats()));
  154. parser.registerConsumer("player.setsaturation", (args, qd) ->
  155. ReflectionUtils.setSaturation(((EntityPlayer) args[0]).getFoodStats(), ScriptUtils.getFloat(args[1])));
  156. parser.registerFunction("player.getname", (args, qd) ->
  157. getName(args));
  158. parser.registerFunction("player.getfullname", (args, qd) ->
  159. KajetansMod.chatManager.getFullName((EntityPlayer) args[0]));
  160. parser.registerFunction("player.getuuid", (args, qd) ->
  161. getUuid(args));
  162. parser.registerFunction("player.getip", (args, qd) ->
  163. ((EntityPlayerMP) args[0]).connection.netManager.getRemoteAddress().toString());
  164. parser.registerFunction("player.iscreative", (args, qd) ->
  165. ((EntityPlayer) args[0]).isCreative());
  166. parser.registerFunction("player.isspectator", (args, qd) ->
  167. ((EntityPlayer) args[0]).isSpectator());
  168. parser.registerFunction("player.issurvival", (args, qd) ->
  169. !((EntityPlayer) args[0]).isCreative() && !((EntityPlayer) args[0]).isSpectator());
  170. parser.registerFunction("player.isadventure", (args, qd) ->
  171. !((EntityPlayer) args[0]).capabilities.allowEdit);
  172. parser.registerFunction("player.hasfly", (args, qd) ->
  173. ((EntityPlayer) args[0]).capabilities.allowFlying);
  174. parser.registerFunction("player.getlastdamager", (args, qd) ->
  175. getLastDamager(args));
  176. parser.registerConsumer("player.settag", (args, qd) ->
  177. setTag(args));
  178. parser.registerFunction("player.gettag", (args, qd) ->
  179. getTag(args));
  180. parser.registerConsumer("player.dropinventory", (args, qd) ->
  181. dropInventory(args));
  182. parser.registerFunction("player.gettarget", (args, qd) ->
  183. Utils.getPlayerTarget((EntityPlayer) args[0], ScriptUtils.getInt(args[1])));
  184. parser.registerFunction("player.hasquest", (args, qd) ->
  185. KajetansMod.scripts.hasScript((EntityPlayer) args[0]));
  186. parser.registerConsumer("player.action", (args, qd) ->
  187. sendToActionBar(args, qd));
  188. parser.registerConsumer("player.kick", (args, qd) ->
  189. kickPlayerFromQuest(args, qd));
  190. parser.registerConsumer("player.playsound", (args, qd) ->
  191. playSoundPlayer(args));
  192. parser.registerFunction("player.getbedspawn", (args, qd) ->
  193. getBedLocation(args));
  194. parser.registerConsumer("player.setbedspawn", (args, qd) ->
  195. ((EntityPlayer) args[0]).bedLocation = ((Location) args[1]).getBlockPos());
  196. parser.registerConsumer("player.damageitem", (args, qd) ->
  197. ((EntityPlayer) args[0]).getHeldItemMainhand().damageItem(ScriptUtils.getInt(args[1]), (EntityPlayer) args[0]));
  198. // -------------------------------------------------------------
  199. // Players-Bibliothek
  200. // -------------------------------------------------------------
  201. parser.registerFunction("players.getamount", (args, qd) ->
  202. KajetansMod.server.getCurrentPlayerCount());
  203. parser.registerConsumer("players.tolist", (args, qd) ->
  204. qd.setVar(args[0].toString(), Arrays.asList(KajetansMod.server.getOnlinePlayerNames())));
  205. parser.registerConsumer("players.toworldlist", (args, qd) ->
  206. qd.setVar(args[0].toString(), new ArrayList(ModDimensions.getWorldFromName(args[1].toString()).playerEntities)));
  207. parser.registerConsumer("players.near", (args, qd) ->
  208. 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())));
  209. // -------------------------------------------------------------
  210. // Rank-Bibliothek
  211. // -------------------------------------------------------------
  212. parser.registerConsumer("rank.get", (args, qd) ->
  213. qd.setVar(args[0].toString(), KajetansMod.chatManager.getRanks((EntityPlayer) args[1])));
  214. parser.registerConsumer("rank.register", (args, qd) ->
  215. KajetansMod.chatManager.registerRank(args[0].toString(), ScriptUtils.getInt(args[1]), args[2].toString()));
  216. parser.registerConsumer("rank.player", (args, qd) ->
  217. KajetansMod.chatManager.registerPlayerRank(UUID.fromString(args[0].toString()), args[1].toString()));
  218. parser.registerConsumer("rank.clear", (args, qd) ->
  219. KajetansMod.chatManager.clearRanks());
  220. // -------------------------------------------------------------
  221. // Custom-Bibliothek
  222. // -------------------------------------------------------------
  223. /*parser.registerConsumer("custom.registershapelessrecipe", (args, qd) ->
  224. registerShapelessRecipe(args));
  225. parser.registerConsumer("custom.registershapedrecipe", (args, qd) ->
  226. registerShapedRecipe(args));
  227. parser.registerConsumer("custom.registerfurnacerecipe", (args, qd) ->
  228. RecipeUtils.registerFurnaceRecipe((ItemStack) args[0], (ItemStack) args[1]));
  229. parser.registerConsumer("custom.clearrecipes", (args, qd) ->
  230. RecipeUtils.clearRecipes());*/
  231. // -------------------------------------------------------------
  232. // World-Bibliothek
  233. // -------------------------------------------------------------
  234. parser.registerAlias("world.getplayers", "players.toworldlist");
  235. parser.registerConsumer("world.setskills", (args, qd) ->
  236. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).skills = (boolean) args[1]);
  237. parser.registerConsumer("world.setblockprotections", (args, qd) ->
  238. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).blockProtection = (boolean) args[1]);
  239. parser.registerConsumer("world.setdefaultenchanting", (args, qd) ->
  240. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).defaultEnchanting = (boolean) args[1]);
  241. parser.registerConsumer("world.setpvpprotection", (args, qd) ->
  242. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).pvpProtection = (boolean) args[1]);
  243. parser.registerConsumer("world.setstatuseffects", (args, qd) ->
  244. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).statusEffects = (boolean) args[1]);
  245. parser.registerConsumer("world.setmanabar", (args, qd) ->
  246. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).manabar = (boolean) args[1]);
  247. parser.registerConsumer("world.setscrolls", (args, qd) ->
  248. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).scrolls = (boolean) args[1]);
  249. parser.registerConsumer("world.setdefaultproducing", (args, qd) ->
  250. KajetansMod.worldManager.getWorldPreferences(ModDimensions.getWorldFromName(args[0].toString())).defaultProducing = (boolean) args[1]);
  251. // -------------------------------------------------------------
  252. // Item-Bibliothek
  253. // -------------------------------------------------------------
  254. parser.registerConsumer("item.drop", (args, qd) ->
  255. dropItem(args));
  256. parser.registerFunction("item.gettype", (args, qd) ->
  257. ((ItemStack) args[0]).getItem().getRegistryName().toString());
  258. parser.registerFunction("item.getdata", (args, qd) ->
  259. ((ItemStack) args[0]).getMetadata());
  260. parser.registerConsumer("item.setdata", (args, qd) ->
  261. ((ItemStack) args[0]).setItemDamage(ScriptUtils.getInt(args[1])));
  262. parser.registerFunction("item.getamount", (args, qd) ->
  263. ((ItemStack) args[0]).getCount());
  264. parser.registerConsumer("item.setamount", (args, qd) ->
  265. ((ItemStack) args[0]).setCount(ScriptUtils.getInt(args[1])));
  266. parser.registerFunction("item.getname", (args, qd) ->
  267. ((ItemStack) args[0]).getDisplayName());
  268. parser.registerConsumer("item.setname", (args, qd) ->
  269. ((ItemStack) args[0]).setStackDisplayName(ScriptUtils.connect(args, 1)));
  270. parser.registerConsumer("item.getlore", (args, qd) ->
  271. qd.setVar(args[0].toString(), ItemStackUtils.getLore((ItemStack) args[1])));
  272. parser.registerConsumer("item.setlore", (args, qd) ->
  273. ItemStackUtils.setLore((ItemStack) args[0], (List<String>) args[1]));
  274. parser.registerConsumer("item.addlore", (args, qd) ->
  275. ItemStackUtils.addLore((ItemStack) args[0], ScriptUtils.connect(args, 2), ScriptUtils.getInt(args[1])));
  276. parser.registerFunction("item.getenchantlevel", (args, qd) ->
  277. EnchantmentHelper.getEnchantmentLevel(Enchantment.getEnchantmentByLocation(args[1].toString()), (ItemStack) args[0]));
  278. parser.registerConsumer("item.setcooldown", (args, qd) ->
  279. ((EntityPlayer) args[0]).getCooldownTracker().setCooldown(((ItemStack) args[1]).getItem(), ScriptUtils.getInt(args[2])));
  280. parser.registerFunction("item.gettooltype", (args, qd) ->
  281. Utils.getToolType((ItemStack) args[0]));
  282. // -------------------------------------------------------------
  283. // Location-Bibliothek
  284. // -------------------------------------------------------------
  285. parser.registerFunction("loc.distance", (args, qd) ->
  286. ((Location) args[0]).getPos().distanceTo(((Location) args[1]).getPos()));
  287. parser.registerConsumer("loc.setyaw", (args, qd) ->
  288. ((Location) args[0]).setYaw(ScriptUtils.getFloat(args[1])));
  289. parser.registerConsumer("loc.setpitch", (args, qd) ->
  290. ((Location) args[0]).setPitch(ScriptUtils.getFloat(args[1])));
  291. parser.registerFunction("loc.mod", (args, qd) ->
  292. ((Location) args[0]).copyAdd(ScriptUtils.getDouble(args[1]), ScriptUtils.getDouble(args[2]), ScriptUtils.getDouble(args[3])));
  293. parser.registerFunction("loc.getcoord", (args, qd) ->
  294. getCoordOfLocation(args));
  295. parser.registerFunction("loc.gettime", (args, qd) ->
  296. ((Long) ((Location) args[0]).getWorld().getWorldTime()).doubleValue());
  297. parser.registerFunction("loc.hasstorm", (args, qd) ->
  298. ((Location) args[0]).getWorld().isRaining());
  299. parser.registerFunction("loc.isbetween", (args, qd) ->
  300. isBetween(args));
  301. // -------------------------------------------------------------
  302. // Block-Bibliothek
  303. // -------------------------------------------------------------
  304. parser.registerFunction("block.gettype", (args, qd) ->
  305. ((Location) args[0]).getWorld().getBlockState(((Location) args[0]).getBlockPos()).getBlock().getRegistryName().toString());
  306. parser.registerFunction("block.getdata", (args, qd) ->
  307. (double) getBlockData((Location) args[0]));
  308. parser.registerConsumer("block.clone", (args, qd) ->
  309. cloneBlock(args));
  310. parser.registerConsumer("block.set", (args, qd) ->
  311. setBlock(args, qd));
  312. parser.registerConsumer("block.set2", (args, qd) ->
  313. setBlockWithData(args, qd));
  314. parser.registerConsumer("block.setsign", (args, qd) ->
  315. setSign(args));
  316. parser.registerFunction("block.getsign", (args, qd) ->
  317. getSign(args));
  318. parser.registerConsumer("block.setdoorstatus", (args, qd) ->
  319. setDoorStatus(args));
  320. parser.registerFunction("block.getdoorstatus", (args, qd) ->
  321. getDoorStatus(args));
  322. parser.registerFunction("block.isdoor", (args, qd) ->
  323. isDoor(args));
  324. parser.registerFunction("block.issolid", (args, qd) ->
  325. isSolid(args));
  326. parser.registerFunction("block.tostack", (args, qd) ->
  327. getStackFromBlock((Location) args[0]));
  328. parser.registerFunction("block.getitemamount", (args, qd) ->
  329. getItemAmountChest(args));
  330. parser.registerFunction("block.additem", (args, qd) ->
  331. addItemAmountChest(args));
  332. parser.registerFunction("block.subitem", (args, qd) ->
  333. removeItemAmountChest(args));
  334. // -------------------------------------------------------------
  335. // Event-Bibliothek
  336. // -------------------------------------------------------------
  337. parser.registerConsumer("event.addloc", (args, qd) ->
  338. ((MinecraftScript) qd).addLocation((Location) args[0]));
  339. parser.registerConsumer("event.removeloc", (args, qd) ->
  340. ((MinecraftScript) qd).removeLocation((Location) args[0]));
  341. parser.registerConsumer("event.clearlocs", (args, qd) ->
  342. ((MinecraftScript) qd).clearLocations());
  343. // -------------------------------------------------------------
  344. // Skill-Bibliothek
  345. // -------------------------------------------------------------
  346. parser.registerConsumer("skill.register", (args, qd) ->
  347. KajetansMod.skills.registerSkill(ScriptUtils.getInt(args[0]), (ItemStack) args[1], me.km.effects.Effect.valueOf(args[2].toString()), args[3].toString(), args[4].toString()));
  348. parser.registerConsumer("skill.clear", (args, qd) ->
  349. KajetansMod.skills.clearSkills());
  350. // -------------------------------------------------------------
  351. // Job-Bibliothek
  352. // -------------------------------------------------------------
  353. parser.registerFunction("job.getlevel", (args, qd) ->
  354. KajetansMod.jobs.getLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
  355. parser.registerConsumer("job.addlevel", (args, qd) ->
  356. KajetansMod.jobs.addLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
  357. parser.registerConsumer("job.setlevel", (args, qd) ->
  358. KajetansMod.jobs.setLevel((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
  359. parser.registerFunction("job.getxp", (args, qd) ->
  360. KajetansMod.jobs.getXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
  361. parser.registerConsumer("job.addxp", (args, qd) ->
  362. KajetansMod.jobs.addXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
  363. parser.registerConsumer("job.setxp", (args, qd) ->
  364. KajetansMod.jobs.setXP((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), ScriptUtils.getByte(args[2])));
  365. parser.registerConsumer("job.registerjob", (args, qd) ->
  366. KajetansMod.jobs.registerJob(ScriptUtils.getByte(args[0]), ScriptUtils.connect(args, 1)));
  367. parser.registerConsumer("job.registerrecipe", (args, qd) ->
  368. KajetansMod.jobs.registerRecipe(ScriptUtils.getByte(args[0]), ScriptHelper.getItem(args[1].toString()), ScriptUtils.getByte(args[2])));
  369. parser.registerConsumer("job.registermaterial", (args, qd) ->
  370. KajetansMod.jobs.registerPreferedBlock(ScriptUtils.getByte(args[0]), Block.getBlockFromName(args[1].toString())));
  371. parser.registerConsumer("job.registerskill", (args, qd) ->
  372. KajetansMod.jobs.registerSkill(ScriptUtils.getByte(args[0]), KajetansMod.skills.getSkill(ScriptUtils.getInt(args[1])), ScriptUtils.getByte(args[2]), ScriptUtils.getByte(args[3])));
  373. parser.registerFunction("job.getamount", (args, qd) ->
  374. KajetansMod.jobs.getNumberOfJobs());
  375. parser.registerFunction("job.getname", (args, qd) ->
  376. KajetansMod.jobs.getJobName(ScriptUtils.getByte(args[0])));
  377. parser.registerFunction("job.geteffectlevel", (args, qd) ->
  378. EffectUtils.getEffectLevel((EntityPlayer) args[0], me.km.effects.Effect.valueOf(args[1].toString())));
  379. parser.registerFunction("job.hasjob", (args, qd) ->
  380. KajetansMod.jobs.hasJob((EntityPlayer) args[0], ScriptUtils.getByte(args[1])));
  381. parser.registerFunction("job.hasrecipe", (args, qd) ->
  382. KajetansMod.jobs.hasRecipe((EntityPlayer) args[0], ScriptHelper.getItem(args[1].toString())));
  383. parser.registerConsumer("job.getjobs", (args, qd) ->
  384. qd.setVar(args[0].toString(), KajetansMod.jobs.getJobs((EntityPlayer) args[1])));
  385. parser.registerFunction("job.isregmaterial", (args, qd) ->
  386. KajetansMod.jobs.isPreferedMaterial((EntityPlayer) args[0],Block.getBlockFromName(args[1].toString())));
  387. parser.registerConsumer("job.setjob", (args, qd) ->
  388. KajetansMod.jobs.setJob((EntityPlayer) args[0], ScriptUtils.getByte(args[1]), (boolean) args[2]));
  389. parser.registerConsumer("job.reset", (args, qd) ->
  390. KajetansMod.jobs.resetAll());
  391. // -------------------------------------------------------------
  392. // Entity - Befehle
  393. // -------------------------------------------------------------
  394. parser.registerFunction("entity.getlocation", (args, qd) ->
  395. new Location(((Entity) args[0])));
  396. parser.registerConsumer("entity.damage", (args, qd) ->
  397. damageEntity(args));
  398. parser.registerFunction("entity.gethealth", (args, qd) ->
  399. ((EntityLivingBase) args[0]).getHealth());
  400. parser.registerConsumer("entity.sethealth", (args, qd) ->
  401. ((EntityLivingBase) args[0]).setHealth(ScriptUtils.getFloat(args[1])));
  402. parser.registerConsumer("entity.setname", (args, qd) ->
  403. nameEntity(args));
  404. parser.registerConsumer("entity.throw", (args, qd) ->
  405. Utils.setVelocity((Entity) args[0], ScriptUtils.getDouble(args[1]), ScriptUtils.getDouble(args[2]), ScriptUtils.getDouble(args[3])));
  406. parser.registerConsumer("entity.teleport", (args, qd) ->
  407. Utils.teleportEntity((Entity) args[0], (Location) args[1]));
  408. parser.registerConsumer("entity.setequip", (args, qd) ->
  409. setEntityEquip(args));
  410. parser.registerFunction("entity.getequip", (args, qd) ->
  411. getEntityEquip(args));
  412. parser.registerConsumer("entity.removeall", (args, qd) ->
  413. removeEntities(args));
  414. parser.registerConsumer("entity.remove", (args, qd) ->
  415. ((Entity) args[0]).setDead());
  416. parser.registerConsumer("entity.setinvulnerable", (args, qd) ->
  417. ((Entity) args[0]).setEntityInvulnerable((boolean) args[1]));
  418. parser.registerConsumer("entity.setsilent", (args, qd) ->
  419. ((Entity) args[0]).setSilent((boolean) args[1]));
  420. parser.registerConsumer("entity.hide", (args, qd) ->
  421. ((Entity) args[0]).setInvisible(true));
  422. parser.registerConsumer("entity.show", (args, qd) ->
  423. ((Entity) args[0]).setInvisible(false));
  424. parser.registerConsumer("entity.ride", (args, qd) ->
  425. ((Entity) args[0]).startRiding(((Entity) args[1])));
  426. parser.registerConsumer("entity.setvars", (args, qd) ->
  427. ScriptVars.setEntityVars(qd, Utils.getNearestEntity(((Location) args[0]).getWorld(), ((Location) args[0]).getPos(), 3, (Class<? extends Entity>) getClass("net.minecraft.entity." + args[1]))));
  428. parser.registerConsumer("entity.addeffect", (args, qd) ->
  429. EffectUtils.addPotionTo((EntityLivingBase) args[0], Potion.getPotionFromResourceLocation(args[1].toString()), ScriptUtils.getInt(args[2]), ScriptUtils.getInt(args[3])));
  430. parser.registerFunction("entity.haseffect", (args, qd) ->
  431. ((EntityLivingBase) args[0]).isPotionActive(Potion.getPotionFromResourceLocation(args[1].toString())));
  432. parser.registerConsumer("entity.goto", (args, qd) ->
  433. NmsUtilities.walkTo((EntityLiving) args[0], ((Location) args[1]).getPos(), ScriptUtils.getDouble(args[2])));
  434. parser.registerConsumer("entity.explode", (args, qd) ->
  435. ((EntityCreeper) args[0]).ignite());
  436. parser.registerConsumer("entity.spawnitemframe", (args, qd) ->
  437. spawnItemFrame(args));
  438. parser.registerFunction("entity.getitemframe", (args, qd) ->
  439. Utils.getNearestEntity(((Location) args[0]).getWorld(), ((Location) args[0]).getPos().addVector(0.5, 0, 0.5), 1, EntityItemFrame.class).getDisplayedItem());
  440. parser.registerFunction("entity.getpotiontype", (args, qd) ->
  441. getPotionType(args));
  442. parser.registerConsumer("entity.setgravity", (args, qd) ->
  443. ((Entity) args[0]).setNoGravity(!(boolean) args[1]));
  444. parser.registerConsumer("entity.iswet", (args, qd) ->
  445. ((Entity) args[0]).isWet());
  446. // -------------------------------------------------------------
  447. // Status-Bibliothek
  448. // -------------------------------------------------------------
  449. parser.registerFunction("status.getmana", (args, qd) ->
  450. (double) EnvironmentAPI.getMana(((EntityPlayer) args[0])));
  451. parser.registerFunction("status.getcold", (args, qd) ->
  452. (double) EnvironmentAPI.getCold(((EntityPlayer) args[0])));
  453. parser.registerFunction("status.getenergy", (args, qd) ->
  454. (double) EnvironmentAPI.getEnergy(((EntityPlayer) args[0])));
  455. parser.registerFunction("status.getthirst", (args, qd) ->
  456. (double) EnvironmentAPI.getThirst(((EntityPlayer) args[0])));
  457. parser.registerConsumer("status.changemange", (args, qd) ->
  458. EnvironmentAPI.changeMana(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
  459. parser.registerConsumer("status.changecold", (args, qd) ->
  460. EnvironmentAPI.changeCold(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
  461. parser.registerConsumer("status.changeenergie", (args, qd) ->
  462. EnvironmentAPI.changeEnergy(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
  463. parser.registerConsumer("status.changethirst", (args, qd) ->
  464. EnvironmentAPI.changeThirst(((EntityPlayer) args[0]), ScriptUtils.getInt(args[1])));
  465. parser.registerConsumer("status.resetmana", (args, qd) ->
  466. EnvironmentAPI.resetMana(((EntityPlayer) args[0])));
  467. parser.registerConsumer("status.resetcold", (args, qd) ->
  468. EnvironmentAPI.resetCold(((EntityPlayer) args[0])));
  469. parser.registerConsumer("status.resetenergy", (args, qd) ->
  470. EnvironmentAPI.resetEnergy(((EntityPlayer) args[0])));
  471. parser.registerConsumer("status.resetthirst", (args, qd) ->
  472. EnvironmentAPI.resetThirst(((EntityPlayer) args[0])));
  473. parser.registerFunction("status.gettemperature", (args, qd) ->
  474. (double) EnvironmentAPI.getTemperature(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
  475. // -------------------------------------------------------------
  476. // GMap-Bibliothek
  477. // -------------------------------------------------------------
  478. parser.registerConsumer("gmap.removeall", (args, qd) ->
  479. KajetansMod.scripts.getDataBank(ScriptBank.class).removeMap(args[0].toString()));
  480. parser.registerConsumer("gmap.add", (args, qd) ->
  481. KajetansMod.scripts.getDataBank(ScriptBank.class).addMapElement(args[0].toString(), args[1].toString(), args[2].toString()));
  482. parser.registerConsumer("gmap.remove", (args, qd) ->
  483. KajetansMod.scripts.getDataBank(ScriptBank.class).removeMapElement(args[0].toString(), args[1].toString()));
  484. parser.registerConsumer("gmap.totable", (args, qd) ->
  485. qd.setVar(args[0].toString(), KajetansMod.scripts.getDataBank(ScriptBank.class).getGlobalMapAsTable(args[1].toString())));
  486. parser.registerFunction("gmap.get", (args, qd) ->
  487. KajetansMod.scripts.getDataBank(ScriptBank.class).getMapValue(args[0].toString(), args[1].toString()));
  488. // -------------------------------------------------------------
  489. // GDMap-Bibliothek
  490. // -------------------------------------------------------------
  491. parser.registerConsumer("gdmap.removeall", (args, qd) ->
  492. KajetansMod.scripts.getDataBank(ScriptBank.class).removeDualMap(args[0].toString()));
  493. parser.registerConsumer("gdmap.add", (args, qd) ->
  494. KajetansMod.scripts.getDataBank(ScriptBank.class).addDualMapElement(args[0].toString(), args[1].toString(), args[2].toString(), args[3].toString()));
  495. parser.registerConsumer("gdmap.remove", (args, qd) ->
  496. KajetansMod.scripts.getDataBank(ScriptBank.class).removeDualMapElement(args[0].toString(), args[1].toString(), args[2].toString()));
  497. parser.registerConsumer("gdmap.totable", (args, qd) ->
  498. qd.setVar(args[0].toString(), KajetansMod.scripts.getDataBank(ScriptBank.class).getGlobalDualMapAsTable(args[1].toString(), args[2].toString())));
  499. parser.registerFunction("gdmap.get", (args, qd) ->
  500. KajetansMod.scripts.getDataBank(ScriptBank.class).getDualMapValue(args[0].toString(), args[1].toString(), args[2].toString()));
  501. // -------------------------------------------------------------
  502. // Table-Bibliothek
  503. // -------------------------------------------------------------
  504. parser.registerConsumer("table.print", (args, qd) ->
  505. printTable(args, qd));
  506. parser.registerConsumer("table.new", (args, qd) ->
  507. qd.setVar(args[0].toString(), new Table(ScriptUtils.getInt(args[1]))));
  508. parser.registerConsumer("table.frommap", (args, qd) ->
  509. qd.setVar(args[0].toString(), new Table((Map<Object, Object>) args[1])));
  510. parser.registerConsumer("table.sort", (args, qd) ->
  511. ((Table) args[0]).sort());
  512. parser.registerConsumer("table.reverse", (args, qd) ->
  513. ((Table) args[0]).reverse());
  514. parser.registerConsumer("table.shuffle", (args, qd) ->
  515. ((Table) args[0]).shuffle());
  516. parser.registerConsumer("table.clear", (args, qd) ->
  517. ((Table) args[0]).clear());
  518. parser.registerConsumer("table.addrow", (args, qd) ->
  519. ((Table) args[0]).addRow(Arrays.copyOfRange(args, 1, args.length)));
  520. parser.registerConsumer("table.removerow", (args, qd) ->
  521. ((Table) args[0]).removeRow(ScriptUtils.getInt(args[1])));
  522. parser.registerFunction("table.get", (args, qd) ->
  523. ((Table) args[0]).getElement(ScriptUtils.getInt(args[1]), ScriptUtils.getInt(args[2])));
  524. parser.registerFunction("table.getindexof", (args, qd) ->
  525. (double) ((Table) args[0]).getIndexOf(args[1]));
  526. parser.registerConsumer("table.setsortcolumn", (args, qd) ->
  527. ((Table) args[0]).setSortColumn(ScriptUtils.getInt(args[1])));
  528. parser.registerFunction("table.getsize", (args, qd) ->
  529. (double) ((Table) args[0]).getSize());
  530. // -------------------------------------------------------------
  531. // Plot-Bibliothek
  532. // -------------------------------------------------------------
  533. parser.registerFunction("plot.hastag", (args, qd) ->
  534. KajetansMod.plots.getDataBank(ProtectionBank.class).hasTag(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos(), args[1].toString()));
  535. parser.registerConsumer("plot.add", (args, qd) ->
  536. addPlot(args));
  537. parser.registerFunction("plot.getid", (args, qd) ->
  538. KajetansMod.plots.getDataBank(ProtectionBank.class).getFirstRegionId(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
  539. parser.registerFunction("plot.canbuild", (args, qd) ->
  540. KajetansMod.plots.getDataBank(ProtectionBank.class).canBuild(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos(), (EntityPlayer) args[1]));
  541. parser.registerFunction("plot.getname", (args, qd) ->
  542. KajetansMod.plots.getDataBank(ProtectionBank.class).getFirstRegionName(((Location) args[0]).getWorld(), ((Location) args[0]).getBlockPos()));
  543. // -------------------------------------------------------------
  544. // Quest-Bibliothek
  545. // -------------------------------------------------------------
  546. parser.registerConsumer("quest.end", (args, qd) ->
  547. endPlayerScript(args, qd));
  548. parser.registerConsumer("quest.playerstolist", (args, qd) ->
  549. qd.setVar(args[0].toString(), new ArrayList<>(((PlayerScript) qd).getPlayers())));
  550. parser.registerFunction("quest.getplayeramount", (args, qd) ->
  551. ((PlayerScript) qd).getPlayers().size());
  552. parser.registerConsumer("quest.start", (args, qd) ->
  553. startPlayerScript(args, qd));
  554. parser.registerFunction("quest.isactive", (args, qd) ->
  555. KajetansMod.scripts.isActive(args[0].toString()));
  556. parser.registerFunction("quest.getleader", (args, qd) ->
  557. getPlayerScriptLeader(qd));
  558. // -------------------------------------------------------------
  559. // Scoreboard-Bibliothek
  560. // -------------------------------------------------------------
  561. parser.registerConsumer("sb.add", (args, qd) ->
  562. addToScoreBoard(args, qd));
  563. parser.registerConsumer("sb.remove", (args, qd) ->
  564. removeFromScoreBoard(args, qd));
  565. parser.registerConsumer("sb.reset", (args, qd) ->
  566. doForGroup(args[0], qd, p -> KajetansMod.scoreboard.resetScoreboard((EntityPlayerMP) p)));
  567. // -------------------------------------------------------------
  568. // Effect-Bibliothek
  569. // -------------------------------------------------------------
  570. parser.registerConsumer("effect.playsound", (args, qd) ->
  571. playSound(args));
  572. parser.registerConsumer("effect.play", (args, qd) ->
  573. playParticle(args));
  574. // -------------------------------------------------------------
  575. // Inventory-Bibliothek
  576. // -------------------------------------------------------------
  577. parser.registerConsumer("inv.new", (args, qd) ->
  578. qd.setVar(args[0].toString(), new SnuviInventory(args[2].toString(), ScriptUtils.getInt(args[1]), ((MinecraftScript) qd).getNewId())));
  579. parser.registerConsumer("inv.loadblock", (args, qd) ->
  580. qd.setVar(args[0].toString(), newInventory((Location) args[1], (MinecraftScript) qd, args[2].toString())));
  581. parser.registerConsumer("inv.setitem", (args, qd) ->
  582. ((IInventory) args[0]).setInventorySlotContents(ScriptUtils.getInt(args[1]), (ItemStack) args[2]));
  583. parser.registerFunction("inv.getitem", (args, qd) ->
  584. ((IInventory) args[0]).getStackInSlot(ScriptUtils.getInt(args[1])));
  585. parser.registerConsumer("inv.open", (args, qd) ->
  586. new ScriptInventoryHolder((SnuviInventory) args[0], (EntityPlayerMP) args[1], (MinecraftScript) qd).openForPlayer((EntityPlayerMP) args[1]));
  587. parser.registerConsumer("inv.close", (args, qd) ->
  588. ((EntityPlayer) args[0]).closeScreen());
  589. // -------------------------------------------------------------
  590. // Read-Bibliothek
  591. // -------------------------------------------------------------
  592. parser.registerFunction("read.player", (args, qd) ->
  593. Utils.getPlayerByName(args[0].toString()));
  594. parser.registerFunction("read.location", (args, qd) ->
  595. new Location(qd, args[0].toString()));
  596. parser.registerFunction("read.item", (args, qd) ->
  597. ScriptHelper.getItemStack(args, 0));
  598. parser.registerFunction("read.spawnmob", (args, qd) ->
  599. NmsUtilities.getEntityFromNbtString(qd, ScriptUtils.connect(args," ", 1).replace("'", "\""), (Location) args[0]));
  600. // -------------------------------------------------------------
  601. // Text-Bibliothek
  602. // -------------------------------------------------------------
  603. parser.registerFunction("text.location", (args, qd) ->
  604. ((Location) args[0]).toString());
  605. parser.registerFunction("text.locationblock", (args, qd) ->
  606. ((Location) args[0]).toBlockString());
  607. parser.registerFunction("text.item", (args, qd) ->
  608. ScriptHelper.getItemStackString((ItemStack) args[0]));
  609. // -------------------------------------------------------------
  610. // Ohne Bibliothek
  611. // -------------------------------------------------------------
  612. parser.registerConsumer("overload", (args, qd) ->
  613. qd.overload(ScriptUtils.readCode("scripts/" + args[0].toString(), ".txt")));
  614. parser.registerFunction("getglobalvar", (args, qd) ->
  615. getGlobalVar(args));
  616. parser.registerAlias("ggv", "getglobalvar");
  617. parser.registerConsumer("setglobalvar", (args, qd) ->
  618. setGlobalVar(args));
  619. parser.registerAlias("sgv", "setglobalvar");
  620. parser.registerConsumer("msg", (args, qd) ->
  621. sendMessageToGroup(args[0], qd, ScriptUtils.connect(args, 1)));
  622. parser.registerFunction("removeformat", (args, qd) ->
  623. ScriptUtils.connect(args, 0).replaceAll("§.", ""));
  624. parser.registerFunction("concatspace", (args, qd) ->
  625. ScriptUtils.connect(args, " ", 0));
  626. parser.registerFunction("onlyletters", (args, qd) ->
  627. onlyLetters(ScriptUtils.connect(args, 0)));
  628. parser.registerConsumer("command", (args, qd) ->
  629. KajetansMod.server.commandManager.executeCommand(KajetansMod.server, ScriptUtils.connect(args, 0)));
  630. }
  631. @Override
  632. public void printException(SnuviException ex)
  633. {
  634. if(KajetansMod.debugMode || KajetansMod.scripts.getSnuviParser().printStack)
  635. {
  636. printConsoleException(ex, null);
  637. }
  638. sendToDevsWithSuffix("§cError in '" + ex.getScriptName() + "'");
  639. printGeneralException(ex);
  640. }
  641. @Override
  642. public void printException(SnuviException ex, Script sc)
  643. {
  644. if(KajetansMod.debugMode || KajetansMod.scripts.getSnuviParser().printStack)
  645. {
  646. printConsoleException(ex, sc);
  647. }
  648. sendToDevsWithSuffix("§cError in '" + sc.getName()+ "'");
  649. printGeneralException(ex);
  650. }
  651. @Override
  652. public void printInfo(String s)
  653. {
  654. sendToDevsWithSuffix(s);
  655. }
  656. @Override
  657. public void printWarning(String s)
  658. {
  659. sendWarningToAllDevs(s);
  660. }
  661. private void printGeneralException(SnuviException ex)
  662. {
  663. if(ex.getCode() != null)
  664. {
  665. ArrayList<String> list = ex.getWholeCode();
  666. for(int i = 1; i <= list.size(); i++)
  667. {
  668. sendToDevsWithHelpList("§cZeile " + i + ":", list.get(i - 1));
  669. }
  670. }
  671. if(ex.getLine() != -1)
  672. {
  673. sendToDevsWithHelpList("§cZeilennummer:", String.valueOf(ex.getLine()));
  674. }
  675. if(ex.getOriginalException() != null)
  676. {
  677. Exception another = ex.getOriginalException();
  678. if(another.getLocalizedMessage() == null)
  679. {
  680. sendToDevsWithHelpList("§cFehler:", another.getClass().getSimpleName());
  681. }
  682. else
  683. {
  684. sendToDevsWithHelpList("§cFehler:", another.getClass().getSimpleName() + " - " + another.getLocalizedMessage());
  685. }
  686. }
  687. else
  688. {
  689. sendToDevsWithHelpList("§cFehler:", ex.getClass().getSimpleName());
  690. if(ex instanceof PreScriptException)
  691. {
  692. sendToDevsWithList("§c" + ((PreScriptException) ex).getException());
  693. return;
  694. }
  695. }
  696. if(ex instanceof IllegalStringException)
  697. {
  698. sendToDevsWithHelpList("§cUngültiger Wert:", ((IllegalStringException) ex).getBadString());
  699. }
  700. }
  701. public void printConsoleException(SnuviException ex, Script sc)
  702. {
  703. Module m = KajetansMod.scripts;
  704. m.sendWarningToConsole("Error in '" + (sc == null ? ex.getScriptName() : sc.getName()) + "'");
  705. if(ex.getCode() != null)
  706. {
  707. ArrayList<String> list = ex.getWholeCode();
  708. for(int i = 1; i <= list.size(); i++)
  709. {
  710. m.sendWarningToConsole("Zeile " + i + ": " + list.get(i - 1));
  711. }
  712. }
  713. if(ex.getLine() != -1)
  714. {
  715. m.sendWarningToConsole("Zeilennummer: " + ex.getLine());
  716. }
  717. if(ex.getOriginalException() != null)
  718. {
  719. Exception another = ex.getOriginalException();
  720. if(another.getLocalizedMessage() == null)
  721. {
  722. m.sendWarningToConsole("Fehler: " + another.getClass().getSimpleName());
  723. }
  724. else
  725. {
  726. m.sendWarningToConsole("Fehler: " + another.getClass().getSimpleName() + " - " + another.getLocalizedMessage());
  727. }
  728. }
  729. else
  730. {
  731. m.sendWarningToConsole("Fehler: " + ex.getClass().getSimpleName());
  732. if(ex instanceof PreScriptException)
  733. {
  734. m.sendWarningToConsole(((PreScriptException) ex).getException());
  735. return;
  736. }
  737. }
  738. if(ex instanceof IllegalStringException)
  739. {
  740. m.sendWarningToConsole("Ungültiger Wert: " + ((IllegalStringException) ex).getBadString());
  741. }
  742. }
  743. private static void printTable(Object[] args, Script sc)
  744. {
  745. Table t = (Table) args[1];
  746. if(t.getSize() >= 60)
  747. {
  748. throw new IllegalArgumentException("table is too big");
  749. }
  750. TableAPI.getTable(t, ScriptUtils.getInt(args[2]), args[3].toString(),
  751. args.length >= 5 ? (boolean) args[4] : false)
  752. .forEach(s -> sendMessageToGroup(args[0], sc, s));
  753. }
  754. private static Location getBedLocation(Object[] args)
  755. {
  756. WorldServer ws = ModDimensions.getWorldFromName(args[1].toString());
  757. return new Location(ws, ((EntityPlayer) args[0]).getBedLocation(ws.provider.getDimension()));
  758. }
  759. private static boolean isDoor(Object[] args)
  760. {
  761. Location l = (Location) args[0];
  762. return l.getWorld().getBlockState(l.getBlockPos()).getBlock() instanceof BlockDoor;
  763. }
  764. private static boolean getDoorStatus(Object[] args)
  765. {
  766. Location l = (Location) args[0];
  767. return BlockDoor.isOpen(l.getWorld(), l.getBlockPos());
  768. }
  769. private static void setDoorStatus(Object[] args)
  770. {
  771. Location l = (Location) args[0];
  772. BlockPos pos = l.getBlockPos();
  773. ((BlockDoor) l.getWorld().getBlockState(pos).getBlock()).toggleDoor(l.getWorld(), pos, (boolean) args[1]);
  774. }
  775. private static void playerSay(Object[] args)
  776. {
  777. try
  778. {
  779. ((EntityPlayerMP) args[0]).connection.processChatMessage(new CPacketChatMessage(ScriptUtils.connect(args, 1)));
  780. }
  781. catch(ThreadQuickExitException ex)
  782. {
  783. // Minecraft needs this for canceling and queueing into main thread
  784. }
  785. }
  786. private static void respawnPlayer(Object[] args)
  787. {
  788. try
  789. {
  790. ((EntityPlayerMP) args[0]).connection.processClientStatus(new CPacketClientStatus(CPacketClientStatus.State.PERFORM_RESPAWN));
  791. }
  792. catch(ThreadQuickExitException ex)
  793. {
  794. // Minecraft needs this for canceling and queueing into main thread
  795. }
  796. }
  797. private static Class getClass(String s)
  798. {
  799. try
  800. {
  801. return Class.forName(s);
  802. }
  803. catch(ClassNotFoundException ex)
  804. {
  805. throw new IllegalStringException(s);
  806. }
  807. }
  808. private static int getItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
  809. {
  810. Location l = (Location) args[0];
  811. TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
  812. if(te == null || !(te instanceof TileEntityChest))
  813. {
  814. return 0;
  815. }
  816. return InventoryUtils.searchInventoryFor(((TileEntityChest) te), (ItemStack) args[2], (boolean) args[1]);
  817. }
  818. private static ItemStack addItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
  819. {
  820. Location l = (Location) args[0];
  821. ItemStack stack = ((ItemStack) args[1]);
  822. TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
  823. if(te == null || !(te instanceof TileEntityChest))
  824. {
  825. return stack;
  826. }
  827. stack.setCount(InventoryUtils.addToInventory((TileEntityChest) te, stack));
  828. return stack;
  829. }
  830. private static ItemStack removeItemAmountChest(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
  831. {
  832. Location l = (Location) args[0];
  833. ItemStack stack = ((ItemStack) args[1]);
  834. TileEntity te = l.getWorld().getTileEntity(l.getBlockPos());
  835. if(te == null || !(te instanceof TileEntityChest))
  836. {
  837. return stack;
  838. }
  839. stack.setCount(InventoryUtils.removeFromInventory((TileEntityChest) te, stack));
  840. return stack;
  841. }
  842. private static Object getCoordOfLocation(Object[] args) throws IllegalStringLocationException
  843. {
  844. Location l = (Location) args[0];
  845. switch(args[1].toString())
  846. {
  847. case "x":
  848. return l.getX();
  849. case "y":
  850. return l.getY();
  851. case "z":
  852. return l.getZ();
  853. case "bx":
  854. return (double) MathHelper.floor(l.getX());
  855. case "by":
  856. return (double) MathHelper.floor(l.getY());
  857. case "bz":
  858. return (double) MathHelper.floor(l.getZ());
  859. case "w":
  860. return ModDimensions.getWorldName(l.getWorld());
  861. default:
  862. return null;
  863. }
  864. }
  865. private static void cloneBlock(Object[] args) throws IllegalStringLocationException
  866. {
  867. Location l = (Location) args[1];
  868. IBlockState state = getBlockState((Location) args[0]);
  869. l.getWorld().setBlockState(l.getBlockPos(), state);
  870. }
  871. private static ItemStack removeItem(Object[] args) throws PlayerNotFoundException, IllegalItemStackStringException
  872. {
  873. ItemStack stack = ((ItemStack) args[1]).copy();
  874. stack.setCount(InventoryUtils.removeFromInventory(((EntityPlayer) args[0]).inventory, stack));
  875. return stack;
  876. }
  877. private static void dropItem(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
  878. {
  879. Location l = (Location) args[0];
  880. World w = l.getWorld();
  881. BlockPos pos = l.getBlockPos();
  882. ItemStack stack = ((ItemStack) args[1]).copy();
  883. int amount = stack.getCount();
  884. while(amount > stack.getMaxStackSize())
  885. {
  886. stack.setCount(stack.getMaxStackSize());
  887. amount -= stack.getMaxStackSize();
  888. ItemStackUtils.drop(w, pos, stack.copy());
  889. }
  890. if(amount > 0)
  891. {
  892. stack.setCount(amount);
  893. ItemStackUtils.drop(w, pos, stack);
  894. }
  895. }
  896. private static ItemStack giveItem(Object[] args) throws PlayerNotFoundException, IllegalItemStackStringException
  897. {
  898. ItemStack stack = ((ItemStack) args[1]).copy();
  899. stack.setCount(InventoryUtils.addToInventory(((EntityPlayer) args[0]).inventory, stack));
  900. return stack;
  901. }
  902. private static void endPlayerScript(Object[] args, Script qd) throws NumberFormatException, UnsupportedOperationException
  903. {
  904. if(qd.getClass() == MinecraftScript.class)
  905. {
  906. throw new UnsupportedOperationException();
  907. }
  908. ((PlayerScript) qd).getPlayers().stream().forEach((p) ->
  909. {
  910. KajetansMod.scripts.send(p, "Du hast die Quest geschafft!");
  911. });
  912. KajetansMod.scripts.getSnuviParser().termSafe(qd);
  913. throw new HoldCodeException();
  914. }
  915. private static void setBlock(Object[] args, Script qd) throws IllegalStringLocationException, IllegalItemStackStringException
  916. {
  917. Location l = (Location) args[0];
  918. ItemStack stack = (ItemStack) args[1];
  919. l.getWorld().setBlockState(l.getBlockPos(), Block.getBlockFromItem(stack.getItem()).getStateFromMeta(stack.getMetadata()));
  920. qd.incLoopCounter();
  921. }
  922. private static void setBlockWithData(Object[] args, Script qd) throws IllegalStringLocationException
  923. {
  924. Location l = (Location) args[0];
  925. if(args.length >= 4)
  926. {
  927. NmsUtilities.setBlockWithData(l.getWorld(), l.getBlockPos(), ScriptUtils.getInt(args[2]), Block.getBlockFromName(args[1].toString()), ScriptUtils.connect(args, 3));
  928. }
  929. else
  930. {
  931. NmsUtilities.setBlockWithData(l.getWorld(), l.getBlockPos(), ScriptUtils.getInt(args[2]), Block.getBlockFromName(args[1].toString()), null);
  932. }
  933. qd.incLoopCounter();
  934. }
  935. private static void dropInventory(Object[] args)
  936. {
  937. ((EntityPlayer) args[0]).inventory.dropAllItems();
  938. }
  939. private static void playSound(Object[] args) throws IllegalStringLocationException
  940. {
  941. Location l = ((Location) args[0]);
  942. Vec3d v = l.getPos();
  943. EffectUtils.playSound((WorldServer) l.getWorld(), SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER, v.x, v.y, v.z);
  944. }
  945. private static void playSoundPlayer(Object[] args) throws IllegalStringLocationException
  946. {
  947. EffectUtils.playSound((EntityPlayerMP) args[0], SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER);
  948. }
  949. private static void playParticle(Object[] args) throws IllegalStringLocationException
  950. {
  951. Location l = ((Location) args[0]).copyAdd(0.5, 0.5, 0.5);
  952. EffectUtils.spawnParticle((WorldServer) l.getWorld(), EnumParticleTypes.getByName(args[1].toString()), l.getPos(), ScriptUtils.getInt(args[2]));
  953. }
  954. private static void setEntityEquip(Object[] args) throws IllegalStringLocationException, EntityNotFoundException, IllegalItemStackStringException
  955. {
  956. EntityLivingBase liv = (EntityLivingBase) args[0];
  957. ItemStack stack = ((ItemStack) args[2]).copy();
  958. switch(args[1].toString())
  959. {
  960. case "hand":
  961. liv.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, stack);
  962. return;
  963. case "head":
  964. liv.setItemStackToSlot(EntityEquipmentSlot.HEAD, stack);
  965. return;
  966. case "chest":
  967. liv.setItemStackToSlot(EntityEquipmentSlot.CHEST, stack);
  968. return;
  969. case "legs":
  970. liv.setItemStackToSlot(EntityEquipmentSlot.LEGS, stack);
  971. return;
  972. case "feet":
  973. liv.setItemStackToSlot(EntityEquipmentSlot.FEET, stack);
  974. return;
  975. case "offhand":
  976. liv.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, stack);
  977. }
  978. }
  979. private static ItemStack getEntityEquip(Object[] args) throws IllegalStringLocationException, EntityNotFoundException
  980. {
  981. EntityLivingBase liv = (EntityLivingBase) args[0];
  982. switch(args[1].toString())
  983. {
  984. case "hand":
  985. return liv.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND);
  986. case "head":
  987. return liv.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
  988. case "chest":
  989. return liv.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
  990. case "legs":
  991. return liv.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
  992. case "feet":
  993. return liv.getItemStackFromSlot(EntityEquipmentSlot.FEET);
  994. case "offhand":
  995. return liv.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
  996. }
  997. return ItemStack.EMPTY;
  998. }
  999. @SuppressWarnings("unchecked")
  1000. private static void removeEntities(Object[] args) throws IllegalStringLocationException
  1001. {
  1002. Class<? extends Entity> c = (Class<? extends Entity>) getClass(args[0].toString());
  1003. if(c == Entity.class || c == EntityVillager.class || c == EntityArmorStand.class || c == EntityItemFrame.class || c == EntityHanging.class)
  1004. {
  1005. return;
  1006. }
  1007. Location l = (Location) args[1];
  1008. Utils.getNearbyEntities(l.getWorld(), l.getPos(), ScriptUtils.getDouble(args[2]), c).stream().forEach(ent ->
  1009. {
  1010. ent.setDead();
  1011. });
  1012. }
  1013. private static void setSign(Object[] args) throws IllegalStringLocationException
  1014. {
  1015. Location l = (Location) args[0];
  1016. TileEntitySign sign = (TileEntitySign) l.getWorld().getTileEntity(l.getBlockPos());
  1017. SpecialBlockUtils.setSignLine(sign, ScriptUtils.getInt(args[1]), ScriptUtils.connect(args, 2));
  1018. }
  1019. @SuppressWarnings("")
  1020. private static String getSign(Object[] args) throws IllegalStringLocationException
  1021. {
  1022. Location l = (Location) args[0];
  1023. TileEntitySign sign = (TileEntitySign) l.getWorld().getTileEntity(l.getBlockPos());
  1024. return sign.signText[ScriptUtils.getInt(args[1])].getUnformattedText();
  1025. }
  1026. private static boolean isSolid(Object[] args)
  1027. {
  1028. IBlockState state = getBlockState((Location) args[0]);
  1029. return !state.isTranslucent() && state.isFullBlock() && state.isOpaqueCube();
  1030. }
  1031. private static void spawnItemFrame(Object[] args) throws IllegalStringLocationException, IllegalItemStackStringException
  1032. {
  1033. Location l = ((Location) args[0]);
  1034. EntityItemFrame frame = new EntityItemFrame(l.getWorld(), l.getBlockPos(), EnumFacing.byName(args[1].toString()));
  1035. frame.setDisplayedItem(((ItemStack) args[2]).copy());
  1036. }
  1037. private static void nameEntity(Object[] args) throws EntityNotFoundException
  1038. {
  1039. Entity ent = (Entity) args[0];
  1040. ent.setCustomNameTag(ScriptUtils.connect(args, 1));
  1041. if(args.length >= 3)
  1042. {
  1043. ent.setAlwaysRenderNameTag((boolean) args[2]);
  1044. return;
  1045. }
  1046. ent.setAlwaysRenderNameTag(true);
  1047. }
  1048. private static EntityPlayer getPlayerScriptLeader(Script qd) throws PlayerNotFoundException
  1049. {
  1050. if(qd.getClass() == PlayerScript.class)
  1051. {
  1052. return((PlayerScript) qd).getPlayers().get(0);
  1053. }
  1054. throw new UnsupportedOperationException();
  1055. }
  1056. private static void startPlayerScript(Object[] args, Script qd) throws PlayerNotFoundException
  1057. {
  1058. if(qd.getClass() == MinecraftScript.class)
  1059. {
  1060. EntityPlayer p = ((EntityPlayer) args[0]);
  1061. if(!KajetansMod.scripts.hasScript(p))
  1062. {
  1063. KajetansMod.scripts.startQuest(KajetansMod.server, args[1].toString(), p);
  1064. }
  1065. return;
  1066. }
  1067. throw new UnsupportedOperationException();
  1068. }
  1069. private static void addToScoreBoard(Object[] args, Script qd) throws PlayerNotFoundException
  1070. {
  1071. int id = ScriptUtils.getInt(args[1]);
  1072. String message = ScriptUtils.connect(args, 2);
  1073. doForGroup(args[0], qd, p -> KajetansMod.scoreboard.getScoreboard((EntityPlayerMP) p).addText(id, message));
  1074. }
  1075. private static void removeFromScoreBoard(Object[] args, Script qd) throws PlayerNotFoundException
  1076. {
  1077. int id = ScriptUtils.getInt(args[1]);
  1078. doForGroup(args[0], qd, p -> KajetansMod.scoreboard.getScoreboard((EntityPlayerMP) p).removeText(id));
  1079. }
  1080. private static void sendToActionBar(Object[] args, Script qd) throws PlayerNotFoundException
  1081. {
  1082. String text = ScriptUtils.connect(args, 1);
  1083. doForGroup(args[0], qd, p -> NmsUtilities.sendActionBar((EntityPlayerMP) p, text));
  1084. }
  1085. private static void kickPlayerFromQuest(Object[] args, Script qd) throws PlayerNotFoundException, UnsupportedOperationException
  1086. {
  1087. if(qd.getClass() == PlayerScript.class)
  1088. {
  1089. KajetansMod.scripts.removePlayerFromScript((EntityPlayer) args[0], (PlayerScript) qd);
  1090. return;
  1091. }
  1092. throw new UnsupportedOperationException();
  1093. }
  1094. private static void damageEntity(Object[] args)
  1095. {
  1096. if(args.length >= 4)
  1097. {
  1098. ((EntityLivingBase) args[0]).attackEntityFrom(DamageSource.causeMobDamage((EntityLivingBase) args[2]), ScriptUtils.getFloat(args[1]));
  1099. return;
  1100. }
  1101. ((EntityLivingBase) args[0]).attackEntityFrom(DamageSource.GENERIC, ScriptUtils.getFloat(args[1]));
  1102. }
  1103. private static boolean isBetween(Object[] args)
  1104. {
  1105. Vec3d l1 = ((Location) args[0]).getPos();
  1106. Vec3d l2 = ((Location) args[1]).getPos();
  1107. Vec3d l3 = ((Location) args[2]).getPos();
  1108. return l1.x >= Math.min(l2.x, l3.x) && l1.x <= Math.max(l2.x, l3.x) &&
  1109. l1.y >= Math.min(l2.y, l3.y) && l1.y <= Math.max(l2.y, l3.y) &&
  1110. l1.z >= Math.min(l2.z, l3.z) && l1.z <= Math.max(l2.z, l3.z);
  1111. }
  1112. private static void addPlot(Object[] args)
  1113. {
  1114. Location l1 = (Location) args[0];
  1115. Location l2 = (Location) args[1];
  1116. BlockPos pos1 = l1.getBlockPos();
  1117. BlockPos pos2 = l2.getBlockPos();
  1118. KajetansMod.plots.getDataBank(ProtectionBank.class).addPlot(Math.min(pos1.getX(), pos2.getX()),
  1119. Math.min(pos1.getY(), pos2.getY()),
  1120. Math.min(pos1.getZ(), pos2.getZ()),
  1121. Math.max(pos1.getX(), pos2.getX()),
  1122. Math.max(pos1.getY(), pos2.getY()),
  1123. Math.max(pos1.getZ(), pos2.getZ()),
  1124. ModDimensions.getWorldName(l1.getWorld()), null, args[2].toString());
  1125. }
  1126. private static Entity getLastDamager(Object[] args)
  1127. {
  1128. DamageSource ds = ((EntityPlayer) args[0]).getLastDamageSource();
  1129. if(ds == null)
  1130. {
  1131. return null;
  1132. }
  1133. return ds.getImmediateSource();
  1134. }
  1135. @SuppressWarnings("")
  1136. private static SnuviInventory newInventory(Location l, MinecraftScript qd, String s)
  1137. {
  1138. TileEntityChest chest = (TileEntityChest) l.getWorld().getTileEntity(l.getBlockPos());
  1139. int size = chest.getSizeInventory();
  1140. if(size % 9 != 0)
  1141. {
  1142. size /= 9;
  1143. size++;
  1144. size *= 9;
  1145. }
  1146. SnuviInventory inv = new SnuviInventory(s, size, qd.getNewId());
  1147. for(int i = 0; i < chest.getSizeInventory(); i++)
  1148. {
  1149. inv.setInventorySlotContents(i, chest.getStackInSlot(i).copy());
  1150. }
  1151. return inv;
  1152. }
  1153. private static boolean onlyLetters(String s)
  1154. {
  1155. for(char c : s.toCharArray())
  1156. {
  1157. if(!Character.isLetter(c))
  1158. {
  1159. return false;
  1160. }
  1161. }
  1162. return true;
  1163. }
  1164. private static String getName(Object[] args)
  1165. {
  1166. Object o = args[0];
  1167. if(o instanceof EntityPlayer)
  1168. {
  1169. return ((EntityPlayer) o).getName();
  1170. }
  1171. return KajetansMod.playerbank.getDataBank().getName(o.toString());
  1172. }
  1173. private static String getUuid(Object[] args)
  1174. {
  1175. Object o = args[0];
  1176. if(o instanceof EntityPlayer)
  1177. {
  1178. return ((EntityPlayer) o).getUniqueID().toString();
  1179. }
  1180. return KajetansMod.playerbank.getDataBank().getUUID(o.toString());
  1181. }
  1182. @SuppressWarnings("")
  1183. private static String getPotionType(Object[] args)
  1184. {
  1185. return PotionUtils.getPotionFromItem(((EntityPotion) args[0]).getPotion()).getRegistryName().toString();
  1186. }
  1187. private static void setTag(Object[] args)
  1188. {
  1189. if(args[0] instanceof EntityPlayer)
  1190. {
  1191. KajetansMod.playerbank.getDataBank().setTag((EntityPlayer) args[0], args[1].toString(), ScriptUtils.getInt(args[2]));
  1192. return;
  1193. }
  1194. KajetansMod.playerbank.getDataBank().setTag(KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()), args[1].toString(), ScriptUtils.getInt(args[2]));
  1195. }
  1196. private static int getTag(Object[] args)
  1197. {
  1198. if(args[0] instanceof EntityPlayer)
  1199. {
  1200. return KajetansMod.playerbank.getDataBank().getTag((EntityPlayer) args[0], args[1].toString());
  1201. }
  1202. return KajetansMod.playerbank.getDataBank().getTag(KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()), args[1].toString());
  1203. }
  1204. private static void setGlobalVar(Object[] args)
  1205. {
  1206. if(args[0] instanceof EntityPlayer)
  1207. {
  1208. KajetansMod.scripts.getDataBank(ScriptBank.class).setVar(args[2].toString(), args[1].toString(), ((EntityPlayer) args[0]).getUniqueID().toString());
  1209. return;
  1210. }
  1211. KajetansMod.scripts.getDataBank(ScriptBank.class).setVar(args[2].toString(), args[1].toString(), KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()));
  1212. }
  1213. private static Object getGlobalVar(Object[] args)
  1214. {
  1215. if(args[0] instanceof EntityPlayer)
  1216. {
  1217. return KajetansMod.scripts.getDataBank(ScriptBank.class).getVar(args[1].toString(), ((EntityPlayer) args[0]).getUniqueID().toString());
  1218. }
  1219. return KajetansMod.scripts.getDataBank(ScriptBank.class).getVar(args[1].toString(), KajetansMod.playerbank.getDataBank().getUUID(args[0].toString()));
  1220. }
  1221. // -------------------------------------------------------------------------
  1222. // Block
  1223. // -------------------------------------------------------------------------
  1224. private static int getBlockData(Location l)
  1225. {
  1226. IBlockState state = l.getWorld().getBlockState(l.getBlockPos());
  1227. return state.getBlock().getMetaFromState(state);
  1228. }
  1229. private static IBlockState getBlockState(Location l)
  1230. {
  1231. return l.getWorld().getBlockState(l.getBlockPos());
  1232. }
  1233. private static ItemStack getStackFromBlock(Location l)
  1234. {
  1235. World w = l.getWorld();
  1236. BlockPos pos = l.getBlockPos();
  1237. IBlockState state = w.getBlockState(pos);
  1238. return state.getBlock().getItem(w, pos, state);
  1239. }
  1240. // -------------------------------------------------------------------------
  1241. // Custom-Handler
  1242. // -------------------------------------------------------------------------
  1243. /*private static void registerShapelessRecipe(Object[] args)
  1244. {
  1245. ItemStack[] stacks = new ItemStack[args.length - 1];
  1246. for(int i = 0; i < stacks.length; i++)
  1247. {
  1248. stacks[i] = (ItemStack) args[i + 1];
  1249. }
  1250. RecipeUtils.registerShapelessRecipe((ItemStack) args[0], stacks);
  1251. }
  1252. private static void registerShapedRecipe(Object[] args)
  1253. {
  1254. int counter = 0;
  1255. while(args[counter + 1].getClass() == String.class)
  1256. {
  1257. counter++;
  1258. }
  1259. String[] s = new String[counter];
  1260. for(int i = 0; i < s.length; i++)
  1261. {
  1262. s[i] = args[i + 1].toString();
  1263. }
  1264. ItemStack[] stacks = new ItemStack[args.length - 1 - s.length];
  1265. for(int i = 0; i < stacks.length; i++)
  1266. {
  1267. stacks[i] = (ItemStack) args[i + 1 + counter];
  1268. }
  1269. RecipeUtils.registerShapedRecipe((ItemStack) args[0], s, stacks);
  1270. }*/
  1271. // -------------------------------------------------------------------------
  1272. // Gruppen-Handler
  1273. // -------------------------------------------------------------------------
  1274. private static void doForGroup(Object group, Script qd, Consumer<ICommandSender> c) throws UnsupportedOperationException, PlayerNotFoundException
  1275. {
  1276. if(group instanceof String)
  1277. {
  1278. switch(group.toString())
  1279. {
  1280. case "all":
  1281. if(qd.getClass() == MinecraftScript.class)
  1282. {
  1283. throw new UnsupportedOperationException();
  1284. }
  1285. ((PlayerScript) qd).getPlayers().forEach(p -> c.accept(p));
  1286. break;
  1287. case "online":
  1288. KajetansMod.server.getPlayerList().getPlayers().forEach(p -> c.accept(p));
  1289. break;
  1290. case "dev":
  1291. if(qd != null && qd.getClass() == PlayerScript.class)
  1292. {
  1293. ((PlayerScript) qd).getPlayers().stream().filter(p -> KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR)).forEach(p -> c.accept(p));
  1294. return;
  1295. }
  1296. KajetansMod.server.getPlayerList().getPlayers().stream().filter(p -> KajetansMod.perms.has(p, Permissions.SCRIPT_ERROR)).forEach(p -> c.accept(p));
  1297. break;
  1298. case "server":
  1299. c.accept(KajetansMod.server);
  1300. break;
  1301. default:
  1302. c.accept(Utils.getPlayerByName(group.toString()));
  1303. break;
  1304. }
  1305. return;
  1306. }
  1307. c.accept((EntityPlayer) group);
  1308. }
  1309. private static void sendMessageToGroup(Object group, Script sc, String message)
  1310. {
  1311. TextComponentString comp = new TextComponentString(message);
  1312. doForGroup(group, sc, p ->
  1313. {
  1314. p.sendMessage(comp);
  1315. });
  1316. }
  1317. public static void sendMessageWithSuffix(Script sc, String message)
  1318. {
  1319. Module m = KajetansMod.scripts;
  1320. doForGroup("all", sc, p -> m.send(p, message));
  1321. }
  1322. private static void sendToDevsWithSuffix(String message)
  1323. {
  1324. Module m = KajetansMod.scripts;
  1325. doForGroup("dev", null, p -> m.send(p, message));
  1326. }
  1327. public static void sendWarningToAllDevs(String message)
  1328. {
  1329. Module m = KajetansMod.scripts;
  1330. String warnMessage = "§4" + message;
  1331. doForGroup("dev", null, p -> m.send(p, warnMessage));
  1332. }
  1333. private static void sendToDevsWithList(String message)
  1334. {
  1335. Module m = KajetansMod.scripts;
  1336. doForGroup("dev", null, p -> m.sendListElement(p, message));
  1337. }
  1338. private static void sendToDevsWithHelpList(String message, String message2)
  1339. {
  1340. Module m = KajetansMod.scripts;
  1341. doForGroup("dev", null, p -> m.sendHelpListElement(p, message, message2));
  1342. }
  1343. }