Initial commit

This commit is contained in:
Sangelo 2022-06-07 18:56:51 +02:00
commit 994bbb585f
29 changed files with 1587 additions and 0 deletions

2
.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

113
.gitignore vendored Normal file
View file

@ -0,0 +1,113 @@
# User-specific
.idea/
*.iml
*.ipr
*.iws
# IntelliJ
out/
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
.flattened-pom.xml
# Common working directory
run/

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Sangelo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

79
config-backup.yml Normal file
View file

@ -0,0 +1,79 @@
# __ __ _
# / / / /___ (_)___ ___ _____
# / / / / __ \/ / __ `/ / / / _ \
#/ /_/ / / / / / /_/ / /_/ / __/
#\____/_/ /_/_/\__, /\__,_/\___/
# /_/
# !! INFO
# Placeholders:
# %p is the player's name.
# %t is the target's name.
# %c is the placeholder for the command itself.
# %u is the command's usage.
# !! Do not replace the placeholders, or change them up, as it will break things !!
# For example:
# - Do not do this: Replace %c in no-args-msg with %p.
# - Do this: Move it around inside of the message, so it makes sense when you translate messages.
# Sets the prefix for chat messages.
prefix: '&8[&2Unique&8]&r '
# This message will be sent when a player couldn't be found.
player-not-online-msg: "&cThis player is not online or doesn't exist."
# This is the message that will be sent to the console when it has to be ran in game.
console-not-allowed-msg: "&cYou need to be on the server to use this command."
# This is the message that is sent to the player, when they don't have the required permissions
no-perms-msg: "&cYou don't have the required permissions to execute this command."
# This is the error that will be sent when no arguments were given.
no-args-msg: "&cNo arguments were given. Usage: &6/%c %u&c."
# These are the join and leave messages.
join-msg: "&8[&2+&8]&a %p"
quit-msg: "&8[&4-&8]&c %p"
# These are the toggle messages for god mode.
god-enabled-msg: '&2God mode is now &aenabled&2.'
god-disabled-msg: '&2God mode is now &cdisabled&2.'
# These are the toggle messages for god mode, on the sender's side.
god-enabled-others-msg: '&2You have &aenabled&2 god mode for &6%t&2.'
god-disabled-others-msg: '&2You have &cdisabled&2 god mode for &6%t&2.'
# These are the toggle messages for god mode, on the target's side.
god-enabled-target-msg: '&2God mode has now been &aenabled&2 for you by &6%p&2.'
god-disabled-target-msg: '&2God mode has now been &cdisabled&2 for you by &6%p&2.'
# These are the toggle messages for flight.
flight-enabled-msg: '&2Flight is now &aenabled&2.'
flight-disabled-msg: '&2Flight is now &cdisabled&2.'
# These are the toggle messages for flight, on the sender's side.
flight-enabled-others-msg: '&2You have &aenabled&2 flight for &6%t&2.'
flight-disabled-others-msg: '&2You have &cdisabled&2 flight for &6%t&2.'
# These are the toggle messages for flight, on the target's side.
flight-enabled-target-msg: '&2Flight has now been &aenabled&2 for you by &6%p&2.'
flight-disabled-target-msg: '&2Flight has now been &cdisabled&2 for you by &6%p&2.'
# These are the toggle messages for vanish.
vanish-enabled-msg: '&2You are now &ainvisible&2.'
vanish-disabled-msg: '&2You are now &cvisible&2.'
# These are the feed messages.
feed-msg: "&2You have now been fed."
feed-others-msg: '&2You have now fed &6%t&2.'
feed-target-msg: '&2You have been fed by &6%p&2.'
# These are the heal messages.
heal-msg: "&2You have now been healed."
heal-others-msg: '&2You have now healed &6%t&2.'
heal-target-msg: '&2You have been healed by &6%p&2.'
# This is the message that is sent to the mod, when they set a new spawn point.
setspawn-msg: "&2Spawn location has now been set &asuccessfully."
# This is the confirmation message that is sent to the player, when they teleport to the spawn point.
spawn-tp-msg: "&2You have been teleported to spawn."
# This is the message that is sent to the player, when they tried to teleport to the spawn point, but have to wait for the cooldown.
spawn-cooldown-msg: "&cYou cannot teleport for another &6%s&c seconds."
# This is the message that is sent to the player, when they tried to teleport to the spawn point, but there is none set.
spawn-no-location-msg: "&cThere is no spawn location set. Couldn't initiate teleport."
# This is the message that is sent to the moderator, when they tried to teleport to the spawn point, but there is none set.
spawn-mod-no-location-msg: "&cThere is no spawn location set. Couldn't initiate teleport. Use &6/setspawn &cto set one."
# This is the command cooldown in seconds. You can type 0 to disable it, or any other number to enable it. Default is 3.
spawn-command-cooldown: 3

