EntityCommands.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package me.hammerle.mp.snuviscript.commands;
  2. import org.bukkit.Location;
  3. import org.bukkit.block.BlockFace;
  4. import org.bukkit.entity.Arrow;
  5. import org.bukkit.entity.Creeper;
  6. import org.bukkit.entity.Entity;
  7. import org.bukkit.entity.EntityType;
  8. import org.bukkit.entity.Ageable;
  9. import org.bukkit.entity.ThrownPotion;
  10. import org.bukkit.entity.ItemFrame;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.entity.Sheep;
  13. import org.bukkit.entity.Slime;
  14. import org.bukkit.entity.Tameable;
  15. import org.bukkit.entity.AbstractArrow.PickupStatus;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.bukkit.util.Vector;
  18. import me.hammerle.mp.MundusPlugin;
  19. import net.kyori.adventure.text.Component;
  20. public class EntityCommands {
  21. @SuppressWarnings("unchecked")
  22. private static Class<? extends Entity> getEntityClass(String name) throws Exception {
  23. return (Class<? extends Entity>) Class.forName(name);
  24. }
  25. public static void registerFunctions() {
  26. MundusPlugin.scriptManager.registerConsumer("entity.setnopickup", (sc, in) -> {
  27. ((Arrow) in[0].get(sc)).setPickupStatus(PickupStatus.DISALLOWED);
  28. });
  29. MundusPlugin.scriptManager.registerConsumer("entity.setburning",
  30. (sc, in) -> ((Entity) in[0].get(sc)).setFireTicks(in[1].getInt(sc)));
  31. MundusPlugin.scriptManager.registerFunction("entity.isburning",
  32. (sc, in) -> ((Entity) in[0].get(sc)).getFireTicks() > 0);
  33. MundusPlugin.scriptManager.registerFunction("entity.getlook", (sc, in) -> {
  34. Object[] o = new Object[3];
  35. Vector v = ((Entity) in[0].get(sc)).getLocation().getDirection();
  36. o[0] = v.getX();
  37. o[1] = v.getY();
  38. o[2] = v.getZ();
  39. return o;
  40. });
  41. MundusPlugin.scriptManager.registerConsumer("entity.setlook", (sc, in) -> {
  42. Entity e = (Entity) in[0].get(sc);
  43. Location l = e.getLocation();
  44. l.setDirection(
  45. new Vector(in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc)));
  46. e.teleport(l);
  47. });
  48. MundusPlugin.scriptManager.registerFunction("entity.getmotion", (sc, in) -> {
  49. Object[] o = new Object[3];
  50. Vector v = ((Entity) in[0].get(sc)).getVelocity();
  51. o[0] = v.getX();
  52. o[1] = v.getY();
  53. o[2] = v.getZ();
  54. return o;
  55. });
  56. MundusPlugin.scriptManager.registerFunction("entity.getlocation",
  57. (sc, in) -> ((Entity) in[0].get(sc)).getLocation());
  58. MundusPlugin.scriptManager.registerConsumer("entity.setname", (sc, in) -> {
  59. Entity ent = (Entity) in[0].get(sc);
  60. ent.customName((Component) in[1].get(sc));
  61. if(in.length >= 3) {
  62. ent.setCustomNameVisible(in[2].getBoolean(sc));
  63. return;
  64. }
  65. ent.setCustomNameVisible(false);
  66. });
  67. MundusPlugin.scriptManager.registerFunction("entity.getname",
  68. (sc, in) -> ((Entity) in[0].get(sc)).customName());
  69. MundusPlugin.scriptManager.registerConsumer("entity.setmotion", (sc, in) -> {
  70. Entity ent = (Entity) in[0].get(sc);
  71. ent.setVelocity(
  72. new Vector(in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc)));
  73. });
  74. MundusPlugin.scriptManager.registerConsumer("entity.teleport", (sc, in) -> {
  75. Entity ent = (Entity) in[0].get(sc);
  76. Location l = (Location) in[1].get(sc);
  77. ent.teleport(l);
  78. });
  79. MundusPlugin.scriptManager.registerConsumer("entity.removeall", (sc, in) -> {
  80. Location l = (Location) in[1].get(sc);
  81. for(Entity ent : l.getWorld().getNearbyEntitiesByType(
  82. getEntityClass(in[0].getString(sc)), l, in[2].getDouble(sc))) {
  83. ent.remove();
  84. }
  85. });
  86. MundusPlugin.scriptManager.registerConsumer("entity.remove",
  87. (sc, in) -> ((Entity) in[0].get(sc)).remove());
  88. MundusPlugin.scriptManager.registerConsumer("entity.setinvulnerable", (sc, in) -> {
  89. ((Entity) in[0].get(sc)).setInvulnerable(in[1].getBoolean(sc));
  90. });
  91. MundusPlugin.scriptManager.registerConsumer("entity.setsilent", (sc, in) -> {
  92. ((Entity) in[0].get(sc)).setSilent(in[1].getBoolean(sc));
  93. });
  94. MundusPlugin.scriptManager.registerFunction("entity.getmount",
  95. (sc, in) -> ((Entity) in[0].get(sc)).getVehicle());
  96. MundusPlugin.scriptManager.registerFunction("entity.getpassengers",
  97. (sc, in) -> ((Entity) in[0].get(sc)).getPassengers());
  98. MundusPlugin.scriptManager.registerConsumer("entity.mount", (sc, in) -> {
  99. ((Entity) in[1].get(sc)).addPassenger(((Entity) in[0].get(sc)));
  100. });
  101. MundusPlugin.scriptManager.registerConsumer("entity.unmount", (sc, in) -> {
  102. ((Entity) in[0].get(sc)).leaveVehicle();
  103. });
  104. MundusPlugin.scriptManager.registerFunction("entity.get", (sc, in) -> {
  105. Location l = (Location) in[0].get(sc);
  106. double min = Double.MAX_VALUE;
  107. Entity minE = null;
  108. for(Entity e : l.getWorld().getNearbyEntitiesByType(getEntityClass(in[2].getString(sc)),
  109. l, in[1].getDouble(sc))) {
  110. double distance = e.getLocation().distanceSquared(l);
  111. if(distance < min) {
  112. min = distance;
  113. minE = e;
  114. }
  115. }
  116. return minE;
  117. });
  118. MundusPlugin.scriptManager.registerFunction("entity.getpotiontype",
  119. (sc, in) -> ((ThrownPotion) in[0].get(sc)).getItem());
  120. MundusPlugin.scriptManager.registerConsumer("entity.setgravity", (sc, in) -> {
  121. ((Entity) in[0].get(sc)).setGravity(in[1].getBoolean(sc));
  122. });
  123. MundusPlugin.scriptManager.registerFunction("entity.iswet",
  124. (sc, in) -> ((Entity) in[0].get(sc)).isInWater());
  125. MundusPlugin.scriptManager.registerFunction("entity.spawn", (sc, in) -> {
  126. Location l = ((Location) in[0].get(sc));
  127. return l.getWorld().spawnEntity(l, EntityType.valueOf(in[1].getString(sc)));
  128. });
  129. MundusPlugin.scriptManager.registerFunction("entity.near", (sc, in) -> {
  130. Object o = in[0].get(sc);
  131. if(o instanceof Location) {
  132. Location l = (Location) o;
  133. return l.getWorld().getNearbyEntitiesByType(Entity.class, l, in[1].getDouble(sc));
  134. }
  135. Entity ent = (Entity) o;
  136. double radius = in[1].getDouble(sc);
  137. return ent.getNearbyEntities(radius, radius, radius);
  138. });
  139. MundusPlugin.scriptManager.registerFunction("entity.getuuid", (sc, in) -> {
  140. Entity ent = (Entity) in[0].get(sc);
  141. return ent.getUniqueId();
  142. });
  143. MundusPlugin.scriptManager.registerConsumer("entity.setgrowingage", (sc, in) -> {
  144. ((Ageable) in[0].get(sc)).setAge(in[1].getInt(sc));
  145. });
  146. MundusPlugin.scriptManager.registerFunction("entity.gettype",
  147. (sc, in) -> ((Entity) in[0].get(sc)).getType().toString().toLowerCase());
  148. MundusPlugin.scriptManager.registerFunction("sheep.issheared",
  149. (sc, in) -> ((Sheep) in[0].get(sc)).isSheared());
  150. MundusPlugin.scriptManager.registerFunction("sheep.getcolor",
  151. (sc, in) -> ((Sheep) in[0].get(sc)).getColor().toString());
  152. MundusPlugin.scriptManager.registerConsumer("creeper.explode",
  153. (sc, in) -> ((Creeper) in[0].get(sc)).ignite());
  154. MundusPlugin.scriptManager.registerFunction("pet.istamed", (sc, in) -> {
  155. return ((Tameable) in[0].get(sc)).isTamed();
  156. });
  157. MundusPlugin.scriptManager.registerConsumer("pet.settamed", (sc, in) -> {
  158. Tameable t = (Tameable) in[0].get(sc);
  159. t.setTamed(in[1].getBoolean(sc));
  160. if(in.length >= 3) {
  161. t.setOwner((Player) in[2].get(sc));
  162. }
  163. });
  164. MundusPlugin.scriptManager.registerFunction("pet.getowner", (sc, in) -> {
  165. Tameable t = (Tameable) in[0].get(sc);
  166. return t.getOwner();
  167. });
  168. MundusPlugin.scriptManager.registerConsumer("entity.frame.hide", (sc, in) -> {
  169. ItemFrame frame = (ItemFrame) in[0].get(sc);
  170. frame.setVisible(false);
  171. });
  172. MundusPlugin.scriptManager.registerConsumer("entity.frame.show", (sc, in) -> {
  173. ItemFrame frame = (ItemFrame) in[0].get(sc);
  174. frame.setVisible(true);
  175. });
  176. MundusPlugin.scriptManager.registerConsumer("entity.frame.setfixed", (sc, in) -> {
  177. ItemFrame frame = (ItemFrame) in[0].get(sc);
  178. frame.setFixed(in[1].getBoolean(sc));
  179. });
  180. MundusPlugin.scriptManager.registerConsumer("entity.frame.spawn", (sc, in) -> {
  181. Location l = ((Location) in[0].get(sc));
  182. ItemFrame frame = l.getWorld().spawn(l, ItemFrame.class);
  183. frame.setFacingDirection(BlockFace.valueOf(in[1].getString(sc)));
  184. frame.setItem((ItemStack) in[2].get(sc));
  185. });
  186. MundusPlugin.scriptManager.registerFunction("entity.frame.getitem",
  187. (sc, in) -> ((ItemFrame) in[0].get(sc)).getItem());
  188. MundusPlugin.scriptManager.registerFunction("slime.getsize", (sc, in) -> {
  189. Slime s = (Slime) in[0].get(sc);
  190. return (double) s.getSize();
  191. });
  192. MundusPlugin.scriptManager.registerConsumer("slime.setsize", (sc, in) -> {
  193. Slime s = (Slime) in[0].get(sc);
  194. s.setSize(in[1].getInt(sc));
  195. });
  196. }
  197. }