GameRuleCommands.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package me.km.snuviscript.commands;
  2. import me.hammerle.snuviscript.code.ScriptManager;
  3. import me.km.utils.ReflectionUtils;
  4. import net.minecraft.server.MinecraftServer;
  5. import net.minecraft.world.GameRules;
  6. import net.minecraft.world.GameRules.RuleKey;
  7. import net.minecraft.world.World;
  8. public class GameRuleCommands {
  9. private static GameRules.RuleKey<?> ruleKey = null;
  10. public static void registerFunctions(ScriptManager sm, MinecraftServer server) {
  11. sm.registerFunction("gamerule.getkey", (sc, in) -> {
  12. String name = in[0].getString(sc);
  13. ruleKey = null;
  14. GameRules.visitAll(new GameRules.IRuleEntryVisitor() {
  15. @Override
  16. public <T extends GameRules.RuleValue<T>> void visit(GameRules.RuleKey<T> key,
  17. GameRules.RuleType<T> type) {
  18. if(key.getName().equals(name)) {
  19. ruleKey = key;
  20. }
  21. }
  22. });
  23. return ruleKey;
  24. });
  25. sm.registerFunction("gamerule.getvalue", (sc, in) -> {
  26. return ((World) in[0].get(sc)).getGameRules().get((RuleKey<?>) in[1].get(sc));
  27. });
  28. sm.registerFunction("gamerule.isbool", (sc, in) -> {
  29. return in[0].get(sc) instanceof GameRules.BooleanValue;
  30. });
  31. sm.registerFunction("gamerule.isint", (sc, in) -> {
  32. return in[0].get(sc) instanceof GameRules.IntegerValue;
  33. });
  34. sm.registerFunction("gamerule.getbool", (sc, in) -> {
  35. return ((GameRules.BooleanValue) in[0].get(sc)).get();
  36. });
  37. sm.registerFunction("gamerule.getint", (sc, in) -> {
  38. return (double) ((GameRules.IntegerValue) in[0].get(sc)).get();
  39. });
  40. sm.registerConsumer("gamerule.setbool", (sc, in) -> {
  41. ((GameRules.BooleanValue) in[0].get(sc)).set(in[1].getBoolean(sc), server);
  42. });
  43. sm.registerConsumer("gamerule.setint", (sc, in) -> {
  44. ReflectionUtils.setIntegerValue((GameRules.IntegerValue) in[0].get(sc),
  45. in[1].getInt(sc));
  46. });
  47. }
  48. }