63
pom.xml Normal file
View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>space.sangelo</groupId>
<artifactId>unique</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Unique</name>
<description>Escape the ordinary Be Unique!</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>https://sangelo.space</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.18.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,82 @@
package space.sangelo.unique;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import space.sangelo.unique.commands.*;
import space.sangelo.unique.listeners.PlayerConnectionListener;
import space.sangelo.unique.listeners.SpawnListener;
import space.sangelo.unique.listeners.VanishLoginListener;
import space.sangelo.unique.listeners.VanishPlayerListener;
import space.sangelo.unique.util.MessageUtil;
import space.sangelo.unique.util.VanishManager;
import java.io.File;
public final class Unique extends JavaPlugin {
private MessageUtil messageUtil;
private VanishManager vanishManager;
//public Config config = new Config("config.yml", this.getDataFolder().getAbsolutePath(), this.getResource("config.yml"));
@Override
public void onEnable() {
messageUtil = new MessageUtil(this, new File(getDataFolder(), "messages.yml"));
vanishManager = new VanishManager(this);
loadListeners();
loadConfig();
loadCommands();
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.GREEN + "Plugin has started.");
}
// Load Commands
public void loadCommands() {
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.YELLOW + "Loading commands...");
getCommand("unique").setExecutor(new UniqueCommand(this));
getCommand("print").setExecutor(new PrintCommand(this));
getCommand("god").setExecutor(new GodCommand(this));
getCommand("fly").setExecutor(new FlyCommand(this));
getCommand("vanish").setExecutor(new VanishCommand(this));
getCommand("heal").setExecutor(new HealCommand(this));
getCommand("feed").setExecutor(new FeedCommand(this));
getCommand("setspawn").setExecutor(new SetSpawnCommand(this));
getCommand("spawn").setExecutor(new SpawnCommand(this));
getCommand("forcereload").setExecutor(new ForceReloadCommand(this));
getCommand("gmc").setExecutor(new GamemodeCCommand(this));
getCommand("gms").setExecutor(new GamemodeSCommand(this));
getCommand("gmsp").setExecutor(new GamemodeSpCommand(this));
getCommand("gma").setExecutor(new GamemodeACommand(this));
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.GOLD + "Commands loaded.");
}
// Load Config
public void loadConfig() {
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.YELLOW + "Loading config...");
saveResource("config.yml", false);
reloadConfig();
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.GOLD + "Loading config complete");
}
// Load Listeners
public void loadListeners() {
final PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new PlayerConnectionListener(this), this);
pluginManager.registerEvents(new SpawnListener(this), this);
pluginManager.registerEvents(new VanishLoginListener(this), this);
pluginManager.registerEvents(new VanishPlayerListener(this), this);
}
@Override
public void onDisable() {
Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_GREEN + "[Unique] " + ChatColor.GOLD + "Shutting down...");
}
public MessageUtil getMessageUtil() {
return messageUtil;
}
public VanishManager getVanishManager() {
return vanishManager;
}
}

View file

