package me.km.commands; import java.util.Collections; import java.util.List; import javax.annotation.Nullable; import me.km.api.Module; import me.km.api.ModuleCommand; import me.km.dimensions.ModDimensions; import me.km.permissions.Permissions; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameRules; import net.minecraftforge.common.DimensionManager; public class CommandGameRule extends ModuleCommand { public CommandGameRule(Module m) { super("gamerule", m); super.setDescription("Setzt GameRules einer Welt"); super.setUsage("/gamerule [value]"); super.setPermission(Permissions.GAMERULE); } private GameRules getOverWorldGameRules() { return DimensionManager.getWorld(0).getGameRules(); } @Override public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) { if(args.length == 1) { return getListOfStringsMatchingLastWord(args, getOverWorldGameRules().getRules()); } else { if(args.length == 2) { GameRules gamerules = getOverWorldGameRules(); if(gamerules.areSameType(args[0], GameRules.ValueType.BOOLEAN_VALUE)) { return getListOfStringsMatchingLastWord(args, new String[] {"true", "false"}); } else if(gamerules.areSameType(args[0], GameRules.ValueType.FUNCTION)) { return getListOfStringsMatchingLastWord(args, server.getFunctionManager().getFunctions().keySet()); } } return Collections.emptyList(); } } @Override public boolean execute(ICommandSender cs, String[] arg) { GameRules rules; if(cs instanceof EntityPlayer) { rules = ((EntityPlayer) cs).world.getGameRules(); } else { rules = getOverWorldGameRules(); } String rule = arg.length > 0 ? arg[0] : ""; String value = arg.length > 1 ? buildString(arg, 1) : ""; switch(arg.length) { case 0: this.getModule().send(cs, joinNiceString(rules.getRules())); return true; case 1: if(!rules.hasRule(rule)) { this.getModule().send(cs, "'" + rule + "' ist keine gültige GameRule."); return true; } this.getModule().send(cs, rule + " = " + rules.getString(rule)); return true; default: if(rules.areSameType(rule, GameRules.ValueType.BOOLEAN_VALUE) && !"true".equals(value) && !"false".equals(value)) { this.getModule().send(cs, "Es wird 'true' oder 'false' erwartet."); return true; } rules.setOrCreateGameRule(rule, value); this.getModule().send(cs, "'" + rule + "' wurde auf '" + value + "' gesetzt."); } return true; } }