diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..60dde504 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + + # Maintain Maven Updates + - package-ecosystem: "maven" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 59cede28..cd7f4aee 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -8,10 +8,20 @@ jobs: runs-on: ubuntu-latest steps: + # Java 11 Builds - uses: actions/checkout@v1 - - name: Set up JDK 1.8 + - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Build with Maven run: mvn -B package --file pom.xml + + # Java 16 Builds + - uses: actions/checkout@v1 + - name: Set up JDK 16 + uses: actions/setup-java@v1 + with: + java-version: 16 + - name: Build with Maven + run: mvn -B package --file pom.xml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 141c7052..00000000 --- a/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: java -jdk: - - oraclejdk11 - - openjdk11 -notifications: - email: false -addons: - apt: - packages: - - sshpass -script: mvn clean install -after_success: - - ./travis-upload.sh diff --git a/pom.xml b/pom.xml index 8a6735cc..7c8f8d02 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ me.totalfreedom TotalFreedomMod - 2021.05 + 2021.06 jar @@ -105,11 +105,6 @@ https://papermc.io/repo/repository/maven-public/ - - rayzr-repo - https://cdn.rawgit.com/Rayzr522/maven-repo/master/ - - ess-repo https://ci.ender.zone/plugin/repository/everything/ @@ -168,9 +163,9 @@ - com.github.TotalFreedomMC + com.github.AtlasMediaGroup TF-LibsDisguises - 48f01cf2fe + 5a340341b0 provided @@ -216,13 +211,6 @@ compile - - me.rayzr522 - jsonmessage - 1.0.0 - compile - - com.github.vexsoftware votifier @@ -454,7 +442,6 @@ commons-codec:commons-codec org.reflections:reflections org.javassist:javassist - me.rayzr522:jsonmessage io.papermc:paperlib com.github.speedxx:Mojangson org.bstats:bstats-bukkit diff --git a/src/main/java/me/totalfreedom/totalfreedommod/AutoEject.java b/src/main/java/me/totalfreedom/totalfreedommod/AutoEject.java index 63c9818a..2e84035a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/AutoEject.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/AutoEject.java @@ -85,6 +85,10 @@ public class AutoEject extends FreedomService player.kickPlayer(kickMessage); break; } + default: + { + FLog.warning("Unrecognized EjectMethod " + method.name() + " found, defaulting to STRIKE_THREE"); + } case STRIKE_THREE: { plugin.bm.addBan(Ban.forPlayerFuzzy(player, Bukkit.getConsoleSender(), null, kickMessage)); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/CommandSpy.java b/src/main/java/me/totalfreedom/totalfreedommod/CommandSpy.java index 6a641bee..30d39f0f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/CommandSpy.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/CommandSpy.java @@ -25,11 +25,6 @@ public class CommandSpy extends FreedomService { if (plugin.al.isAdmin(player) && plugin.al.getAdmin(player).getCommandSpy()) { - if (plugin.al.isAdmin(event.getPlayer()) && !plugin.al.isSeniorAdmin(player)) - { - continue; - } - if (player != event.getPlayer()) { FUtil.playerMsg(player, event.getPlayer().getName() + ": " + event.getMessage()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java index 67a61cc2..3c58a451 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java @@ -2,6 +2,8 @@ package me.totalfreedom.totalfreedommod; import java.util.Arrays; import java.util.List; + +import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.util.Groups; import org.bukkit.Bukkit; import org.bukkit.World; @@ -33,7 +35,10 @@ public class EntityWiper extends FreedomService @Override public void run() { - wipeEntities(false); + if (ConfigEntry.AUTO_ENTITY_WIPE.getBoolean()) + { + wipeEntities(false); + } } }.runTaskTimer(plugin, 600L, 600L); // 30 second delay after startup + run every 30 seconds } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index 2cbe79de..015cb064 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -4,7 +4,6 @@ import io.papermc.lib.PaperLib; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; -import me.rayzr522.jsonmessage.JSONMessage; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.PlayerData; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/IndefiniteBan.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/IndefiniteBan.java index 8f9eb229..ba80fa8f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/IndefiniteBan.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/IndefiniteBan.java @@ -43,6 +43,7 @@ public class IndefiniteBan implements IConfig @Override public void saveTo(ConfigurationSection cs) { + // The indefinite ban list is only intended to be modified manually. It is not intended to save. } @Override diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java index db80dff9..746ce186 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java @@ -171,6 +171,11 @@ public class BlockBlocker extends FreedomService } break; } + default: + { + // Do nothing + break; + } } if (Groups.BANNERS.contains(event.getBlockPlaced().getType())) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java index c8f6efb6..2e53f9de 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java @@ -36,10 +36,9 @@ public class InteractBlocker extends FreedomService break; } - case LEFT_CLICK_AIR: - case LEFT_CLICK_BLOCK: + default: { - // + // Do nothing break; } } @@ -158,6 +157,11 @@ public class InteractBlocker extends FreedomService event.setCancelled(true); break; } + default: + { + // Do nothing + break; + } } } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockcmd.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockcmd.java index fece338d..ee2ba733 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockcmd.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockcmd.java @@ -1,6 +1,8 @@ package me.totalfreedom.totalfreedommod.command; import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.ChatColor; @@ -75,9 +77,11 @@ public class Command_blockcmd extends FreedomCommand FPlayer playerdata = plugin.pl.getPlayer(player); if (!playerdata.allCommandsBlocked()) { - playerdata.setCommandsBlocked(true); FUtil.adminAction(sender.getName(), "Blocking all commands for " + player.getName(), true); + playerdata.setCommandsBlocked(true); msg("Blocked commands for " + player.getName() + "."); + + plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.BLOCKCMD, null)); } else { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockedit.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockedit.java index e1904553..cba22999 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockedit.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockedit.java @@ -1,6 +1,8 @@ package me.totalfreedom.totalfreedommod.command; import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang.ArrayUtils; @@ -128,6 +130,8 @@ public class Command_blockedit extends FreedomCommand msg(player2, "Your block modification abilities have been blocked.", ChatColor.RED); msg("Blocked all block modification abilities for " + player2.getName()); + + plugin.pul.logPunishment(new Punishment(player2.getName(), FUtil.getIp(player2), sender.getName(), PunishmentType.BLOCKEDIT, null)); } return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockpvp.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockpvp.java index 0471724c..9c4bee0f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockpvp.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_blockpvp.java @@ -1,6 +1,8 @@ package me.totalfreedom.totalfreedommod.command; import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang3.ArrayUtils; @@ -125,6 +127,7 @@ public class Command_blockpvp extends FreedomCommand { Command_smite.smite(sender, p, reason); } + plugin.pul.logPunishment(new Punishment(p.getName(), FUtil.getIp(p), sender.getName(), PunishmentType.BLOCKPVP, null)); msg(p, "Your PVP has been disabled.", ChatColor.RED); msg("Disabled PVP for " + p.getName()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java index 2ba3812d..c7992547 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java @@ -5,6 +5,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.ChatColor; @@ -75,17 +77,43 @@ public class Command_cage extends FreedomCommand } case "block": { - if (Material.matchMaterial(args[2]) != null) + if (args.length >= 3) { - outerMaterial = Material.matchMaterial(args[2]); - break; + // Checks the validity of the Material and checks if it's a block. + // This is incredibly inefficient, as Spigot's isBlock() method in Material is an actual + // nightmare of switch-cases. + if (Material.matchMaterial(args[2]) != null && Material.matchMaterial(args[2]).isBlock()) + { + outerMaterial = Material.matchMaterial(args[2]); + break; + } + else + { + msg("Invalid block!", ChatColor.RED); + return true; + } } - msg("Invalid block!", ChatColor.RED); - break; + else + { + return false; + } + } + default: + { + return false; } } } + if (outerMaterial == Material.PLAYER_HEAD) + { + FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true); + } + else + { + FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true); + } + Location location = player.getLocation().clone().add(0.0, 1.0, 0.0); if (skullName != null) @@ -96,17 +124,9 @@ public class Command_cage extends FreedomCommand { fPlayer.getCageData().cage(location, outerMaterial, innerMaterial); } - player.setGameMode(GameMode.SURVIVAL); - if (outerMaterial == Material.PLAYER_HEAD) - { - FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true); - } - else - { - FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true); - } + plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.CAGE, null)); return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clearchat.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cleanchat.java similarity index 94% rename from src/main/java/me/totalfreedom/totalfreedommod/command/Command_clearchat.java rename to src/main/java/me/totalfreedom/totalfreedommod/command/Command_cleanchat.java index 3e891b9d..6bcf50ed 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clearchat.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cleanchat.java @@ -8,7 +8,7 @@ import org.bukkit.entity.Player; @CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) @CommandParameters(description = "Clears the chat.", usage = "/", aliases = "cc") -public class Command_clearchat extends FreedomCommand +public class Command_cleanchat extends FreedomCommand { @Override @@ -27,4 +27,4 @@ public class Command_clearchat extends FreedomCommand FUtil.adminAction(sender.getName(), "Cleared chat", true); return true; } -} \ No newline at end of file +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_entitywipe.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_entitywipe.java index ff2043b2..f83157f5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_entitywipe.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_entitywipe.java @@ -64,6 +64,12 @@ public class Command_entitywipe extends FreedomCommand return true; } + if (type == EntityType.PLAYER) + { + msg("Player entities cannot be purged.", ChatColor.RED); + return true; + } + if (!getAllEntities().contains(type)) { msg(FUtil.formatName(type.name()) + " is an entity, however: it is a mob.", ChatColor.RED); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java index 45de1bde..fdcce361 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java @@ -23,12 +23,12 @@ public class Command_freeze extends FreedomCommand if (!gFreeze) { - FUtil.adminAction(sender.getName(), "Disabling global player freeze", false); + FUtil.adminAction(sender.getName(), "Unfreezing all players", false); msg("Players are now free to move."); return true; } - FUtil.adminAction(sender.getName(), "Enabling global player freeze", false); + FUtil.adminAction(sender.getName(), "Freezing all players", false); for (Player player : server.getOnlinePlayers()) { if (!isAdmin(player)) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java index 60c786c3..1c0a7a81 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java @@ -35,8 +35,8 @@ public class Command_manageshop extends FreedomCommand } switch (args[1]) { - case "add": + { try { int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); @@ -75,7 +75,9 @@ public class Command_manageshop extends FreedomCommand msg("Invalid number: " + args[2], ChatColor.RED); return true; } + } case "remove": + { try { int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); @@ -122,7 +124,9 @@ public class Command_manageshop extends FreedomCommand msg("Invalid number: " + args[2], ChatColor.RED); return true; } + } case "set": + { try { int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); @@ -147,6 +151,11 @@ public class Command_manageshop extends FreedomCommand msg("Invalid number: " + args[2], ChatColor.RED); return true; } + } + default: + { + return false; + } } } else if (args[0].equals("items")) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_notes.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_notes.java index 8a4754b2..4a4cd2ab 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_notes.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_notes.java @@ -116,8 +116,12 @@ public class Command_notes extends FreedomCommand msg("Cleared " + count + " notes.", ChatColor.GREEN); return true; } + + default: + { + return false; + } } - return false; } @Override diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_orbit.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_orbit.java index 08894999..06320f31 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_orbit.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_orbit.java @@ -1,6 +1,8 @@ package me.totalfreedom.totalfreedommod.command; import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.ChatColor; @@ -56,11 +58,13 @@ public class Command_orbit extends FreedomCommand } } + FUtil.adminAction(sender.getName(), "Orbiting " + player.getName(), false); + player.setGameMode(GameMode.SURVIVAL); playerdata.startOrbiting(strength); - player.setVelocity(new Vector(0, strength, 0)); - FUtil.adminAction(sender.getName(), "Orbiting " + player.getName(), false); + + plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.ORBIT, null)); return true; } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java index 0f30f24d..feab9776 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java @@ -29,6 +29,7 @@ public class Command_potion extends FreedomCommand switch (args.length) { case 1: + { if (args[0].equalsIgnoreCase("list")) { List potionEffectTypeNames = new ArrayList<>(); @@ -58,8 +59,10 @@ public class Command_potion extends FreedomCommand } } } + } case 2: + { if (args[0].equalsIgnoreCase("clear")) { Player target = playerSender; @@ -95,9 +98,11 @@ public class Command_potion extends FreedomCommand msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA); } break; + } case 4: case 5: + { if (args[0].equalsIgnoreCase("add")) { Player target = playerSender; @@ -167,8 +172,11 @@ public class Command_potion extends FreedomCommand + (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA); } break; + } default: + { return false; + } } return true; } @@ -179,14 +187,17 @@ public class Command_potion extends FreedomCommand switch (args.length) { case 1: + { List arguments = new ArrayList<>(Arrays.asList("list", "clear", "add")); if (plugin.al.isAdmin(sender)) { arguments.add("clearall"); } return arguments; + } case 2: + { if (args[0].equals("clear")) { if (plugin.al.isAdmin(sender)) @@ -199,22 +210,28 @@ public class Command_potion extends FreedomCommand return getAllPotionTypes(); } break; + } case 3: + { if (args[0].equals("add")) { return Collections.singletonList(""); } break; + } case 4: + { if (args[0].equals("add")) { return Collections.singletonList(""); } break; + } case 5: + { if (plugin.al.isAdmin(sender)) { if (args[0].equals("add")) @@ -223,6 +240,12 @@ public class Command_potion extends FreedomCommand } } break; + } + + default: + { + break; + } } return Collections.emptyList(); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_seed.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_seed.java new file mode 100644 index 00000000..ff489582 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_seed.java @@ -0,0 +1,97 @@ +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.rank.Rank; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.TranslatableComponent; +import net.md_5.bungee.api.chat.hover.content.Text; +import org.bukkit.ChatColor; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH) +@CommandParameters(description = "Get the seed of the world you are currently in.", usage = "/seed [world]") +public class Command_seed extends FreedomCommand +{ + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + World world; + + if (args.length > 0) + { + world = server.getWorld(args[0]); + if (world == null) + { + msg("That world could not be found", ChatColor.RED); + return true; + } + } + else + { + // If the sender is a Player, use that world. Otherwise, use the overworld as a fallback. + if (!senderIsConsole) + { + world = playerSender.getWorld(); + } + else + { + world = server.getWorlds().get(0); + } + } + + // If the sender is not a Player, use the usual msg method to + if (senderIsConsole) + { + msg("Seed: [" + ChatColor.GREEN + world.getSeed() + ChatColor.WHITE + "]", ChatColor.WHITE); + } + else + { + // Gets the seed for later uses + String seed = String.valueOf(world.getSeed()); + + // This is a really stupid hack to get things to play nicely, but it works so I don't give a damn + BaseComponent[] components = {new TranslatableComponent("chat.copy.click")}; + TextComponent seedAsComponent = new TextComponent(seed); + + // Style the message like in vanilla Minecraft. + seedAsComponent.setColor(ChatColor.GREEN.asBungee()); + seedAsComponent.setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, seed)); + seedAsComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(components))); + + // Enclose the seed with brackets + TextComponent seedString = new TextComponent("["); + seedString.addExtra(seedAsComponent); + seedString.addExtra("]"); + + // Send the message to the player. + TranslatableComponent response = new TranslatableComponent("commands.seed.success", seedString); + playerSender.spigot().sendMessage(response); + } + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (args.length == 1) + { + // Returns a list of worlds on the server and returns it + List worlds = new ArrayList<>(); + for (World world : server.getWorlds()) + { + worlds.add(world.getName()); + } + return worlds; + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java index 6f6a1520..0ae1b9d4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java @@ -105,6 +105,11 @@ public class Command_tag extends FreedomCommand } return true; } + + default: + { + return false; + } } } else if (args.length >= 2) @@ -279,6 +284,11 @@ public class Command_tag extends FreedomCommand msg("Tag set to '" + outputTag + ChatColor.GRAY + "'." + (save ? " (Saved)" : "") + from + to); return true; } + + default: + { + return false; + } } } return false; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java index c25ebe9c..712ff7ff 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java @@ -16,6 +16,12 @@ import org.bukkit.entity.Player; @CommandParameters(description = "Toggles TotalFreedomMod settings", usage = "/ [option] [value] [value]") public class Command_toggle extends FreedomCommand { + private final List toggles = Arrays.asList( + "waterplace", "fireplace", "lavaplace", "fluidspread", "lavadmg", "firespread", "frostwalk", + "firework", "prelog", "lockdown", "petprotect", "entitywipe", "nonuke [range] [count]", + "explosives [radius]", "unsafeenchs", "bells", "armorstands", "structureblocks", "jigsaws", "grindstones", + "jukeboxes", "spawners", "4chan", "beehives", "respawnanchors", "autotp", "autoclear", "minecarts", "mp44", + "landmines", "tossmob", "gravity"); @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) @@ -23,38 +29,10 @@ public class Command_toggle extends FreedomCommand if (args.length == 0) { msg("Available toggles: "); - msg("- waterplace"); - msg("- fireplace"); - msg("- lavaplace"); - msg("- fluidspread"); - msg("- lavadmg"); - msg("- firespread"); - msg("- frostwalk"); - msg("- firework"); - msg("- prelog"); - msg("- lockdown"); - msg("- petprotect"); - msg("- entitywipe"); - msg("- nonuke [range] [count]"); - msg("- explosives [radius]"); - msg("- unsafeenchs"); - msg("- bells"); - msg("- armorstands"); - msg("- structureblocks"); - msg("- jigsaws"); - msg("- grindstones"); - msg("- jukeboxes"); - msg("- spawners"); - msg("- 4chan"); - msg("- beehives"); - msg("- respawnanchors"); - msg("- autotp"); - msg("- autoclear"); - msg("- minecarts"); - msg("- landmines"); - msg("- mp44"); - msg("- tossmob"); - msg("- gravity"); + for (String toggle : toggles) + { + msg("- " + toggle); + } return false; } @@ -304,6 +282,16 @@ public class Command_toggle extends FreedomCommand toggle("Block gravity is", ConfigEntry.ALLOW_GRAVITY); break; } + + default: + { + msg("Available toggles: "); + for (String toggle : toggles) + { + msg("- " + toggle); + } + return false; + } } return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_warn.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_warn.java index 827a5b04..17be800f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_warn.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_warn.java @@ -1,6 +1,9 @@ package me.totalfreedom.totalfreedommod.command; +import me.totalfreedom.totalfreedommod.punishments.Punishment; +import me.totalfreedom.totalfreedommod.punishments.PunishmentType; import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; @@ -53,25 +56,28 @@ public class Command_warn extends FreedomCommand String warnReason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); player.sendTitle(ChatColor.RED + "You've been warned.", ChatColor.YELLOW + "Reason: " + warnReason, 20, 100, 60); - msg(ChatColor.GREEN + "You have successfully warned " + player.getName()); + msg(player, ChatColor.RED + "[WARNING] You received a warning from " + sender.getName() + ": " + warnReason); + plugin.pl.getPlayer(player).incrementWarnings(quiet); + plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.WARN, warnReason)); if (quiet) { - msg("Warned " + player.getName() + " quietly"); - return true; + msg("You have successfully warned " + player.getName() + " quietly."); } + else + { + String adminNotice = ChatColor.RED + + sender.getName() + + " - " + + "Warning: " + + player.getName() + + " - Reason: " + + ChatColor.YELLOW + + warnReason; + plugin.al.messageAllAdmins(adminNotice); - msg(player, ChatColor.RED + "[WARNING] You received a warning from " + sender.getName() + ": " + warnReason); - String adminNotice = ChatColor.RED + - sender.getName() + - " - " + - "Warning: " + - player.getName() + - " - Reason: " + - ChatColor.YELLOW + - warnReason; - plugin.al.messageAllAdmins(adminNotice); - plugin.pl.getPlayer(player).incrementWarnings(); + msg("You have successfully warned " + player.getName() + "."); + } return true; } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java index 55c4ec94..08ae5252 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java @@ -128,7 +128,7 @@ public class ItemFun extends FreedomService LivingEntity livingEntity = (LivingEntity)event.getRightClicked(); EntityType entityType = livingEntity.getType(); - if (!(entityType == fPlayer.mobThrowerCreature())) + if (entityType != fPlayer.mobThrowerCreature()) { return; } @@ -304,6 +304,11 @@ public class ItemFun extends FreedomService } break; } + default: + { + // Do nothing + break; + } } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/Landminer.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/Landminer.java index bf9c8bde..fc249df9 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/fun/Landminer.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/Landminer.java @@ -73,7 +73,7 @@ public class Landminer extends FreedomService continue; } - if (!(player.getLocation().distanceSquared(location) <= (landmine.radius * landmine.radius))) + if (player.getLocation().distanceSquared(location) > (landmine.radius * landmine.radius)) { break; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java index 8ee00487..33573926 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java @@ -79,11 +79,20 @@ public class Module_list extends HTTPDModule switch (admin.getRank()) { case ADMIN: + { admins.add(player.getName()); break; + } case SENIOR_ADMIN: + { senioradmins.add(player.getName()); break; + } + default: + { + // Do nothing + break; + } } } } 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 3ae3fbbe..61f8b819 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 @@ -51,11 +51,20 @@ public class Module_players extends HTTPDModule switch (admin.getRank()) { case ADMIN: + { admins.add(username); break; + } case SENIOR_ADMIN: + { senioradmins.add(username); break; + } + default: + { + // Do nothing + break; + } } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java b/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java index 4e1febc4..03e0c075 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java @@ -1,7 +1,5 @@ package me.totalfreedom.totalfreedommod.player; -import java.util.ArrayList; -import java.util.List; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.caging.CageData; import me.totalfreedom.totalfreedommod.config.ConfigEntry; @@ -16,8 +14,12 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import java.util.ArrayList; +import java.util.List; + public class FPlayer { + public static final long AUTO_PURGE_TICKS = 5L * 60L * 20L; @@ -247,7 +249,7 @@ public class FPlayer public void startArrowShooter(TotalFreedomMod plugin) { this.stopArrowShooter(); - this.mp44ScheduleTask = new ArrowShooter(this.player).runTaskTimer(plugin, 1L, 1L); + this.mp44ScheduleTask = new ArrowShooter(getPlayer()).runTaskTimer(plugin, 1L, 1L); this.mp44Firing = true; } @@ -429,14 +431,19 @@ public class FPlayer this.warningCount = warningCount; } - public void incrementWarnings() + public void incrementWarnings(boolean quiet) { this.warningCount++; if (this.warningCount % 2 == 0) { Player p = getPlayer(); - p.getWorld().strikeLightning(p.getLocation()); + + if (!quiet) + { + p.getWorld().strikeLightning(p.getLocation()); + } + FUtil.playerMsg(p, ChatColor.RED + "You have been warned at least twice now, make sure to read the rules at " + ConfigEntry.SERVER_BAN_URL.getString()); } } @@ -704,8 +711,11 @@ public class FPlayer @Override public void run() { - Arrow shot = player.launchProjectile(Arrow.class); - shot.setVelocity(shot.getVelocity().multiply(2.0)); + if (player != null) + { + Arrow shot = player.launchProjectile(Arrow.class); + shot.setVelocity(shot.getVelocity().multiply(2.0)); + } } } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/punishments/PunishmentType.java b/src/main/java/me/totalfreedom/totalfreedommod/punishments/PunishmentType.java index 705fd928..1c710350 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/punishments/PunishmentType.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/punishments/PunishmentType.java @@ -7,5 +7,11 @@ public enum PunishmentType KICK, TEMPBAN, BAN, - DOOM + DOOM, + WARN, + CAGE, + BLOCKEDIT, + BLOCKPVP, + BLOCKCMD, + ORBIT } diff --git a/src/main/resources/permissions.yml b/src/main/resources/permissions.yml index ae404160..1c1877d7 100644 --- a/src/main/resources/permissions.yml +++ b/src/main/resources/permissions.yml @@ -1,16 +1,50 @@ # -# TotalFreedomMod Permissions +# TotalFreedomMod 5.5 Permissions # by ZeroEpoch1969 # # Note that every group inherits the previous groups' permissions -# Meaning Senior Admins have the permissions of Operators and Admins, and etc +# Meaning Telnet Admins have the permissions of Operators and Super Admins, and etc # This is used to remove all permission begging with the root node # This is useful when a plugin gives all permissions to a player because they are opped remove: - "voxelsniper" - - "bending" + - "bending.admin" + - "bending.ability.Cleanse" + - "worldedit.brush.apply" + - "essentials.near.exclude" + - "plots.admin" + - "plots.debugroadregen" + - "plots.debugclaimtest" + - "plots.debugpaste" + - "plots.debugallowunsafe" + - "plots.debugloadtest" + - "plots.debugsavetest" + - "plots.cluster" + #Crackshot + - "crackshot.bypass.all" + #NetworkManager + - "networkmanager.*" + - "networkmanager.notify.joinbanned" + - "networkmanager.notify.*" + - "networkmanager.announce.global" + - "networkmanager.announce" + - "networkmanager.chatlock" + - "networkmanager.clearchat.bypass" + - "networkmanager.clearchat.*" + - "networkmanager.notify.ticket.new" + - "networkmanager.lookup" + - "networkmanager.maintenance.*" + - "networkmanager.permissions" + - "networkmanager.reports" + - "networkmanager.tickets" + - "networkmanager.chatlock.bypass" + - "networkmanager.anticaps.bypass" + - "networkmanager.antispam.bypass" + - "networkmanager.commandblocker.bypass" + - "networkmanager.tags.*" + # Operator permission nodes operators: @@ -36,16 +70,79 @@ operators: - "worldedit.removebelow" - "worldedit.removenear" - "worldedit.replacenear" - + - "worldedit.brush.*" + - "worldedit.global-mask" + - "worldedit.fill" + - "worldedit.fill.recursive" # LibsDisguises - "libsdisguises.noactionbar" - + # WorldGuard - "worldguard.region.list.own" - "worldguard.region.addmember.own.*" - "worldguard.region.removemember.own.*" - "worldguard.region.info.*" + # Bending + - "bending.command.add" + - "bending.command.bind" + - "bending.command.check" + - "bending.command.choose" + - "bending.command.rechoose" + - "bending.command.clear" + - "bending.command.copy" + - "bending.command.display" + - "bending.command.help" + - "bending.command.invincible" + - "bending.command.preset" + - "bending.command.preset.list" + - "bending.command.preset.create" + - "bending.command.preset.delete" + - "bending.command.preset.bind" + - "bending.command.preset.bind.assign" + - "bending.command.preset.bind.external" + - "bending.command.toggle" + - "bending.command.version" + - "bending.command.who" + - "bending.earth" + - "bending.air" + - "bending.fire" + - "bending.water" + - "bending.water.bloodbending.anytime" + - "bending.ability.AvatarState" + - "bending.command.add.chi" + - "bending.command.choose.chi" + - "bending.ability.Paralyze" + - "bending.ability.RapidPunch" + - "bending.ability.Smokescreen" + - "bending.ability.WarriorStance" + - "bending.ability.AcrobatStance" + - "bending.ability.QuickStrike" + - "bending.ability.SwiftKick" + - "bending.ability.ChiCombo" + - "bending.chi.passive" + - "bending.ability.MetalClips.throw" + - "bending.ability.AirCombo" + - "bending.ability.Flight" + - "bending.ability.WaterCombo" + - "bending.ability.EarthCombo" + - "bending.ability.FireCombo" + - "bending.ability.ChiCombo" + - "bending.air.passive" + - "bending.chi.passive" + - "bending.earth.passive" + - "bending.fire.passive" + - "bending.water.passive" + # NetworkManager + - "networkmanager.chatlog" + - "networkmanager.find" + - "networkmanager.gtps" + - "networkmanager.lookup" + - "networkmanager.slashserver.*" + - "networkmanager.notification.join" + - "networkmanager.party.nolimit" + - "networkmanager.tabcompletechat" + # Master Builder permission nodes master_builders: - "worldedit.tool.*" @@ -59,13 +156,25 @@ master_builders: - "voxelsniper.sniper" - "voxelsniper.goto" - "voxelsniper.brush.*" - + # Admin permission nodes admins: - - "coreprotect.*" - "worldedit.*" - "worldguard.*" - - "bending.*" + - "bending.admin.remove" + - "bending.command.toggle.all" + - "bending.admin.toggle" + - "bending.command.reload" + - "plots.cluster" + - "networkmanager.adminchat" + - "networkmanager.announce.server" + - "networkmanager.socialspy" + - "networkmanager.fullproxy.bypass" + - "networkmanager.lookup.ip" + #Crackshot + - "crackshot.bypass.all" # Senior Admin permission nodes -senior_admins: [] +senior_admins: + - "bending.admin.permaremove" + - "bending.ability.Cleanse"