mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-07-01 12:36:41 +00:00
Compare commits
56 Commits
dependabot
...
RELEASE-20
Author | SHA1 | Date | |
---|---|---|---|
8262e81e69 | |||
a48596de8a | |||
39b9147484 | |||
5ba81de118 | |||
4b3c31f0e9 | |||
48aabaa878 | |||
3070ff893e | |||
b29a176fa9 | |||
d1569cb3c0 | |||
cb818c0056 | |||
51c807d318 | |||
5422ad6ac7 | |||
773805101b | |||
f474ce99fd | |||
dbb289db66 | |||
f53ba1bd76 | |||
74408b85bf | |||
c26e05c392 | |||
ee39e6f534 | |||
8a58782d99 | |||
cc244fc4f7 | |||
65540b7f3a | |||
f91c21cc81 | |||
6c983f6b97 | |||
1e97273e01 | |||
922a2bcc76 | |||
34269bde09 | |||
922fa4a34f | |||
ccf572315f | |||
733f668145 | |||
2cd107c317 | |||
e4782a3542 | |||
77d65e80f8 | |||
3644ba33a5 | |||
f25d69c5fa | |||
9dbe30aaa7 | |||
1a28facc56 | |||
e82a90c0dc | |||
f8e09665f5 | |||
a5135ef641 | |||
071d19c5e0 | |||
2e7756ed0f | |||
5332dc88cd | |||
631b691518 | |||
982a991fb0 | |||
adbad1ad9b | |||
cbd3caaab3 | |||
49696f0c30 | |||
3a96c853d2 | |||
b5804c7eb1 | |||
f9ecebd5c9 | |||
3a6e7921cc | |||
b7ea1b8b3e | |||
2265783afb | |||
f53696aa9e | |||
ea60be4c48 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -29,7 +29,7 @@ manifest.mf
|
|||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
# Maven excludes
|
# Maven excludes
|
||||||
/target
|
target/
|
||||||
|
|
||||||
# OS generated files
|
# OS generated files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
250
commons/pom.xml
Normal file
250
commons/pom.xml
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
<?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>
|
||||||
|
<parent>
|
||||||
|
<groupId>me.totalfreedom</groupId>
|
||||||
|
<artifactId>TotalFreedomMod</artifactId>
|
||||||
|
<version>2023.03</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>commons</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.papermc</groupId>
|
||||||
|
<artifactId>paperlib</artifactId>
|
||||||
|
<version>1.0.7</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.12.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.luckperms</groupId>
|
||||||
|
<artifactId>api</artifactId>
|
||||||
|
<version>5.4</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bstats</groupId>
|
||||||
|
<artifactId>bstats-bukkit</artifactId>
|
||||||
|
<version>3.0.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.reflections</groupId>
|
||||||
|
<artifactId>reflections</artifactId>
|
||||||
|
<version>0.10.2</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.sisu</groupId>
|
||||||
|
<artifactId>org.eclipse.sisu.inject</artifactId>
|
||||||
|
<version>0.3.5</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<!-- Filter resources for build.properties -->
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<!-- Compiler -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.10.1</version>
|
||||||
|
<configuration>
|
||||||
|
<outputFileName>TotalFreedomMod.jar</outputFileName>
|
||||||
|
<compilerVersion>17</compilerVersion>
|
||||||
|
<source>17</source>
|
||||||
|
<target>17</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Git describe -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>pl.project13.maven</groupId>
|
||||||
|
<artifactId>git-commit-id-plugin</artifactId>
|
||||||
|
<version>4.9.10</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>get-the-git-infos</id>
|
||||||
|
<goals>
|
||||||
|
<goal>revision</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>validate-the-git-infos</id>
|
||||||
|
<goals>
|
||||||
|
<goal>validateRevision</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>package</phase>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
|
||||||
|
<prefix>git</prefix>
|
||||||
|
<dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
|
||||||
|
<verbose>false</verbose>
|
||||||
|
<format>properties</format>
|
||||||
|
<failOnNoGitDirectory>false</failOnNoGitDirectory>
|
||||||
|
<failOnUnableToExtractRepoInfo>false</failOnUnableToExtractRepoInfo>
|
||||||
|
<includeOnlyProperties>
|
||||||
|
<includeOnlyProperty>git.commit.id.abbrev</includeOnlyProperty>
|
||||||
|
</includeOnlyProperties>
|
||||||
|
<gitDescribe>
|
||||||
|
<skip>false</skip>
|
||||||
|
<always>false</always>
|
||||||
|
<abbrev>7</abbrev>
|
||||||
|
<dirty>-dirty</dirty>
|
||||||
|
<match>*</match>
|
||||||
|
</gitDescribe>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Antrun -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>default-cli</id>
|
||||||
|
<phase>initialize</phase>
|
||||||
|
<configuration>
|
||||||
|
<target>
|
||||||
|
<propertyfile file="${project.basedir}/src/main/resources/build.properties"
|
||||||
|
comment="Build information. Edit this to your liking.">
|
||||||
|
<entry key="buildAuthor" default="unknown"/>
|
||||||
|
<entry key="buildNumber" default="0"/>
|
||||||
|
<entry key="buildCodeName" value="${tfm.build.codename}"/>
|
||||||
|
<entry key="buildVersion" value="${project.version}"/>
|
||||||
|
<entry key="buildDate" value="${timestamp}"/>
|
||||||
|
<!--suppress UnresolvedMavenProperty -->
|
||||||
|
<entry key="buildHead" value="${git.commit.id.abbrev}"/>
|
||||||
|
</propertyfile>
|
||||||
|
</target>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>run</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Properties -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>properties-maven-plugin</artifactId>
|
||||||
|
<version>1.1.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>initialize</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>read-project-properties</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<files>
|
||||||
|
<file>${project.basedir}/src/main/resources/build.properties</file>
|
||||||
|
</files>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Buildnumber -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>buildnumber-maven-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>generate-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>create</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
|
||||||
|
<configuration>
|
||||||
|
<buildNumberPropertyName>maven.buildnumber</buildNumberPropertyName>
|
||||||
|
<buildNumberPropertiesFileLocation>${project.basedir}/src/main/resources/build.properties
|
||||||
|
</buildNumberPropertiesFileLocation>
|
||||||
|
<format>{0,number,#}</format>
|
||||||
|
<items>
|
||||||
|
<item>buildNumber</item>
|
||||||
|
</items>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Shade -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>io.papermc.lib</pattern>
|
||||||
|
<shadedPattern>me.totalfreedom.totalfreedommod.paperlib
|
||||||
|
</shadedPattern> <!-- Replace this -->
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.bstats</pattern>
|
||||||
|
<shadedPattern>me.totalfreedom.totalfreedommod</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
<artifactSet>
|
||||||
|
<includes>
|
||||||
|
<include>org.reflections:reflections</include>
|
||||||
|
<include>io.papermc:paperlib</include>
|
||||||
|
<include>org.bstats:bstats-bukkit</include>
|
||||||
|
<include>org.bstats:bstats-base</include>
|
||||||
|
</includes>
|
||||||
|
</artifactSet>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -87,10 +87,8 @@ public class AntiSpam extends FreedomService
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
||||||
{
|
{
|
||||||
String command = event.getMessage();
|
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
fPlayer.setLastCommand(command);
|
|
||||||
|
|
||||||
if (fPlayer.allCommandsBlocked())
|
if (fPlayer.allCommandsBlocked())
|
||||||
{
|
{
|
@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
||||||
import me.totalfreedom.totalfreedommod.config.YamlConfig;
|
import me.totalfreedom.totalfreedommod.config.YamlConfig;
|
||||||
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
|
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
@ -32,7 +31,6 @@ public class BackupManager extends FreedomService
|
|||||||
{
|
{
|
||||||
createBackups(TotalFreedomMod.CONFIG_FILENAME, true);
|
createBackups(TotalFreedomMod.CONFIG_FILENAME, true);
|
||||||
createBackups(IndefiniteBanList.CONFIG_FILENAME);
|
createBackups(IndefiniteBanList.CONFIG_FILENAME);
|
||||||
createBackups(PermissionConfig.PERMISSIONS_FILENAME, true);
|
|
||||||
createBackups(PunishmentList.CONFIG_FILENAME);
|
createBackups(PunishmentList.CONFIG_FILENAME);
|
||||||
createBackups("database.db");
|
createBackups("database.db");
|
||||||
}
|
}
|
@ -0,0 +1,229 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
|
import me.totalfreedom.totalfreedommod.api.event.AdminChatEvent;
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.key.Key;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.SoundCategory;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ChatManager extends FreedomService
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onStart()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onPlayerChat(AsyncChatEvent event)
|
||||||
|
{
|
||||||
|
// Important information for later down the line
|
||||||
|
String steamrolled = FUtil.steamroll(event.originalMessage());
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
|
|
||||||
|
// Chat is disabled
|
||||||
|
if (!ConfigEntry.TOGGLE_CHAT.getBoolean() && !plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
event.getPlayer().sendMessage(FUtil.miniMessage("<red>The chat is currently disabled."));
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Locked up
|
||||||
|
else if (fPlayer.isLockedUp())
|
||||||
|
{
|
||||||
|
event.getPlayer().sendMessage(FUtil.miniMessage("<red>You are locked up and thus can't talk."));
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Admin chat is enabled
|
||||||
|
else if (fPlayer.inAdminChat())
|
||||||
|
{
|
||||||
|
adminChat(player, steamrolled, true);
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// The event was already cancelled elsewhere or the player was muted
|
||||||
|
else if (event.isCancelled() || fPlayer.isMuted())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Splitter
|
||||||
|
Component splitter = Component.text("»", NamedTextColor.DARK_GRAY);
|
||||||
|
|
||||||
|
// Message
|
||||||
|
TextComponent.Builder message = Component.text();
|
||||||
|
|
||||||
|
// Truncate the message if it's too long
|
||||||
|
if (steamrolled.length() > 256)
|
||||||
|
{
|
||||||
|
steamrolled = steamrolled.substring(0, 256);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Did this because sonarlint was complaining about doing the unboxing in the if statement.
|
||||||
|
// Something about returning null because it was boxed... I'm not sure.
|
||||||
|
boolean unboxed = ConfigEntry.FOURCHAN_ENABLED.getBoolean();
|
||||||
|
|
||||||
|
// Chat colorization
|
||||||
|
// -- 4chan mode --
|
||||||
|
if (steamrolled.startsWith("> ") && unboxed)
|
||||||
|
{
|
||||||
|
message.append(Component.text(steamrolled, NamedTextColor.GREEN));
|
||||||
|
}
|
||||||
|
// -- Legacy chat colors --
|
||||||
|
else if (FUtil.containsChatColor(steamrolled))
|
||||||
|
{
|
||||||
|
message.append(FUtil.colorizeAsComponent(steamrolled.replace("&k", "")));
|
||||||
|
}
|
||||||
|
// -- MiniMessage --
|
||||||
|
else
|
||||||
|
{
|
||||||
|
message.append(FUtil.miniMessage(steamrolled));
|
||||||
|
}
|
||||||
|
|
||||||
|
// This simply filters out shit like &k in a simple but stupid way.
|
||||||
|
Component filtered = FUtil.miniMessage(FUtil.miniMessage(message.build()));
|
||||||
|
|
||||||
|
// Pinging
|
||||||
|
String steamrolledFiltered = FUtil.steamroll(filtered);
|
||||||
|
Arrays.stream(steamrolledFiltered.split(" ")).filter(string -> string.startsWith("@")).forEach(possiblePlayer ->
|
||||||
|
{
|
||||||
|
Player potential = server.getPlayer(possiblePlayer.replace("@", ""));
|
||||||
|
|
||||||
|
// Ping only that particular player
|
||||||
|
if (potential != null)
|
||||||
|
{
|
||||||
|
ping(potential);
|
||||||
|
}
|
||||||
|
// Ping everyone (if the person pinging is an admin)
|
||||||
|
else if (possiblePlayer.equalsIgnoreCase("@everyone") && plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
server.getOnlinePlayers().forEach(this::ping);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
event.message(filtered);
|
||||||
|
|
||||||
|
event.renderer((source, displayName, msg, viewer) -> FUtil.miniMessage("<tag><nickname> <splitter> <message>",
|
||||||
|
Placeholder.component("tag", plugin.pl.getPlayer(source).getTag().append(Component.space())),
|
||||||
|
Placeholder.component("nickname", displayName),
|
||||||
|
Placeholder.component("splitter", splitter),
|
||||||
|
Placeholder.component("message", msg)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onAdminChat(AdminChatEvent event)
|
||||||
|
{
|
||||||
|
Displayable display = event.getDisplayable();
|
||||||
|
String flatAbv = FUtil.miniMessage(display.getAbbr());
|
||||||
|
|
||||||
|
Component defaultFormat = FUtil.miniMessage("<prefix><dark_gray>[<aqua>ADMIN<dark_gray>] <dark_red><name> <dark_gray>[<rankcolor><rank></rankcolor>]</dark_gray><white>: <gold><message>",
|
||||||
|
Placeholder.component("prefix", event.getPrefix()),
|
||||||
|
Placeholder.component("name", event.getName()),
|
||||||
|
Placeholder.unparsed("rank", flatAbv),
|
||||||
|
TagResolver.resolver("rankcolor", Tag.styling(getColor(display))),
|
||||||
|
Placeholder.component("message", event.getMessage()));
|
||||||
|
|
||||||
|
plugin.getComponentLogger().info(defaultFormat);
|
||||||
|
;
|
||||||
|
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
|
||||||
|
{
|
||||||
|
Admin admin = plugin.al.getAdmin(player);
|
||||||
|
if (!Strings.isNullOrEmpty(admin.getAcFormat()))
|
||||||
|
{
|
||||||
|
String format = admin.getAcFormat();
|
||||||
|
|
||||||
|
player.sendMessage(FUtil.miniMessage(format,
|
||||||
|
Placeholder.component("prefix", event.getPrefix()),
|
||||||
|
Placeholder.component("name", event.getName()),
|
||||||
|
Placeholder.unparsed("rank", flatAbv),
|
||||||
|
TagResolver.resolver("rankcolor", Tag.styling(getColor(display))),
|
||||||
|
Placeholder.component("message", event.getMessage())));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.sendMessage(defaultFormat);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextColor getColor(Displayable display)
|
||||||
|
{
|
||||||
|
return display.getColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adminChat(Component name, Displayable displayable, Component message, boolean async)
|
||||||
|
{
|
||||||
|
AdminChatEvent event = new AdminChatEvent(name, displayable, message, async);
|
||||||
|
event.callEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adminChat(Key key, Component prefix, Component name, Displayable displayable, Component message, boolean async)
|
||||||
|
{
|
||||||
|
AdminChatEvent event = new AdminChatEvent(key, prefix, name, displayable, message, async);
|
||||||
|
event.callEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adminChat(CommandSender sender, String message)
|
||||||
|
{
|
||||||
|
adminChat(sender, message, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adminChat(CommandSender sender, String message, boolean async)
|
||||||
|
{
|
||||||
|
Displayable display = plugin.rm.getDisplay(sender);
|
||||||
|
adminChat(Component.text(sender.getName()), display, Component.text(message), async);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reportAction(Player reporter, String reportedName, String report)
|
||||||
|
{
|
||||||
|
messageAllAdmins("<red>[REPORTS]</red> <gold><reporter> has reported <reported> for <reason>.",
|
||||||
|
Placeholder.unparsed("reporter", reporter.getName()),
|
||||||
|
Placeholder.unparsed("reported", reportedName),
|
||||||
|
Placeholder.unparsed("reason", report));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void messageAllAdmins(String message, TagResolver... placeholders)
|
||||||
|
{
|
||||||
|
Component parsed = FUtil.miniMessage(message, placeholders);
|
||||||
|
plugin.getComponentLogger().info(parsed);
|
||||||
|
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
|
||||||
|
player.sendMessage(parsed));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void broadcastSplit(String forAdmins, String forOperators, TagResolver... placeholders)
|
||||||
|
{
|
||||||
|
messageAllAdmins(forAdmins, placeholders);
|
||||||
|
server.getOnlinePlayers().stream().filter(player -> !plugin.al.isAdmin(player)).forEach(player ->
|
||||||
|
player.sendMessage(FUtil.miniMessage(forOperators, placeholders)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ping(Player player)
|
||||||
|
{
|
||||||
|
player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
@ -24,6 +24,6 @@ public class CommandSpy extends FreedomService
|
|||||||
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)
|
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)
|
||||||
&& plugin.al.getAdmin(player).getCommandSpy() && player != event.getPlayer()).forEach(player ->
|
&& plugin.al.getAdmin(player).getCommandSpy() && player != event.getPlayer()).forEach(player ->
|
||||||
player.sendMessage(Component.text(event.getPlayer().getName()).append(Component.text(": "))
|
player.sendMessage(Component.text(event.getPlayer().getName()).append(Component.text(": "))
|
||||||
.append(Component.text(event.getMessage()))));
|
.append(Component.text(event.getMessage())).color(NamedTextColor.GRAY)));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,7 +11,7 @@ public abstract class FreedomService implements Listener
|
|||||||
protected final Server server;
|
protected final Server server;
|
||||||
protected final Logger logger;
|
protected final Logger logger;
|
||||||
|
|
||||||
public FreedomService()
|
protected FreedomService()
|
||||||
{
|
{
|
||||||
plugin = TotalFreedomMod.getPlugin();
|
plugin = TotalFreedomMod.getPlugin();
|
||||||
server = plugin.getServer();
|
server = plugin.getServer();
|
@ -614,7 +614,7 @@ public class FrontDoor extends FreedomService
|
|||||||
{
|
{
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
plugin.pl.getPlayer(player).setTag("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]");
|
plugin.pl.getPlayer(player).setTag(FUtil.miniMessage("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -10,9 +11,12 @@ import me.totalfreedom.totalfreedommod.admin.Admin;
|
|||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FConverter;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FSync;
|
import me.totalfreedom.totalfreedommod.util.FSync;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -33,7 +37,6 @@ public class LoginProcess extends FreedomService
|
|||||||
private static boolean lockdownEnabled = false;
|
private static boolean lockdownEnabled = false;
|
||||||
public List<String> TELEPORT_ON_JOIN = new ArrayList<>();
|
public List<String> TELEPORT_ON_JOIN = new ArrayList<>();
|
||||||
public List<String> CLEAR_ON_JOIN = new ArrayList<>();
|
public List<String> CLEAR_ON_JOIN = new ArrayList<>();
|
||||||
public List<String> CLOWNFISH_TOGGLE = new ArrayList<>();
|
|
||||||
|
|
||||||
public static boolean isLockdownEnabled()
|
public static boolean isLockdownEnabled()
|
||||||
{
|
{
|
||||||
@ -200,25 +203,21 @@ public class LoginProcess extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
for (String line : ConfigEntry.FIRST_JOIN_INFO.getStringList())
|
ConfigEntry.FIRST_JOIN_INFO.getStringList().forEach(line -> FUtil.playerMsgCooler(player, line));
|
||||||
{
|
|
||||||
player.sendMessage(FUtil.colorize(line));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}.runTaskLater(plugin, 20);
|
}.runTaskLater(plugin, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
|
FUtil.playerTitle(player, ConfigEntry.SERVER_LOGIN_TITLE.getString(), ConfigEntry.SERVER_LOGIN_SUBTITLE.getString());
|
||||||
player.setOp(true);
|
|
||||||
|
|
||||||
if (TELEPORT_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_TP.getBoolean())
|
if (TELEPORT_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_TP.getBoolean())
|
||||||
{
|
{
|
||||||
int x = FUtil.randomInteger(-10000, 10000);
|
int x = FUtil.randomInteger(-10000, 10000);
|
||||||
int z = FUtil.randomInteger(-10000, 10000);
|
int z = FUtil.randomInteger(-10000, 10000);
|
||||||
int y = player.getWorld().getHighestBlockYAt(x, z);
|
int y = player.getWorld().getHighestBlockYAt(x, z) + 1;
|
||||||
Location location = new Location(player.getLocation().getWorld(), x, y, z);
|
Location location = new Location(player.getLocation().getWorld(), x, y, z);
|
||||||
PaperLib.teleportAsync(player, location);
|
PaperLib.teleportAsync(player, location);
|
||||||
player.sendMessage(ChatColor.AQUA + "You have been teleported to a random location automatically.");
|
FUtil.playerMsgCooler(player, "<aqua>You have been automatically teleported to a random location.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,35 +230,47 @@ public class LoginProcess extends FreedomService
|
|||||||
if (CLEAR_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_CLEAR.getBoolean())
|
if (CLEAR_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_CLEAR.getBoolean())
|
||||||
{
|
{
|
||||||
player.getInventory().clear();
|
player.getInventory().clear();
|
||||||
player.sendMessage(ChatColor.AQUA + "Your inventory has been cleared automatically.");
|
FUtil.playerMsgCooler(player, "<aqua>Your inventory has been automatically cleared.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ConfigEntry.SERVER_TABLIST_HEADER.getString().isEmpty())
|
if (!ConfigEntry.SERVER_TABLIST_HEADER.getString().isEmpty())
|
||||||
{
|
{
|
||||||
player.setPlayerListHeader(FUtil.colorize(ConfigEntry.SERVER_TABLIST_HEADER.getString()).replace("\\n", "\n"));
|
player.sendPlayerListHeader(FUtil.miniMessage(ConfigEntry.SERVER_TABLIST_HEADER.getString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ConfigEntry.SERVER_TABLIST_FOOTER.getString().isEmpty())
|
if (!ConfigEntry.SERVER_TABLIST_FOOTER.getString().isEmpty())
|
||||||
{
|
{
|
||||||
player.setPlayerListFooter(FUtil.colorize(ConfigEntry.SERVER_TABLIST_FOOTER.getString()).replace("\\n", "\n"));
|
player.sendPlayerListFooter(FUtil.miniMessage(ConfigEntry.SERVER_TABLIST_FOOTER.getString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
if (!plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
String tag = playerData.getTag();
|
Component tag = playerData.getTag();
|
||||||
if (tag != null)
|
if (tag != null)
|
||||||
{
|
{
|
||||||
fPlayer.setTag(FUtil.colorize(tag));
|
fPlayer.setTag(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
int noteCount = playerData.getNotes().size();
|
int noteCount = playerData.getNotes().size();
|
||||||
if (noteCount != 0)
|
if (noteCount != 0)
|
||||||
{
|
{
|
||||||
String noteMessage = "This player has " + noteCount + " admin note" + (noteCount > 1 ? "s" : "") + ".";
|
plugin.cm.messageAllAdmins("<gold>This player has <yellow><count> <gold>admin note<plural>.",
|
||||||
FLog.info(noteMessage);
|
Placeholder.unparsed("count", String.valueOf(noteCount)), Placeholder.unparsed("plural", noteCount > 1 ? "s" : ""));
|
||||||
plugin.al.messageAllAdmins(ChatColor.GOLD + noteMessage);
|
plugin.cm.messageAllAdmins("<gold>Do <yellow>/notes <player> list<gold> to view them.",
|
||||||
plugin.al.messageAllAdmins(ChatColor.GOLD + "Do " + ChatColor.YELLOW + "/notes " + player.getName() + " list" + ChatColor.GOLD + " to view them.");
|
Placeholder.unparsed("player", player.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Admin admin = plugin.al.getAdmin(player);
|
||||||
|
String format = admin.getAcFormat();
|
||||||
|
|
||||||
|
if (!Strings.isNullOrEmpty(format) && FConverter.needsConversion(admin.getAcFormat()))
|
||||||
|
{
|
||||||
|
player.sendMessage(FUtil.miniMessage("<green>Converting your admin chat format..."));
|
||||||
|
admin.setAcFormat(FConverter.convertAdminChatFormat(format));
|
||||||
|
plugin.al.save(admin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,14 +281,14 @@ public class LoginProcess extends FreedomService
|
|||||||
{
|
{
|
||||||
if (ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
|
if (ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "Server is currently closed to non-admins.");
|
FUtil.playerMsgCooler(player, "<red>Server is currently closed to non-admins.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lockdownEnabled)
|
if (lockdownEnabled)
|
||||||
{
|
{
|
||||||
FUtil.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED);
|
FUtil.playerMsgCooler(player, "<red>Warning: Server is currenty in lockdown-mode, new players will not be able to join!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.runTaskLater(plugin, 20L);
|
}.runTaskLater(plugin, 20L);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
@ -27,7 +28,7 @@ public class Muter extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event)
|
public void onAsyncPlayerChatEvent(AsyncChatEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -32,52 +33,35 @@ public class ServerPing extends FreedomService
|
|||||||
|
|
||||||
if (plugin.bm.isIpBanned(ip))
|
if (plugin.bm.isIpBanned(ip))
|
||||||
{
|
{
|
||||||
event.setMotd(FUtil.colorize(ConfigEntry.SERVER_BAN_MOTD.getString()));
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_BAN_MOTD.getString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
|
if (ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
|
||||||
{
|
{
|
||||||
event.setMotd(FUtil.colorize(ConfigEntry.SERVER_ADMINMODE_MOTD.getString()));
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_ADMINMODE_MOTD.getString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LoginProcess.isLockdownEnabled())
|
if (LoginProcess.isLockdownEnabled())
|
||||||
{
|
{
|
||||||
event.setMotd(FUtil.colorize(ConfigEntry.SERVER_LOCKDOWN_MOTD.getString()));
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_LOCKDOWN_MOTD.getString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Bukkit.hasWhitelist())
|
if (Bukkit.hasWhitelist())
|
||||||
{
|
{
|
||||||
event.setMotd(FUtil.colorize(ConfigEntry.SERVER_WHITELIST_MOTD.getString()));
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_WHITELIST_MOTD.getString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Bukkit.getOnlinePlayers().size() >= Bukkit.getMaxPlayers())
|
if (Bukkit.getOnlinePlayers().size() >= Bukkit.getMaxPlayers())
|
||||||
{
|
{
|
||||||
event.setMotd(FUtil.colorize(ConfigEntry.SERVER_FULL_MOTD.getString()));
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_FULL_MOTD.getString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String baseMotd = ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", meta.id);
|
event.motd(FUtil.miniMessage(ConfigEntry.SERVER_MOTD.getString(), Placeholder.unparsed("version", meta.id)));
|
||||||
baseMotd = baseMotd.replace("\\n", "\n");
|
|
||||||
baseMotd = FUtil.colorize(baseMotd);
|
|
||||||
|
|
||||||
if (!ConfigEntry.SERVER_COLORFUL_MOTD.getBoolean())
|
|
||||||
{
|
|
||||||
event.setMotd(baseMotd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Colorful MOTD
|
|
||||||
final StringBuilder motd = new StringBuilder();
|
|
||||||
for (String word : baseMotd.split(" "))
|
|
||||||
{
|
|
||||||
motd.append(FUtil.randomChatColor()).append(word).append(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setMotd(motd.toString().trim());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class VersionMeta
|
private static class VersionMeta
|
@ -1,44 +1,23 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Properties;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.ActivityLog;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.AdminList;
|
import me.totalfreedom.totalfreedommod.admin.AdminList;
|
||||||
|
import me.totalfreedom.totalfreedommod.api.Aggregator;
|
||||||
|
import me.totalfreedom.totalfreedommod.api.ShoppeCommons;
|
||||||
|
import me.totalfreedom.totalfreedommod.api.TFD4JCommons;
|
||||||
import me.totalfreedom.totalfreedommod.banning.BanManager;
|
import me.totalfreedom.totalfreedommod.banning.BanManager;
|
||||||
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
||||||
import me.totalfreedom.totalfreedommod.blocking.BlockBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.*;
|
||||||
import me.totalfreedom.totalfreedommod.blocking.EditBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.EventBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.InteractBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.MobBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.PVPBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.PotionBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.command.CommandBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.command.CommandBlocker;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.BukkitTelnetBridge;
|
import me.totalfreedom.totalfreedommod.bridge.*;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.bridge.EssentialsBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.bridge.LibsDisguisesBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.bridge.WorldEditBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.bridge.WorldGuardBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.caging.Cager;
|
import me.totalfreedom.totalfreedommod.caging.Cager;
|
||||||
import me.totalfreedom.totalfreedommod.command.CommandLoader;
|
import me.totalfreedom.totalfreedommod.command.CommandLoader;
|
||||||
import me.totalfreedom.totalfreedommod.config.MainConfig;
|
import me.totalfreedom.totalfreedommod.config.MainConfig;
|
||||||
import me.totalfreedom.totalfreedommod.discord.Discord;
|
|
||||||
import me.totalfreedom.totalfreedommod.freeze.Freezer;
|
import me.totalfreedom.totalfreedommod.freeze.Freezer;
|
||||||
import me.totalfreedom.totalfreedommod.fun.ItemFun;
|
import me.totalfreedom.totalfreedommod.fun.*;
|
||||||
import me.totalfreedom.totalfreedommod.fun.Jumppads;
|
|
||||||
import me.totalfreedom.totalfreedommod.fun.Landminer;
|
|
||||||
import me.totalfreedom.totalfreedommod.fun.MP44;
|
|
||||||
import me.totalfreedom.totalfreedommod.fun.Trailer;
|
|
||||||
import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
|
import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
|
||||||
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
|
|
||||||
import me.totalfreedom.totalfreedommod.permissions.PermissionManager;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerList;
|
import me.totalfreedom.totalfreedommod.player.PlayerList;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
|
||||||
import me.totalfreedom.totalfreedommod.rank.RankManager;
|
import me.totalfreedom.totalfreedommod.rank.RankManager;
|
||||||
import me.totalfreedom.totalfreedommod.shop.Shop;
|
|
||||||
import me.totalfreedom.totalfreedommod.shop.Votifier;
|
|
||||||
import me.totalfreedom.totalfreedommod.sql.SQLite;
|
import me.totalfreedom.totalfreedommod.sql.SQLite;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
@ -53,6 +32,10 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
public class TotalFreedomMod extends JavaPlugin
|
public class TotalFreedomMod extends JavaPlugin
|
||||||
{
|
{
|
||||||
public static final String CONFIG_FILENAME = "config.yml";
|
public static final String CONFIG_FILENAME = "config.yml";
|
||||||
@ -64,7 +47,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
private static TotalFreedomMod plugin;
|
private static TotalFreedomMod plugin;
|
||||||
//
|
//
|
||||||
public MainConfig config;
|
public MainConfig config;
|
||||||
public PermissionConfig permissions;
|
|
||||||
//
|
//
|
||||||
// Service Handler
|
// Service Handler
|
||||||
public FreedomServiceHandler fsh;
|
public FreedomServiceHandler fsh;
|
||||||
@ -73,7 +55,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
// Services
|
// Services
|
||||||
public WorldManager wm;
|
public WorldManager wm;
|
||||||
public AdminList al;
|
public AdminList al;
|
||||||
public ActivityLog acl;
|
|
||||||
public RankManager rm;
|
public RankManager rm;
|
||||||
public CommandBlocker cb;
|
public CommandBlocker cb;
|
||||||
public EventBlocker eb;
|
public EventBlocker eb;
|
||||||
@ -85,16 +66,15 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
public AntiNuke nu;
|
public AntiNuke nu;
|
||||||
public AntiSpam as;
|
public AntiSpam as;
|
||||||
public PlayerList pl;
|
public PlayerList pl;
|
||||||
public Shop sh;
|
public ShoppeCommons sh;
|
||||||
public Votifier vo;
|
|
||||||
public SQLite sql;
|
public SQLite sql;
|
||||||
public Announcer an;
|
public Announcer an;
|
||||||
public ChatManager cm;
|
public ChatManager cm;
|
||||||
public Discord dc;
|
public TFD4JCommons dc;
|
||||||
|
public Aggregator ag;
|
||||||
public PunishmentList pul;
|
public PunishmentList pul;
|
||||||
public BanManager bm;
|
public BanManager bm;
|
||||||
public IndefiniteBanList im;
|
public IndefiniteBanList im;
|
||||||
public PermissionManager pem;
|
|
||||||
public GameRuleHandler gr;
|
public GameRuleHandler gr;
|
||||||
public CommandSpy cs;
|
public CommandSpy cs;
|
||||||
public Cager ca;
|
public Cager ca;
|
||||||
@ -125,7 +105,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
public LibsDisguisesBridge ldb;
|
public LibsDisguisesBridge ldb;
|
||||||
public CoreProtectBridge cpb;
|
public CoreProtectBridge cpb;
|
||||||
public WorldEditBridge web;
|
public WorldEditBridge web;
|
||||||
public WorldGuardBridge wgb;
|
public LuckPermsBridge lpb;
|
||||||
|
|
||||||
public static TotalFreedomMod getPlugin()
|
public static TotalFreedomMod getPlugin()
|
||||||
{
|
{
|
||||||
@ -138,7 +118,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
{
|
{
|
||||||
if (plugin.getName().equalsIgnoreCase(pluginName))
|
if (plugin.getName().equalsIgnoreCase(pluginName))
|
||||||
{
|
{
|
||||||
return (TotalFreedomMod)plugin;
|
return (TotalFreedomMod) plugin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -186,9 +166,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
BackupManager backups = new BackupManager();
|
BackupManager backups = new BackupManager();
|
||||||
backups.createAllBackups();
|
backups.createAllBackups();
|
||||||
|
|
||||||
permissions = new PermissionConfig();
|
|
||||||
permissions.load();
|
|
||||||
|
|
||||||
mv = new MovementValidator();
|
mv = new MovementValidator();
|
||||||
sp = new ServerPing();
|
sp = new ServerPing();
|
||||||
|
|
||||||
@ -222,6 +199,22 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
return new CleanroomChunkGenerator(id);
|
return new CleanroomChunkGenerator(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerDiscord()
|
||||||
|
{
|
||||||
|
if (Bukkit.getPluginManager().isPluginEnabled("TFD4J"))
|
||||||
|
{
|
||||||
|
dc = ag.getDiscordContext().getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerShoppe()
|
||||||
|
{
|
||||||
|
if (Bukkit.getPluginManager().isPluginEnabled("TF-Shoppe"))
|
||||||
|
{
|
||||||
|
sh = ag.getShoppeContext().getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class BuildProperties
|
public static class BuildProperties
|
||||||
{
|
{
|
||||||
public String author;
|
public String author;
|
||||||
@ -236,6 +229,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Properties props;
|
final Properties props;
|
||||||
|
final String unknown = "unknown";
|
||||||
|
|
||||||
try (InputStream in = plugin.getResource("build.properties"))
|
try (InputStream in = plugin.getResource("build.properties"))
|
||||||
{
|
{
|
||||||
@ -243,15 +237,13 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
props.load(in);
|
props.load(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
author = props.getProperty("buildAuthor", "unknown");
|
author = props.getProperty("buildAuthor", unknown);
|
||||||
codename = props.getProperty("buildCodeName", "unknown");
|
codename = props.getProperty("buildCodeName", unknown);
|
||||||
version = props.getProperty("buildVersion", pluginVersion);
|
version = props.getProperty("buildVersion", pluginVersion);
|
||||||
number = props.getProperty("buildNumber", "1");
|
number = props.getProperty("buildNumber", "1");
|
||||||
date = props.getProperty("buildDate", "unknown");
|
date = props.getProperty("buildDate", unknown);
|
||||||
// Need to do this or it will display ${git.commit.id.abbrev}
|
head = props.getProperty("buildHead", unknown).replace("${git.commit.id.abbrev}", unknown);
|
||||||
head = props.getProperty("buildHead", "unknown").replace("${git.commit.id.abbrev}", "unknown");
|
} catch (Exception ex)
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Could not load build properties! Did you compile with NetBeans/Maven?");
|
FLog.severe("Could not load build properties! Did you compile with NetBeans/Maven?");
|
||||||
FLog.severe(ex);
|
FLog.severe(ex);
|
||||||
@ -284,7 +276,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
wm = new WorldManager();
|
wm = new WorldManager();
|
||||||
sql = new SQLite();
|
sql = new SQLite();
|
||||||
al = new AdminList();
|
al = new AdminList();
|
||||||
acl = new ActivityLog();
|
|
||||||
rm = new RankManager();
|
rm = new RankManager();
|
||||||
cb = new CommandBlocker();
|
cb = new CommandBlocker();
|
||||||
eb = new EventBlocker();
|
eb = new EventBlocker();
|
||||||
@ -297,15 +288,15 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
as = new AntiSpam();
|
as = new AntiSpam();
|
||||||
wr = new WorldRestrictions();
|
wr = new WorldRestrictions();
|
||||||
pl = new PlayerList();
|
pl = new PlayerList();
|
||||||
sh = new Shop();
|
ag = new Aggregator();
|
||||||
vo = new Votifier();
|
|
||||||
an = new Announcer();
|
an = new Announcer();
|
||||||
cm = new ChatManager();
|
cm = new ChatManager();
|
||||||
dc = new Discord();
|
|
||||||
|
|
||||||
pul = new PunishmentList();
|
pul = new PunishmentList();
|
||||||
bm = new BanManager();
|
bm = new BanManager();
|
||||||
im = new IndefiniteBanList();
|
im = new IndefiniteBanList();
|
||||||
pem = new PermissionManager();
|
|
||||||
gr = new GameRuleHandler();
|
gr = new GameRuleHandler();
|
||||||
ew = new EntityWiper();
|
ew = new EntityWiper();
|
||||||
vh = new VanishHandler();
|
vh = new VanishHandler();
|
||||||
@ -335,7 +326,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
esb = new EssentialsBridge();
|
esb = new EssentialsBridge();
|
||||||
ldb = new LibsDisguisesBridge();
|
ldb = new LibsDisguisesBridge();
|
||||||
web = new WorldEditBridge();
|
web = new WorldEditBridge();
|
||||||
wgb = new WorldGuardBridge();
|
lpb = new LuckPermsBridge();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initFun()
|
private void initFun()
|
@ -1,11 +1,7 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -39,8 +35,7 @@ public class VanishHandler extends FreedomService
|
|||||||
if (plugin.al.isVanished(player.getUniqueId()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
plugin.esb.setVanished(player.getName(), true);
|
plugin.esb.setVanished(player.getName(), true);
|
||||||
FLog.info(player.getName() + " joined while still vanished.");
|
plugin.cm.messageAllAdmins("<yellow><player> has joined silently.", Placeholder.unparsed("player", player.getName()));
|
||||||
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has joined silently.");
|
|
||||||
event.joinMessage(null);
|
event.joinMessage(null);
|
||||||
|
|
||||||
new BukkitRunnable()
|
new BukkitRunnable()
|
||||||
@ -50,7 +45,7 @@ public class VanishHandler extends FreedomService
|
|||||||
{
|
{
|
||||||
if (plugin.al.isVanished(player.getUniqueId()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
player.sendActionBar(Component.text("You are hidden from other players.").color(NamedTextColor.GOLD));
|
player.sendActionBar(FUtil.miniMessage("<gold>You are hidden from other players."));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -69,8 +64,7 @@ public class VanishHandler extends FreedomService
|
|||||||
if (plugin.al.isVanished(player.getUniqueId()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
event.quitMessage(null);
|
event.quitMessage(null);
|
||||||
FLog.info(player.getName() + " left while still vanished.");
|
plugin.cm.messageAllAdmins("<yellow><player> has left silently.", Placeholder.unparsed("player", player.getName()));
|
||||||
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has left silently.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,9 @@
|
|||||||
package me.totalfreedom.totalfreedommod.admin;
|
package me.totalfreedom.totalfreedommod.admin;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@ -14,12 +11,16 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class Admin
|
public class Admin
|
||||||
{
|
{
|
||||||
private final List<String> ips = new ArrayList<>();
|
private final List<String> ips = new ArrayList<>();
|
||||||
private UUID uuid;
|
private UUID uuid;
|
||||||
private boolean active = true;
|
private boolean active = true;
|
||||||
private Rank rank = Rank.ADMIN;
|
private DisplayableGroup rank = GroupProvider.ADMIN.getGroup();
|
||||||
private Date lastLogin = new Date();
|
private Date lastLogin = new Date();
|
||||||
private Boolean commandSpy = false;
|
private Boolean commandSpy = false;
|
||||||
private Boolean potionSpy = false;
|
private Boolean potionSpy = false;
|
||||||
@ -37,15 +38,14 @@ public class Admin
|
|||||||
{
|
{
|
||||||
this.uuid = UUID.fromString(resultSet.getString("uuid"));
|
this.uuid = UUID.fromString(resultSet.getString("uuid"));
|
||||||
this.active = resultSet.getBoolean("active");
|
this.active = resultSet.getBoolean("active");
|
||||||
this.rank = Rank.findRank(resultSet.getString("rank"));
|
this.rank = GroupProvider.fromArgument(resultSet.getString("rank")).getGroup();
|
||||||
this.ips.clear();
|
this.ips.clear();
|
||||||
this.ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
|
this.ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
|
||||||
this.lastLogin = new Date(resultSet.getLong("last_login"));
|
this.lastLogin = new Date(resultSet.getLong("last_login"));
|
||||||
this.commandSpy = resultSet.getBoolean("command_spy");
|
this.commandSpy = resultSet.getBoolean("command_spy");
|
||||||
this.potionSpy = resultSet.getBoolean("potion_spy");
|
this.potionSpy = resultSet.getBoolean("potion_spy");
|
||||||
this.acFormat = resultSet.getString("ac_format");
|
this.acFormat = resultSet.getString("ac_format");
|
||||||
}
|
} catch (SQLException e)
|
||||||
catch (SQLException e)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Failed to load admin: " + e.getMessage());
|
FLog.severe("Failed to load admin: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@ -69,18 +69,17 @@ public class Admin
|
|||||||
|
|
||||||
public Map<String, Object> toSQLStorable()
|
public Map<String, Object> toSQLStorable()
|
||||||
{
|
{
|
||||||
Map<String, Object> map = new HashMap<String, Object>()
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
{{
|
map.put("uuid", uuid.toString());
|
||||||
put("uuid", uuid.toString());
|
map.put("active", active);
|
||||||
put("active", active);
|
map.put("rank", rank.toString());
|
||||||
put("rank", rank.toString());
|
map.put("ips", FUtil.listToString(ips));
|
||||||
put("ips", FUtil.listToString(ips));
|
map.put("last_login", lastLogin.getTime());
|
||||||
put("last_login", lastLogin.getTime());
|
map.put("command_spy", commandSpy);
|
||||||
put("command_spy", commandSpy);
|
map.put("potion_spy", potionSpy);
|
||||||
put("potion_spy", potionSpy);
|
map.put("ac_format", acFormat);
|
||||||
put("ac_format", acFormat);
|
return map;
|
||||||
}};
|
|
||||||
return map;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Util IP methods
|
// Util IP methods
|
||||||
@ -148,50 +147,55 @@ public class Admin
|
|||||||
|
|
||||||
if (!active)
|
if (!active)
|
||||||
{
|
{
|
||||||
if (getRank().isAtLeast(Rank.ADMIN))
|
setActiveSplitWorkToReduceComplexity(plugin);
|
||||||
{
|
|
||||||
if (plugin.btb != null)
|
|
||||||
{
|
|
||||||
plugin.btb.killTelnetSessions(getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure admins don't have admin functionality when removed (FS-222)
|
|
||||||
AdminList.vanished.remove(getName());
|
|
||||||
|
|
||||||
if (plugin.esb != null)
|
|
||||||
{
|
|
||||||
plugin.esb.setVanished(getName(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
setCommandSpy(false);
|
|
||||||
setPotionSpy(false);
|
|
||||||
|
|
||||||
Server server = Bukkit.getServer();
|
|
||||||
Player player = server.getPlayer(getUuid());
|
|
||||||
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
// Update chats
|
|
||||||
FPlayer freedomPlayer = plugin.pl.getPlayer(player);
|
|
||||||
freedomPlayer.removeAdminFunctionality();
|
|
||||||
|
|
||||||
// Disable vanish
|
|
||||||
for (Player player1 : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
player1.showPlayer(plugin, player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rank getRank()
|
private void setActiveSplitWorkToReduceComplexity(TotalFreedomMod plugin)
|
||||||
|
{
|
||||||
|
if (getRank().isAtLeast(GroupProvider.ADMIN.getGroup()))
|
||||||
|
{
|
||||||
|
if (plugin.btb != null)
|
||||||
|
{
|
||||||
|
plugin.btb.killTelnetSessions(getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure admins don't have admin functionality when removed (FS-222)
|
||||||
|
AdminList.vanished.remove(getUuid());
|
||||||
|
|
||||||
|
if (plugin.esb != null)
|
||||||
|
{
|
||||||
|
plugin.esb.setVanished(getName(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
setCommandSpy(false);
|
||||||
|
setPotionSpy(false);
|
||||||
|
|
||||||
|
Server server = Bukkit.getServer();
|
||||||
|
Player player = server.getPlayer(getUuid());
|
||||||
|
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
// Update chats
|
||||||
|
FPlayer freedomPlayer = plugin.pl.getPlayer(player);
|
||||||
|
freedomPlayer.removeAdminFunctionality();
|
||||||
|
|
||||||
|
// Disable vanish
|
||||||
|
for (Player player1 : server.getOnlinePlayers())
|
||||||
|
{
|
||||||
|
player1.showPlayer(plugin, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DisplayableGroup getRank()
|
||||||
{
|
{
|
||||||
return rank;
|
return rank;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRank(Rank rank)
|
public void setRank(DisplayableGroup rank)
|
||||||
{
|
{
|
||||||
this.rank = rank;
|
this.rank = rank;
|
||||||
}
|
}
|
@ -2,18 +2,20 @@ package me.totalfreedom.totalfreedommod.admin;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class AdminList extends FreedomService
|
public class AdminList extends FreedomService
|
||||||
{
|
{
|
||||||
@ -35,6 +37,7 @@ public class AdminList extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStop()
|
public void onStop()
|
||||||
{
|
{
|
||||||
|
// This does nothing. This comment is here to prevent SonarLint from complaining.
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load()
|
public void load()
|
||||||
@ -45,19 +48,9 @@ public class AdminList extends FreedomService
|
|||||||
ResultSet adminSet = plugin.sql.getAdminList();
|
ResultSet adminSet = plugin.sql.getAdminList();
|
||||||
while (adminSet.next())
|
while (adminSet.next())
|
||||||
{
|
{
|
||||||
try
|
tryAddAdmin(adminSet);
|
||||||
{
|
|
||||||
Admin admin = new Admin(adminSet);
|
|
||||||
allAdmins.add(admin);
|
|
||||||
}
|
|
||||||
catch (Throwable ex)
|
|
||||||
{
|
|
||||||
FLog.warning("An error occurred whilst reading the admin entry at row #" + adminSet.getRow());
|
|
||||||
FLog.warning(ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
} catch (SQLException e)
|
||||||
catch (SQLException e)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Failed to load admin list: " + e.getMessage());
|
FLog.severe("Failed to load admin list: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@ -66,17 +59,24 @@ public class AdminList extends FreedomService
|
|||||||
FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)");
|
FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void messageAllAdmins(String message)
|
private void tryAddAdmin(ResultSet adminSet) throws SQLException
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
try
|
||||||
{
|
{
|
||||||
if (isAdmin(player))
|
Admin admin = new Admin(adminSet);
|
||||||
{
|
allAdmins.add(admin);
|
||||||
player.sendMessage(message);
|
} catch (Throwable ex)
|
||||||
}
|
{
|
||||||
|
FLog.warning("An error occurred whilst reading the admin entry at row #" + adminSet.getRow());
|
||||||
|
FLog.warning(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void messageAllAdmins(Component message)
|
||||||
|
{
|
||||||
|
server.getOnlinePlayers().stream().filter(this::isAdmin).forEach(player -> player.sendMessage(message));
|
||||||
|
}
|
||||||
|
|
||||||
public void potionSpyMessage(String message)
|
public void potionSpyMessage(String message)
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
for (Player player : server.getOnlinePlayers())
|
||||||
@ -101,12 +101,18 @@ public class AdminList extends FreedomService
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Admin admin = getAdmin((Player)sender);
|
Admin admin = getAdmin((Player) sender);
|
||||||
|
|
||||||
return admin != null && admin.isActive();
|
return admin != null && admin.isActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cast to OfflinePlayer
|
||||||
public boolean isAdmin(Player player)
|
public boolean isAdmin(Player player)
|
||||||
|
{
|
||||||
|
return isAdmin((OfflinePlayer) player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAdmin(OfflinePlayer player)
|
||||||
{
|
{
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
@ -126,30 +132,24 @@ public class AdminList extends FreedomService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return admin.getRank().ordinal() >= Rank.SENIOR_ADMIN.ordinal();
|
return admin.getRank().getLuckPermsGroup().getWeight().orElse(0)
|
||||||
|
>= GroupProvider.SENIOR_ADMIN.getGroup().getLuckPermsGroup().getWeight().orElse(1);
|
||||||
|
// We don't want this to return true if there's no group weight available.
|
||||||
}
|
}
|
||||||
|
|
||||||
public Admin getAdmin(CommandSender sender)
|
public Admin getAdmin(CommandSender sender)
|
||||||
{
|
{
|
||||||
if (sender instanceof Player)
|
if (sender instanceof Player player)
|
||||||
{
|
{
|
||||||
return getAdmin((Player)sender);
|
return getAdmin(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return getEntryByName(sender.getName());
|
return getEntryByName(sender.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Admin getAdmin(Player player)
|
public Admin getAdmin(OfflinePlayer player)
|
||||||
{
|
{
|
||||||
final String ip = FUtil.getIp(player);
|
return getEntryByUuid(player.getUniqueId());
|
||||||
final Admin entry = getEntryByUuid(player.getUniqueId());
|
|
||||||
|
|
||||||
if (entry != null && !entry.getIps().contains(ip))
|
|
||||||
{
|
|
||||||
entry.addIp(ip);
|
|
||||||
}
|
|
||||||
|
|
||||||
return entry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Admin getEntryByUuid(UUID uuid)
|
public Admin getEntryByUuid(UUID uuid)
|
||||||
@ -167,6 +167,12 @@ public class AdminList extends FreedomService
|
|||||||
return ipTable.get(ip);
|
return ipTable.get(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To cast against OfflinePlayer
|
||||||
|
public Admin getAdmin(Player player)
|
||||||
|
{
|
||||||
|
return getAdmin((OfflinePlayer) player);
|
||||||
|
}
|
||||||
|
|
||||||
public void updateLastLogin(Player player)
|
public void updateLastLogin(Player player)
|
||||||
{
|
{
|
||||||
final Admin admin = getAdmin(player);
|
final Admin admin = getAdmin(player);
|
||||||
@ -179,12 +185,12 @@ public class AdminList extends FreedomService
|
|||||||
save(admin);
|
save(admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addAdmin(Admin admin)
|
public void addAdmin(Admin admin)
|
||||||
{
|
{
|
||||||
if (!admin.isValid())
|
if (!admin.isValid())
|
||||||
{
|
{
|
||||||
FLog.warning("Could not add admin: " + admin.getName() + ". Admin is missing details!");
|
FLog.warning("Could not add admin: " + admin.getName() + ". Admin is missing details!");
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store admin, update views
|
// Store admin, update views
|
||||||
@ -193,18 +199,13 @@ public class AdminList extends FreedomService
|
|||||||
|
|
||||||
// Save admin
|
// Save admin
|
||||||
plugin.sql.addAdmin(admin);
|
plugin.sql.addAdmin(admin);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean removeAdmin(Admin admin)
|
public boolean removeAdmin(Admin admin)
|
||||||
{
|
{
|
||||||
if (admin.getRank().isAtLeast(Rank.ADMIN))
|
if (admin.getRank().isAtLeast(GroupProvider.ADMIN.getGroup()) && (plugin.btb != null))
|
||||||
{
|
{
|
||||||
if (plugin.btb != null)
|
plugin.btb.killTelnetSessions(admin.getName());
|
||||||
{
|
|
||||||
plugin.btb.killTelnetSessions(admin.getName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove admin, update views
|
// Remove admin, update views
|
||||||
@ -265,13 +266,13 @@ public class AdminList extends FreedomService
|
|||||||
ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid());
|
ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid());
|
||||||
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
|
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
|
||||||
{
|
{
|
||||||
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
|
||||||
|
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
||||||
{
|
{
|
||||||
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
|
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} catch (SQLException e)
|
||||||
catch (SQLException e)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Failed to save admin: " + e.getMessage());
|
FLog.severe("Failed to save admin: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@ -279,29 +280,23 @@ public class AdminList extends FreedomService
|
|||||||
|
|
||||||
public void deactivateOldEntries(boolean verbose)
|
public void deactivateOldEntries(boolean verbose)
|
||||||
{
|
{
|
||||||
for (Admin admin : allAdmins)
|
allAdmins.stream()
|
||||||
{
|
.filter(admin -> admin.isActive() && !admin.getRank().isAtLeast(GroupProvider.SENIOR_ADMIN.getGroup()))
|
||||||
if (!admin.isActive() || admin.getRank().isAtLeast(Rank.SENIOR_ADMIN))
|
.forEach(admin ->
|
||||||
{
|
{
|
||||||
continue;
|
final Date lastLogin = admin.getLastLogin();
|
||||||
}
|
final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS);
|
||||||
|
if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger())
|
||||||
final Date lastLogin = admin.getLastLogin();
|
{
|
||||||
final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS);
|
return;
|
||||||
|
}
|
||||||
if (lastLoginHours < ConfigEntry.ADMINLIST_CLEAN_THESHOLD_HOURS.getInteger())
|
if (verbose)
|
||||||
{
|
{
|
||||||
continue;
|
FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true);
|
||||||
}
|
}
|
||||||
|
admin.setActive(false);
|
||||||
if (verbose)
|
save(admin);
|
||||||
{
|
});
|
||||||
FUtil.adminAction("TotalFreedomMod", "Deactivating admin " + admin.getName() + ", inactive for " + lastLoginHours + " hours", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
admin.setActive(false);
|
|
||||||
save(admin);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateTables();
|
updateTables();
|
||||||
}
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
|
public class Aggregator
|
||||||
|
{
|
||||||
|
private Context<TFD4JCommons> discord;
|
||||||
|
private Context<ShoppeCommons> shoppe;
|
||||||
|
|
||||||
|
public Context<TFD4JCommons> getDiscordContext()
|
||||||
|
{
|
||||||
|
return discord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDiscordContext(Context<TFD4JCommons> discord)
|
||||||
|
{
|
||||||
|
this.discord = discord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Context<ShoppeCommons> getShoppeContext()
|
||||||
|
{
|
||||||
|
return shoppe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShoppeContext(Context<ShoppeCommons> shoppe)
|
||||||
|
{
|
||||||
|
this.shoppe = shoppe;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
|
public class Context<T>
|
||||||
|
{
|
||||||
|
private final T value;
|
||||||
|
|
||||||
|
public Context(T value)
|
||||||
|
{
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getValue()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface Interpolator
|
||||||
|
{
|
||||||
|
double[] interpolate(double from, double to, int max);
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package me.totalfreedom.totalfreedommod.shop;
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
@ -0,0 +1,55 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
|
public interface ShoppeCommons
|
||||||
|
{
|
||||||
|
|
||||||
|
int getCoinsPerReactionWin();
|
||||||
|
|
||||||
|
void startReactionTimer();
|
||||||
|
|
||||||
|
void forceStartReaction();
|
||||||
|
|
||||||
|
void startReaction();
|
||||||
|
|
||||||
|
void endReaction(String winner);
|
||||||
|
|
||||||
|
String getShopPrefix();
|
||||||
|
|
||||||
|
String getShopTitle();
|
||||||
|
|
||||||
|
Inventory generateShopGUI(PlayerData playerData);
|
||||||
|
|
||||||
|
Inventory generateLoginMessageGUI(Player player);
|
||||||
|
|
||||||
|
boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem);
|
||||||
|
|
||||||
|
boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem);
|
||||||
|
|
||||||
|
ItemStack getLightningRod();
|
||||||
|
|
||||||
|
ItemStack getGrapplingHook();
|
||||||
|
|
||||||
|
ItemStack getFireBall();
|
||||||
|
|
||||||
|
ItemStack getRideablePearl();
|
||||||
|
|
||||||
|
ItemStack getStackingPotato();
|
||||||
|
|
||||||
|
ItemStack getClownFish();
|
||||||
|
|
||||||
|
boolean canAfford(int price, int coins);
|
||||||
|
|
||||||
|
int amountNeeded(int price, int coins);
|
||||||
|
|
||||||
|
ItemStack shopGUIItem(ShopItem item, PlayerData data);
|
||||||
|
|
||||||
|
ShopItem getShopItem(int slot);
|
||||||
|
|
||||||
|
String getReactionString();
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface TFD4JCommons
|
||||||
|
{
|
||||||
|
void messageAdminChatChannel(String message);
|
||||||
|
|
||||||
|
void clearQueue();
|
||||||
|
|
||||||
|
void messageChatChannel(String message, boolean system);
|
||||||
|
|
||||||
|
boolean syncRoles(Admin admin, String id);
|
||||||
|
|
||||||
|
String getCode(PlayerData playerData);
|
||||||
|
|
||||||
|
String generateCode(int size);
|
||||||
|
|
||||||
|
Map<String, PlayerData> getLinkCodes();
|
||||||
|
|
||||||
|
String formatBotTag();
|
||||||
|
|
||||||
|
boolean sendReportOffline(Player reporter, OfflinePlayer reported, String reason);
|
||||||
|
|
||||||
|
boolean sendReport(Player reporter, Player reported, String reason);
|
||||||
|
|
||||||
|
boolean isEnabled();
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.api.event;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
||||||
|
import net.kyori.adventure.key.Key;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class AdminChatEvent extends Event
|
||||||
|
{
|
||||||
|
private static HandlerList handlerList = new HandlerList();
|
||||||
|
//--
|
||||||
|
private Key identifier;
|
||||||
|
private Component prefix = Component.empty();
|
||||||
|
private Component name;
|
||||||
|
private Displayable displayable;
|
||||||
|
private Component message;
|
||||||
|
|
||||||
|
public AdminChatEvent(Key identifier, Component prefix, Component name, Displayable rank, Component message, boolean async)
|
||||||
|
{
|
||||||
|
super(async);
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.prefix = prefix;
|
||||||
|
this.name = name;
|
||||||
|
this.displayable = rank;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminChatEvent(Component name, Displayable rank, Component message, boolean async)
|
||||||
|
{
|
||||||
|
super(async);
|
||||||
|
this.identifier = Key.key("tfm", "default");
|
||||||
|
this.name = name;
|
||||||
|
this.displayable = rank;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList()
|
||||||
|
{
|
||||||
|
return handlerList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull HandlerList getHandlers()
|
||||||
|
{
|
||||||
|
return handlerList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Key getIdentifier()
|
||||||
|
{
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getPrefix()
|
||||||
|
{
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Displayable getDisplayable()
|
||||||
|
{
|
||||||
|
return displayable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getMessage()
|
||||||
|
{
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
@ -71,6 +71,7 @@ public class BanManager extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStop()
|
public void onStop()
|
||||||
{
|
{
|
||||||
|
// This does nothing. This comment is here to prevent SonarLint from complaining.
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Ban> getAllBans()
|
public Set<Ban> getAllBans()
|
@ -19,10 +19,6 @@ public class IndefiniteBan implements IConfig
|
|||||||
private String reason = null;
|
private String reason = null;
|
||||||
private Date expiry = null;
|
private Date expiry = null;
|
||||||
|
|
||||||
public IndefiniteBan()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadFrom(ConfigurationSection cs)
|
public void loadFrom(ConfigurationSection cs)
|
||||||
{
|
{
|
@ -79,6 +79,7 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStop()
|
public void onStop()
|
||||||
{
|
{
|
||||||
|
// This does nothing. This comment is here to prevent SonarLint from complaining.
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
@ -113,6 +114,10 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onPlayerLoginSplitWorkToReduceComplexity(event, ban, bannedBy);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onPlayerLoginSplitWorkToReduceComplexity(PlayerLoginEvent event, IndefiniteBan ban, String bannedBy) {
|
||||||
if (ban != null)
|
if (ban != null)
|
||||||
{
|
{
|
||||||
if (ban.isExpired())
|
if (ban.isExpired())
|
||||||
@ -123,8 +128,8 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
String kickMessage = ChatColor.RED + "Your " + bannedBy + " is "
|
String kickMessage = ChatColor.RED + "Your " + bannedBy + " is "
|
||||||
+ (ban.hasExpiry() ? "" : "indefinitely ")
|
+ (ban.hasExpiry() ? "" : "indefinitely ")
|
||||||
+ "banned from this server.";
|
+ "banned from this server.";
|
||||||
String reason = ban.getReason();
|
String reason = ban.getReason();
|
||||||
if (!Strings.isNullOrEmpty(reason))
|
if (!Strings.isNullOrEmpty(reason))
|
||||||
{
|
{
|
||||||
@ -145,7 +150,6 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, kickMessage);
|
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, kickMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCount()
|
private void updateCount()
|
||||||
{
|
{
|
||||||
nameBanCount = 0;
|
nameBanCount = 0;
|
@ -26,6 +26,7 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
|
// TODO: Remove deprecated method. Complexity is also O(35) which is very bad.
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onBlockPlace(BlockPlaceEvent event)
|
public void onBlockPlace(BlockPlaceEvent event)
|
||||||
{
|
{
|
@ -4,8 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
/* TODO This will have to be changed from com.github.atlasmediagroup.scissors to me.totalfreedom.scissors when we migrate to 1.19 */
|
import me.totalfreedom.scissors.event.block.MasterBlockFireEvent;
|
||||||
import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
|
|
||||||
import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent;
|
import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
@ -66,6 +66,7 @@ public class InteractBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Current cognitive complexity is O(24). This is too high.
|
||||||
private void handleRightClick(PlayerInteractEvent event)
|
private void handleRightClick(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
@ -54,6 +54,7 @@ public class MobBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Complexity for this method is too high [O(23)]. This needs to be fixed.
|
||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
public void onCreatureSpawn(CreatureSpawnEvent event)
|
public void onCreatureSpawn(CreatureSpawnEvent event)
|
||||||
{
|
{
|
@ -24,6 +24,7 @@ public class PVPBlocker extends FreedomService
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Complexity is O(26). This needs to be reduced.
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
|
public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
|
||||||
{
|
{
|
||||||
@ -70,7 +71,7 @@ public class PVPBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player != null & !plugin.al.isAdmin(player))
|
if (player != null && !plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
if (player.getGameMode() == GameMode.CREATIVE)
|
if (player.getGameMode() == GameMode.CREATIVE)
|
||||||
{
|
{
|
@ -24,7 +24,7 @@ import org.bukkit.plugin.SimplePluginManager;
|
|||||||
|
|
||||||
public class CommandBlocker extends FreedomService
|
public class CommandBlocker extends FreedomService
|
||||||
{
|
{
|
||||||
|
private final Pattern whitespacePattern = Pattern.compile("^/?( +)(.*)?");
|
||||||
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
||||||
//
|
//
|
||||||
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
||||||
@ -60,7 +60,7 @@ public class CommandBlocker extends FreedomService
|
|||||||
entryList.clear();
|
entryList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load()
|
public void load() // TODO: Complexity is 21. Need to fix this.
|
||||||
{
|
{
|
||||||
entryList.clear();
|
entryList.clear();
|
||||||
unknownCommands.clear();
|
unknownCommands.clear();
|
||||||
@ -147,6 +147,7 @@ public class CommandBlocker extends FreedomService
|
|||||||
return isCommandBlocked(command, sender, false);
|
return isCommandBlocked(command, sender, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Complexity is 22. Need to fix this. Complexity can be no more than O(15).
|
||||||
public boolean isCommandBlocked(String command, CommandSender sender, boolean doAction)
|
public boolean isCommandBlocked(String command, CommandSender sender, boolean doAction)
|
||||||
{
|
{
|
||||||
if (command == null || command.isEmpty())
|
if (command == null || command.isEmpty())
|
||||||
@ -156,6 +157,14 @@ public class CommandBlocker extends FreedomService
|
|||||||
|
|
||||||
// Format
|
// Format
|
||||||
command = command.toLowerCase().trim();
|
command = command.toLowerCase().trim();
|
||||||
|
|
||||||
|
// Whitespaces
|
||||||
|
Matcher whitespaceMatcher = whitespacePattern.matcher(command);
|
||||||
|
if (whitespaceMatcher.matches() && whitespaceMatcher.groupCount() == 2)
|
||||||
|
{
|
||||||
|
command = whitespaceMatcher.group(2);
|
||||||
|
}
|
||||||
|
|
||||||
command = command.startsWith("/") ? command.substring(1) : command;
|
command = command.startsWith("/") ? command.substring(1) : command;
|
||||||
|
|
||||||
// Check for plugin specific commands
|
// Check for plugin specific commands
|
@ -2,7 +2,7 @@ package me.totalfreedom.totalfreedommod.blocking.command;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
public enum CommandBlockerRank
|
public enum CommandBlockerRank
|
||||||
@ -25,7 +25,7 @@ public enum CommandBlockerRank
|
|||||||
Admin admin = TotalFreedomMod.getPlugin().al.getAdmin(sender);
|
Admin admin = TotalFreedomMod.getPlugin().al.getAdmin(sender);
|
||||||
if (admin != null)
|
if (admin != null)
|
||||||
{
|
{
|
||||||
if (admin.getRank() == Rank.SENIOR_ADMIN)
|
if (admin.getRank() == GroupProvider.SENIOR_ADMIN.getGroup())
|
||||||
{
|
{
|
||||||
return SENIOR_ADMIN;
|
return SENIOR_ADMIN;
|
||||||
}
|
}
|
@ -1,8 +1,5 @@
|
|||||||
package me.totalfreedom.totalfreedommod.bridge;
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.bukkittelnet.BukkitTelnet;
|
import me.totalfreedom.bukkittelnet.BukkitTelnet;
|
||||||
import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent;
|
import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent;
|
||||||
import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
|
import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
|
||||||
@ -10,13 +7,18 @@ import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
|
|||||||
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public class BukkitTelnetBridge extends FreedomService
|
public class BukkitTelnetBridge extends FreedomService
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -44,7 +46,7 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
|
|
||||||
final Admin admin = plugin.al.getEntryByIp(ip);
|
final Admin admin = plugin.al.getEntryByIp(ip);
|
||||||
|
|
||||||
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
|
if (admin == null || !admin.isActive())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -80,8 +82,8 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
boolean active = admin.isActive();
|
boolean active = admin.isActive();
|
||||||
|
|
||||||
isAdmin = active;
|
isAdmin = active;
|
||||||
isSeniorAdmin = active && admin.getRank() == Rank.SENIOR_ADMIN;
|
isSeniorAdmin = active && admin.getRank().equals(GroupProvider.SENIOR_ADMIN.getGroup());
|
||||||
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.ADMIN);
|
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank().equals(GroupProvider.ADMIN.getGroup()));
|
||||||
}
|
}
|
||||||
|
|
||||||
playerTags.put("tfm.admin.isAdmin", isAdmin);
|
playerTags.put("tfm.admin.isAdmin", isAdmin);
|
||||||
@ -106,10 +108,9 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
||||||
if (bukkitTelnet instanceof BukkitTelnet)
|
if (bukkitTelnet instanceof BukkitTelnet)
|
||||||
{
|
{
|
||||||
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
|
bukkitTelnetPlugin = (BukkitTelnet) bukkitTelnet;
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe(ex);
|
FLog.severe(ex);
|
||||||
}
|
}
|
||||||
@ -159,8 +160,7 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
telnet.appender.removeSession(session);
|
telnet.appender.removeSession(session);
|
||||||
session.syncTerminateSession();
|
session.syncTerminateSession();
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Error removing single telnet session: " + ex.getMessage());
|
FLog.severe("Error removing single telnet session: " + ex.getMessage());
|
||||||
}
|
}
|
||||||
@ -168,8 +168,7 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
|
|
||||||
FLog.info(sessionsToRemove.size() + " telnet session(s) removed.");
|
FLog.info(sessionsToRemove.size() + " telnet session(s) removed.");
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
|
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
|
||||||
}
|
}
|
@ -166,6 +166,7 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
return historyMap.get(player.getUniqueId());
|
return historyMap.get(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Complexity is O(19). This should be reduced.
|
||||||
public void showPageToPlayer(Player player, FUtil.PaginationList<CoreProtectAPI.ParseResult> results, int pageNum)
|
public void showPageToPlayer(Player player, FUtil.PaginationList<CoreProtectAPI.ParseResult> results, int pageNum)
|
||||||
{
|
{
|
||||||
if (player == null || !player.isOnline())
|
if (player == null || !player.isOnline())
|
@ -4,7 +4,7 @@ import com.earth2me.essentials.Essentials;
|
|||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.DisplayableGroup;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
@ -28,11 +28,13 @@ public class EssentialsBridge extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
|
// This is completely useless, but it's here to make sure the service is loaded.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop()
|
public void onStop()
|
||||||
{
|
{
|
||||||
|
essentialsPlugin = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Essentials getEssentialsPlugin()
|
public Essentials getEssentialsPlugin()
|
||||||
@ -43,9 +45,9 @@ public class EssentialsBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
|
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
|
||||||
assert essentials != null;
|
assert essentials != null;
|
||||||
if (essentials instanceof Essentials)
|
if (essentials instanceof Essentials e)
|
||||||
{
|
{
|
||||||
essentialsPlugin = (Essentials)essentials;
|
essentialsPlugin = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -154,9 +156,9 @@ public class EssentialsBridge extends FreedomService
|
|||||||
if (inventoryHolder instanceof HumanEntity)
|
if (inventoryHolder instanceof HumanEntity)
|
||||||
{
|
{
|
||||||
Player invOwner = (Player)inventoryHolder;
|
Player invOwner = (Player)inventoryHolder;
|
||||||
Rank recieverRank = plugin.rm.getRank(player);
|
DisplayableGroup recieverRank = plugin.rm.getRank(player);
|
||||||
Rank playerRank = plugin.rm.getRank(invOwner);
|
DisplayableGroup playerRank = plugin.rm.getRank(invOwner);
|
||||||
if (playerRank.ordinal() >= recieverRank.ordinal() || !invOwner.isOnline())
|
if (playerRank.getWeight() >= recieverRank.getWeight() || !invOwner.isOnline())
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
refreshPlayer = player;
|
refreshPlayer = player;
|
@ -5,12 +5,13 @@ import me.libraryaddict.disguise.DisguiseAPI;
|
|||||||
import me.libraryaddict.disguise.LibsDisguises;
|
import me.libraryaddict.disguise.LibsDisguises;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
public class LibsDisguisesBridge extends FreedomService
|
public class LibsDisguisesBridge extends FreedomService
|
||||||
{
|
{
|
||||||
private LibsDisguises libsDisguisesPlugin = null;
|
private static LibsDisguises libsDisguisesPlugin = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
@ -22,22 +23,18 @@ public class LibsDisguisesBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public LibsDisguises getLibsDisguisesPlugin()
|
public static LibsDisguises getLibsDisguisesPlugin()
|
||||||
{
|
{
|
||||||
if (libsDisguisesPlugin == null)
|
if (libsDisguisesPlugin == null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Plugin libsDisguises = server.getPluginManager().getPlugin("LibsDisguises");
|
final Plugin libsDisguises = Bukkit.getServer().getPluginManager().getPlugin("LibsDisguises");
|
||||||
if (libsDisguises != null)
|
if (libsDisguises instanceof LibsDisguises)
|
||||||
{
|
{
|
||||||
if (libsDisguises instanceof LibsDisguises)
|
libsDisguisesPlugin = (LibsDisguises) libsDisguises;
|
||||||
{
|
|
||||||
libsDisguisesPlugin = (LibsDisguises)libsDisguises;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe(ex);
|
FLog.severe(ex);
|
||||||
}
|
}
|
||||||
@ -68,8 +65,7 @@ public class LibsDisguisesBridge extends FreedomService
|
|||||||
DisguiseAPI.undisguiseToAll(player);
|
DisguiseAPI.undisguiseToAll(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
FLog.severe(ex);
|
FLog.severe(ex);
|
||||||
}
|
}
|
||||||
@ -80,7 +76,7 @@ public class LibsDisguisesBridge extends FreedomService
|
|||||||
return !BlockedDisguises.disabled;
|
return !BlockedDisguises.disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDisguisesEnabled(boolean state)
|
public static void setDisguisesEnabled(boolean state)
|
||||||
{
|
{
|
||||||
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
|
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
|
import net.luckperms.api.LuckPerms;
|
||||||
|
import net.luckperms.api.track.TrackManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
import org.bukkit.plugin.UnknownDependencyException;
|
||||||
|
|
||||||
|
public class LuckPermsBridge
|
||||||
|
{
|
||||||
|
private final LuckPerms luckPerms;
|
||||||
|
|
||||||
|
public LuckPermsBridge()
|
||||||
|
{
|
||||||
|
RegisteredServiceProvider<LuckPerms> provider = Bukkit.getServicesManager()
|
||||||
|
.getRegistration(LuckPerms.class);
|
||||||
|
|
||||||
|
if (provider == null) throw new UnknownDependencyException("LuckPerms must be present!");
|
||||||
|
|
||||||
|
this.luckPerms = provider.getProvider();
|
||||||
|
|
||||||
|
setupTracks();
|
||||||
|
}
|
||||||
|
|
||||||
|
public LuckPerms getAPI()
|
||||||
|
{
|
||||||
|
return luckPerms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setupTracks()
|
||||||
|
{
|
||||||
|
TrackManager trackManager = getAPI().getTrackManager();
|
||||||
|
|
||||||
|
if (!trackManager.isLoaded("fakeOp"))
|
||||||
|
{
|
||||||
|
trackManager.createAndLoadTrack("fakeOp").whenComplete((track, exception) ->
|
||||||
|
{
|
||||||
|
track.appendGroup(GroupProvider.NON_OP.getGroup().getLuckPermsGroup());
|
||||||
|
track.appendGroup(GroupProvider.OP.getGroup().getLuckPermsGroup());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trackManager.isLoaded("admin"))
|
||||||
|
{
|
||||||
|
trackManager.createAndLoadTrack("admin").whenComplete((track, exception) ->
|
||||||
|
{
|
||||||
|
track.appendGroup(GroupProvider.ADMIN.getGroup().getLuckPermsGroup());
|
||||||
|
track.appendGroup(GroupProvider.SENIOR_ADMIN.getGroup().getLuckPermsGroup());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trackManager.isLoaded("builder"))
|
||||||
|
{
|
||||||
|
trackManager.createAndLoadTrack("builder").whenComplete((track, exception) ->
|
||||||
|
track.appendGroup(GroupProvider.MASTER_BUILDER.getGroup().getLuckPermsGroup()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -124,7 +124,7 @@ public class CageData
|
|||||||
this.location = location;
|
this.location = location;
|
||||||
this.outerMaterial = outer;
|
this.outerMaterial = outer;
|
||||||
this.innerMaterial = inner;
|
this.innerMaterial = inner;
|
||||||
input = null;
|
input = null; // TODO: Remove static variable declaration in a non-static block.
|
||||||
|
|
||||||
buildHistory(location);
|
buildHistory(location);
|
||||||
regenerate();
|
regenerate();
|
||||||
@ -141,7 +141,7 @@ public class CageData
|
|||||||
this.location = location;
|
this.location = location;
|
||||||
this.outerMaterial = outer;
|
this.outerMaterial = outer;
|
||||||
this.innerMaterial = inner;
|
this.innerMaterial = inner;
|
||||||
CageData.input = input;
|
CageData.input = input; // TODO: Remove static variable declaration in a non-static block.
|
||||||
|
|
||||||
buildHistory(location);
|
buildHistory(location);
|
||||||
regenerate();
|
regenerate();
|
@ -0,0 +1,10 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface CommandDependencies
|
||||||
|
{
|
||||||
|
String[] value();
|
||||||
|
}
|
@ -63,10 +63,25 @@ public class CommandLoader extends FreedomService
|
|||||||
|
|
||||||
Set<Class<? extends FreedomCommand>> commandClasses = commandDir.getSubTypesOf(FreedomCommand.class);
|
Set<Class<? extends FreedomCommand>> commandClasses = commandDir.getSubTypesOf(FreedomCommand.class);
|
||||||
|
|
||||||
|
commandLoading:
|
||||||
for (Class<? extends FreedomCommand> commandClass : commandClasses)
|
for (Class<? extends FreedomCommand> commandClass : commandClasses)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (commandClass.isAnnotationPresent(CommandDependencies.class))
|
||||||
|
{
|
||||||
|
String[] dependencies = commandClass.getAnnotation(CommandDependencies.class).value();
|
||||||
|
|
||||||
|
for (String plugin : dependencies)
|
||||||
|
{
|
||||||
|
if (!server.getPluginManager().isPluginEnabled(plugin))
|
||||||
|
{
|
||||||
|
FLog.warning("Not loading command due to missing dependency (" + plugin + "): /" + commandClass.getSimpleName().replace("Command_", ""));
|
||||||
|
continue commandLoading;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
add(commandClass.newInstance());
|
add(commandClass.newInstance());
|
||||||
}
|
}
|
||||||
catch (InstantiationException | IllegalAccessException | ExceptionInInitializerError ex)
|
catch (InstantiationException | IllegalAccessException | ExceptionInInitializerError ex)
|
@ -2,13 +2,12 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface CommandPermissions
|
public @interface CommandPermissions
|
||||||
{
|
{
|
||||||
|
|
||||||
Rank level() default Rank.NON_OP;
|
String permission() default "default";
|
||||||
|
|
||||||
SourceType source() default SourceType.BOTH;
|
SourceType source() default SourceType.BOTH;
|
||||||
|
|
@ -1,13 +1,13 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "adminchat", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Talk privately with other admins on the server.", usage = "/<command> [message]", aliases = "o,sc,ac,staffchat")
|
@CommandParameters(description = "Talk privately with other admins on the server.", usage = "/<command> [message]", aliases = "o,sc,ac,staffchat")
|
||||||
public class Command_adminchat extends FreedomCommand
|
public class Command_adminchat extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -19,15 +19,14 @@ public class Command_adminchat extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (senderIsConsole)
|
if (senderIsConsole)
|
||||||
{
|
{
|
||||||
msg("You must be in-game to toggle admin chat, it cannot be toggled via CONSOLE or Telnet.");
|
msgNew("<red>You must be in-game to toggle admin chat, it cannot be toggled via CONSOLE or Telnet.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FPlayer userinfo = plugin.pl.getPlayer(playerSender);
|
FPlayer userinfo = plugin.pl.getPlayer(playerSender);
|
||||||
userinfo.setAdminChat(!userinfo.inAdminChat());
|
userinfo.setAdminChat(!userinfo.inAdminChat());
|
||||||
msg("Admin chat turned " + (userinfo.inAdminChat() ? "on" : "off") + ".");
|
msgNew("Admin chat turned <status>.", Placeholder.unparsed("status", userinfo.inAdminChat() ? "on" : "off"));
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
plugin.cm.adminChat(sender, StringUtils.join(args, " "));
|
plugin.cm.adminChat(sender, StringUtils.join(args, " "));
|
||||||
}
|
}
|
@ -2,15 +2,11 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
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.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandPermissions(permission = "admininfo", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "si,ai,staffinfo")
|
@CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "si,ai,staffinfo")
|
||||||
public class Command_admininfo extends FreedomCommand
|
public class Command_admininfo extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -22,12 +18,13 @@ public class Command_admininfo extends FreedomCommand
|
|||||||
|
|
||||||
if (adminInfo.isEmpty())
|
if (adminInfo.isEmpty())
|
||||||
{
|
{
|
||||||
msg("The admin information section of the config.yml file has not been configured.", ChatColor.RED);
|
msgNew("<red>The admin information section of the config.yml file has not been configured.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg(FUtil.colorize(StringUtils.join(adminInfo, "\n")));
|
adminInfo.forEach(this::msgNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,14 +4,13 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "adminmode", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]", aliases = "staffmode")
|
@CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]", aliases = "staffmode")
|
||||||
public class Command_adminmode extends FreedomCommand
|
public class Command_adminmode extends FreedomCommand
|
||||||
{
|
{
|
@ -4,15 +4,15 @@ import io.papermc.lib.PaperLib;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.world.WorldTime;
|
import me.totalfreedom.totalfreedommod.world.WorldTime;
|
||||||
import me.totalfreedom.totalfreedommod.world.WorldWeather;
|
import me.totalfreedom.totalfreedommod.world.WorldWeather;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandPermissions(permission = "adminworld", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Allows for admins to configure time, and weather of the AdminWorld, and allows for admins and ops to go to the AdminWorld.",
|
@CommandParameters(description = "Allows for admins to configure time, and weather of the AdminWorld, and allows for admins and ops to go to the AdminWorld.",
|
||||||
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
|
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
|
||||||
aliases = "sw,aw,staffworld")
|
aliases = "sw,aw,staffworld")
|
||||||
@ -49,7 +49,7 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
{
|
{
|
||||||
switch (commandMode)
|
switch (commandMode)
|
||||||
{
|
{
|
||||||
case TELEPORT:
|
case TELEPORT ->
|
||||||
{
|
{
|
||||||
if (!(sender instanceof Player) || playerSender == null)
|
if (!(sender instanceof Player) || playerSender == null)
|
||||||
{
|
{
|
||||||
@ -60,24 +60,21 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
adminWorld = plugin.wm.adminworld.getWorld();
|
adminWorld = plugin.wm.adminworld.getWorld();
|
||||||
}
|
} catch (Exception ignored)
|
||||||
catch (Exception ignored)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adminWorld == null || playerSender.getWorld() == adminWorld)
|
if (adminWorld == null || playerSender.getWorld() == adminWorld)
|
||||||
{
|
{
|
||||||
msg("Going to the main world.");
|
msgNew("Going to the main world.");
|
||||||
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
|
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
msg("Going to the AdminWorld.");
|
msgNew("Going to the AdminWorld.");
|
||||||
plugin.wm.adminworld.sendToWorld(playerSender);
|
plugin.wm.adminworld.sendToWorld(playerSender);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case TIME:
|
case TIME ->
|
||||||
{
|
{
|
||||||
assertCommandPerms(sender, playerSender);
|
assertCommandPerms(sender, playerSender);
|
||||||
|
|
||||||
@ -87,21 +84,18 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
if (timeOfDay != null)
|
if (timeOfDay != null)
|
||||||
{
|
{
|
||||||
plugin.wm.adminworld.setTimeOfDay(timeOfDay);
|
plugin.wm.adminworld.setTimeOfDay(timeOfDay);
|
||||||
msg("AdminWorld time set to: " + timeOfDay.name());
|
msgNew("AdminWorld time set to: <time>", Placeholder.unparsed("time", timeOfDay.name()));
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight");
|
msgNew("<red>Invalid time of day. Can be: sunrise, noon, sunset, midnight");
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case WEATHER:
|
case WEATHER ->
|
||||||
{
|
{
|
||||||
assertCommandPerms(sender, playerSender);
|
assertCommandPerms(sender, playerSender);
|
||||||
|
|
||||||
@ -111,21 +105,18 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
if (weatherMode != null)
|
if (weatherMode != null)
|
||||||
{
|
{
|
||||||
plugin.wm.adminworld.setWeatherMode(weatherMode);
|
plugin.wm.adminworld.setWeatherMode(weatherMode);
|
||||||
msg("AdminWorld weather set to: " + weatherMode.name());
|
msgNew("AdminWorld weather set to <mode>.", Placeholder.unparsed("mode", weatherMode.name()));
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
msg("Invalid weather mode. Can be: off, rain, storm");
|
msgNew("<red>Invalid weather mode. Can be: off, rain, storm");
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default:
|
default ->
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -137,7 +128,7 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
{
|
{
|
||||||
return noPerms();
|
return noPerms();
|
||||||
}
|
}
|
||||||
msg(ex.getMessage());
|
msgNew("<red>" + ex.getMessage());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,7 +138,7 @@ public class Command_adminworld extends FreedomCommand
|
|||||||
// TODO: Redo this properly
|
// TODO: Redo this properly
|
||||||
private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException
|
private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException
|
||||||
{
|
{
|
||||||
if (!(sender instanceof Player) || playerSender == null || !isAdmin(sender))
|
if (!(sender instanceof Player) || playerSender == null || !sender.hasPermission("tfm.adminworld.manage"))
|
||||||
{
|
{
|
||||||
throw new PermissionDeniedException();
|
throw new PermissionDeniedException();
|
||||||
}
|
}
|
@ -1,12 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "announce", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Make an announcement anonymously to operators.", usage = "/<command> <message>")
|
@CommandParameters(description = "Make an announcement anonymously to operators.", usage = "/<command> <message>")
|
||||||
public class Command_announce extends FreedomCommand
|
public class Command_announce extends FreedomCommand
|
||||||
{
|
{
|
@ -1,11 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "autoclear", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Toggle whether or not a player has their inventory automatically cleared when they join", usage = "/<command> <player>")
|
@CommandParameters(description = "Toggle whether or not a player has their inventory automatically cleared when they join", usage = "/<command> <player>")
|
||||||
public class Command_autoclear extends FreedomCommand
|
public class Command_autoclear extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -29,7 +29,8 @@ public class Command_autoclear extends FreedomCommand
|
|||||||
plugin.lp.CLEAR_ON_JOIN.add(args[0]);
|
plugin.lp.CLEAR_ON_JOIN.add(args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg(args[0] + " will " + (enabled ? "no longer" : "now") + " have their inventory cleared when they join.");
|
msgNew("<player> will <status> have their inventory cleared when they join.",
|
||||||
|
Placeholder.unparsed("player", args[0]), Placeholder.unparsed("status", enabled ? "no longer" : "now"));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "autotp", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Toggle whether or not a player is automatically teleported when they join", usage = "/<command> <player>")
|
@CommandParameters(description = "Toggle whether or not a player is automatically teleported when they join", usage = "/<command> <player>")
|
||||||
public class Command_autotp extends FreedomCommand
|
public class Command_autotp extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -29,8 +29,8 @@ public class Command_autotp extends FreedomCommand
|
|||||||
plugin.lp.TELEPORT_ON_JOIN.add(args[0]);
|
plugin.lp.TELEPORT_ON_JOIN.add(args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg(args[0] + " will " + (enabled ? "no longer" : "now") + " be automatically teleported when they join.");
|
msgNew("<player> will <status> be automatically teleported when they join.",
|
||||||
|
Placeholder.unparsed("player", args[0]), Placeholder.unparsed("status", enabled ? "no longer" : "now"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,11 +7,10 @@ import me.totalfreedom.totalfreedommod.banning.Ban;
|
|||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -19,7 +18,7 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true)
|
@CommandPermissions(permission = "ban", source = SourceType.BOTH, blockHostConsole = true)
|
||||||
@CommandParameters(description = "Bans the specified player.", usage = "/<command> <username> [reason] [-nrb | -q]", aliases = "gtfo")
|
@CommandParameters(description = "Bans the specified player.", usage = "/<command> <username> [reason] [-nrb | -q]", aliases = "gtfo")
|
||||||
public class Command_ban extends FreedomCommand
|
public class Command_ban extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -118,7 +117,7 @@ public class Command_ban extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Banned " + player.getName() + " quietly.");
|
msgNew("Banned <player> quietly.", Placeholder.unparsed("player", player.getName()));
|
||||||
}
|
}
|
||||||
// Kill player
|
// Kill player
|
||||||
player.setHealth(0.0);
|
player.setHealth(0.0);
|
||||||
@ -160,7 +159,9 @@ public class Command_ban extends FreedomCommand
|
|||||||
{
|
{
|
||||||
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
||||||
}
|
}
|
||||||
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + ip);
|
msgNew("<name> has been banned and their IP is <ip>.",
|
||||||
|
Placeholder.unparsed("name", username),
|
||||||
|
Placeholder.unparsed("ip", ip));
|
||||||
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,13 +169,9 @@ public class Command_ban extends FreedomCommand
|
|||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
player.kickPlayer(ban.bakeKickMessage());
|
player.kickPlayer(ban.bakeKickMessage());
|
||||||
for (Player p : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
server.getOnlinePlayers().stream().filter(pl -> FUtil.getIp(pl).equalsIgnoreCase(ip)).forEach(pl ->
|
||||||
if (FUtil.getIp(p).equals(FUtil.getIp(player)))
|
player.kickPlayer(ban.bakeKickMessage()));
|
||||||
{
|
|
||||||
p.kickPlayer(ChatColor.RED + "You've been kicked because someone on your IP has been banned.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log ban
|
// Log ban
|
@ -1,17 +1,15 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true)
|
@CommandPermissions(permission = "banip", source = SourceType.BOTH, blockHostConsole = true)
|
||||||
@CommandParameters(description = "Bans the specified ip.", usage = "/<command> <ip> [reason] [-q]")
|
@CommandParameters(description = "Bans the specified ip.", usage = "/<command> <ip> [reason] [-q]")
|
||||||
public class Command_banip extends FreedomCommand
|
public class Command_banip extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -32,13 +30,13 @@ public class Command_banip extends FreedomCommand
|
|||||||
|
|
||||||
if (FUtil.isValidIPv4(ip))
|
if (FUtil.isValidIPv4(ip))
|
||||||
{
|
{
|
||||||
msg(ip + " is not a valid IP address", ChatColor.RED);
|
msgNew("<red><ip> is not a valid IP address.", Placeholder.unparsed("ip", ip));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.bm.getByIp(ip) != null)
|
if (plugin.bm.getByIp(ip) != null)
|
||||||
{
|
{
|
||||||
msg("The IP " + ip + " is already banned", ChatColor.RED);
|
msgNew("<red>The IP <ip> is already banned.", Placeholder.unparsed("ip", ip));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,20 +59,13 @@ public class Command_banip extends FreedomCommand
|
|||||||
plugin.bm.addBan(ban);
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
// Kick player and handle others on IP
|
// Kick player and handle others on IP
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(player -> FUtil.getIp(player).equalsIgnoreCase(ip)).forEach(player ->
|
||||||
{
|
player.kickPlayer(ban.bakeKickMessage()));
|
||||||
if (FUtil.getIp(player).equals(ip))
|
|
||||||
{
|
|
||||||
player.kickPlayer(ban.bakeKickMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!silent)
|
// Broadcasts the message
|
||||||
{
|
if (!silent)
|
||||||
// Broadcast
|
{
|
||||||
FLog.info(ChatColor.RED + sender.getName() + " - Banned the IP " + ip);
|
plugin.cm.broadcastSplit("<red><sender> - Banned the IP <ip>", "<red><sender> - Banned an IP", Placeholder.unparsed("ip", ip));
|
||||||
String message = sender.getName() + " - Banned " + (plugin.al.isAdmin(player) ? "the IP " + ip : "an IP");
|
|
||||||
msg(player, message, ChatColor.RED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
@ -0,0 +1,43 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "banlist", source = SourceType.BOTH)
|
||||||
|
@CommandParameters(description = "Shows all banned player names. Admins may optionally use 'purge' to clear the list.", usage = "/<command> [purge]")
|
||||||
|
public class Command_banlist extends FreedomCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
if (args.length > 0)
|
||||||
|
{
|
||||||
|
if (args[0].equalsIgnoreCase("purge"))
|
||||||
|
{
|
||||||
|
checkPermission("tfm.banlist.purge");
|
||||||
|
FUtil.adminAction(sender.getName(), "Purging the ban list", true);
|
||||||
|
msgNew("<green>Purged <amount> player bans.", Placeholder.unparsed("amount", String.valueOf(plugin.bm.purge())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
msgNew("<total> player bans (<usernames> usernames, <ips> IPs)",
|
||||||
|
Placeholder.unparsed("total", String.valueOf(plugin.bm.getAllBans().size())),
|
||||||
|
Placeholder.unparsed("usernames", String.valueOf(plugin.bm.getUsernameBans())),
|
||||||
|
Placeholder.unparsed("ips", String.valueOf(plugin.bm.getIpBans().size())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
return args.length == 1 && sender.hasPermission("tfm.banlist.purge") ? Collections.singletonList("purge") : Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,15 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true)
|
@CommandPermissions(permission = "banname", source = SourceType.BOTH, blockHostConsole = true)
|
||||||
@CommandParameters(description = "Bans the specified name.", usage = "/<command> <name> [reason] [-q]")
|
@CommandParameters(description = "Bans the specified name.", usage = "/<command> <name> [reason] [-q]")
|
||||||
public class Command_banname extends FreedomCommand
|
public class Command_banname extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -31,7 +30,7 @@ public class Command_banname extends FreedomCommand
|
|||||||
|
|
||||||
if (plugin.bm.getByUsername(name) != null)
|
if (plugin.bm.getByUsername(name) != null)
|
||||||
{
|
{
|
||||||
msg("The name " + name + " is already banned", ChatColor.RED);
|
msgNew("<red>The name <name> is already banned.", Placeholder.unparsed("name", name));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -3,14 +3,13 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.SplittableRandom;
|
import java.util.SplittableRandom;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "bird", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Spawns a random type of fish at your location.", usage = "/<command>")
|
@CommandParameters(description = "Spawns a random type of fish at your location.", usage = "/<command>")
|
||||||
public class Command_bird extends FreedomCommand
|
public class Command_bird extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -20,7 +19,7 @@ public class Command_bird extends FreedomCommand
|
|||||||
{
|
{
|
||||||
Location location = playerSender.getTargetBlock(null, 15).getLocation().add(0, 1, 0);
|
Location location = playerSender.getTargetBlock(null, 15).getLocation().add(0, 1, 0);
|
||||||
playerSender.getWorld().spawnEntity(location, getRandomFish());
|
playerSender.getWorld().spawnEntity(location, getRandomFish());
|
||||||
msg(":goodbird:");
|
msgNew("<rainbow>:goodbird:");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -3,14 +3,13 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "blockcmd", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Block all commands for everyone on the server, or a specific player.", usage = "/<command> <-a | purge | <player>>", aliases = "blockcommands,blockcommand,bc,bcmd")
|
@CommandParameters(description = "Block all commands for everyone on the server, or a specific player.", usage = "/<command> <-a | purge | <player>>", aliases = "blockcommands,blockcommand,bc,bcmd")
|
||||||
public class Command_blockcmd extends FreedomCommand
|
public class Command_blockcmd extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -36,7 +35,8 @@ public class Command_blockcmd extends FreedomCommand
|
|||||||
playerdata.setCommandsBlocked(false);
|
playerdata.setCommandsBlocked(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msg("Unblocked commands for " + counter + " players.");
|
|
||||||
|
msgNew("Unblocked commands for <count> players.", Placeholder.unparsed("count", String.valueOf(counter)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,10 +53,10 @@ public class Command_blockcmd extends FreedomCommand
|
|||||||
|
|
||||||
counter += 1;
|
counter += 1;
|
||||||
plugin.pl.getPlayer(player).setCommandsBlocked(true);
|
plugin.pl.getPlayer(player).setCommandsBlocked(true);
|
||||||
msg(player, "Your commands have been blocked by an admin.", ChatColor.RED);
|
msgNew(player, "<red>Your commands have been blocked by an admin.");
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Blocked commands for " + counter + " players.");
|
msgNew("Blocked commands for <count> players.", Placeholder.unparsed("count", String.valueOf(counter)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,13 +64,13 @@ public class Command_blockcmd extends FreedomCommand
|
|||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND);
|
msg(PLAYER_NOT_FOUND);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAdmin(player))
|
if (isAdmin(player))
|
||||||
{
|
{
|
||||||
msg(player.getName() + " is an admin, and cannot have their commands blocked.");
|
msgNew("<player> is an admin, and cannot have their commands blocked.", Placeholder.unparsed("player", player.getName()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,13 +79,13 @@ public class Command_blockcmd extends FreedomCommand
|
|||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Blocking all commands for " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Blocking all commands for " + player.getName(), true);
|
||||||
playerdata.setCommandsBlocked(true);
|
playerdata.setCommandsBlocked(true);
|
||||||
msg("Blocked commands for " + player.getName() + ".");
|
msgNew("Blocked commands for <player>.", Placeholder.unparsed("player", player.getName()));
|
||||||
|
|
||||||
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.BLOCKCMD, null));
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.BLOCKCMD, null));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("That players commands are already blocked.", ChatColor.RED);
|
msgNew("<red>That player's commands are already blocked.");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -3,17 +3,17 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "blockedit", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Restricts/restores block modification abilities for everyone on the server or a certain player.", usage = "/<command> [<player> [reason] | list | purge | all]")
|
@CommandParameters(description = "Restricts/restores block modification abilities for everyone on the server or a certain player.", usage = "/<command> [<player> [reason] | list | purge | all]")
|
||||||
public class Command_blockedit extends FreedomCommand
|
public class Command_blockedit extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -29,12 +29,13 @@ public class Command_blockedit extends FreedomCommand
|
|||||||
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
plugin.pl.getPlayer(player).isEditBlocked()).sorted().toList();
|
plugin.pl.getPlayer(player).isEditBlocked()).sorted().toList();
|
||||||
|
|
||||||
// Oh dear god, why do I have to do it like this?
|
boolean plural = list.size() != 1;
|
||||||
msg("There " + (list.size() != 1 ? "are " : "is ") + list.size() + " player"
|
msgNew("There <grammar> <count> player<plural> online with restricted block modification abilities: <players>",
|
||||||
+ (list.size() != 1 ? "s" : "") + " online with restricted block modification abilities"
|
Placeholder.unparsed("grammar", plural ? "are" : "is"),
|
||||||
+ (list.size() > 0 ? ":" : "."));
|
Placeholder.unparsed("count", String.valueOf(list.size())),
|
||||||
|
Placeholder.unparsed("plural", plural ? "s" : ""),
|
||||||
list.forEach(player -> msg("- " + player.getName()));
|
Placeholder.unparsed("colon", list.size() > 0 ? ":" : "."),
|
||||||
|
Placeholder.unparsed("players", FUtil.listToString(list.stream().map(HumanEntity::getName).toList())));
|
||||||
}
|
}
|
||||||
case "purge" ->
|
case "purge" ->
|
||||||
{
|
{
|
||||||
@ -46,11 +47,12 @@ public class Command_blockedit extends FreedomCommand
|
|||||||
list.forEach(player ->
|
list.forEach(player ->
|
||||||
{
|
{
|
||||||
plugin.pl.getPlayer(player).setEditBlocked(false);
|
plugin.pl.getPlayer(player).setEditBlocked(false);
|
||||||
msg(player, "Your block modification abilities have been restored.", ChatColor.GREEN);
|
msgNew(player, "<green>Your block modification abilities have been restored.");
|
||||||
});
|
});
|
||||||
|
|
||||||
msg("Restored block modification abilities for " + list.size() + " player"
|
msgNew("Restored block modification abilities for <count> player<plural>.",
|
||||||
+ (list.size() != 1 ? "s" : "") + ".");
|
Placeholder.unparsed("count", String.valueOf(list.size())),
|
||||||
|
Placeholder.unparsed("plural", list.size() != 1 ? "s" : ""));
|
||||||
}
|
}
|
||||||
case "all", "-a" ->
|
case "all", "-a" ->
|
||||||
{
|
{
|
||||||
@ -62,11 +64,12 @@ public class Command_blockedit extends FreedomCommand
|
|||||||
list.forEach(player ->
|
list.forEach(player ->
|
||||||
{
|
{
|
||||||
plugin.pl.getPlayer(player).setEditBlocked(true);
|
plugin.pl.getPlayer(player).setEditBlocked(true);
|
||||||
msg(player, "Your block modification abilities have been restricted.", ChatColor.RED);
|
msgNew(player, "<red>Your block modification abilities have been restricted.");
|
||||||
});
|
});
|
||||||
|
|
||||||
msg("Restricted block modification abilities for " + list.size() + " player"
|
msgNew("Restricted block modification abilities for <count> player<plural>.",
|
||||||
+ (list.size() != 1 ? "s" : "") + ".");
|
Placeholder.unparsed("count", String.valueOf(list.size())),
|
||||||
|
Placeholder.unparsed("plural", list.size() != 1 ? "s" : ""));
|
||||||
}
|
}
|
||||||
default -> Optional.ofNullable(getPlayer(args[0])).ifPresentOrElse(player ->
|
default -> Optional.ofNullable(getPlayer(args[0])).ifPresentOrElse(player ->
|
||||||
{
|
{
|
||||||
@ -76,21 +79,21 @@ public class Command_blockedit extends FreedomCommand
|
|||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Restoring block modification abilities for " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Restoring block modification abilities for " + player.getName(), true);
|
||||||
fPlayer.setEditBlocked(false);
|
fPlayer.setEditBlocked(false);
|
||||||
msg("Restored block modification abilities for " + player.getName() + ".");
|
msgNew("Restored block modification abilities for <player>.", Placeholder.unparsed("player", player.getName()));
|
||||||
msg(player, "Your block modification abilities have been restored.", ChatColor.GREEN);
|
msgNew(player, "<green>Your block modification abilities have been restored.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(player))
|
if (plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
msg(player.getName() + " is an admin, and as such cannot have their block modification abilities restricted.", ChatColor.RED);
|
msgNew("<red><player> is an admin, and as such cannot have their block modification abilities restricted.", Placeholder.unparsed("player", player.getName()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Restricting block modification abilities for " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Restricting block modification abilities for " + player.getName(), true);
|
||||||
fPlayer.setEditBlocked(true);
|
fPlayer.setEditBlocked(true);
|
||||||
msg("Restricted block modification abilities for " + player.getName() + ".");
|
msgNew("Restricted block modification abilities for <player>.", Placeholder.unparsed("player", player.getName()));
|
||||||
msg(player, "Your block modification abilities have been restricted.", ChatColor.RED);
|
msgNew(player, "<red>Your block modification abilities have been restricted.");
|
||||||
|
|
||||||
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player),
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player),
|
||||||
sender.getName(), PunishmentType.BLOCKEDIT, null));
|
sender.getName(), PunishmentType.BLOCKEDIT, null));
|
@ -0,0 +1,111 @@
|
|||||||
|
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.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "blockpvp", source = SourceType.BOTH)
|
||||||
|
@CommandParameters(description = "Toggle PVP mode for everyone or a certain player.", usage = "/<command> [<player> | list | purge | all]", aliases = "pvpblock,pvpmode")
|
||||||
|
public class Command_blockpvp extends FreedomCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, String[] args, final boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
if (args.length == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args[0].toLowerCase())
|
||||||
|
{
|
||||||
|
// List
|
||||||
|
case "list" ->
|
||||||
|
{
|
||||||
|
List<String> restricted = server.getOnlinePlayers().stream().filter(player ->
|
||||||
|
plugin.pl.getPlayer(player).isPvpBlocked()).map(Player::getName).toList();
|
||||||
|
|
||||||
|
if (restricted.isEmpty())
|
||||||
|
{
|
||||||
|
msgNew("Nobody currently has their PVP abilities restricted.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msgNew("PVP abilities are restricted for these player(s): <players>",
|
||||||
|
Placeholder.unparsed("players", FUtil.listToString(restricted)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purge
|
||||||
|
case "purge" ->
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Restoring PVP abilities for all players", true);
|
||||||
|
List<? extends Player> affected = server.getOnlinePlayers().stream().filter(player -> plugin.pl.getPlayer(player).isPvpBlocked()).toList();
|
||||||
|
affected.forEach(player ->
|
||||||
|
{
|
||||||
|
msgNew(player, "<green>Your PVP abilities have been restored.");
|
||||||
|
plugin.pl.getPlayer(player).setPvpBlocked(false);
|
||||||
|
});
|
||||||
|
msgNew("Restored PVP abilities for <count> players.", Placeholder.unparsed("count", String.valueOf(affected.size())));
|
||||||
|
}
|
||||||
|
|
||||||
|
// All
|
||||||
|
case "all" ->
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Restricting PVP capabilities for all non-admins", true);
|
||||||
|
List<? extends Player> affected = server.getOnlinePlayers().stream().filter(player -> !plugin.al.isAdmin(player)).toList();
|
||||||
|
affected.forEach(player ->
|
||||||
|
{
|
||||||
|
msgNew(player, "<red>Your PVP abilities have been restricted.");
|
||||||
|
plugin.pl.getPlayer(player).setPvpBlocked(true);
|
||||||
|
});
|
||||||
|
msgNew("Restricted PVP abilities for <count> players.", Placeholder.unparsed("count", String.valueOf(affected.size())));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specific players
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
final Player p = getPlayer(args[0]);
|
||||||
|
if (p == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final FPlayer pd = plugin.pl.getPlayer(p);
|
||||||
|
if (pd.isPvpBlocked())
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Restoring PVP capabilities for " + p.getName(), true);
|
||||||
|
pd.setPvpBlocked(false);
|
||||||
|
msgNew("Enabled the ability to PVP for <player>.", Placeholder.unparsed("player", p.getName()));
|
||||||
|
msgNew(p, "<green>Your PVP abilities have been restored.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (plugin.al.isAdmin(p))
|
||||||
|
{
|
||||||
|
msgNew("<red><player> is an admin, and cannot have their PVP disabled.", Placeholder.unparsed("player", p.getName()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
FUtil.adminAction(sender.getName(), "Restricting PVP for " + p.getName(), true);
|
||||||
|
pd.setPvpBlocked(true);
|
||||||
|
plugin.pul.logPunishment(new Punishment(p.getName(), FUtil.getIp(p), sender.getName(), PunishmentType.BLOCKPVP, null));
|
||||||
|
|
||||||
|
msgNew(p, "<red>Your PVP abilities have been restricted.");
|
||||||
|
msgNew("Restricted PVP abilities for <player>. ", Placeholder.unparsed("player", p.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,13 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "blockredstone", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Blocks redstone on the server.", usage = "/<command>", aliases = "bre")
|
@CommandParameters(description = "Blocks redstone on the server.", usage = "/<command>", aliases = "bre")
|
||||||
public class Command_blockredstone extends FreedomCommand
|
public class Command_blockredstone extends FreedomCommand
|
||||||
{
|
{
|
@ -7,9 +7,7 @@ import java.util.List;
|
|||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -17,7 +15,7 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "cage", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
||||||
public class Command_cage extends FreedomCommand
|
public class Command_cage extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -48,7 +46,7 @@ public class Command_cage extends FreedomCommand
|
|||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
if (fPlayer.getCageData().isCaged())
|
if (fPlayer.getCageData().isCaged())
|
||||||
{
|
{
|
||||||
msg("That player is already caged.", ChatColor.RED);
|
msgNew("<red>That player is already caged.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +82,7 @@ public class Command_cage extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Invalid block!", ChatColor.RED);
|
msgNew("<red>Invalid block!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -10,39 +8,20 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "cake", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "For the people that are still alive - gives a cake to everyone on the server.", usage = "/<command>")
|
@CommandParameters(description = "For the people that are still alive - gives a cake to everyone on the server.", usage = "/<command>")
|
||||||
public class Command_cake extends FreedomCommand
|
public class Command_cake extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final String CAKE_LYRICS = "But there's no sense crying over every mistake. You just keep on trying till you run out of cake.";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
final StringBuilder output = new StringBuilder();
|
|
||||||
|
|
||||||
for (final String word : CAKE_LYRICS.split(" "))
|
|
||||||
{
|
|
||||||
output.append(FUtil.randomChatColor()).append(word).append(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
final ItemStack heldItem = new ItemStack(Material.CAKE);
|
final ItemStack heldItem = new ItemStack(Material.CAKE);
|
||||||
final ItemMeta heldItemMeta = heldItem.getItemMeta();
|
final ItemMeta heldItemMeta = heldItem.getItemMeta();
|
||||||
assert heldItemMeta != null;
|
assert heldItemMeta != null;
|
||||||
heldItemMeta.setDisplayName(ChatColor.WHITE + "The " + ChatColor.DARK_GRAY + "Lie");
|
heldItemMeta.displayName(FUtil.miniMessage("<white>The <dark_gray>Lie"));
|
||||||
heldItem.setItemMeta(heldItemMeta);
|
heldItem.setItemMeta(heldItemMeta);
|
||||||
|
server.getOnlinePlayers().forEach(player -> player.getInventory().addItem(heldItem));
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.broadcast(FUtil.miniMessage("<rainbow>But there's no sense crying over every mistake. You just keep on trying till you run out of cake."));
|
||||||
{
|
|
||||||
final int firstEmpty = player.getInventory().firstEmpty();
|
|
||||||
if (firstEmpty >= 0)
|
|
||||||
{
|
|
||||||
player.getInventory().setItem(firstEmpty, heldItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.bcastMsg(output.toString());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,12 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "cleanchat", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc")
|
@CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc")
|
||||||
public class Command_cleanchat extends FreedomCommand
|
public class Command_cleanchat extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -17,7 +17,7 @@ public class Command_cleanchat extends FreedomCommand
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 100; i++)
|
for (int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
msg(player, "");
|
msg(player, Component.space());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -1,20 +1,26 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_CONSOLE)
|
@CommandDependencies({"TFD4J"})
|
||||||
@CommandParameters(description = "Clear the discord message queue.", usage = "/<command>")
|
@CommandPermissions(permission = "cleardiscordqueue", source = SourceType.ONLY_CONSOLE)
|
||||||
|
@CommandParameters(description = "Clear the Discord message queue.", usage = "/<command>")
|
||||||
public class Command_cleardiscordqueue extends FreedomCommand
|
public class Command_cleardiscordqueue extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (plugin.dc == null)
|
||||||
|
{
|
||||||
|
msgNew("<red>Discord is not enabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
plugin.dc.clearQueue();
|
plugin.dc.clearQueue();
|
||||||
msg("Cleared the discord message queue.");
|
msgNew("<green>Cleared the Discord message queue.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.api.ShopItem;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@CommandDependencies({"TF-Shoppe"})
|
||||||
|
@CommandPermissions(permission = "clownfish", source = SourceType.ONLY_IN_GAME)
|
||||||
|
@CommandParameters(description = "Obtain a clown fish", usage = "/<command>")
|
||||||
|
public class Command_clownfish extends FreedomCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
if (plugin.sh == null)
|
||||||
|
{
|
||||||
|
msgNew("<red>Shop is currently disabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plugin.pl.getData(playerSender).hasItem(ShopItem.CLOWN_FISH))
|
||||||
|
{
|
||||||
|
playerSender.getInventory().addItem(plugin.sh.getClownFish());
|
||||||
|
msgNew("<green>You have been given a <name>.", Placeholder.unparsed("name", ShopItem.CLOWN_FISH.getName()));
|
||||||
|
}
|
||||||
|
else if (plugin.pl.getPlayer(playerSender).isClownfishDisabled())
|
||||||
|
{
|
||||||
|
msgNew("<red>An admin has disabled your ability to use the <name>. Guess you were the clown after all.",
|
||||||
|
Placeholder.unparsed("name", ShopItem.CLOWN_FISH.getName()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msgNew("<red>You don't own a <name>! Purchase one from the shop.", Placeholder.unparsed("name", ShopItem.CLOWN_FISH.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,12 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "cmdspy", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Spy on commands", usage = "/<command>", aliases = "commandspy")
|
@CommandParameters(description = "Spy on commands", usage = "/<command>", aliases = "commandspy")
|
||||||
public class Command_cmdspy extends FreedomCommand
|
public class Command_cmdspy extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -16,7 +16,7 @@ public class Command_cmdspy extends FreedomCommand
|
|||||||
{
|
{
|
||||||
Admin admin = plugin.al.getAdmin(playerSender);
|
Admin admin = plugin.al.getAdmin(playerSender);
|
||||||
admin.setCommandSpy(!admin.getCommandSpy());
|
admin.setCommandSpy(!admin.getCommandSpy());
|
||||||
msg("CommandSpy " + (admin.getCommandSpy() ? "enabled." : "disabled."));
|
msgNew("CommandSpy <status>.", Placeholder.unparsed("status", admin.getCommandSpy() ? "enabled." : "disabled."));
|
||||||
plugin.al.save(admin);
|
plugin.al.save(admin);
|
||||||
plugin.al.updateTables();
|
plugin.al.updateTables();
|
||||||
return true;
|
return true;
|
@ -2,9 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -12,41 +11,42 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandDependencies({"TF-Shoppe"})
|
||||||
|
@CommandPermissions(permission = "coins", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
|
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
|
||||||
public class Command_coins extends FreedomCommand
|
public class Command_coins extends FreedomCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (!ConfigEntry.SHOP_ENABLED.getBoolean())
|
if (plugin.sh == null || !ConfigEntry.SHOP_ENABLED.getBoolean())
|
||||||
{
|
{
|
||||||
msg("The shop is currently disabled!", ChatColor.RED);
|
msgNew("<red>The shop is currently disabled!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
|
|
||||||
|
|
||||||
switch (args.length)
|
switch (args.length)
|
||||||
{
|
{
|
||||||
// Mode for seeing how many coins the sender has (doesn't work from console)
|
// Mode for seeing how many coins the sender has (doesn't work from console)
|
||||||
case 0:
|
case 0 ->
|
||||||
{
|
{
|
||||||
if (senderIsConsole)
|
if (senderIsConsole)
|
||||||
{
|
{
|
||||||
msg("When used from the console, you must define a target player.");
|
msgNew("When used from the console, you must define a target player.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PlayerData playerData = getData(playerSender);
|
PlayerData playerData = getData(playerSender);
|
||||||
msg(prefix + ChatColor.GREEN + "You have " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN
|
msgNew("<green>You have <gold><coins></gold> coin<plural>.",
|
||||||
+ " coins.");
|
Placeholder.unparsed("coins", String.valueOf(playerData.getCoins())),
|
||||||
|
Placeholder.unparsed("plural", playerData.getCoins() > 1 ? "s" : ""));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mode for seeing how many coins a player has.
|
// Mode for seeing how many coins a player has.
|
||||||
case 1:
|
case 1 ->
|
||||||
{
|
{
|
||||||
Player target = getPlayer(args[0]);
|
Player target = getPlayer(args[0]);
|
||||||
|
|
||||||
@ -57,13 +57,17 @@ public class Command_coins extends FreedomCommand
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
PlayerData playerData = getData(target);
|
PlayerData playerData = getData(target);
|
||||||
msg(prefix + ChatColor.GREEN + target.getName() + " has " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
|
msgNew("<green><gold><player></gold> has <gold><coins></gold> coin<plural>.",
|
||||||
|
Placeholder.unparsed("player", target.getName()),
|
||||||
|
Placeholder.unparsed("coins", String.valueOf(playerData.getCoins())),
|
||||||
|
Placeholder.unparsed("plural", playerData.getCoins() > 1 ? "s" : ""));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mode for paying another player coins
|
// Mode for paying another player coins
|
||||||
case 3:
|
case 3 ->
|
||||||
{
|
{
|
||||||
if (args[0].equalsIgnoreCase("pay"))
|
if (args[0].equalsIgnoreCase("pay"))
|
||||||
{
|
{
|
||||||
@ -82,14 +86,14 @@ public class Command_coins extends FreedomCommand
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
{
|
{
|
||||||
msg("Invalid number: " + args[2], ChatColor.RED);
|
msgNew("<red>Invalid number: <num>", Placeholder.unparsed("num", args[2]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevents players from performing transactions they can't afford to do.
|
// Prevents players from performing transactions they can't afford to do.
|
||||||
if (senderData.getCoins() < coinsToTransfer)
|
if (senderData.getCoins() < coinsToTransfer)
|
||||||
{
|
{
|
||||||
msg("You don't have enough coins to perform this transaction.", ChatColor.RED);
|
msgNew("<red>You don't have enough coins to perform this transaction.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,15 +107,17 @@ public class Command_coins extends FreedomCommand
|
|||||||
playerData.setCoins(playerData.getCoins() + coinsToTransfer);
|
playerData.setCoins(playerData.getCoins() + coinsToTransfer);
|
||||||
senderData.setCoins(senderData.getCoins() - coinsToTransfer);
|
senderData.setCoins(senderData.getCoins() - coinsToTransfer);
|
||||||
|
|
||||||
msg(target, sender.getName()
|
boolean plural = coinsToTransfer > 1;
|
||||||
+ ChatColor.GREEN + " has given you "
|
|
||||||
+ ChatColor.GOLD + coinsToTransfer
|
|
||||||
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "") + "!", ChatColor.GOLD);
|
|
||||||
|
|
||||||
msg("You have given "
|
msgNew(target, "<green><gold><sender></gold> has given you <gold><coins></gold> coin<plural>!",
|
||||||
+ ChatColor.GOLD + coinsToTransfer
|
Placeholder.unparsed("sender", sender.getName()),
|
||||||
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "")
|
Placeholder.unparsed("coins", String.valueOf(coinsToTransfer)),
|
||||||
+ " to " + ChatColor.GOLD + target.getName() + ChatColor.GREEN + ".", ChatColor.GREEN);
|
Placeholder.unparsed("plural", plural ? "s" : ""));
|
||||||
|
|
||||||
|
msgNew("<green>You have given <gold><coins></gold> coin<plural> to <gold><player></gold>.",
|
||||||
|
Placeholder.unparsed("player", target.getName()),
|
||||||
|
Placeholder.unparsed("coins", String.valueOf(coinsToTransfer)),
|
||||||
|
Placeholder.unparsed("plural", plural ? "s" : ""));
|
||||||
|
|
||||||
plugin.pl.save(playerData);
|
plugin.pl.save(playerData);
|
||||||
plugin.pl.save(senderData);
|
plugin.pl.save(senderData);
|
||||||
@ -119,9 +125,9 @@ public class Command_coins extends FreedomCommand
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
default ->
|
||||||
default:
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
@ -1,18 +1,17 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_CONSOLE)
|
@CommandPermissions(permission = "consolesay", source = SourceType.ONLY_CONSOLE)
|
||||||
@CommandParameters(description = "Telnet/Console command - Send a chat message with chat formatting over telnet.", usage = "/<command> <message>", aliases = "csay")
|
@CommandParameters(description = "Telnet/Console command - Send a chat message with chat formatting over telnet.", usage = "/<command> <message>", aliases = "csay")
|
||||||
public class Command_consolesay extends FreedomCommand
|
public class Command_consolesay extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
@ -21,9 +20,16 @@ public class Command_consolesay extends FreedomCommand
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String message = StringUtils.join(args, " ");
|
server.broadcast(FUtil.miniMessage("<gray>[CONSOLE] <red><sender> <dark_gray>» <white><message>",
|
||||||
FUtil.bcastMsg(String.format("§7[CONSOLE] §c%s §8\u00BB §f%s", sender.getName(), StringUtils.join(args, " ")));
|
Placeholder.unparsed("sender", sender.getName()),
|
||||||
plugin.dc.messageChatChannel("[CONSOLE] " + sender.getName() + " \u00BB " + ChatColor.stripColor(message));
|
Placeholder.unparsed("message", StringUtils.join(args, " "))));
|
||||||
|
|
||||||
|
if (plugin.dc != null)
|
||||||
|
{
|
||||||
|
String message = StringUtils.join(args, " ");
|
||||||
|
plugin.dc.messageChatChannel("[CONSOLE] " + sender.getName() + " \u00BB " + ChatColor.stripColor(message), true);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "cookie", source = SourceType.BOTH)
|
||||||
|
@CommandParameters(description = "For those who have no friends - gives a cookie to everyone on the server.", usage = "/<command>")
|
||||||
|
public class Command_cookie extends FreedomCommand
|
||||||
|
{
|
||||||
|
private static final Random RANDOM = new Random();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
final ItemStack heldItem = new ItemStack(Material.COOKIE);
|
||||||
|
final ItemMeta heldItemMeta = heldItem.getItemMeta();
|
||||||
|
assert heldItemMeta != null;
|
||||||
|
heldItemMeta.displayName(FUtil.miniMessage("<rainbow>Cookie"));
|
||||||
|
heldItemMeta.lore(Collections.singletonList(FUtil.miniMessage("<rainbow>But, you can have a cookie anyways,\nsince you are sad you are have no friends.")));
|
||||||
|
heldItem.setItemMeta(heldItemMeta);
|
||||||
|
|
||||||
|
server.getOnlinePlayers().forEach(player -> player.getInventory().addItem(heldItem));
|
||||||
|
server.broadcast(FUtil.miniMessage("<rainbow:" + RANDOM.nextInt() + ">Imagine that you have zero cookies and you split them evenly among zero friends. How many cookies does each person get? See? It doesn't make sense. And Cookie Monster is sad that there are no cookies, and you are sad that you have no friends."));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.SplittableRandom;
|
import java.util.SplittableRandom;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -9,7 +8,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "deafen", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Makes random sounds.", usage = "/<command>")
|
@CommandParameters(description = "Makes random sounds.", usage = "/<command>")
|
||||||
public class Command_deafen extends FreedomCommand
|
public class Command_deafen extends FreedomCommand
|
||||||
{
|
{
|
@ -1,12 +1,9 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextDecoration;
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -14,7 +11,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "debugstick", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Get a stick of happiness.", usage = "/<command>")
|
@CommandParameters(description = "Get a stick of happiness.", usage = "/<command>")
|
||||||
public class Command_debugstick extends FreedomCommand
|
public class Command_debugstick extends FreedomCommand
|
||||||
{
|
{
|
@ -1,12 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "denick", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Essentials Interface Command - Remove the nickname of all players on the server.", usage = "/<command>")
|
@CommandParameters(description = "Essentials Interface Command - Remove the nickname of all players on the server.", usage = "/<command>")
|
||||||
public class Command_denick extends FreedomCommand
|
public class Command_denick extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -16,7 +15,7 @@ public class Command_denick extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (!plugin.esb.isEnabled())
|
if (!plugin.esb.isEnabled())
|
||||||
{
|
{
|
||||||
msg("Essentials is not enabled on this server.");
|
msgNew("<red>Essentials is not enabled on this server.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.HierarchyProvider;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.luckperms.api.model.user.User;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "deop", source = SourceType.BOTH)
|
||||||
|
@CommandParameters(description = "Deop a player", usage = "/<command> <partialname>")
|
||||||
|
public class Command_deop extends FreedomCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
if (args.length < 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean silent = false;
|
||||||
|
if (args.length == 2)
|
||||||
|
{
|
||||||
|
silent = args[1].equalsIgnoreCase("-s");
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = Bukkit.getServer().getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (player == null || plugin.al.isVanished(player.getUniqueId()))
|
||||||
|
{
|
||||||
|
msg(sender, PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomicBoolean atomicBoolean = new AtomicBoolean(silent);
|
||||||
|
User user = GroupProvider.getUser(player);
|
||||||
|
HierarchyProvider.OP.getHierarchy().demoteUser(user).whenComplete((result, throwable) ->
|
||||||
|
{
|
||||||
|
if (throwable != null)
|
||||||
|
{
|
||||||
|
FLog.severe("Error while demoting " + player.getName() + " to OP: " + throwable.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
msg(player, YOU_ARE_NOT_OP);
|
||||||
|
plugin.rm.updateDisplay(player);
|
||||||
|
|
||||||
|
if (!atomicBoolean.get())
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "De-opping " + player.getName(), false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.HierarchyProvider;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.luckperms.api.model.user.User;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "deop.all", source = SourceType.BOTH, blockHostConsole = true)
|
||||||
|
@CommandParameters(description = "Deop everyone on the server.", usage = "/<command>")
|
||||||
|
public class Command_deopall extends FreedomCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "De-opping all players on the server", true);
|
||||||
|
|
||||||
|
server.getOnlinePlayers().forEach(player ->
|
||||||
|
{
|
||||||
|
User user = GroupProvider.getUser(player);
|
||||||
|
HierarchyProvider.OP.getHierarchy().demoteUser(user).whenComplete((result, ex) -> {
|
||||||
|
if (ex != null) {
|
||||||
|
FLog.severe("Failed to demote " + player.getName() + " to default rank");
|
||||||
|
}
|
||||||
|
|
||||||
|
msg(player, YOU_ARE_NOT_OP);
|
||||||
|
plugin.rm.updateDisplay(player);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -15,7 +15,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "dispfill", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Fill nearby dispensers with a set of items of your choice.", usage = "/<command> <radius> <comma,separated,items>")
|
@CommandParameters(description = "Fill nearby dispensers with a set of items of your choice.", usage = "/<command> <radius> <comma,separated,items>")
|
||||||
public class Command_dispfill extends FreedomCommand
|
public class Command_dispfill extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -43,7 +43,7 @@ public class Command_dispfill extends FreedomCommand
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
{
|
{
|
||||||
msg("Invalid radius.");
|
msgNew("<red>Invalid radius: <amount>", Placeholder.unparsed("amount", args[0]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ public class Command_dispfill extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Skipping invalid item: " + searchItem);
|
msgNew("Skipping invalid item: <item>", Placeholder.unparsed("item", searchItem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,21 +76,23 @@ public class Command_dispfill extends FreedomCommand
|
|||||||
for (int zOffset = -radius; zOffset <= radius; zOffset++)
|
for (int zOffset = -radius; zOffset <= radius; zOffset++)
|
||||||
{
|
{
|
||||||
final Block targetBlock = centerBlock.getRelative(xOffset, yOffset, zOffset);
|
final Block targetBlock = centerBlock.getRelative(xOffset, yOffset, zOffset);
|
||||||
if (targetBlock.getLocation().distanceSquared(centerLocation) < (radius * radius))
|
if (targetBlock.getLocation().distanceSquared(centerLocation) < (radius * radius) && targetBlock.getType().equals(Material.DISPENSER))
|
||||||
{
|
{
|
||||||
if (targetBlock.getType().equals(Material.DISPENSER))
|
msgNew("Filling dispenser @ <location>", Placeholder.unparsed("location", FUtil.formatLocation(targetBlock.getLocation())));
|
||||||
|
|
||||||
|
if (plugin.cpb.isEnabled())
|
||||||
{
|
{
|
||||||
msg("Filling dispenser @ " + FUtil.formatLocation(targetBlock.getLocation()));
|
|
||||||
plugin.cpb.getCoreProtectAPI().logContainerTransaction(sender.getName(), targetBlock.getLocation());
|
plugin.cpb.getCoreProtectAPI().logContainerTransaction(sender.getName(), targetBlock.getLocation());
|
||||||
setDispenserContents(targetBlock, itemsArray);
|
|
||||||
affected++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setDispenserContents(targetBlock, itemsArray);
|
||||||
|
affected++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Done. " + affected + " dispenser(s) filled.");
|
msgNew("Done. <amount> dispenser(s) filled.", Placeholder.unparsed("amount", String.valueOf(affected)));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
@ -3,11 +3,10 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.discord.Discord;
|
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -18,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
|
@CommandPermissions(permission = "doom", source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
|
||||||
@CommandParameters(description = "Sends the specified player to their doom.", usage = "/<command> <playername> [reason]")
|
@CommandParameters(description = "Sends the specified player to their doom.", usage = "/<command> <playername> [reason]")
|
||||||
public class Command_doom extends FreedomCommand
|
public class Command_doom extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -52,9 +51,9 @@ public class Command_doom extends FreedomCommand
|
|||||||
admin.setActive(false);
|
admin.setActive(false);
|
||||||
plugin.al.save(admin);
|
plugin.al.save(admin);
|
||||||
plugin.al.updateTables();
|
plugin.al.updateTables();
|
||||||
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
if (plugin.dc != null && plugin.dc.isEnabled() && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||||
{
|
{
|
||||||
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
plugin.dc.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +117,10 @@ public class Command_doom extends FreedomCommand
|
|||||||
{
|
{
|
||||||
// message
|
// message
|
||||||
FUtil.adminAction(sender.getName(), "Banning " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Banning " + player.getName(), true);
|
||||||
msg(sender, player.getName() + " has been banned and IP is: " + ip);
|
|
||||||
|
msgNew("<name> has been banned and their IP is <ip>.",
|
||||||
|
Placeholder.unparsed("name", player.getName()),
|
||||||
|
Placeholder.unparsed("ip", ip));
|
||||||
|
|
||||||
// generate explosion
|
// generate explosion
|
||||||
player.getWorld().createExplosion(player.getLocation(), 0F, false);
|
player.getWorld().createExplosion(player.getLocation(), 0F, false);
|
@ -1,12 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "eject", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
|
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
|
||||||
public class Command_eject extends FreedomCommand
|
public class Command_eject extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -38,11 +37,13 @@ public class Command_eject extends FreedomCommand
|
|||||||
|
|
||||||
if (count != 0)
|
if (count != 0)
|
||||||
{
|
{
|
||||||
msg(count + " entit" + (count == 1 ? "y was" : "ies were") + " ejected.", ChatColor.GREEN);
|
msgNew("<green><count> entit<grammar> ejected.",
|
||||||
|
Placeholder.unparsed("count", String.valueOf(count)),
|
||||||
|
Placeholder.unparsed("grammar", count == 1 ? "y was" : "ies were"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Nothing was ejected.", ChatColor.GREEN);
|
msgNew("<green>Nothing was ejected.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
@ -8,8 +8,8 @@ import java.util.Objects;
|
|||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -17,7 +17,7 @@ import org.bukkit.enchantments.Enchantment;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "enchant", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>")
|
@CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>")
|
||||||
public class Command_enchant extends FreedomCommand
|
public class Command_enchant extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -34,31 +34,21 @@ public class Command_enchant extends FreedomCommand
|
|||||||
|
|
||||||
if (item.getType() == Material.AIR)
|
if (item.getType() == Material.AIR)
|
||||||
{
|
{
|
||||||
msg("You have to hold an item to enchant it");
|
msgNew("<red>You have to hold an item to enchant it.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("list"))
|
if (args[0].equalsIgnoreCase("list"))
|
||||||
{
|
{
|
||||||
boolean has_enchantments = false;
|
List<String> enchants = Arrays.stream(Enchantment.values()).filter(enchantment -> enchantment.canEnchantItem(item)).map(enchantment -> enchantment.getName()).toList();
|
||||||
|
|
||||||
StringBuilder possible_ench = new StringBuilder("Possible enchantments for held item: ");
|
if (enchants.isEmpty())
|
||||||
for (Enchantment ench : Enchantment.values())
|
|
||||||
{
|
{
|
||||||
if (ench.canEnchantItem(item))
|
msgNew("<red>There are no enchantments that work with this item.");
|
||||||
{
|
|
||||||
has_enchantments = true;
|
|
||||||
possible_ench.append(ench.getName()).append(", ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (has_enchantments)
|
|
||||||
{
|
|
||||||
msg(possible_ench.toString());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("The held item has no enchantments.");
|
msgNew("Possible enchantments for this item: <enchants>", Placeholder.unparsed("enchants", FUtil.listToString(enchants)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("addall"))
|
else if (args[0].equalsIgnoreCase("addall"))
|
||||||
@ -69,18 +59,17 @@ public class Command_enchant extends FreedomCommand
|
|||||||
{
|
{
|
||||||
item.addEnchantment(ench, ench.getMaxLevel());
|
item.addEnchantment(ench, ench.getMaxLevel());
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ignored)
|
||||||
{
|
{
|
||||||
msg("Could not add enchantment: " + ench.getName());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
msg("Added all possible enchantments for this item.");
|
msgNew("<green>Added all possible enchantments for this item.");
|
||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("reset"))
|
else if (args[0].equalsIgnoreCase("reset"))
|
||||||
{
|
{
|
||||||
item.getEnchantments().keySet().forEach(item::removeEnchantment);
|
item.getEnchantments().keySet().forEach(item::removeEnchantment);
|
||||||
msg("Removed all enchantments.");
|
msgNew("<green>Removed all enchantments.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -89,19 +78,11 @@ public class Command_enchant extends FreedomCommand
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Enchantment ench = null;
|
Enchantment ench = Enchantment.getByName(args[1].toUpperCase());
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ench = Enchantment.getByName(args[1].toUpperCase());
|
|
||||||
}
|
|
||||||
catch (Exception ignored)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ench == null)
|
if (ench == null)
|
||||||
{
|
{
|
||||||
msg(args[1] + " is an invalid enchantment for the held item. Type \"/enchant list\" for valid enchantments for this item.");
|
msgNew("<red><enchant> is an invalid enchantment for the held item. Type \"/enchant list\" for valid enchantments for this item.", Placeholder.unparsed("enchant", args[1]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +90,7 @@ public class Command_enchant extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (!ench.canEnchantItem(item) && !ConfigEntry.ALLOW_UNSAFE_ENCHANTMENTS.getBoolean())
|
if (!ench.canEnchantItem(item) && !ConfigEntry.ALLOW_UNSAFE_ENCHANTMENTS.getBoolean())
|
||||||
{
|
{
|
||||||
msg("Can't use this enchantment on held item.");
|
msgNew("<red>Can't use this enchantment on that item.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
int level = ench.getMaxLevel();
|
int level = ench.getMaxLevel();
|
||||||
@ -128,7 +109,7 @@ public class Command_enchant extends FreedomCommand
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
{
|
{
|
||||||
msg("\"" + args[2] + "\" is not a valid number", ChatColor.RED);
|
msgNew("Invalid number: <number>", Placeholder.unparsed("number", args[2]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,13 +122,13 @@ public class Command_enchant extends FreedomCommand
|
|||||||
item.addUnsafeEnchantment(ench, level);
|
item.addUnsafeEnchantment(ench, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Added enchantment: " + ench.getName());
|
msgNew("<green>Added enchantment: <enchantment>", Placeholder.unparsed("enchantment", ench.getName()));
|
||||||
}
|
}
|
||||||
else if (args[0].equals("remove"))
|
else if (args[0].equals("remove"))
|
||||||
{
|
{
|
||||||
item.removeEnchantment(ench);
|
item.removeEnchantment(ench);
|
||||||
|
|
||||||
msg("Removed enchantment: " + ench.getName());
|
msgNew("<green>Removed enchantment: <enchantment>", Placeholder.unparsed("enchantment", ench.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,11 +1,10 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.NON_OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "end", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Go to \"The End\".", usage = "/<command>")
|
@CommandParameters(description = "Go to \"The End\".", usage = "/<command>")
|
||||||
public class Command_end extends FreedomCommand
|
public class Command_end extends FreedomCommand
|
||||||
{
|
{
|
@ -3,16 +3,16 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "entitywipe", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [name | -a]", aliases = "ew,rd")
|
@CommandParameters(description = "Remove various server entities that may cause lag, such as dropped items, minecarts, and boats.", usage = "/<command> [name | -a]", aliases = "ew,rd")
|
||||||
public class Command_entitywipe extends FreedomCommand
|
public class Command_entitywipe extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -93,13 +93,16 @@ public class Command_entitywipe extends FreedomCommand
|
|||||||
{
|
{
|
||||||
count = plugin.ew.wipeEntities(bypassBlacklist);
|
count = plugin.ew.wipeEntities(bypassBlacklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count == 1)
|
if (count == 1)
|
||||||
{
|
{
|
||||||
msg(count + " " + (type != null ? entityName : "entity") + " removed.");
|
msgNew("<count> <name> removed.", Placeholder.unparsed("count", String.valueOf(count)),
|
||||||
|
Placeholder.unparsed("name", type != null ? entityName : "entity"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg(count + " " + (type != null ? entityName : "entitie") + FUtil.showS(count) + " removed.");
|
msgNew("<count> <name>s removed.", Placeholder.unparsed("count", String.valueOf(count)),
|
||||||
|
Placeholder.unparsed("name", type != null ? entityName : "entitie"));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -2,8 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -11,7 +11,7 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(permission = "expel", source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Push people away from you.", usage = "/<command> [radius] [strength]")
|
@CommandParameters(description = "Push people away from you.", usage = "/<command> [radius] [strength]")
|
||||||
public class Command_expel extends FreedomCommand
|
public class Command_expel extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -78,11 +78,13 @@ public class Command_expel extends FreedomCommand
|
|||||||
|
|
||||||
if (pushedPlayers.isEmpty())
|
if (pushedPlayers.isEmpty())
|
||||||
{
|
{
|
||||||
msg("No players pushed.");
|
msgNew("No players were pushed.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Pushed " + pushedPlayers.size() + " players: " + StringUtils.join(pushedPlayers, ", "));
|
msgNew("Pushed <amount> players: <players>",
|
||||||
|
Placeholder.unparsed("amount", String.valueOf(pushedPlayers.size())),
|
||||||
|
Placeholder.unparsed("players", StringUtils.join(pushedPlayers, ", ")));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
@ -2,15 +2,15 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(permission = "explode", source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Surprise someone.", usage = "/<command> <player>")
|
@CommandParameters(description = "Surprise someone.", usage = "/<command> <player>")
|
||||||
public class Command_explode extends FreedomCommand
|
public class Command_explode extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -27,7 +27,7 @@ public class Command_explode extends FreedomCommand
|
|||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND);
|
msg(PLAYER_NOT_FOUND);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ public class Command_explode extends FreedomCommand
|
|||||||
player.getWorld().createExplosion(player.getLocation(), 4L);
|
player.getWorld().createExplosion(player.getLocation(), 4L);
|
||||||
}
|
}
|
||||||
player.setHealth(0.0);
|
player.setHealth(0.0);
|
||||||
msg("Exploded " + player.getName());
|
msg(Component.text("Exploded " + player.getName()));
|
||||||
}
|
}
|
||||||
}.runTaskLater(plugin, 40);
|
}.runTaskLater(plugin, 40);
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@CommandPermissions(permission = "explosivearrows", source = SourceType.ONLY_IN_GAME)
|
||||||
|
@CommandParameters(description = "Make arrows explode", usage = "/<command>", aliases = "ea")
|
||||||
|
public class Command_explosivearrows extends FreedomCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
FPlayer player = plugin.pl.getPlayer(playerSender);
|
||||||
|
player.setExplosiveArrowsEnabled(!player.isExplosiveArrowsEnabled());
|
||||||
|
|
||||||
|
msgNew("<statuscolor>You <status> have explosive arrows.",
|
||||||
|
TagResolver.resolver("statuscolor", Tag.styling(player.isExplosiveArrowsEnabled() ? NamedTextColor.GREEN : NamedTextColor.RED)),
|
||||||
|
Placeholder.unparsed("status", player.isExplosiveArrowsEnabled() ? "now" : "no longer"));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user