diff --git a/pom.xml b/pom.xml
index b35d71b55..62df513ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,10 +59,10 @@
org.spigotmc
- spigot
- 1.10
+ spigot-server
+ 1.12
system
- ${project.basedir}/lib/Spigot-1.10.jar
+ ${project.basedir}/lib/Spigot-1.12.jar
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java b/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java
index 9979d2a93..d050790c6 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java
@@ -4,16 +4,16 @@
import java.util.List;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
-import net.minecraft.server.v1_10_R1.EntityPlayer;
-import net.minecraft.server.v1_10_R1.MinecraftServer;
-import net.minecraft.server.v1_10_R1.PropertyManager;
+import net.minecraft.server.v1_12_R1.EntityPlayer;
+import net.minecraft.server.v1_12_R1.MinecraftServer;
+import net.minecraft.server.v1_12_R1.PropertyManager;
import org.bukkit.Bukkit;
-import org.bukkit.craftbukkit.v1_10_R1.CraftServer;
+import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
public class ServerInterface extends FreedomService
{
- public static final String COMPILE_NMS_VERSION = "v1_10_R1";
+ public static final String COMPILE_NMS_VERSION = "v1_12_R1";
public ServerInterface(TotalFreedomMod plugin)
{
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_adventure.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_adventure.java
new file mode 100644
index 000000000..d77d316bb
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_adventure.java
@@ -0,0 +1,56 @@
+package me.totalfreedom.totalfreedommod.command;
+
+import me.totalfreedom.totalfreedommod.rank.Rank;
+import me.totalfreedom.totalfreedommod.util.FUtil;
+import org.bukkit.GameMode;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
+@CommandParameters(description = "Quickly change your own gamemode to adventure, or define someone's username to change theirs.", usage = "/ <-a | [partialname]>", aliases = "gma")
+public class Command_adventure extends FreedomCommand
+{
+
+ @Override
+ public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
+ {
+ if (args.length == 0)
+ {
+ if (isConsole())
+ {
+ sender.sendMessage("When used from the console, you must define a target player.");
+ return true;
+ }
+
+ playerSender.setGameMode(GameMode.ADVENTURE);
+ msg("Gamemode set to adventure.");
+ return true;
+ }
+
+ if (args[0].equals("-a"))
+ {
+ for (Player targetPlayer : server.getOnlinePlayers())
+ {
+ targetPlayer.setGameMode(GameMode.ADVENTURE);
+ }
+
+ FUtil.adminAction(sender.getName(), "Changing everyone's gamemode to adventure", false);
+ return true;
+ }
+
+ Player player = getPlayer(args[0]);
+
+ if (player == null)
+ {
+ sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND);
+ return true;
+ }
+
+ msg("Setting " + player.getName() + " to game mode adventure");
+ msg(player, sender.getName() + " set your game mode to adventure");
+ player.setGameMode(GameMode.ADVENTURE);
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_invis.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_invis.java
index 8fb8bb4b6..f0267dca4 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_invis.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_invis.java
@@ -11,20 +11,20 @@
import org.bukkit.potion.PotionEffectType;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
-@CommandParameters(description = "Shows (optionally smites) invisisible players", usage = "/ (smite)")
+@CommandParameters(description = "Shows (and optionally clears) invisisible players", usage = "/ [clear]")
public class Command_invis extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
- boolean smite = false;
+ boolean clear = false;
if (args.length >= 1)
{
- if (args[0].equalsIgnoreCase("smite"))
+ if (args[0].equalsIgnoreCase("clear"))
{
- FUtil.adminAction(sender.getName(), "Smiting all invisible players", true);
- smite = true;
+ FUtil.adminAction(sender.getName(), "Clearing invisibility for all players", false);
+ clear = true;
}
else
{
@@ -33,17 +33,17 @@ public boolean run(CommandSender sender, Player playerSender, Command cmd, Strin
}
List players = new ArrayList<>();
- int smites = 0;
+ int clears = 0;
for (Player player : server.getOnlinePlayers())
{
if (player.hasPotionEffect(PotionEffectType.INVISIBILITY))
{
players.add(player.getName());
- if (smite && !plugin.al.isAdmin(player))
+ if (clear && !plugin.al.isAdmin(player))
{
- player.setHealth(0.0);
- smites++;
+ player.removePotionEffect(PotionEffectType.INVISIBILITY);
+ clears++;
}
}
}
@@ -54,9 +54,9 @@ public boolean run(CommandSender sender, Player playerSender, Command cmd, Strin
return true;
}
- if (smite)
+ if (clear)
{
- msg("Smitten " + smites + " players");
+ msg("Cleared invisibility effect from " + clears + " players");
}
else
{
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbownick.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbownick.java
new file mode 100644
index 000000000..09c46db14
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbownick.java
@@ -0,0 +1,60 @@
+package me.totalfreedom.totalfreedommod.command;
+
+import me.totalfreedom.totalfreedommod.rank.Rank;
+import me.totalfreedom.totalfreedommod.util.FUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
+@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/ ")
+public class Command_rainbownick extends FreedomCommand
+{
+
+ @Override
+ public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
+ {
+ if (args.length != 1)
+ {
+ return false;
+ }
+
+ final String nickPlain = ChatColor.stripColor(FUtil.colorize(args[0].trim()));
+
+ if (!nickPlain.matches("^[a-zA-Z_0-9" + ChatColor.COLOR_CHAR + "]+$"))
+ {
+ msg("That nickname contains invalid characters.");
+ return true;
+ }
+
+ if (nickPlain.length() < 4 || nickPlain.length() > 30)
+ {
+ msg("Your nickname must be between 4 and 30 characters long.");
+ return true;
+ }
+
+ for (Player player : Bukkit.getOnlinePlayers())
+ {
+ if (player == playerSender)
+ {
+ continue;
+ }
+ if (player.getName().equalsIgnoreCase(nickPlain) || ChatColor.stripColor(player.getDisplayName()).trim().equalsIgnoreCase(nickPlain))
+ {
+ msg("That nickname is already in use.");
+ return true;
+ }
+ }
+
+ final String newNick = FUtil.rainbowify(ChatColor.stripColor(FUtil.colorize(nickPlain)));
+
+ plugin.esb.setNickname(sender.getName(), newNick);
+
+ msg("Your nickname is now: " + newNick);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbowtag.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbowtag.java
new file mode 100644
index 000000000..38c8e2fe5
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_rainbowtag.java
@@ -0,0 +1,49 @@
+package me.totalfreedom.totalfreedommod.command;
+
+import java.util.Iterator;
+import me.totalfreedom.totalfreedommod.rank.Rank;
+import me.totalfreedom.totalfreedommod.util.FUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
+@CommandParameters(description = "Gives you a rainbow tag", usage = "/ ")
+public class Command_rainbowtag extends FreedomCommand
+{
+
+ @Override
+ public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
+ {
+ if (args.length < 1)
+ {
+ return false;
+ }
+
+ final String tag = ChatColor.stripColor(FUtil.colorize(StringUtils.join(args, " ")));
+
+ if(tag.length() > 20)
+ {
+ msg("That tag is too long (Max is 20 characters).");
+ return true;
+ }
+
+ for (String word : Command_tag.FORBIDDEN_WORDS)
+ {
+ if (tag.contains(word))
+ {
+ msg("That tag contains a forbidden word.");
+ return true;
+ }
+ }
+
+ plugin.pl.getPlayer(playerSender).setTag(FUtil.rainbowify(tag));
+
+ msg("Set tag to " + tag);
+
+ return true;
+ }
+}
+
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_spectator.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_spectator.java
deleted file mode 100644
index fff9752e5..000000000
--- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_spectator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.totalfreedom.totalfreedommod.command;
-
-import me.totalfreedom.totalfreedommod.rank.Rank;
-import org.bukkit.GameMode;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.ONLY_IN_GAME)
-@CommandParameters(description = "Quickly change your own gamemode to spectator.", usage = "/", aliases = "gmsp")
-public class Command_spectator extends FreedomCommand
-{
-
- @Override
- public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
- {
- playerSender.setGameMode(GameMode.SPECTATOR);
- msg("Gamemode set to spectator.");
- return true;
- }
-}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unloadchunks.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unloadchunks.java
new file mode 100644
index 000000000..4826f16a7
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unloadchunks.java
@@ -0,0 +1,43 @@
+package me.totalfreedom.totalfreedommod.command;
+
+import me.totalfreedom.totalfreedommod.rank.Rank;
+import me.totalfreedom.totalfreedommod.util.FLog;
+import me.totalfreedom.totalfreedommod.util.FUtil;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.Chunk;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+
+@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
+@CommandParameters(description = "Unloads chunks not currently in use", usage = "/", aliases = "rc")
+public class Command_unloadchunks extends FreedomCommand {
+
+ @Override
+ public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) {
+ FUtil.adminAction(sender.getName(), "Unloading unused chunks", false);
+
+ int numChunks = 0;
+
+ for (World world : server.getWorlds()) {
+ numChunks += unloadUnusedChunks(world);
+ }
+
+ FUtil.playerMsg(sender, numChunks + " chunks unloaded.");
+ return true;
+ }
+
+ private int unloadUnusedChunks(World world) {
+ int numChunks = 0;
+
+ for (Chunk loadedChunk : world.getLoadedChunks()) {
+ if (!world.isChunkInUse(loadedChunk.getX(), loadedChunk.getZ())) {
+ if (world.unloadChunk(loadedChunk)) {
+ numChunks++;
+ }
+ }
+ }
+
+ return numChunks;
+ }
+}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java
index 902c7bdff..a8810dc71 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java
@@ -36,7 +36,7 @@ public NanoHTTPD.Response getResponse()
}
// Admins
- for (Admin admin : plugin.al.getAllAdmins().values())
+ for (Admin admin : plugin.al.getActiveAdmins())
{
final String username = admin.getName();
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
index 5a3272978..f69727b32 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
@@ -11,6 +11,7 @@
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -40,18 +41,19 @@ public class FUtil
public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z";
public static final Map CHAT_COLOR_NAMES = new HashMap<>();
public static final List CHAT_COLOR_POOL = Arrays.asList(
- ChatColor.DARK_BLUE,
- ChatColor.DARK_GREEN,
- ChatColor.DARK_AQUA,
ChatColor.DARK_RED,
- ChatColor.DARK_PURPLE,
+ ChatColor.RED,
ChatColor.GOLD,
- ChatColor.BLUE,
+ ChatColor.YELLOW,
ChatColor.GREEN,
+ ChatColor.DARK_GREEN,
ChatColor.AQUA,
- ChatColor.RED,
- ChatColor.LIGHT_PURPLE,
- ChatColor.YELLOW);
+ ChatColor.DARK_AQUA,
+ ChatColor.BLUE,
+ ChatColor.DARK_BLUE,
+ ChatColor.DARK_PURPLE,
+ ChatColor.LIGHT_PURPLE);
+ private static Iterator CHAT_COLOR_ITERATOR;
static
{
@@ -368,6 +370,25 @@ public static ChatColor randomChatColor()
{
return CHAT_COLOR_POOL.get(RANDOM.nextInt(CHAT_COLOR_POOL.size()));
}
+
+ public static String rainbowify(String string)
+ {
+ CHAT_COLOR_ITERATOR = CHAT_COLOR_POOL.iterator();
+
+ final StringBuilder newString = new StringBuilder();
+ final char[] chars = string.toCharArray();
+
+ for (char c : chars)
+ {
+ if (!CHAT_COLOR_ITERATOR.hasNext())
+ {
+ CHAT_COLOR_ITERATOR = CHAT_COLOR_POOL.iterator(); //Restart from first colour if there are no more colours in iterator.
+ }
+ newString.append(CHAT_COLOR_ITERATOR.next()).append(c);
+ }
+
+ return newString.toString();
+ }
public static String colorize(String string)
{
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index a30a3ad78..4de2c205b 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -247,7 +247,7 @@ announcer:
- 'MarkByron is the owner of TotalFreedom.'
- 'Server lagging? Check the lag via "/tps"'
- 'You are allowed to record and stream videos on TotalFreedom.'
- - 'Player vs player while in creative or god mode it forbidden!'
+ - 'Player vs player while in creative or god mode is forbidden!'
- 'Spawn killing is forbidden!'
- 'Invisible potions are allowed!'
- 'Serial griefing and trolling will result in a permanent ban!'