package jk_5.nailed.plugins.commands; import jk_5.eventbus.EventHandler; import jk_5.nailed.api.GameMode; import jk_5.nailed.api.Platform; import jk_5.nailed.api.chat.ChatColor; import jk_5.nailed.api.chat.ComponentBuilder; import jk_5.nailed.api.chat.TextComponent; import jk_5.nailed.api.command.Command; import jk_5.nailed.api.command.CommandException; import jk_5.nailed.api.command.Require; import jk_5.nailed.api.command.parametric.annotation.Optional; import jk_5.nailed.api.command.parametric.annotation.Text; import jk_5.nailed.api.command.sender.CommandSender; import jk_5.nailed.api.command.sender.WorldCommandSender; import jk_5.nailed.api.event.RegisterCommandsEvent; import jk_5.nailed.api.player.Player; import jk_5.nailed.api.plugin.Plugin; import jk_5.nailed.api.world.Difficulty; import jk_5.nailed.api.world.WeatherType; import jk_5.nailed.api.world.World; import jk_5.nailed.server.player.NailedPlayer; import jk_5.nailed.server.utils.InventoryOtherPlayer; import jk_5.nailed.server.utils.NBTUtils; import net.minecraft.command.CommandEffect; import net.minecraft.command.CommandExecuteAt; import net.minecraft.command.CommandGive; import net.minecraft.command.CommandHelp; import net.minecraft.command.server.CommandSetBlock; import net.minecraft.command.server.CommandTeleport; import net.minecraft.command.server.CommandTestFor; import net.minecraft.command.server.CommandTestForBlock; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.inventory.ContainerChest; import net.minecraft.item.ItemStack; import net.minecraft.network.play.server.S2DPacketOpenWindow; @Plugin(id = "Nailed|Commands", name = "Nailed Commands", version = "1.0.0") public class CommandPlugin { @EventHandler public void registerCommands(RegisterCommandsEvent event){ event.registerCommandClass(this); event.subcommand("team").registerCommandClass(new TeamCommand()); event.subcommand("nailed").registerCommandClass(new NailedCommand()); event.subcommand("reload").registerCommandClass(new ReloadCommand()); event.subcommand("game").registerCommandClass(new GameCommand()); event.subcommand("map").registerCommandClass(new MapCommand()); event.registerCallable(new VanillaCommand(new CommandHelp()), "help"); event.registerCallable(new VanillaCommand(new CommandGive()), "give"); event.registerCallable(new VanillaCommand(new CommandTestForBlock()), "testforblock"); event.registerCallable(new VanillaCommand(new CommandTestFor()), "testfor"); event.registerCallable(new VanillaCommand(new CommandSetBlock()), "setblock"); event.registerCallable(new VanillaCommand(new CommandEffect()), "effect"); event.registerCallable(new VanillaCommand(new CommandTeleport()), "tp"); event.registerCallable(new VanillaCommand(new CommandExecuteAt()), "execute"); } @Command(aliases = {"gamemode", "gm"}, desc = "Change your gamemode", usage = "[mode] [target]") @Require("admin") public void gamemode(CommandSender sender, @Optional GameMode mode, @Optional Player target) throws CommandException { if(mode == null){ if(sender instanceof Player){ Player pl = (Player) sender; GameMode current = pl.getGameMode(); if(current == GameMode.CREATIVE){ pl.setGameMode(GameMode.SURVIVAL); }else{ pl.setGameMode(GameMode.CREATIVE); } }else{ throw new CommandException("Please specify a gamemode and player"); } }else{ if(target == null){ if(sender instanceof Player){ ((Player) sender).setGameMode(mode); }else{ throw new CommandException("Please specify a player"); } }else{ target.setGameMode(mode); sender.sendMessage(new ComponentBuilder("Set gamemode to " + mode.getName()).color(ChatColor.GREEN).create()); } } } @Command(aliases = "difficulty", desc = "Change the world difficulty") @Require("admin") public void difficulty(WorldCommandSender sender, Difficulty difficulty){ sender.getWorld().setDifficulty(difficulty); sender.sendMessage(new ComponentBuilder("Set difficulty to " + difficulty.getName()).color(ChatColor.GREEN).create()); } @Command(aliases = "heal", desc = "Heal yourself or another player") @Require("admin") public void heal(CommandSender sender, @Optional Player target) throws CommandException { if(target == null){ if(sender instanceof Player){ ((Player) sender).setHealth(((Player) sender).getMaxHealth()); }else{ throw new CommandException("Please specify a player"); } }else{ target.setHealth(target.getMaxHealth()); } } @Command(aliases = "kick", desc = "Kick a player") @Require("admin") public void kick(Platform platform, CommandSender sender, Player target, @Optional @Text String r){ String reason = r == null ? "No reason given" : r; target.kick("Kicked by " + sender.getName() + ". Reason: " + reason); TextComponent b = new TextComponent(""); b.setColor(ChatColor.RED); b.addExtra("Player "); b.addExtra(target.getDescriptionComponent()); b.addExtra(" was kicked by "); b.addExtra(sender.getDescriptionComponent()); platform.broadcastMessage(b); platform.broadcastMessage(new ComponentBuilder("Reason: " + reason).color(ChatColor.RED).create()); TextComponent m = new TextComponent("Successfully kicked player "); m.addExtra(target.getDescriptionComponent()); m.setColor(ChatColor.GREEN); sender.sendMessage(m); } @Command(aliases = "toggledownfall", desc = "Toggles rain") @Require("admin") public void toggledownfall(WorldCommandSender sender){ World world = sender.getWorld(); if(world.getWeather().isRaining()){ world.setWeather(WeatherType.DRY); sender.sendMessage(new ComponentBuilder("Weather changed to dry").color(ChatColor.GREEN).create()); }else{ world.setWeather(WeatherType.RAIN); sender.sendMessage(new ComponentBuilder("Weather changed to raining").color(ChatColor.GREEN).create()); } } @Command(aliases = "weather", desc = "Changes the weather") @Require("admin") public void weather(WorldCommandSender sender, WeatherType type){ World world = sender.getWorld(); world.setWeather(type); sender.sendMessage(new ComponentBuilder("Weather changed to " + type.getName()).color(ChatColor.GREEN).create()); } @Command(aliases = "kill", desc = "Kills a player") @Require("admin") public void kill(CommandSender sender, Player target){ target.setHealth(0); sender.sendMessage(new ComponentBuilder("Killed " + target.getName()).color(ChatColor.GREEN).create()); } @Command(aliases = "goto", desc = "Teleports the player to a world") public void startgame(Platform platform, CommandSender sender, int dimension){ if(sender instanceof Player){ ((Player) sender).teleportTo(platform.getWorld(dimension)); } } @Command(aliases = "statemitter", desc = "Gives you an stat emitter") @Require("admin") public void startgame(CommandSender sender, @Optional String statName) throws CommandException { NailedPlayer p; if(sender instanceof Player){ p = ((NailedPlayer) sender); }else{ throw new CommandException("You are not a player"); } ItemStack is = new ItemStack(Blocks.command_block, 1); NBTUtils.getItemNBT(is).setBoolean("IsStatemitter", true); NBTUtils.setDisplayName(is, ChatColor.RESET + "Stat Emitter"); if(statName != null){ NBTUtils.getItemNBT(is).setString("Content", statName); NBTUtils.addLore(is, statName); } p.getEntity().inventory.addItemStackToInventory(is); } @Command(aliases = "invsee", desc = "Look at the inventory of another player") @Require("admin") public void invsee(CommandSender sender, Player player) throws CommandException { NailedPlayer p; if(sender instanceof Player){ p = ((NailedPlayer) sender); }else{ throw new CommandException("You are not a player"); } EntityPlayerMP entity = p.getEntity(); if(entity.openContainer != entity.inventoryContainer){ entity.closeScreen(); } entity.getNextWindowId(); InventoryOtherPlayer chest = new InventoryOtherPlayer(((NailedPlayer) player).getEntity(), entity); entity.playerNetServerHandler.sendPacket(new S2DPacketOpenWindow(entity.currentWindowId, "minecraft:container", chest.getDisplayName(), chest.getSizeInventory())); entity.openContainer = new ContainerChest(entity.inventory, chest, entity); entity.openContainer.windowId = entity.currentWindowId; entity.openContainer.onCraftGuiOpened(entity); } @Command(aliases = {"teamspeak", "ts"}, desc = "Information about the teamspeak server") public void teamspeak(CommandSender sender, @Optional String tsName){ } }