MinecraftFunctions.java 73 KB

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