ReadCommands.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.km.snuviscript.commands;
  2. import java.util.UUID;
  3. import me.hammerle.snuviscript.code.ScriptManager;
  4. import me.hammerle.snuviscript.code.SnuviUtils;
  5. import me.km.utils.ItemStackUtils;
  6. import me.km.utils.Location;
  7. import me.km.utils.Mapper;
  8. import me.km.utils.Utils;
  9. import net.minecraft.entity.Entity;
  10. import net.minecraft.entity.EntityType;
  11. import net.minecraft.inventory.EquipmentSlotType;
  12. import net.minecraft.item.Item;
  13. import net.minecraft.item.ItemStack;
  14. import net.minecraft.nbt.CompoundNBT;
  15. import net.minecraft.nbt.JsonToNBT;
  16. import net.minecraft.server.MinecraftServer;
  17. import net.minecraft.util.text.StringTextComponent;
  18. import net.minecraft.world.server.ServerWorld;
  19. public class ReadCommands {
  20. public static void registerFunctions(ScriptManager sm, MinecraftServer server) {
  21. sm.registerFunction("read.player", (sc, in) -> Utils.getPlayerByName(server, in[0].getString(sc)));
  22. sm.registerFunction("read.location", (sc, in) -> new Location(server, in[0].getString(sc)));
  23. sm.registerFunction("read.item", (sc, in) -> {
  24. try {
  25. String s = in[0].getString(sc);
  26. if(s.startsWith("{")) {
  27. String left = SnuviUtils.connect(sc, in, 1);
  28. CompoundNBT c = JsonToNBT.getTagFromJson(s + left);
  29. return ItemStack.read(c);
  30. }
  31. Item item = Mapper.getItem(s);
  32. int amount = in.length >= 2 ? in[1].getInt(sc) : 1;
  33. ItemStack stack = new ItemStack(item, amount);
  34. if(in.length >= 3) {
  35. stack.setDisplayName(new StringTextComponent(in[2].getString(sc)));
  36. }
  37. if(in.length >= 4) {
  38. for(int i = 3; i < in.length; i++) {
  39. ItemStackUtils.addLore(stack, in[i].getString(sc));
  40. }
  41. }
  42. return stack;
  43. } catch(Exception ex) {
  44. return null;
  45. }
  46. });
  47. sm.registerFunction("read.spawnmob", (sc, in) -> {
  48. Location l = (Location) in[0].get(sc);
  49. ServerWorld sw = (ServerWorld) l.getWorld();
  50. CompoundNBT compoundnbt = JsonToNBT.getTagFromJson(SnuviUtils.connect(sc, in, 1));
  51. Entity entity = EntityType.loadEntityAndExecute(compoundnbt, sw, (ent) -> {
  52. ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
  53. return sw.summonEntity(ent) ? ent : null;
  54. });
  55. return entity;
  56. });
  57. sm.registerFunction("read.uuid", (sc, in) -> UUID.fromString(in[0].getString(sc)));
  58. sm.registerFunction("read.slot", (sc, in) -> {
  59. String name = in[0].getString(sc);
  60. for(EquipmentSlotType slot : EquipmentSlotType.values()) {
  61. if(slot.getName().equals(name)) {
  62. return slot;
  63. }
  64. }
  65. return null;
  66. });
  67. }
  68. }