diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..b0aea93f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,23 @@ +# 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 + target-branch: "development" + open-pull-requests-limit: 50 + schedule: + interval: "daily" + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + target-branch: "development" + open-pull-requests-limit: 50 + schedule: + interval: "daily" diff --git a/.github/workflows/downstream.yml b/.github/workflows/downstream.yml new file mode 100644 index 00000000..b5e72dcc --- /dev/null +++ b/.github/workflows/downstream.yml @@ -0,0 +1,43 @@ +# This is a basic workflow to help you get started with Actions + +name: Downstream Branch Updates + +on: + schedule: + - cron: '20 7 * * *' + # scheduled at 07:00 every Monday and Thursday + + workflow_dispatch: # click the button on Github repo! + + +jobs: + sync_with_upstream: + runs-on: ubuntu-latest + name: Sync main with upstream latest + + steps: + # Step 1: run a standard checkout action, provided by github + - name: Checkout main + uses: actions/checkout@v2 + with: + ref: main + # submodules: 'recursive' ### may be needed in your situation + + # Step 2: run this sync action - specify the upstream repo, upstream branch to sync with, and target sync branch + - name: Pull (Fast-Forward) upstream changes + id: sync + uses: aormsby/Fork-Sync-With-Upstream-action@v2.1 + with: + upstream_repository: AtlasMediaGroup/TotalFreedomMod + upstream_branch: main + target_branch: development + git_pull_args: --ff-only # optional arg use, defaults to simple 'pull' + + # Step 3: Display a message if 'sync' step had new commits (simple test) + - name: Check for new commits + if: steps.sync.outputs.has_new_commits + run: echo "There were new commits." + + # Step 4: Print a helpful timestamp for your records (not required, just nice) + - name: Timestamp + run: date 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/README.md b/README.md index 3835c6d1..5f31795f 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,17 @@ -# TotalFreedomMod [![Build Status](https://github.com/TotalFreedomMC/TotalFreedomMod/workflows/build/badge.svg)](https://travis-ci.org/TotalFreedomMC/TotalFreedomMod) [![codebeat badge](https://codebeat.co/badges/89162bad-47be-4418-b1d4-93431b74762e)](https://codebeat.co/projects/github-com-totalfreedommc-totalfreedommod-development) +# TotalFreedomMod [![Maven-Build](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/maven.yml/badge.svg)](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/maven.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/29c0f964da304666bd654bc7b1d556db)](https://www.codacy.com/gh/AtlasMediaGroup/TotalFreedomMod/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AtlasMediaGroup/TotalFreedomMod&utm_campaign=Badge_Grade) [![CodeQL](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/codeql-analysis.yml) TotalFreedomMod is a CraftBukkit server plugin designed primarily to support the [Official TotalFreedom Minecraft Server](https://totalfreedom.me/). However, you are more than welcome to adapt the source for your own server. This plugin was originally coded by StevenLawson (Madgeek1450), with Jerom van der Sar (Prozza) becoming heavily involved in its development some time later. It consists of over 85 custom coded commands and a large variety of distinguishable features not included in any other plugin. The plugin has since its beginning grown immensely. Together, with the main TotalFreedom server, TotalFreedomMod has a long-standing reputation of effectiveness whilst maintaining a clear feeling of openness towards the administrators and the players themselves. -### Contributing ### +### Contributing + Please see [CONTRIBUTING.md](CONTRIBUTING.md) if you are interested in developing TotalFreedomMod. For information on how TotalFreedomMod is licensed, please see [LICENSE.md](LICENSE.md). -### Compiling ### +For information on our security policy and reporting an issue, please see [SECURITY.md](SECURITY.md) -You need Maven to build. You'd also need to set the JDK version to Java 8 as that is the current standard as of now. +### Compiling + +You need Maven to build. You'd also need to set the JDK version to Java 11 as that is the current standard as of now. 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 ec31e68b..75b40187 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_freeze.java @@ -22,12 +22,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 d6dca161..1c0a7a81 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java @@ -1,219 +1,228 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.player.PlayerData; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.shop.ShopItem; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Manage the shop", usage = "/ | items: ", aliases = "ms") -public class Command_manageshop extends FreedomCommand -{ - @Override - public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - - if (!FUtil.isExecutive(sender.getName())) - { - return noPerms(); - } - - if (args.length < 2) - { - return false; - } - if (args[0].equals("coins")) - { - if (args.length < 4) - { - return false; - } - switch (args[1]) - { - - case "add": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - if (!args[3].equals("all")) - { - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(playerData.getCoins() + amount); - plugin.pl.save(playerData); - msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - msg(player, sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins(), ChatColor.GREEN); - } - } - else - { - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerData = plugin.pl.getData(player); - playerData.setCoins(playerData.getCoins() + amount); - plugin.pl.save(playerData); - msg(player, sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins(), ChatColor.GREEN); - } - msg("Successfully added " + amount + " coins to all online players.", ChatColor.GREEN); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - case "remove": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - if (!args[3].equals("all")) - { - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(playerData.getCoins() - amount); - if (playerData.getCoins() < 0) - { - playerData.setCoins(0); - } - plugin.pl.save(playerData); - msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - msg(player, sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins(), ChatColor.RED); - } - } - else - { - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerData = plugin.pl.getData(player); - playerData.setCoins(playerData.getCoins() - amount); - if (playerData.getCoins() < 0) - { - playerData.setCoins(0); - } - plugin.pl.save(playerData); - msg(player, sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins(), ChatColor.RED); - } - msg("Successfully took " + amount + " coins from all online players.", ChatColor.GREEN); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - case "set": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(amount); - plugin.pl.save(playerData); - msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - msg(player, sender.getName() + " set your coin balance to " + amount, ChatColor.GREEN); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - } - } - else if (args[0].equals("items")) - { - if (args[1].equals("list")) - { - msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", ")); - return true; - } - - if (args.length < 4) - { - return false; - } - - if (args[1].equals("give")) - { - ShopItem item = ShopItem.findItem(args[2].toUpperCase()); - if (item == null) - { - msg(args[2] + " is not a valid item.", ChatColor.RED); - return true; - } - - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.giveItem(item); - plugin.pl.save(playerData); - msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - msg(player, sender.getName() + " gave the " + item.getName() + " to you", ChatColor.GREEN); - } - return true; - } - else if (args[1].equals("take")) - { - ShopItem item = ShopItem.findItem(args[2].toUpperCase()); - if (item == null) - { - msg(args[2] + " is not a valid item.", ChatColor.RED); - return true; - } - - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.removeItem(item); - plugin.pl.save(playerData); - msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - msg(player, sender.getName() + " took the " + item.getName() + " from you", ChatColor.RED); - } - return true; - } - - } - return false; - } +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.player.PlayerData; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.shop.ShopItem; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Manage the shop", usage = "/ | items: ", aliases = "ms") +public class Command_manageshop extends FreedomCommand +{ + @Override + public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + if (!FUtil.isExecutive(sender.getName())) + { + return noPerms(); + } + + if (args.length < 2) + { + return false; + } + if (args[0].equals("coins")) + { + if (args.length < 4) + { + return false; + } + switch (args[1]) + { + case "add": + { + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + if (!args[3].equals("all")) + { + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(playerData.getCoins() + amount); + plugin.pl.save(playerData); + msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + msg(player, sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins(), ChatColor.GREEN); + } + } + else + { + for (Player player : server.getOnlinePlayers()) + { + PlayerData playerData = plugin.pl.getData(player); + playerData.setCoins(playerData.getCoins() + amount); + plugin.pl.save(playerData); + msg(player, sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins(), ChatColor.GREEN); + } + msg("Successfully added " + amount + " coins to all online players.", ChatColor.GREEN); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + } + case "remove": + { + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + if (!args[3].equals("all")) + { + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(playerData.getCoins() - amount); + if (playerData.getCoins() < 0) + { + playerData.setCoins(0); + } + plugin.pl.save(playerData); + msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + msg(player, sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins(), ChatColor.RED); + } + } + else + { + for (Player player : server.getOnlinePlayers()) + { + PlayerData playerData = plugin.pl.getData(player); + playerData.setCoins(playerData.getCoins() - amount); + if (playerData.getCoins() < 0) + { + playerData.setCoins(0); + } + plugin.pl.save(playerData); + msg(player, sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins(), ChatColor.RED); + } + msg("Successfully took " + amount + " coins from all online players.", ChatColor.GREEN); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + } + case "set": + { + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(amount); + plugin.pl.save(playerData); + msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + msg(player, sender.getName() + " set your coin balance to " + amount, ChatColor.GREEN); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + } + default: + { + return false; + } + } + } + else if (args[0].equals("items")) + { + if (args[1].equals("list")) + { + msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", ")); + return true; + } + + if (args.length < 4) + { + return false; + } + + if (args[1].equals("give")) + { + ShopItem item = ShopItem.findItem(args[2].toUpperCase()); + if (item == null) + { + msg(args[2] + " is not a valid item.", ChatColor.RED); + return true; + } + + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.giveItem(item); + plugin.pl.save(playerData); + msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + msg(player, sender.getName() + " gave the " + item.getName() + " to you", ChatColor.GREEN); + } + return true; + } + else if (args[1].equals("take")) + { + ShopItem item = ShopItem.findItem(args[2].toUpperCase()); + if (item == null) + { + msg(args[2] + " is not a valid item.", ChatColor.RED); + return true; + } + + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.removeItem(item); + plugin.pl.save(playerData); + msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + msg(player, sender.getName() + " took the " + item.getName() + " from you", ChatColor.RED); + } + return true; + } + + } + return false; + } } \ No newline at end of file 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"