@ -0,0 +1,49 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class FeedCommand implements CommandExecutor {
private final MessageUtil messageUtil;
public FeedCommand(final Unique plugin) {
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
if (args.length == 0) {
if (player.hasPermission("unique.moderation.feed")) {
player.setFoodLevel(20);
player.setSaturation(20);
messageUtil.sendMessageWithPrefix(player, "feed-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
final String playerName = args[0];
final Player target = Bukkit.getServer().getPlayerExact(playerName);
if (target == null) {
messageUtil.sendMessageWithPrefix(player, "player-not-online-msg");
} else {
if (player.hasPermission("unique.moderation.feed.others")) {
target.setFoodLevel(20);
target.setSaturation(20);
messageUtil.sendMessageWithPrefix(target, "feed-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "feed-others-msg", Placeholder.component("target", target.displayName()));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}
}
return true;
}
}

View file

@ -0,0 +1,59 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class FlyCommand implements CommandExecutor {
private final MessageUtil messageUtil;
private final Unique plugin;
public FlyCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player)
if (args.length == 0) {
if (player.hasPermission("unique.moderation.fly")) {
if (player.getAllowFlight()) {
player.setAllowFlight(false);
messageUtil.sendMessageWithPrefix(player, "flight-disabled-msg");
} else {
player.setAllowFlight(true);
messageUtil.sendMessageWithPrefix(player, "flight-enabled-msg");
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
final String playerName = args[0];
final Player target = Bukkit.getServer().getPlayerExact(playerName);
if (player.hasPermission("unique.moderation.fly.set")) {
if (target == null) {
messageUtil.sendMessageWithPrefix(player, "player-not-online-msg");
} else {
if (target.getAllowFlight()) {
target.setAllowFlight(false);
messageUtil.sendMessageWithPrefix(player, "flight-disabled-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "flight-disabled-others-msg", Placeholder.component("target", target.displayName()));
} else {
target.setAllowFlight(true);
messageUtil.sendMessageWithPrefix(player, "flight-enabled-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "flight-enabled-others-msg", Placeholder.component("target", target.displayName()));
}
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
return true;
}
}

View file

@ -0,0 +1,28 @@
package space.sangelo.unique.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class ForceReloadCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public ForceReloadCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender.hasPermission("unique.admin.forcereload")) {
messageUtil.sendMessageWithPrefix(sender, "force-reload-msg");
plugin.reloadConfig();
messageUtil.sendMessageWithPrefix(sender, "force-reload-complete-msg");
}
return true;
}
}

View file

@ -0,0 +1,60 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class GamemodeACommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public GamemodeACommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
if (sender instanceof Player player && args.length == 0) {
adventurePlayerSelf(player);
} else if (sender instanceof Player player) {
final Player target = Bukkit.getPlayerExact(args[0]);
if (player.hasPermission("unique.moderation.adventure.others")) {
if (player == target) {
player.setGameMode(GameMode.ADVENTURE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "adventure"));
} else {
target.setGameMode(GameMode.ADVENTURE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-others-msg", Placeholder.unparsed("gamemode", "adventure"), Placeholder.component("target", target.displayName()));
messageUtil.sendMessageWithPrefix(target, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "adventure"));
}
}
}
if (sender instanceof ConsoleCommandSender && args.length == 0) {
messageUtil.sendMessageWithPrefix(sender, "console-specify-player");
}
return true;
}
public void adventurePlayerSelf(final Player player) {
if (player.getGameMode() == GameMode.ADVENTURE) {
if (player.hasPermission("unique.moderation.gamemode.adventure.self")) {
messageUtil.sendMessageWithPrefix(player, "gamemode-already-set-msg", Placeholder.unparsed("gamemode", "adventure"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else if (player.hasPermission("unique.moderation.gamemode.adventure.self")) {
player.setGameMode(GameMode.ADVENTURE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "adventure"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}

View file

@ -0,0 +1,60 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class GamemodeCCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public GamemodeCCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
if (sender instanceof Player player && args.length == 0) {
creativePlayerSelf(player);
} else if (sender instanceof Player player) {
final Player target = Bukkit.getPlayerExact(args[0]);
if (player.hasPermission("unique.moderation.gamemode.creative.others")) {
if (player == target) {
player.setGameMode(GameMode.CREATIVE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "creative"));
} else {
target.setGameMode(GameMode.CREATIVE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-others-msg", Placeholder.unparsed("gamemode", "creative"), Placeholder.component("target", target.displayName()));
messageUtil.sendMessageWithPrefix(target, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "creative"));
}
}
}
if (sender instanceof ConsoleCommandSender && args.length == 0) {
messageUtil.sendMessageWithPrefix(sender, "console-specify-player");
}
return true;
}
public void creativePlayerSelf(final Player player) {
if (player.getGameMode() == GameMode.CREATIVE) {
if (player.hasPermission("unique.moderation.gamemode.creative.self")) {
messageUtil.sendMessageWithPrefix(player, "gamemode-already-set-msg", Placeholder.unparsed("gamemode", "creative"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else if (player.hasPermission("unique.moderation.gamemode.creative.self")) {
player.setGameMode(GameMode.CREATIVE);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "creative"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}

View file

@ -0,0 +1,60 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class GamemodeSCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public GamemodeSCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
if (sender instanceof Player player && args.length == 0) {
survivalPlayerSelf(player);
} else if (sender instanceof Player player) {
final Player target = Bukkit.getPlayerExact(args[0]);
if (player.hasPermission("unique.moderation.gamemode.survival.others")) {
if (player == target) {
player.setGameMode(GameMode.SURVIVAL);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "survival"));
} else {
target.setGameMode(GameMode.SURVIVAL);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-others-msg", Placeholder.unparsed("gamemode", "survival"), Placeholder.component("target", target.displayName()));
messageUtil.sendMessageWithPrefix(target, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "survival"));
}
}
}
if (sender instanceof ConsoleCommandSender && args.length == 0) {
messageUtil.sendMessageWithPrefix(sender, "console-specify-player");
}
return true;
}
public void survivalPlayerSelf(final Player player) {
if (player.getGameMode() == GameMode.SURVIVAL) {
if (player.hasPermission("unique.moderation.gamemode.survival.self")) {
messageUtil.sendMessageWithPrefix(player, "gamemode-already-set-msg", Placeholder.unparsed("gamemode", "survival"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else if (player.hasPermission("unique.moderation.gamemode.survival.self")) {
player.setGameMode(GameMode.SURVIVAL);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "survival"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}

View file

@ -0,0 +1,61 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class GamemodeSpCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public GamemodeSpCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
if (sender instanceof Player player && args.length == 0) {
spectatorPlayerSelf(player);
} else if (sender instanceof Player player) {
final Player target = Bukkit.getPlayerExact(args[0]);
if (player.hasPermission("unique.moderation.gamemode.spectator.others")) {
if (player == target) {
player.setGameMode(GameMode.SPECTATOR);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "spectator"));
} else {
target.setGameMode(GameMode.SPECTATOR);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-others-msg", Placeholder.unparsed("gamemode", "spectator"), Placeholder.component("target", target.displayName()));
messageUtil.sendMessageWithPrefix(target, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "spectator"));
}
}
}
if (sender instanceof ConsoleCommandSender && args.length == 0) {
messageUtil.sendMessageWithPrefix(sender, "console-specify-player");
}
return true;
}
public void spectatorPlayerSelf(final Player player) {
if (player.getGameMode() == GameMode.SPECTATOR) {
if (player.hasPermission("unique.moderation.gamemode.spectator.self")) {
messageUtil.sendMessageWithPrefix(player, "gamemode-already-set-msg", Placeholder.unparsed("gamemode", "spectator"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else if (player.hasPermission("unique.moderation.gamemode.spectator.self")) {
player.setGameMode(GameMode.SPECTATOR);
messageUtil.sendMessageWithPrefix(player, "gamemode-switcher-msg", Placeholder.unparsed("gamemode", "spectator"));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}

View file

@ -0,0 +1,60 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class GodCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public GodCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
if (args.length == 0) {
if (player.hasPermission("unique.moderation.god.use")) {
if (player.isInvulnerable()) {
player.setInvulnerable(false);
messageUtil.sendMessageWithPrefix(player, "god-disabled-msg");
} else {
player.setInvulnerable(true);
messageUtil.sendMessageWithPrefix(player, "god-enabled-msg");
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
final String playerName = args[0];
final Player target = Bukkit.getServer().getPlayerExact(playerName);
if (player.hasPermission("unique.moderation.god.set")) {
if (target == null) {
messageUtil.sendMessageWithPrefix(player, "player-not-online");
} else {
if (target.isInvulnerable()) {
target.setInvulnerable(false);
messageUtil.sendMessageWithPrefix(target, "god-disabled-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "god-disabled-others-msg", Placeholder.component("target", target.displayName()));
} else {
target.setInvulnerable(true);
messageUtil.sendMessageWithPrefix(target, "god-enabled-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "god-enabled-others-msg", Placeholder.component("target", target.displayName()));
}
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}
return true;
}
}

View file

@ -0,0 +1,51 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
import static org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH;
public class HealCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public HealCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
if (args.length == 0) {
if (player.hasPermission("unique.moderation.heal")) {
player.setHealth(player.getAttribute(GENERIC_MAX_HEALTH).getDefaultValue());
messageUtil.sendMessageWithPrefix(player, "heal-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
final String playerName = args[0];
final Player target = Bukkit.getServer().getPlayerExact(playerName);
if (target == null) {
messageUtil.sendMessageWithPrefix(player, "player-not-online-msg");
} else {
if (player.hasPermission("unique.moderation.heal.others")) {
target.setHealth(target.getAttribute(GENERIC_MAX_HEALTH).getDefaultValue());
messageUtil.sendMessageWithPrefix(target, "heal-target-msg", Placeholder.component("player", player.displayName()));
messageUtil.sendMessageWithPrefix(player, "heal-others-msg", Placeholder.component("target", target.displayName()));
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}
}
return true;
}
}

View file

@ -0,0 +1,42 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class PrintCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public PrintCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
if (args.length == 0) {
messageUtil.sendMessageWithPrefix(player, "no-args-msg", Placeholder.unparsed("command", "print {message}"));
} else if (args.length == 1) {
final String printMessage = args[0];
messageUtil.sendMessageWithPrefix(player, "print-msg", Placeholder.parsed("message", printMessage));
} else {
final StringBuilder builder = new StringBuilder();
for (int i = 0; i < args.length; i++) {
builder.append(args[i]);
builder.append(" ");
}
String printFinalMessage = builder.toString();
printFinalMessage = printFinalMessage.stripTrailing();
messageUtil.sendMessageWithPrefix(player, "print-msg", Placeholder.parsed("message", printFinalMessage));
}
}
return true;
}
}

View file

@ -0,0 +1,34 @@
package space.sangelo.unique.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class SetSpawnCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
public SetSpawnCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
if (player.hasPermission("unique.moderation.setspawn")) {
plugin.getConfig().set("spawn", player.getLocation());
plugin.saveConfig();
messageUtil.sendMessageWithPrefix(player, "setspawn-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
messageUtil.sendMessageWithPrefix(sender, "console-not-allowed-msg");
}
return true;
}
}

View file

@ -0,0 +1,90 @@
// Warning! Very duplicate code bc i don't have a clue.
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
import java.util.HashMap;
import java.util.UUID;
public class SpawnCommand implements CommandExecutor {
private final Unique plugin;
private final MessageUtil messageUtil;
private final HashMap<UUID, Long> cooldown;
public SpawnCommand(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
this.cooldown = new HashMap<>();
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
final Location location = plugin.getConfig().getLocation("spawn");
if (sender instanceof Player player) {
if (!player.hasPermission("unique.moderation.bypass.cooldown")) {
if (!this.cooldown.containsKey(player.getUniqueId())) {
this.cooldown.put(player.getUniqueId(), System.currentTimeMillis());
if (location != null) {
player.teleport(location);
messageUtil.sendMessageWithPrefix(player, "spawn-tp-msg");
} else {
if (!player.hasPermission("unique.moderation.setspawn")) {
messageUtil.sendMessageWithPrefix(player, "spawn-no-location-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "spawn-mod-no-location-msg");
}
}
} else {
final long timeElapsedMs = System.currentTimeMillis() - cooldown.get(player.getUniqueId());
final long timeElapsed = (timeElapsedMs / 1000) % 60;
if (timeElapsed >= plugin.getConfig().getLong("spawn-command-cooldown")) {
this.cooldown.put(player.getUniqueId(), System.currentTimeMillis());
if (player.hasPermission("unique.moderation.setspawn")) {
if (location != null) {
player.teleport(location);
messageUtil.sendMessageWithPrefix(player, "spawn-tp-msg");
} else {
if (player.hasPermission("unique.moderation.setspawn")) {
messageUtil.sendMessageWithPrefix(player, "spawn-mod-no-location-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "spawn-no-location-msg");
}
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
} else {
messageUtil.sendMessageWithPrefix(player, "spawn-mod-no-location-msg", Placeholder.unparsed("remaining", String.valueOf(plugin.getConfig().getLong("spawn-command-cooldown") - timeElapsed)));
}
}
} else {
if (player.hasPermission("unique.general.spawn")) {
if (location != null) {
player.teleport(location);
messageUtil.sendMessageWithPrefix(player, "spawn-tp-msg");
} else {
if (player.hasPermission("unique.moderation.setspawn")) {
messageUtil.sendMessageWithPrefix(player, "spawn-mod-no-location-msg");
} else {
messageUtil.sendMessageWithPrefix(player, "spawn-no-location-msg");
}
}
} else {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
}
}
}
return true;
}
}

View file

@ -0,0 +1,29 @@
package space.sangelo.unique.commands;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
public class UniqueCommand implements CommandExecutor {
private final Unique plugin;
public UniqueCommand(final Unique plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
if (sender instanceof Player player) {
// p.sendMessage(ChatColor.DARK_GREEN + "-=-=-=-=-=-=-");
player.sendMessage(ChatColor.DARK_GREEN + "Unique - " + ChatColor.GOLD + "v" + plugin.getDescription().getVersion());
// p.sendMessage(ChatColor.DARK_GREEN + "-=-=-=-=-=-=-");
player.sendMessage(ChatColor.DARK_GRAY + "Author: " + ChatColor.AQUA + "Sangelo");
player.sendMessage(ChatColor.DARK_GRAY + "Website: " + ChatColor.BLUE + "" + ChatColor.UNDERLINE + "https://sangelo.space");
player.sendMessage(ChatColor.DARK_GREEN + "For help, type " + ChatColor.GOLD + "/help unique");
}
return true;
}
}

View file

@ -0,0 +1,85 @@
package space.sangelo.unique.commands;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
import space.sangelo.unique.util.VanishManager;
public class VanishCommand implements CommandExecutor {
private final Unique plugin;
private final VanishManager vanishManager;
private final MessageUtil messageUtil;
public VanishCommand(final Unique plugin) {
this.plugin = plugin;
this.vanishManager = plugin.getVanishManager();
this.messageUtil = plugin.getMessageUtil();
}
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String commandLabel, final String[] args) {
if (!(sender instanceof final Player player)) return false;
if (args.length > 0) {
if (args[0].equalsIgnoreCase("list")) {
if (!player.hasPermission("unique.moderation.vanish.list")) {
messageUtil.sendMessageWithPrefix(player, "no-perms-msg");
return true;
}
if (vanishManager.getHiddenUsernames().size() > 0) {
final StringBuilder builder = new StringBuilder();
for (int i = 0; i < vanishManager.getHiddenUsernames().size(); i++) {
builder.append(vanishManager.getHiddenUsernames().get(i));
if (i < vanishManager.getHiddenUsernames().size() - 1) {
builder.append(", ");
}
}
messageUtil.sendMessageWithPrefix(player, "vanish-hidden-list-msg", Placeholder.unparsed("playerlist", String.valueOf(builder)));
} else {
messageUtil.sendMessageWithPrefix(player, "vanish-hidden-none");
}
return true;
} else if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
return false;
} else if (player.hasPermission("unique.moderation.vanish.other")) {
Player target = plugin.getServer().getPlayer(args[0]);
if (target == null) target = plugin.getServer().getPlayerExact(args[0]);
if (target == null) {
messageUtil.sendMessageWithPrefix(player, "player-not-online-msg");
return true;
}
if (!vanishManager.isVanished(target)) {
vanishManager.vanishPlayer(target);
messageUtil.sendMessageWithPrefix(player, "vanish-enabled-msg");
messageUtil.sendMessageWithPrefix(player, "vanish-enabled-others-msg", Placeholder.component("player", player.displayName()));
plugin.getServer().broadcast(messageUtil.getMessage("quit-msg", Placeholder.component("player", player.displayName())));
return true;
} else {
vanishManager.showPlayer(target);
messageUtil.sendMessageWithPrefix(player, "vanish-disabled-msg");
messageUtil.sendMessageWithPrefix(player, "vanish-disabled-others-msg", Placeholder.component("player", player.displayName()));
plugin.getServer().broadcast(messageUtil.getMessage("join-msg", Placeholder.component("player", player.displayName())));
return true;
}
}
} else if (player.hasPermission("unique.moderation.vanish.use")) {
if (!vanishManager.isVanished(player)) {
vanishManager.vanishPlayer(player);
messageUtil.sendMessageWithPrefix(player, "vanish-enabled-msg");
plugin.getServer().broadcast(messageUtil.getMessage("quit-msg", Placeholder.component("player", player.displayName())));
return true;
} else {
vanishManager.showPlayer(player);
messageUtil.sendMessageWithPrefix(player, "vanish-disabled-msg");
plugin.getServer().broadcast(messageUtil.getMessage("join-msg", Placeholder.component("player", player.displayName())));
return true;
}
}
return false;
}
}

View file

@ -0,0 +1,29 @@
package space.sangelo.unique.listeners;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.MessageUtil;
public class PlayerConnectionListener implements Listener {
private final Unique plugin;
private final MessageUtil messageUtil;
public PlayerConnectionListener(final Unique plugin) {
this.plugin = plugin;
this.messageUtil = plugin.getMessageUtil();
}
@EventHandler
public void onJoin(final PlayerJoinEvent event) {
event.joinMessage(messageUtil.getMessage("join-msg", Placeholder.component("player", event.getPlayer().displayName())));
}
@EventHandler
public void onLeave(final PlayerQuitEvent event) {
event.quitMessage(messageUtil.getMessage("quit-msg", Placeholder.component("player", event.getPlayer().displayName())));
}
}

View file

@ -0,0 +1,40 @@
package space.sangelo.unique.listeners;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import space.sangelo.unique.Unique;
public class SpawnListener implements Listener {
private final Unique plugin;
public SpawnListener(final Unique plugin) {
this.plugin = plugin;
}
@EventHandler
public void onPlayerJoin(final PlayerJoinEvent e) {
// Spawn the player on the spawn location on first join, if one's set.
final Player p = e.getPlayer();
if (!e.getPlayer().hasPlayedBefore()) {
final Location location = plugin.getConfig().getLocation("spawn");
if (location != null) {
p.teleport(location);
}
}
}
@EventHandler
public void onPlayerRespawn(final PlayerRespawnEvent e) {
// Respawn the player at the spawn location, if one's set.
final Location location = plugin.getConfig().getLocation("spawn");
if (location != null) {
if (e.getPlayer().getBedSpawnLocation() == null) {
e.setRespawnLocation(location);
}
}
}
}

View file

@ -0,0 +1,43 @@
package space.sangelo.unique.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.VanishManager;
public class VanishLoginListener implements Listener {
private final Unique plugin;
private final VanishManager vanishManager;
public VanishLoginListener(final Unique plugin) {
this.plugin = plugin;
this.vanishManager = plugin.getVanishManager();
}
@EventHandler
public void handleLogin(final PlayerLoginEvent event) {
final Player player = event.getPlayer();
if (vanishManager.isVanished(player)) {
vanishManager.showPlayer(player);
}
if (player.hasPermission("unique.moderation.vanish.see")) return;
for (final Player p1 : plugin.getServer().getOnlinePlayers()) {
if (vanishManager.isVanished(p1) && !player.equals(p1)) {
player.hidePlayer(plugin, p1);
}
}
}
@EventHandler
public void handleQuit(final PlayerQuitEvent event) {
final Player player = event.getPlayer();
if (vanishManager.isVanished(player)) {
vanishManager.showPlayer(player);
}
}
}

View file

@ -0,0 +1,51 @@
package space.sangelo.unique.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import space.sangelo.unique.Unique;
import space.sangelo.unique.util.VanishManager;
public class VanishPlayerListener implements Listener {
private final VanishManager vanishManager;
public VanishPlayerListener(final Unique plugin) {
this.vanishManager = plugin.getVanishManager();
}
@EventHandler
public void onEntityTarget(final EntityTargetEvent event) {
if (event.getEntity() instanceof Player player && vanishManager.isVanished(player)) {
event.setCancelled(true);
}
}
@EventHandler
public void onDamageByBlock(final EntityDamageByBlockEvent event) {
if (event.getEntity() instanceof Player player && vanishManager.isVanished(player)) {
event.setCancelled(true);
}
}
@EventHandler
public void onDamageByEntity(final EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && vanishManager.isVanished(player)) {
event.setCancelled(true);
} else if (event.getEntity() instanceof Player player && vanishManager.isVanished(player)) {
event.setCancelled(true);
}
}
@EventHandler
public void onItemPickup(final EntityPickupItemEvent event) {
if (event.getEntity() instanceof Player player && vanishManager.isVanished(player)) {
event.setCancelled(true);
}
}
}

View file

@ -0,0 +1,60 @@
package space.sangelo.unique.util;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import space.sangelo.unique.Unique;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MessageUtil {
private final FileConfiguration externalConfig;
private final FileConfiguration internalConfig;
private final Component prefix;
public MessageUtil(final Unique plugin, final File messageConfig) {
if (!messageConfig.exists()) {
plugin.saveResource(messageConfig.getName(), false);
}
externalConfig = YamlConfiguration.loadConfiguration(messageConfig);
final InputStream inputStream = plugin.getResource(messageConfig.getName());
assert inputStream != null;
final InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
internalConfig = YamlConfiguration.loadConfiguration(inputStreamReader);
prefix = MiniMessage.miniMessage().deserialize(getString("prefix"));
}
public void sendMessage(final CommandSender sender, final String configString, final TagResolver... tagResolvers) {
sender.sendMessage(getMessage(configString, tagResolvers));
}
public void sendMessageWithPrefix(final CommandSender sender, final String configString, final TagResolver... tagResolvers) {
sender.sendMessage(getMessageWithPrefix(configString, tagResolvers));
}
public Component getMessage(final String configString, final TagResolver... tagResolvers) {
return MiniMessage.miniMessage().deserialize(getString(configString), tagResolvers);
}
public Component getMessageWithPrefix(final String configString, final TagResolver... tagResolvers) {
return prefix.append(getMessage(configString, tagResolvers));
}
public String getString(final String configString) {
if (externalConfig.contains(configString)) {
return externalConfig.getString(configString);
} else {
return internalConfig.getString(configString);
}
}
}

View file

@ -0,0 +1,51 @@
package space.sangelo.unique.util;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import space.sangelo.unique.Unique;
import java.util.ArrayList;
public class VanishManager {
private final ArrayList<String> hiddenUsernames;
private final Unique plugin;
public VanishManager(final Unique plugin) {
this.plugin = plugin;
this.hiddenUsernames = new ArrayList<>();
}
public boolean isVanished(final Player player) {
return hiddenUsernames.contains(player.getName());
}
public void vanishPlayer(final Player p) {
final String vanishModLogsMsg = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("prefix") + plugin.getConfig().getString("vanish-mod-logs-msg"));
hiddenUsernames.add(p.getName());
for (final Player p1 : plugin.getServer().getOnlinePlayers()) {
if (p1 == p) {
continue;
} else if (p1.hasPermission("unique.moderation.vanish.see")) {
p1.sendMessage(vanishModLogsMsg.replace("%p", p.getName()));
continue;
} else if (p1.hasPermission("unique.moderation.vanish.list")) {
p1.hidePlayer(plugin, p);
p1.sendMessage(vanishModLogsMsg.replace("%p", p.getName()));
continue;
}
p1.hidePlayer(plugin, p);
}
}
public void showPlayer(final Player player) {
hiddenUsernames.remove(player.getName());
for (final Player p1 : plugin.getServer().getOnlinePlayers()) {
p1.showPlayer(plugin, player);
}
}
public ArrayList<String> getHiddenUsernames() {
return hiddenUsernames;
}
}

View file

@ -0,0 +1,20 @@
# __ __ _
# / / / /___ (_)___ ___ _____
# / / / / __ \/ / __ `/ / / / _ \
#/ /_/ / / / / / /_/ / /_/ / __/
#\____/_/ /_/_/\__, /\__,_/\___/
# /_/
# !! INFO
# Placeholders:
# %p is the player's name.
# %t is the target's name.
# %c is the placeholder for the command itself.
# %u is the command's usage.
# !! Do not replace the placeholders, or change them up, as it will break things !!
# For example:
# - Do not do this: Replace %c in no-args-msg with %p.
# - Do this: Move it around inside of the message, so it makes sense when you translate messages.
# This is the command cooldown in seconds. You can type 0 to disable it, or any other number to enable it. Default is 3.
spawn-command-cooldown: 3

View file

@ -0,0 +1,78 @@
# Sets the prefix for chat messages.
prefix: '<dark_gray>[<dark_green>Unique</dark_green>]</dark_gray> '
print-msg: '<dark_gray>(print)</dark_gray> <message>'
# This message will be sent when a player couldn't be found.
player-not-online-msg: "<red>This player is not online or doesn't exist.</red>"
# This message is sent to the console, when they try to run a command that only works on players.
console-specify-player: '<red>Please specify a player.</red>'
# This is the message that will be sent to the console when it has to be ran in game.
console-not-allowed-msg: "<red>You need to be on the server to use this command.</red>"
# This is the message that is sent to the player, when they don't have the required permissions
no-perms-msg: "<red>You don't have the required permissions to execute this command.</red>"
# This is the error that will be sent when no arguments were given.
no-args-msg: "<red>No arguments were given. Usage: <gold>/<command> <usage>.</red>"
# This are the force reload messages.
force-reload-msg: "<dark_green>Forcing reload of the plugin..."
force-reload-complete-msg: "<dark_green>Forcing reload of the plugin <green>complete</green><dark_green>!"
# These are the join and leave messages.
join-msg: "<dark_gray>[<dark_green>+</dark_green>] <green><player></green></dark_gray>"
quit-msg: "<dark_gray>[<dark_red>-</dark_red>] <red><player></red>"
# These are the toggle messages for god mode.
god-enabled-msg: '<dark_green>God mode is now <green>enabled</green><dark_green>.'
god-disabled-msg: '<dark_green>God mode is now <red>disabled</red><dark_green>.'
# These are the toggle messages for god mode, on the sender's side.
god-enabled-others-msg: '<dark_green>You have <green>enabled</green> god mode for <gold><target></gold>.</dark_green>'
god-disabled-others-msg: '<dark_green>You have <red>disabled</red> god mode for <gold><target></gold>.</dark_green>'
# These are the toggle messages for god mode, on the target's side.
god-enabled-target-msg: '<dark_green>God mode has now been <green>enabled</green> for you by <gold><player></gold></dark_green>.'
god-disabled-target-msg: '<dark_green>God mode has now been <red>disabled</red> for you by <gold><player></gold><dark_green>.'
# These are the toggle messages for flight.
flight-enabled-msg: '<dark_green>Flight is now <green>enabled</green>.'
flight-disabled-msg: '<dark_green>Flight is now <red>disabled</red><dark_green>.'
# These are the toggle messages for flight, on the sender's side.
flight-enabled-others-msg: '<dark_green>You have <green>enabled</green> flight for <gold><target></gold><dark_green>.'
flight-disabled-others-msg: '<dark_green>You have <red>disabled</red> flight for <gold><target></gold><dark_green>.'
# These are the toggle messages for flight, on the target's side.
flight-enabled-target-msg: '<dark_green>Flight has now been <green>enabled</green> for you by <gold><player></gold><dark_green>.'
flight-disabled-target-msg: '<dark_green>Flight has now been <red>disabled</red> for you by <gold><player></gold><dark_green>.'
# These are the toggle messages for vanish.
vanish-enabled-msg: '<dark_green>You are now <green>invisible</green><dark_green>.'
vanish-disabled-msg: '<dark_green>You are now <red>visible</red><dark_green>.'
vanish-enabled-others-msg: '<gold><target></gold><dark_green> is now <green>invisible</green><dark_green>.'
vanish-disabled-others-msg: '<gold><target></gold><dark_green> is now <red>visible</red><dark_green>.'
# Other vanish related messages.
vanish-hidden-list-msg: '<dark_green>Hidden players: <gold><playerlist></gold>'
vanish-hidden-none-msg: '<dark_green>There are no hidden players.'
vanish-mod-logs-msg: '<dark_green><player> <gray>has vanished.'
# These are the feed messages.
feed-msg: "<dark_green>You have now been fed."
feed-others-msg: '<dark_green>You have now fed <gold><target></gold></dark_green>.'
feed-target-msg: '<dark_green>You have been fed by <gold><player></gold></dark_green>.'
# These are the heal messages.
heal-msg: "<dark_green>You have now been healed."
heal-others-msg: '<dark_green>You have now healed <gold><target></gold><dark_green>.'
heal-target-msg: '<dark_green>You have been healed by <gold><player></gold><dark_green>.'
# These are the gamemode switcher messages.
gamemode-switcher-msg: '<dark_green>Your gamemode has been updated to <gold><gamemode></gold>.</dark_green>'
gamemode-already-set-msg: '<red>You already are in <gold><gamemode></gold>.</red>'
gamemode-already-set-others-msg: "<red><gold><target></gold>'s gamemode is already set to <gold><gamemode></gold>.</red>"
gamemode-switch-others-msg: "<dark_green>You have changed <gold><target>'s</gold> to <gold><gamemode></gold>.<dark_green>"
# This is the message that is sent to the mod, when they set a new spawn point.
setspawn-msg: "<dark_green>Spawn location has now been set <green>successfully.</green>"
# This is the confirmation message that is sent to the player, when they teleport to the spawn point.
spawn-tp-msg: "<dark_green>You have been teleported to spawn."
# This is the message that is sent to the player, when they tried to teleport to the spawn point, but have to wait for the cooldown.
spawn-cooldown-msg: "<red>You cannot teleport for another <gold><remaining></gold> seconds.</red>"
# This is the message that is sent to the player, when they tried to teleport to the spawn point, but there is none set.
spawn-no-location-msg: "<red>There is no spawn location set. Couldn't initiate teleport.</red>"
# This is the message that is sent to the moderator, when they try to teleport to the spawn point, but there is none set.
spawn-mod-no-location-msg: "<red>There is no spawn location set. Couldn't initiate teleport. Use <click:run_command:setspawn><u><gold>/setspawn</gold></u></click> to set one.</red>"

View file

@ -0,0 +1,87 @@
name: Unique
version: '${project.version}'
main: space.sangelo.unique.Unique
api-version: 1.18
authors: [ Sangelo ]
description: Escape the ordinary Be Unique!
website: https://sangelo.space
commands:
unique:
description: Main Plugin Command. Just a little about page.
usage: /<command>
aliases:
- uq
- about
print:
description: Print a message.
usage: /<command> {message}
aliases:
- hello
- test
- message
god:
description: Become invulnerable! Or let anyone else be.
usage: /<command> [player]
fly:
description: Be able to fly! Or let anyone else be.
usage: /<command> [player]
vanish:
description: Become invisible to others!
usage: /<command>
aliases:
- v
- invis
- invisible
heal:
description: Heal yourself (or if you'd like, someone else)!
usage: /<command> [player]
feed:
description: Feed yourself (or if you'd like, someone else)!
usage: /<command> [player]
aliases:
- food
gmc:
description: Set your gamemode to creative.
usage: /<command> [player]
aliases:
- gamemodec
- modec
- creative
- c
gms:
description: Set your gamemode to survival.
usage: /<command> [player]
aliases:
- gamemodes
- modes
- survival
- s
gma:
description: Set your gamemode to adventure.
usage: /<command> [player]
aliases:
- gamemodea
- modea
- adventure
- a
gmsp:
description: Set your gamemode to spectator.
usage: /<command> [player]
aliases:
- gamemodesp
- modesp
- spectator
- sp
setspawn:
description: Sets the spawnpoint to the current player location.
usage: /<command>
spawn:
description: Teleports the player to the spawnpoint, if there is one specified.
usage: /<command>
forcereload:
description: Force the server to reload the plugin configuration.
usage: /<command>
aliases:
- rlu
- rlunique
- reloadunique