Shit happens

This commit is contained in:
Brandon 2023-08-24 14:51:14 +01:00
parent ff5d043d31
commit d1e24488e9
1575 changed files with 61795 additions and 0 deletions

8
LandCore/.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
</module>

View File

@ -0,0 +1,6 @@
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="LandCore">
<output-path>$PROJECT_DIR$/out/artifacts/LandCore</output-path>
<root id="archive" name="LandCore.jar" />
</artifact>
</component>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="LandCore" />
</profile>
</annotationProcessing>
</component>
</project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" />
<option name="description" value="" />
</component>
</project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,19 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,com.mongodb.client.MongoClients,create" />
</inspection_tool>
<inspection_tool class="ConstantConditions" enabled="true" level="WARNING" enabled_by_default="true">
<option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" />
<option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" />
<option name="REPORT_CONSTANT_REFERENCE_VALUES" value="false" />
</inspection_tool>
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<Languages>
<language minSize="107" name="Java" />
</Languages>
</inspection_tool>
<inspection_tool class="UNCHECKED_WARNING" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="destroystokyo-releases" />
<option name="name" value="destroystokyo-releases" />
<option name="url" value="https://repo.destroystokyo.com/repository/maven-releases/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="destroystokyo-snapshots" />
<option name="name" value="destroystokyo-snapshots" />
<option name="url" value="https://repo.destroystokyo.com/repository/maven-snapshots/" />
</remote-repository>
</component>
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JpaBuddyIdeaProjectConfig">
<option name="renamerInitialized" value="true" />
</component>
</project>

22
LandCore/.idea/misc.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<list size="1">
<item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ProjectType">
<option name="id" value="jpab" />
</component>
</project>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

156
LandCore/pom.xml Normal file
View File

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.devkevin.landcore</groupId>
<artifactId>LandCore</artifactId>
<version>1.3-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>destroystokyo-releases</id>
<url>https://repo.destroystokyo.com/repository/maven-releases/</url>
</repository>
<repository>
<id>destroystokyo-snapshots</id>
<url>https://repo.destroystokyo.com/repository/maven-snapshots/</url>
</repository>
</repositories>
<dependencies>
<!-- Spigot 1.8.8 -->
<dependency>
<groupId>club.inverted</groupId>
<artifactId>inverted-spigot</artifactId>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/Carbon-Server-1.8.8-R0.1-SNAPSHOT.jar</systemPath>
</dependency>
<!-- MongoDB Java Driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<!-- NickAPI -->
<dependency>
<groupId>xyz.haoshoku.nick</groupId>
<artifactId>nickapi</artifactId>
<version>5.0.2-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/NickAPI-v6.5.jar</systemPath>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<!-- ViaVersion-3.2.1 API -->
<dependency>
<groupId>ViaVersion-3.2.1</groupId>
<artifactId>ViaVersion-3.2.1</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ViaVersion-3.2.1.jar</systemPath>
</dependency>
<!-- ProtocolLib -->
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
<version>yes</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ProtocolLib.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>

View File

@ -0,0 +1,346 @@
package me.devkevin.landcore;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.Getter;
import me.devkevin.landcore.commands.impl.*;
import me.devkevin.landcore.commands.impl.staff.*;
import me.devkevin.landcore.commands.impl.staff.punish.*;
import me.devkevin.landcore.commands.impl.toggle.ToggleGlobalChat;
import me.devkevin.landcore.commands.impl.toggle.ToggleMessagesCommand;
import me.devkevin.landcore.commands.impl.toggle.ToggleSoundsCommand;
import me.devkevin.landcore.disguise.commands.DisguiseCommand;
import me.devkevin.landcore.disguise.manager.DisguiseManager;
import me.devkevin.landcore.disguise.commands.UndisguiseCommand;
import me.devkevin.landcore.disguise.menu.DisguiseMenu;
import me.devkevin.landcore.faction.commands.FactionHelpCommand;
import me.devkevin.landcore.faction.commands.captain.*;
import me.devkevin.landcore.faction.commands.leader.FactionDescriptionCommand;
import me.devkevin.landcore.faction.commands.leader.FactionDisbandCommand;
import me.devkevin.landcore.faction.commands.player.*;
import me.devkevin.landcore.faction.listener.FactionListener;
import me.devkevin.landcore.faction.manager.FactionManager;
import me.devkevin.landcore.gson.CustomLocationTypeAdapterFactory;
import me.devkevin.landcore.gson.ItemStackTypeAdapterFactory;
import me.devkevin.landcore.listeners.*;
import me.devkevin.landcore.listeners.redis.*;
import me.devkevin.landcore.managers.MenuManager;
import me.devkevin.landcore.managers.PlayerManager;
import me.devkevin.landcore.managers.ProfileManager;
import me.devkevin.landcore.managers.StaffManager;
import me.devkevin.landcore.nametag.NameTagAdapter;
import me.devkevin.landcore.nametag.impl.InternalNametag;
import me.devkevin.landcore.player.color.ColorCommand;
import me.devkevin.landcore.player.color.SetColorCommand;
import me.devkevin.landcore.player.color.menu.ColorMenu;
import me.devkevin.landcore.player.grant.procedure.GrantProcedureListener;
import me.devkevin.landcore.player.info.UserCommand;
import me.devkevin.landcore.player.notes.commands.NoteAddCommand;
import me.devkevin.landcore.player.notes.commands.NoteRemoveCommand;
import me.devkevin.landcore.player.notes.commands.NotesCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.player.rank.commands.*;
import me.devkevin.landcore.player.tags.PrefixCommand;
import me.devkevin.landcore.player.tags.menu.PrefixMenu;
import me.devkevin.landcore.punishment.listener.PunishmentListener;
import me.devkevin.landcore.redis.RedisMessenger;
import me.devkevin.landcore.server.ServerSettings;
import me.devkevin.landcore.server.filter.Filter;
import me.devkevin.landcore.storage.database.MongoStorage;
import me.devkevin.landcore.store.StorePCoinMenu;
import me.devkevin.landcore.task.BroadcastTask;
import me.devkevin.landcore.task.GrantDisguiseCheckTask;
import me.devkevin.landcore.utils.inventory.UIListener;
import me.devkevin.landcore.utils.menu.ButtonListener;
import me.devkevin.landcore.utils.menu.MenuUpdateTask;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.packet.PacketAdapter;
import me.devkevin.landcore.utils.packet.PacketListener;
import me.devkevin.landcore.utils.structure.Cuboid;
import net.minecraft.server.v1_8_R3.Packet;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Map;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
public class LandCore extends JavaPlugin {
@Getter
private static LandCore instance;
public static GsonBuilder GSONBUILDER;
public static Gson GSON;
public static final Random RANDOM = new Random();
private ServerSettings serverSettings;
private Filter filter;
private MongoStorage mongoStorage;
private ProfileManager profileManager;
private StaffManager staffManager;
private PlayerManager playerManager;
private MenuManager menuManager;
private RedisMessenger redisMessenger;
private static Field bukkitCommandMap;
private PrefixMenu prefixMenu;
private ColorMenu colorMenu;
private DisguiseMenu disguiseMenu;
private DisguiseManager disguiseManager;
private PacketListener packetListener;
private FactionManager factionManager;
private StorePCoinMenu storePCoinMenu;
private static void registerSerializableClass(Class<?> clazz) {
if (ConfigurationSerializable.class.isAssignableFrom(clazz)) {
Class<? extends ConfigurationSerializable> serializable = clazz.asSubclass(ConfigurationSerializable.class);
ConfigurationSerialization.registerClass(serializable);
}
}
@Override
public void onEnable() {
instance = this;
LandCore.GSONBUILDER = new GsonBuilder()
.registerTypeAdapterFactory(new CustomLocationTypeAdapterFactory())
.registerTypeAdapterFactory(new ItemStackTypeAdapterFactory());
LandCore.GSON = LandCore.GSONBUILDER.create();
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
saveDefaultConfig();
registerSerializableClass(Cuboid.class);
serverSettings = new ServerSettings(this);
filter = new Filter();
redisMessenger = new RedisMessenger(
this,
getConfig().getString("redis.host"),
getConfig().getInt("redis.port"),
getConfig().getInt("redis.timeout"),
getConfig().getString("redis.password")
);
redisMessenger.registerListeners(
new FreezeListener(this),
new FrozenDisconnectListener(this),
new HelpopListener(this),
new ReportListener(this),
new StaffChatListener(this),
new StaffStreamListener(this),
new RedisServerMonitorListener(this),
new RedisFactionListener(this)
);
redisMessenger.initialize();
mongoStorage = new MongoStorage(this);
this.disableLoggers();
this.addServerMonitor();
Bukkit.getConsoleSender().sendMessage(CC.SEPARATOR);
Bukkit.getConsoleSender().sendMessage(CC.translate("&eLandCore &8- &b" + getDescription().getVersion()));
Bukkit.getConsoleSender().sendMessage(CC.translate(" "));
Bukkit.getConsoleSender().sendMessage(CC.translate("&b • &eDeveloper: &eDevKevin"));
Bukkit.getConsoleSender().sendMessage(CC.translate("&b • &eMongo: &f" + (mongoStorage.isConnected() ? "&aenabled" : "&cdisabled")));
Bukkit.getConsoleSender().sendMessage(CC.translate("&b • &eRedis: &f" + (redisMessenger.isActive() ? "&aenabled" : "&cdisabled")));
Bukkit.getConsoleSender().sendMessage(CC.SEPARATOR);
profileManager = new ProfileManager();
staffManager = new StaffManager(this);
playerManager = new PlayerManager();
menuManager = new MenuManager(this);
prefixMenu = new PrefixMenu();
colorMenu = new ColorMenu();
disguiseMenu = new DisguiseMenu();
disguiseManager = new DisguiseManager();
factionManager = new FactionManager();
storePCoinMenu = new StorePCoinMenu();
new InternalNametag(this, new NameTagAdapter());
//LandSpigot.getInstance().registerPacketHandler(new EntityPacketHandler());
Arrays.asList(
new BroadcastCommand(this),
new ClearChatCommand(this),
new IgnoreCommand(this),
new ListCommand(),
new MessageCommand(this),
new RankCommand(this),
new ReplyCommand(this),
new StaffChatCommand(this),
new TeleportCommand(this),
new ToggleMessagesCommand(this),
new ToggleGlobalChat(this),
new ToggleSoundsCommand(this),
new VanishCommand(this),
new ReportCommand(this),
new CheckCommand(this),
new HelpOpCommand(this),
new PingCommand(),
new BanCommand(this),
new MuteCommand(this),
new UnbanCommand(this),
new UnmuteCommand(this),
new WarnCommand(this),
new KickCommand(this),
new MuteChatCommand(this),
new SlowChatCommand(this),
new GameModeCommand(),
new ShutdownCommand(this),
new FreezeCommand(this),
new WhitelistCommand(this),
new GrantCommand(this),
new GrantsCommand(this),
new QuickGrantCommand(this),
new UserCommand(this),
new PlayTimeCommand(this),
new RankListCommand(),
new NoteAddCommand(this),
new NoteRemoveCommand(this),
new NotesCommand(this),
new MisplaceCommand(this),
new PrefixCommand(this),
new ColorCommand(this),
new SetColorCommand(this),
new BuildServerCommand(this),
new TeleportPositionCommand(this),
new FeedCommand(this),
new HealCommand(this),
new AltsCommand(this),
new UndisguiseCommand(this),
new DisguiseCommand(this),
new EnchantCommand(this),
// factions
new FactionHelpCommand(this),
new FactionAcceptCommand(this),
new FactionCreateCommand(this),
new FactionLeaveCommand(this),
new FactionInfoCommand(this),
new FactionDescriptionCommand(this),
new FactionDisbandCommand(this),
new FactionDemoteCommand(this),
new FactionInviteCommand(this),
new FactionKickCommand(this),
new FactionPasswordCommand(this),
new FactionPromoteCommand(this),
new FactionChatCommand(this),
new PCoinsCommand(this),
new StoreCommand(this)
).forEach(command -> registerCommand(command, getName()));
Arrays.asList(
new PlayerListener(this),
new ButtonListener(),
new MessageListener(this),
new InventoryListener(this),
new HelpCommandListener(this),
new PlayerInteractListener(this),
new UIListener(),
new GrantProcedureListener(this),
new PunishmentListener(),
new FactionListener()
).forEach(listener -> getServer().getPluginManager().registerEvents(listener, this));
getServer().getScheduler().runTaskTimerAsynchronously(this, new BroadcastTask(this), 20 * 120L, 20 * 120L);
new MenuUpdateTask();
new GrantDisguiseCheckTask();
//WindSpigot.getInstance().registerPacketListener(new PacketListener());
packetListener = new PacketListener();
new PlayerPacketListener(this, packetListener);
Rank.importRanks();
CC.logConsole(CC.PRIMARY + "[LandCore] " + CC.SECONDARY + "Core has started successfully.");
CC.logConsole(CC.PRIMARY + "[LandCore] " + CC.GREEN + " All databases connected successfully.");
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> {
factionManager.save();
}, 0L, 6000L);
}
@Override
public void onDisable() {
this.getServer().getScheduler().cancelTasks(this);
Map<String, Object> message = Maps.newHashMap();
message.put("server", this.getServerName());
this.getRedisMessenger().sendOff("server-monitor-remove", message);
factionManager.save();
getServer().getOnlinePlayers().parallelStream().forEach(player -> factionManager.savePlayerFaction(player));
try {
Thread.sleep(1000L);
} catch (Exception e) {
e.printStackTrace();
}
for (Player player : getServer().getOnlinePlayers()) {
player.kickPlayer(CC.RED + "The server is restarting.");
// remove fake players
LandCore.getInstance().getPlayerManager().getDummyPlayers().remove(player.getUniqueId());
}
profileManager.saveProfiles();
serverSettings.saveConfig();
Bukkit.getScheduler().cancelTasks(this);
}
public String getServerName() {
return getConfig().getString("server_name");
}
public String getNetworkName() {
return getConfig().getString("network_name");
}
public void registerCommand(Command cmd, String fallbackPrefix) {
try {
if (bukkitCommandMap == null) {
bukkitCommandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap");
bukkitCommandMap.setAccessible(true);
}
CommandMap commandMap = (CommandMap) bukkitCommandMap.get(Bukkit.getServer());
commandMap.register(cmd.getName(), fallbackPrefix, cmd);
} catch (Exception e) {
Bukkit.getLogger().info("[LandCore] CommandMap failed to register.");
e.printStackTrace();
}
}
private void disableLoggers() {
Logger.getLogger("org.mongodb.driver.connection").setLevel(Level.OFF);
Logger.getLogger("org.mongodb.driver.cluster").setLevel(Level.OFF);
}
private void addServerMonitor() {
Map<String, Object> message = Maps.newHashMap();
message.put("server", this.getServerName());
this.getRedisMessenger().send("server-monitor-add", message);
}
public <E extends Packet<?>> void registerAdapter(Class<? extends E> classType, PacketAdapter<E> handler) {
packetListener.registerAdapter(classType, handler);
}
}

View File

@ -0,0 +1,191 @@
package me.devkevin.landcore;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import lombok.Getter;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.PlayerVersion;
import me.devkevin.landcore.utils.item.ItemBuilder;
import me.devkevin.landcore.utils.message.CC;
import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import us.myles.ViaVersion.api.Via;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 13:49
* CorePluginAPI / land.pvp.core / LandCore
*/
@UtilityClass
public class LandCoreAPI {
public final static ItemStack PLACEHOLDER_ITEM = new ItemBuilder(Material.STAINED_GLASS_PANE)
.durability(7)
.name("&a")
.lore(" ")
.hideFlags()
.build();
public static String getColorPing(int ping) {
if (ping <= 40) return CC.translate("&a" + ping);
if (ping <= 70) return CC.translate("&e" + ping);
if (ping <= 100) return CC.translate("&6" + ping);
else return CC.translate("&c" + ping);
}
public static boolean isInteger(String index) {
try {
Integer.parseInt(index);
return true;
} catch (Exception ignored) {
return false;
}
}
public static void sendToServer(Player player, String server) {
try {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF(server);
player.sendMessage(CC.translate("&aSending to " + server + "..."));
player.sendPluginMessage(LandCore.getInstance(), "BungeeCord", out.toByteArray());
} catch (Exception e) {
player.sendMessage(CC.translate("&cAn Error occurred while sending to the server."));
}
}
public static int getMaxEnchantLevel(Player player) {
CoreProfile profile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
if (profile.hasRank(Rank.DEVELOPER)) return 9999;
if (profile.hasRank(Rank.DEVELOPER)) return 21;
if (profile.hasRank(Rank.DEVELOPER)) return 14;
if (profile.hasRank(Rank.DEVELOPER)) return 7;
return 5;
}
public static Enchantment getEnchantmentByName(Object object) {
String value = object.toString().replace("_", "").trim();
switch (value.toUpperCase()) {
case "PROT":
case "PROTECTION":
return Enchantment.PROTECTION_ENVIRONMENTAL;
case "UNB":
case "UNBREAKING":
return Enchantment.DURABILITY;
case "FIREP":
case "FP":
case "FIREPROTECTION":
return Enchantment.PROTECTION_FIRE;
case "FEATHERF":
case "FL":
case "FEATHERFALLING":
return Enchantment.PROTECTION_FALL;
case "BLASTP":
case "BP":
case "BLASTPROTECTION":
return Enchantment.PROTECTION_EXPLOSIONS;
case "SHARP":
case "SHARPNESS":
return Enchantment.DAMAGE_ALL;
case "KNOCK":
case "KNOCKBACK":
return Enchantment.KNOCKBACK;
case "FIREA":
case "FA":
case "FIRE":
case "FIREASPECT":
return Enchantment.FIRE_ASPECT;
case "L":
case "LOOT":
case "LOOTING":
return Enchantment.LOOT_BONUS_MOBS;
case "F":
case "FORT":
case "FORTUNE":
return Enchantment.LOOT_BONUS_BLOCKS;
case "ST":
case "SILK":
case "SILKTOUCH":
return Enchantment.SILK_TOUCH;
case "EFF":
case "EFFICIENCY":
return Enchantment.DIG_SPEED;
case "SM":
case "SMITE":
return Enchantment.DAMAGE_UNDEAD;
case "INF":
case "INFINITY":
return Enchantment.ARROW_INFINITE;
case "FLA":
case "FLAME":
return Enchantment.ARROW_FIRE;
case "PUNCH":
return Enchantment.ARROW_KNOCKBACK;
case "POWER":
return Enchantment.ARROW_DAMAGE;
default:
return null;
}
}
public enum Language {
USE_NUMBERS("USE_NUMBERS", "{prefix} &cPlease use numbers."),
ENCHANT_MUST_HOLD_ITEM("ENCHANT.MUST-HOLD-ITEM", "{prefix} &eYou must hold item in order to enchant."),
ENCHANT_ENCHANT_MUST_BE_POSITIVE("ENCHANT.ENCHANT-MUST-BE-POSITIVE", "{prefix} &eEnchant level must be positive."),
ENCHANT_MAXIMUM_LEVEL_EXCEEDED("ENCHANT.MAXIMUM-LEVEL-EXCEEDED", "{prefix} &eYour maximum level for enchant is &6<level>&e."),
ENCHANT_WRONG_ENCHANTMENT("ENCHANT.WRONG-ENCHANTMENT", "{prefix} &eYou've entered wrong enchantment."),
ENCHANT_ITEM_DOESNT_HAVE_ENCHANT("ENCHANT.ITEM-IS-NOT-ENCHANTED", "{prefix} &eYour item does not have that enchantment."),
ENCHANT_REMOVED("ENCHANT.REMOVED", "{prefix} &eYou've removed &6<enchant> &eenchantment from your item."),
ENCHANT_ADDED("ENCHANT.ADDED", "{prefix} &eYou've added &6<enchant> &eenchantment to your item.");
@Getter
private String path;
@Getter
private String value;
@Getter
private List<String> listValue;
Language(String path, String value) {
this.path = path;
this.value = value;
this.listValue = new ArrayList<>(Collections.singletonList(value));
}
}
public PlayerVersion getPlayerVersion(Player player) {
return PlayerVersion.getVersionFromRaw(Via.getAPI().getPlayerVersion(player.getUniqueId()));
}
public abstract class LandCoreListener implements Listener {
public LandCoreListener(JavaPlugin javaPlugin) {
Bukkit.getServer().getPluginManager().registerEvents(this, javaPlugin);
}
}
public static String getTodayDate() {
Date todayDate = new Date();
DateFormat todayDateFormat = new SimpleDateFormat("MMM dd, yyyy");
todayDateFormat.setTimeZone(TimeZone.getTimeZone("US/Eastern"));
return todayDateFormat.format(todayDate);
}
public static String getCurrentTime() {
DateFormat dateFormat = new SimpleDateFormat("hh:mm a");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("US/Eastern"));
dateFormat.setTimeZone(cal.getTimeZone());
return dateFormat.format(cal.getTime());
}
}

View File

@ -0,0 +1,7 @@
package me.devkevin.landcore.callback;
import org.bson.Document;
public interface DocumentCallback {
void call(Document document, boolean found);
}

View File

@ -0,0 +1,5 @@
package me.devkevin.landcore.callback;
public interface WebCallback {
void callback(String response);
}

View File

@ -0,0 +1,66 @@
package me.devkevin.landcore.commands;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.Collections;
public abstract class BaseCommand extends Command {
private static final String LINE_SEPARATOR = System.lineSeparator();
private final Rank requiredRank;
protected BaseCommand(String name, Rank requiredRank) {
super(name);
this.requiredRank = requiredRank;
}
protected BaseCommand(String name) {
this(name, Rank.MEMBER);
}
@Override
public final boolean execute(CommandSender sender, String alias, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
CoreProfile profile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
if (!profile.hasRank(requiredRank)) {
player.sendMessage(CC.RED + "You don't have the required rank to perform this command.");
return true;
}
}
execute(sender, args);
return true;
}
protected final void setAliases(String... aliases) {
if (aliases.length > 0) {
setAliases(aliases.length == 1 ? Collections.singletonList(aliases[0]) : Arrays.asList(aliases));
}
}
protected final void setUsage(String... uses) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < uses.length; i++) {
String use = uses[i];
builder.append(use);
if (i + 1 != uses.length) {
builder.append(LINE_SEPARATOR);
}
}
setUsage(builder.toString());
}
protected abstract void execute(CommandSender sender, String[] args);
}

View File

@ -0,0 +1,27 @@
package me.devkevin.landcore.commands;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public abstract class PlayerCommand extends BaseCommand {
protected PlayerCommand(String name, Rank requiredRank) {
super(name, requiredRank);
}
protected PlayerCommand(String name) {
super(name, Rank.MEMBER);
}
@Override
protected final void execute(CommandSender sender, String[] args) {
if (sender instanceof Player) {
execute((Player) sender, args);
} else {
sender.sendMessage(CC.RED + "Only players can perform this command.");
}
}
public abstract void execute(Player player, String[] args);
}

View File

@ -0,0 +1,36 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Collections;
public class ClearChatCommand extends BaseCommand {
private static final String BLANK_MESSAGE = String.join("", Collections.nCopies(150, "§8 §8 §1 §3 §3 §7 §8 §r\n"));
private final LandCore plugin;
public ClearChatCommand(LandCore plugin) {
super("clearchat", Rank.TRIAL_MOD);
this.plugin = plugin;
setAliases("cc");
}
@Override
protected void execute(CommandSender sender, String[] args) {
for (Player player : plugin.getServer().getOnlinePlayers()) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (!profile.hasStaff()) {
player.sendMessage(BLANK_MESSAGE);
}
}
plugin.getServer().broadcastMessage(CC.GREEN + "The chat was cleared by " + sender.getName() + ".");
sender.sendMessage(CC.YELLOW + "Don't worry, staff can still see cleared messages.");
}
}

View File

@ -0,0 +1,87 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.LandCoreAPI;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.TaskUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 13/02/2023 @ 19:55
* EnchantCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class EnchantCommand extends BaseCommand {
private final LandCore plugin;
public EnchantCommand(LandCore plugin) {
super("enchant", Rank.DEVELOPER);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
TaskUtil.runAsync(() -> {
Player player = (Player) sender;
if (args.length < 2) {
player.sendMessage(CC.translate("&cCorrect usage: /enchant <enchantment> <level>"));
return;
}
ItemStack item = player.getItemInHand();
if (item == null || item.getType() == Material.AIR) {
player.sendMessage(LandCoreAPI.Language.ENCHANT_MUST_HOLD_ITEM.toString());
return;
}
if (!LandCoreAPI.isInteger(args[1])) {
player.sendMessage(LandCoreAPI.Language.USE_NUMBERS.toString());
return;
}
int level = Integer.parseInt(args[1]);
if (level < 0) {
player.sendMessage(LandCoreAPI.Language.ENCHANT_ENCHANT_MUST_BE_POSITIVE.toString());
return;
}
if (level > LandCoreAPI.getMaxEnchantLevel(player)) {
player.sendMessage(LandCoreAPI.Language.ENCHANT_MAXIMUM_LEVEL_EXCEEDED.toString()
.replace("<level>", String.valueOf(LandCoreAPI.getMaxEnchantLevel(player))));
return;
}
Enchantment enchantment = LandCoreAPI.getEnchantmentByName(args[0]);
if (enchantment == null) {
player.sendMessage(LandCoreAPI.Language.ENCHANT_WRONG_ENCHANTMENT.toString());
return;
}
if (level == 0) {
if (!item.containsEnchantment(enchantment)) {
player.sendMessage(LandCoreAPI.Language.ENCHANT_ITEM_DOESNT_HAVE_ENCHANT.toString());
return;
}
item.removeEnchantment(enchantment);
player.sendMessage(LandCoreAPI.Language.ENCHANT_REMOVED.toString()
.replace("<enchant>", enchantment.getName().toUpperCase().replace("_", " ") + " " + level));
return;
}
item.addUnsafeEnchantment(enchantment, level);
player.sendMessage(LandCoreAPI.Language.ENCHANT_ADDED.toString()
.replace("<enchant>", enchantment.getName().toUpperCase().replace("_", " ")));
});
}
}

View File

@ -0,0 +1,27 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 07/02/2023 @ 18:07
* FeedCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class FeedCommand extends PlayerCommand {
private final LandCore plugin;
public FeedCommand(LandCore plugin) {
super("feed", Rank.ADMIN);
this.plugin = plugin;
}
@Override
public void execute(Player player, String[] args) {
player.sendMessage(CC.GOLD + CC.B + "You now have full hunger");
player.setFoodLevel(20);
}
}

View File

@ -0,0 +1,27 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 07/02/2023 @ 18:08
* HealCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class HealCommand extends PlayerCommand {
private final LandCore plugin;
public HealCommand(LandCore plugin) {
super("heal", Rank.ADMIN);
this.plugin = plugin;
}
@Override
public void execute(Player player, String[] args) {
player.sendMessage(CC.GOLD + CC.B + "You now have fully healed.");
player.setHealth(player.getMaxHealth());
}
}

View File

@ -0,0 +1,49 @@
package me.devkevin.landcore.commands.impl;
import com.google.common.collect.Maps;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.timer.Timer;
import org.bukkit.entity.Player;
import java.util.Map;
public class HelpOpCommand extends PlayerCommand {
private final LandCore plugin;
public HelpOpCommand(LandCore plugin) {
super("helpop");
this.plugin = plugin;
setUsage(CC.RED + "/helpop <help message>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(usageMessage);
return;
}
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
Timer cooldownTimer = profile.getReportCooldownTimer();
if (cooldownTimer.isActive()) {
player.sendMessage(CC.RED + "You can't request assistance for another " + cooldownTimer.formattedExpiration() + ".");
return;
}
String request = StringUtil.buildString(args, 0);
Map<String, Object> requestMap = Maps.newHashMap();
requestMap.put("server", plugin.getServerName());
requestMap.put("player", player.getName());
requestMap.put("request", request);
plugin.getRedisMessenger().send("help-op", requestMap);
player.sendMessage(CC.GREEN + "Request sent: " + CC.R + request);
}
}

View File

@ -0,0 +1,57 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
public class IgnoreCommand extends PlayerCommand {
private final LandCore plugin;
public IgnoreCommand(LandCore plugin) {
super("ignore");
this.plugin = plugin;
setAliases("unignore");
setUsage(CC.RED + "Usage: /ignore <player>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(usageMessage);
return;
}
Player target = plugin.getServer().getPlayer(args[0]);
if (target == null) {
player.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
if (target.getName().equals(player.getName())) {
player.sendMessage(CC.RED + "You can't ignore yourself!");
return;
}
CoreProfile targetProfile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (targetProfile.hasStaff()) {
player.sendMessage(CC.RED + "You can't ignore a staff member. If this staff member is harrassing you " +
"or engaging in other abusive manners, please report this or contact a higher staff member.");
return;
}
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (profile.hasPlayerIgnored(target.getUniqueId())) {
profile.unignore(target.getUniqueId());
player.sendMessage(CC.GREEN + "No longer ignoring " + target.getName() + ".");
} else {
profile.ignore(target.getUniqueId());
player.sendMessage(CC.GREEN + "Now ignoring " + target.getName() + ".");
}
}
}

View File

@ -0,0 +1,23 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.utils.PlayerList;
import org.bukkit.command.CommandSender;
public class ListCommand extends BaseCommand {
public ListCommand() {
super("list");
setAliases("online", "players", "who");
}
@Override
protected void execute(CommandSender sender, String[] args) {
PlayerList onlinePlayerList = PlayerList.newList().sortedByRank();
sender.sendMessage(" ");
sender.sendMessage(PlayerList.ORDERED_RANKS);
sender.sendMessage(" ");
sender.sendMessage("(" + onlinePlayerList.size() + ") " + onlinePlayerList.asColoredNames());
sender.sendMessage(" ");
}
}

View File

@ -0,0 +1,56 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.event.player.PlayerMessageEvent;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
public class MessageCommand extends PlayerCommand {
private final LandCore plugin;
public MessageCommand(LandCore plugin) {
super("message");
this.plugin = plugin;
setAliases("msg", "m", "whisper", "w", "tell", "t");
setUsage(CC.RED + "Usage: /message <player> <message>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 2) {
player.sendMessage(usageMessage);
return;
}
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (profile.getActiveMute() != null) {
if (profile.getActiveMute().isActive()) {
player.sendMessage(CC.RED + "You're muted for another " + profile.getActiveBan().getTimeRemaining() + ".");
} else if (profile.getActiveMute().isPermanent()) {
player.sendMessage(CC.RED + "You're permanently muted.");
}
return;
}
Player target = plugin.getServer().getPlayer(args[0]);
if (target == null) {
player.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
CoreProfile targetProfile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (targetProfile.hasPlayerIgnored(player.getUniqueId())) {
player.sendMessage(CC.RED + "That player is ignoring you!");
return;
}
plugin.getServer().getPluginManager().callEvent(new PlayerMessageEvent(player, target, StringUtil.buildString(args, 1)));
}
}

View File

@ -0,0 +1,105 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.LandCoreAPI;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 24/03/2023 @ 1:43
* P_CoinsCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class PCoinsCommand extends BaseCommand {
private final LandCore plugin;
public PCoinsCommand(LandCore plugin) {
super("pcoin", Rank.MANAGER);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length == 3) {
if (args[0].equalsIgnoreCase("set")) {
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
sender.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
CoreProfile targetAccount = plugin.getProfileManager().getProfile(target.getUniqueId());
if (!LandCoreAPI.isInteger(args[2]) || Integer.parseInt(args[2]) < 0) {
sender.sendMessage(CC.RED + "Please use numbers.");
return;
}
targetAccount.setP_coin(Integer.parseInt(args[2]));
sender.sendMessage("&eYou have successfully set &6" + targetAccount.getP_coin() + "'s &ePCoins to &6" + target.getName() + "&e.\"");
return;
}
if (args[0].equalsIgnoreCase("add")) {
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
sender.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
CoreProfile targetAccount = plugin.getProfileManager().getProfile(target.getUniqueId());
if (!LandCoreAPI.isInteger(args[2]) || Integer.parseInt(args[2]) <= 0) {
sender.sendMessage(CC.RED + "Please use numbers.");
return;
}
targetAccount.setP_coin(targetAccount.getP_coin() + Integer.parseInt(args[2]));
sender.sendMessage("&eYou have successfully added &6" + targetAccount.getP_coin() + "'s &ePCoins to &6" + target.getName() + "&e.\"");
return;
}
if (args[0].equalsIgnoreCase("remove")) {
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
sender.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
CoreProfile targetAccount = plugin.getProfileManager().getProfile(target.getUniqueId());
if (!LandCoreAPI.isInteger(args[2]) || Integer.parseInt(args[2]) <= 0) {
sender.sendMessage(CC.RED + "Please use numbers.");
return;
}
if (Integer.parseInt(args[2]) > targetAccount.getP_coin()) {
sender.sendMessage(CC.translate("&cInvalid amount."));
return;
}
targetAccount.setP_coin(targetAccount.getP_coin() - Integer.parseInt(args[2]));
sender.sendMessage("&eYou have successfully removed &6" + targetAccount.getP_coin() + "'s &ePCoins to &6" + target.getName() + "&e.\"");
return;
}
}
sender.sendMessage(" ");
sender.sendMessage(CC.translate("&e&lCoins HELP"));
sender.sendMessage(CC.translate("&e/pcoin set <player> <amount>"));
sender.sendMessage(CC.translate("&e/pcoin add <player> <amount>"));
sender.sendMessage(CC.translate("&e/pcoin remove <player> <amount>"));
sender.sendMessage(" ");
}
}

View File

@ -0,0 +1,29 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCoreAPI;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class PingCommand extends PlayerCommand {
public PingCommand() {
super("ping");
}
@Override
public void execute(Player player, String[] args) {
Player target = args.length < 1 || Bukkit.getPlayer(args[0]) == null ? player : Bukkit.getPlayer(args[0]);
int targetPing = target.spigot().getPing();
if (target == player) {
player.sendMessage(CC.PRIMARY + "Your ping is " + CC.SECONDARY + LandCoreAPI.getColorPing(targetPing) + CC.PRIMARY + " ms.");
} else {
int difference = targetPing - player.spigot().getPing();
String name = target.getDisplayName();
player.sendMessage(name + CC.PRIMARY + "'s ping is " + CC.SECONDARY + targetPing + CC.PRIMARY + " ms "
+ CC.ACCENT + "(" + (difference > 0 ? "+" : "") + LandCoreAPI.getColorPing(difference) + " difference)" + CC.PRIMARY + ".");
}
}
}

View File

@ -0,0 +1,43 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.utils.message.CC;
import org.apache.commons.lang.time.DurationFormatUtils;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/01/2023 @ 1:13
* PlayTimeCommand / land.pvp.core.commands.impl / LandCore
*/
public class PlayTimeCommand extends PlayerCommand {
private final LandCore plugin;
public PlayTimeCommand(LandCore plugin) {
super("playtime");
this.plugin = plugin;
}
@Override
public void execute(Player player, String[] args) {
if (args.length == 0) {
long time = player.getStatistic(Statistic.PLAY_ONE_TICK);
player.sendMessage(CC.translate("&eYour playtime is &6" + DurationFormatUtils.formatDurationWords(time * 50L, true, true) + " &eon this server."));
} else {
Player target = this.plugin.getServer().getPlayer(args[0]);
if (target == null || !target.isOnline()) {
assert target != null;
player.sendMessage(CC.RED + "No player matching " + CC.YELLOW + target.getName() + CC.RED + " is connected to this server");
return;
}
long time = target.getStatistic(Statistic.PLAY_ONE_TICK);
player.sendMessage(CC.translate(plugin.getProfileManager().getProfile(target.getUniqueId()).getGrant().getRank().getColor() + target.getName() + "'s &eplaytime is &6" + DurationFormatUtils.formatDurationWords(time * 50L, true, true) + " &eon this server."));
}
}
}

View File

@ -0,0 +1,55 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.event.player.PlayerMessageEvent;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class ReplyCommand extends PlayerCommand {
private final LandCore plugin;
public ReplyCommand(LandCore plugin) {
super("reply");
this.plugin = plugin;
setAliases("r");
setUsage(CC.RED + "Usage: /reply <message>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(usageMessage);
return;
}
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (profile.getActiveMute() != null) {
if (profile.getActiveMute().isActive()) {
player.sendMessage(CC.RED + "You're muted for another " + profile.getActiveBan().getTimeRemaining() + ".");
} else if (profile.getActiveMute().isPermanent()) {
player.sendMessage(CC.RED + "You're permanently muted.");
}
return;
}
Player target = plugin.getServer().getPlayer(profile.getConverser());
if (target == null) {
player.sendMessage(CC.RED + "You are not in a conversation.");
return;
}
CoreProfile targetProfile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (targetProfile.hasPlayerIgnored(player.getUniqueId())) {
player.sendMessage(CC.RED + "That player is ignoring you!");
return;
}
plugin.getServer().getPluginManager().callEvent(new PlayerMessageEvent(player, target, StringUtil.buildString(args, 0)));
}
}

View File

@ -0,0 +1,58 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.inventory.menu.impl.ReportMenu;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
public class ReportCommand extends PlayerCommand {
private final LandCore plugin;
public ReportCommand(LandCore plugin) {
super("report");
this.plugin = plugin;
setUsage(CC.RED + "Usage: /report <player>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length == 0) {
player.sendMessage(usageMessage);
return;
}
Player target = plugin.getServer().getPlayer(args[0]);
if (target == null) {
player.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
if (player == target) {
player.sendMessage(CC.RED + "You can't report yourself!");
return;
}
CoreProfile targetProfile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (targetProfile.hasStaff()) {
player.sendMessage(CC.RED + "You can't report a staff member. If this staff member is harassing you or" +
" engaging in other abusive manners, please report this or contact a higher staff member.");
return;
}
if (args.length == 1 || args.length == 2) {
if (target.getName() != null || targetProfile.getName() != null) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
profile.setReportingPlayerName(target.getName());
plugin.getMenuManager().getMenu(ReportMenu.class).open(player);
} else {
player.sendMessage(CC.RED + "Error: That player does not exist.");
}
}
}
}

View File

@ -0,0 +1,25 @@
package me.devkevin.landcore.commands.impl;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 24/03/2023 @ 20:43
* StoreCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class StoreCommand extends PlayerCommand {
private final LandCore plugin;
public StoreCommand(LandCore plugin) {
super("store");
this.plugin = plugin;
setAliases("pstore");
}
@Override
public void execute(Player player, String[] args) {
player.openInventory(this.plugin.getStorePCoinMenu().menu(player).getCurrentPage());
}
}

View File

@ -0,0 +1,44 @@
package me.devkevin.landcore.commands.impl;
import com.google.common.primitives.Ints;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Location;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 07/02/2023 @ 18:05
* TeleportPositionCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class TeleportPositionCommand extends PlayerCommand {
private final LandCore plugin;
public TeleportPositionCommand(LandCore plugin) {
super("tppos", Rank.DEVELOPER);
this.plugin = plugin;
setAliases("teleportposition");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 3) {
player.sendMessage(CC.RED + "Usage: /tppos <x> <y> <z>");
return;
}
Integer x = Ints.tryParse(args[0]);
Integer y = Ints.tryParse(args[1]);
Integer z = Ints.tryParse(args[2]);
if (x == null || y == null || z == null) {
player.sendMessage(CC.RED + "Location not found.");
return;
}
player.sendMessage(CC.GRAY + "Teleporting...");
player.teleport(new Location(player.getWorld(), (double) x, (double) y, (double) z));
}
}

View File

@ -0,0 +1,60 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
import java.util.*;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 17:25
* AltsCommand / me.devkevin.landcore.commands.impl.staff / LandCore
*/
public class AltsCommand extends PlayerCommand {
private final LandCore plugin;
public AltsCommand(LandCore plugin) {
super("alts", Rank.TRIAL_MOD);
this.plugin = plugin;
setAliases("dupeip");
setUsage(CC.RED + "Usage: /alts <name:ip>");
}
@Override
public void execute(Player player, String[] args) {
Player target = plugin.getServer().getPlayer(args[0]);
CoreProfile coreProfile = this.plugin.getProfileManager().getProfile(player.getUniqueId());
if (target == null || coreProfile == null) {
player.sendMessage(Messages.PLAYER_NOT_FOUND);
return;
}
List<CoreProfile> alts = new ArrayList<>();
for (UUID altUUID : coreProfile.getKnownAlts()) {
CoreProfile altProfile = this.plugin.getProfileManager().getProfile(altUUID);
if (altProfile != null) {
alts.add(altProfile);
}
}
if (alts.isEmpty()) {
player.sendMessage(CC.RED + "This player has no known alt accounts.");
} else {
StringBuilder builder = new StringBuilder();
for (CoreProfile altProfile : alts) {
builder.append(altProfile.getName());
builder.append(", ");
}
player.sendMessage(CC.GOLD + "Alts: " + CC.R + builder);
}
}
}

View File

@ -0,0 +1,37 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
public class BroadcastCommand extends BaseCommand {
private final LandCore plugin;
public BroadcastCommand(LandCore plugin) {
super("broadcast", Rank.ADMIN);
this.plugin = plugin;
setAliases("bc");
setUsage(CC.RED + "Usage: /broadcast <message> [-god]");
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length == 0) {
sender.sendMessage(usageMessage);
return;
}
String message = CC.SECONDARY + "[Alert] " + CC.PRIMARY
+ ChatColor.translateAlternateColorCodes('&', StringUtil.buildString(args, 0)).trim();
if (message.endsWith(" -god")) {
message = message.substring(12, message.length() - 5).trim();
}
plugin.getServer().broadcastMessage(message);
}
}

View File

@ -0,0 +1,26 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.LandCoreAPI;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 07/02/2023 @ 17:46
* BuilServerCommand / me.devkevin.landcore.commands.impl / LandCore
*/
public class BuildServerCommand extends PlayerCommand {
private final LandCore plugin;
public BuildServerCommand(LandCore plugin) {
super("buildserver", Rank.BUILDER);
this.plugin = plugin;
}
@Override
public void execute(Player player, String[] args) {
LandCoreAPI.sendToServer(player, "build");
}
}

View File

@ -0,0 +1,68 @@
package me.devkevin.landcore.commands.impl.staff;
import com.google.common.collect.Maps;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.event.player.PlayerFreezeEvent;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Map;
public class FreezeCommand extends BaseCommand {
private final LandCore plugin;
public FreezeCommand(LandCore plugin) {
super("freeze", Rank.SENIOR_MOD);
this.plugin = plugin;
setAliases("screenshare", "ss");
setUsage("/freeze <player>");
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length < 1) {
sender.sendMessage(CC.RED + getUsage());
return;
}
Player target = Bukkit.getPlayer(args[0]);
if (target != null) {
CoreProfile targetProfile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (targetProfile.hasStaff()) {
sender.sendMessage(CC.RED + "If you believe a staff member is cheating, please alert higher staff.");
return;
}
String server = plugin.getServerName();
String targetName = target.getName();
String senderName = sender.getName();
Map<String, Object> map = Maps.newHashMap();
map.put("server", server);
map.put("frozen", targetName);
map.put("sender", senderName);
if (targetProfile.freeze(sender)) {
map.put("isFrozen", true);
plugin.getRedisMessenger().send("freeze-listener", map);
return;
}
map.put("isFrozen", false);
plugin.getRedisMessenger().send("freeze-listener", map);
return;
}
PlayerFreezeEvent event = new PlayerFreezeEvent(target);
this.plugin.getServer().getPluginManager().callEvent(event);
sender.sendMessage(CC.RED + "That player is offline or does not exist.");
}
}

View File

@ -0,0 +1,47 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
public class GameModeCommand extends PlayerCommand {
public GameModeCommand() {
super("gamemode", Rank.SENIOR_MOD);
setAliases("gm");
setUsage(CC.RED + "Usage: /gamemode <mode|id>");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(usageMessage);
return;
}
switch (args[0].toLowerCase()) {
case "1":
case "creative":
case "c":
player.setGameMode(GameMode.CREATIVE);
player.sendMessage(CC.GREEN + "Your game mode was set to creative.");
break;
case "0":
case "survival":
case "s":
player.setGameMode(GameMode.SURVIVAL);
player.sendMessage(CC.GREEN + "Your game mode was set to survival.");
break;
case "2":
case "adventure":
case "a":
player.setGameMode(GameMode.ADVENTURE);
player.sendMessage(CC.GREEN + "Your game mode was set to adventure.");
break;
default:
player.sendMessage(usageMessage);
break;
}
}
}

View File

@ -0,0 +1,40 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 23/01/2023 @ 17:57
* MisplaceCommand / me.devkevin.landcore.commands.impl.staff / LandCore
*/
public class MisplaceCommand extends BaseCommand {
private final LandCore plugin;
public MisplaceCommand(LandCore plugin) {
super("xp", Rank.MANAGER);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = this.plugin.getServer().getPlayer(args[0]);
CoreProfile coreProfile = this.plugin.getProfileManager().getProfile(target.getUniqueId());
try {
double d = Double.parseDouble(args[1]);
if (d > 0.25) {
sender.sendMessage(CC.RED + "Warning! " + d + " is over the recommended amount. The recommended amount is 0.25.");
}
coreProfile.setMisplace(d);
sender.sendMessage(CC.GREEN + "Misplace set to " + d + ".");
} catch (Exception ex) {
sender.sendMessage(CC.RED + "Invalid amount.");
}
}
}

View File

@ -0,0 +1,25 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class MuteChatCommand extends PlayerCommand {
private final LandCore plugin;
public MuteChatCommand(LandCore plugin) {
super("mutechat", Rank.TRIAL_MOD);
this.plugin = plugin;
}
@Override
public void execute(Player player, String[] args) {
boolean globalChatMuted = !plugin.getServerSettings().isGlobalChatMuted();
plugin.getServerSettings().setGlobalChatMuted(globalChatMuted);
plugin.getServer().broadcastMessage(globalChatMuted ? CC.RED + "Global chat has been muted by " + player.getName() + "."
: CC.GREEN + "Global chat has been enabled by " + plugin.getProfileManager().getProfile(player.getUniqueId()).getRank().getColor() + player.getName() + ".");
}
}

View File

@ -0,0 +1,63 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.event.server.ServerShutdownCancelEvent;
import me.devkevin.landcore.event.server.ServerShutdownScheduleEvent;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.task.ShutdownTask;
import me.devkevin.landcore.utils.NumberUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
public class ShutdownCommand extends BaseCommand {
private final LandCore plugin;
public ShutdownCommand(LandCore plugin) {
super("shutdown", Rank.ADMIN);
this.plugin = plugin;
setUsage(CC.RED + "Usage: /shutdown <seconds|cancel>");
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length < 1) {
sender.sendMessage(usageMessage);
return;
}
String arg = args[0];
if (arg.equals("cancel")) {
ShutdownTask task = plugin.getServerSettings().getShutdownTask();
if (task == null) {
sender.sendMessage(CC.RED + "There is no shutdown in progress.");
} else {
plugin.getServer().getPluginManager().callEvent(new ServerShutdownCancelEvent());
task.cancel();
plugin.getServerSettings().setShutdownTask(null);
plugin.getServer().broadcastMessage(CC.GREEN + "The shutdown in progress has been cancelled by " + sender.getName() + ".");
}
return;
}
Integer seconds = NumberUtil.getInteger(arg);
if (seconds == null) {
sender.sendMessage(usageMessage);
} else {
if (seconds >= 5 && seconds <= 300) {
plugin.getServer().getPluginManager().callEvent(new ServerShutdownScheduleEvent());
ShutdownTask task = new ShutdownTask(seconds);
plugin.getServerSettings().setShutdownTask(task);
task.runTaskTimer(plugin, 0L, 20L);
} else {
sender.sendMessage(CC.RED + "Please enter a time between 5 and 300 seconds.");
}
}
}
}

View File

@ -0,0 +1,67 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
public class SlowChatCommand extends BaseCommand {
private final LandCore plugin;
public SlowChatCommand(LandCore plugin) {
super("slowchat", Rank.TRIAL_MOD);
this.plugin = plugin;
setUsage(CC.RED + "Usage: /slowchat <seconds|disable>");
}
private static Integer getInt(String arg) {
try {
int i = Integer.parseInt(arg);
if (i < 4 || i > 60) {
return null;
}
return i;
} catch (NumberFormatException e) {
return null;
}
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length < 1) {
sender.sendMessage(usageMessage);
return;
}
String arg = args[0];
switch (arg.toLowerCase()) {
case "off":
case "toggle":
case "disable":
int slowChatTime = plugin.getServerSettings().getSlowChatTime();
if (slowChatTime == -1) {
sender.sendMessage(CC.RED + "Slow chat is already disabled!");
} else {
plugin.getServerSettings().setSlowChatTime(-1);
plugin.getServer().broadcastMessage(CC.RED + "Slow chat has been disabled by " + sender.getName() + ".");
}
break;
default:
Integer time = getInt(arg);
if (time == null) {
sender.sendMessage(CC.RED + "You must enter a valid time between 4 and 60 seconds.");
} else {
plugin.getServerSettings().setSlowChatTime(time);
plugin.getServer().broadcastMessage(CC.YELLOW + "Slow chat has been enabled and set to " + time
+ " seconds by " + sender.getName() + ".");
}
break;
}
}
}

View File

@ -0,0 +1,36 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class StaffChatCommand extends PlayerCommand {
private final LandCore plugin;
public StaffChatCommand(LandCore plugin) {
super("staffchat", Rank.TRIAL_MOD);
this.plugin = plugin;
setAliases("sc");
}
@Override
public void execute(Player player, String[] args) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (args.length == 0) {
boolean inStaffChat = !profile.isInStaffChat();
profile.setInStaffChat(inStaffChat);
player.sendMessage(inStaffChat ? CC.GREEN + "You are now in staff chat." : CC.RED + "You are no longer in staff chat.");
} else {
String message = StringUtil.buildString(args, 0);
plugin.getStaffManager().messageStaff(profile.getChatFormat(), message);
}
}
}

View File

@ -0,0 +1,68 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
public class TeleportCommand extends PlayerCommand {
private final LandCore plugin;
public TeleportCommand(LandCore plugin) {
super("tp", Rank.TRIAL_MOD);
this.plugin = plugin;
setAliases("teleport");
setUsage(CC.RED + "Usage: /teleport <player> [player]");
}
private static boolean isOffline(Player checker, Player target) {
if (target == null) {
checker.sendMessage(Messages.PLAYER_NOT_FOUND);
return true;
}
return false;
}
private void teleport(Player to, Player from) {
to.teleport(from);
to.sendMessage(CC.GREEN + "You have been teleported to " + from.getName() + ".");
CoreProfile fromProfile = plugin.getProfileManager().getProfile(from.getUniqueId());
if (fromProfile.hasStaff()) {
from.sendMessage(CC.GREEN + to.getName() + " has been teleported to you.");
}
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(usageMessage);
return;
}
Player target = plugin.getServer().getPlayer(args[0]);
if (isOffline(player, target)) {
return;
}
if (args.length < 2) {
teleport(player, target);
} else {
Player target2 = plugin.getServer().getPlayer(args[1]);
if (isOffline(player, target2)) {
return;
}
teleport(target, target2);
player.sendMessage(CC.GREEN + "Teleported " + target.getName() + " to " + target2.getName() + ".");
}
}
}

View File

@ -0,0 +1,33 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class VanishCommand extends BaseCommand {
private final LandCore plugin;
public VanishCommand(LandCore plugin) {
super("vanish", Rank.TRIAL_MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player player = (Player) sender;
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
boolean vanished = !profile.isVanished();
profile.setVanished(vanished);
for (Player online : plugin.getServer().getOnlinePlayers()) {
plugin.getStaffManager().hideVanishedStaffFromPlayer(online);
}
player.sendMessage(vanished ? CC.GREEN + "Poof, you vanished." : CC.RED + "You're visible again.");
}
}

View File

@ -0,0 +1,59 @@
package me.devkevin.landcore.commands.impl.staff;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.server.ServerSettings;
import me.devkevin.landcore.server.WhitelistMode;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
public class WhitelistCommand extends BaseCommand {
private final LandCore plugin;
public WhitelistCommand(LandCore plugin) {
super("whitelist", Rank.ADMIN);
this.plugin = plugin;
setAliases("wl");
setUsage(CC.RED + "Usage: /whitelist <none|ranks|staff>");
}
@Override
protected void execute(CommandSender sender, String[] args) {
if (args.length < 1) {
sender.sendMessage(usageMessage);
return;
}
ServerSettings settings = plugin.getServerSettings();
switch (args[0].toLowerCase()) {
case "none":
case "off":
settings.setServerWhitelistMode(WhitelistMode.NONE);
break;
case "ranks":
case "donors":
settings.setServerWhitelistMode(WhitelistMode.RANKS);
break;
case "staff":
case "on":
settings.setServerWhitelistMode(WhitelistMode.STAFF);
break;
default:
sender.sendMessage(CC.RED + "That's not a valid whitelist mode!");
return;
}
WhitelistMode whitelistMode = settings.getServerWhitelistMode();
Server server = plugin.getServer();
if (whitelistMode == WhitelistMode.NONE) {
server.broadcastMessage(CC.GREEN + "The server is no longer whitelisted!");
} else {
whitelistMode.activate();
server.broadcastMessage(CC.RED + "The server is now whitelisted (Mode: " + whitelistMode + ").");
}
}
}

View File

@ -0,0 +1,79 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.punishment.PunishmentType;
import me.devkevin.landcore.utils.Duration;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.Objects;
import java.util.UUID;
public class BanCommand extends BaseCommand {
private final LandCore plugin;
public BanCommand(LandCore plugin) {
super("ban", Rank.MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = Bukkit.getPlayer(args[0]);
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (args.length < 3) {
sender.sendMessage(CC.RED + "Usage: /ban <player> <duration> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
if (Objects.requireNonNull(profile).getActiveBan() != null) {
sender.sendMessage(CC.RED + "That player is already banned.");
return;
}
long duration = Duration.fromString(args[1]).getValue();
boolean silent = args[args.length - 1].equalsIgnoreCase("-s");
if (duration == -1) {
sender.sendMessage(CC.RED + "That duration is not valid.");
sender.sendMessage(CC.RED + "Example: [perm/1y1m1w1d]");
return;
}
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = new Punishment(UUID.randomUUID(), PunishmentType.BAN, System.currentTimeMillis(),
args[1], duration);
if (sender instanceof Player) {
punishment.setAddedBy(((Player) sender).getUniqueId());
}
profile.getPunishments().add(punishment);
profile.save(true);
punishment.broadcast(staffName, target, silent);
Player player = profile.getPlayer();
if (player != null) {
new BukkitRunnable() {
@Override
public void run() {
player.kickPlayer(punishment.getKickMessage());
}
}.runTask(LandCore.getInstance());
}
}
}

View File

@ -0,0 +1,40 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.menu.PunishmentsMenu;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 15:26
* CheckCommand / me.devkevin.landcore.commands.impl.staff.punish / LandCore
*/
public class CheckCommand extends PlayerCommand {
private final LandCore plugin;
public CheckCommand(LandCore plugin) {
super("check", Rank.MOD);
this.plugin = plugin;
setAliases("c");
}
@Override
public void execute(Player player, String[] args) {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (profile == null) {
player.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
new PunishmentsMenu(profile).openMenu(player);
}
}

View File

@ -0,0 +1,69 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.punishment.PunishmentType;
import me.devkevin.landcore.utils.Duration;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.Objects;
import java.util.UUID;
public class KickCommand extends BaseCommand {
private final LandCore plugin;
public KickCommand(LandCore plugin) {
super("kick", Rank.TRIAL_MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = Bukkit.getPlayer(args[0]);
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (args.length < 2) {
sender.sendMessage(CC.RED + "Usage: /kick <player> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = new Punishment(target.getUniqueId(), PunishmentType.KICK, System.currentTimeMillis(),
args[1], -1);
if (sender instanceof Player) {
punishment.setAddedBy(((Player) sender).getUniqueId());
}
Objects.requireNonNull(profile).getPunishments().add(punishment);
profile.save(true);
punishment.broadcast(staffName, target, true);
Player player = profile.getPlayer();
if (player != null) {
new BukkitRunnable() {
@Override
public void run() {
player.kickPlayer(punishment.getKickMessage());
}
}.runTask(LandCore.getInstance());
}
}
}

View File

@ -0,0 +1,81 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.punishment.PunishmentType;
import me.devkevin.landcore.utils.Duration;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Objects;
import java.util.UUID;
public class MuteCommand extends BaseCommand {
private final LandCore plugin;
public MuteCommand(LandCore plugin) {
super("mute", Rank.TRIAL_MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = Bukkit.getPlayer(args[0]);
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (args.length < 3) {
sender.sendMessage(CC.RED + "Usage: /mute <player> <duration> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
if (Objects.requireNonNull(profile).getActiveMute() != null) {
sender.sendMessage(CC.RED + "That player is already muted.");
return;
}
long duration = Duration.fromString(args[1]).getValue();
boolean silent = args[args.length - 1].equalsIgnoreCase("-s");
if (duration == -1) {
sender.sendMessage(CC.RED + "That duration is not valid.");
sender.sendMessage(CC.RED + "Example: [perm/1y1m1w1d]");
return;
}
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = new Punishment(target.getUniqueId(), PunishmentType.MUTE, System.currentTimeMillis(),
args[1], duration);
if (sender instanceof Player) {
punishment.setAddedBy(((Player) sender).getUniqueId());
}
profile.getPunishments().add(punishment);
profile.save(true);
Player player = profile.getPlayer();
if (player != null) {
String senderName = sender instanceof Player ? plugin.getProfileManager().getProfiles().get(((Player) sender).getUniqueId()).getGrant().getRank().getColor() : CC.D_RED + "Console";
player.sendMessage(CC.RED + "You have been muted by " + senderName + CC.RED + " for: " + CC.YELLOW + args[1]);
if (!punishment.isPermanent()) {
player.sendMessage(CC.RED + "This mute will expire in " + CC.YELLOW + punishment.getTimeRemaining());
}
}
punishment.broadcast(staffName, target, silent);
}
}

View File

@ -0,0 +1,58 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class UnbanCommand extends BaseCommand {
private final LandCore plugin;
public UnbanCommand(LandCore plugin) {
super("unban", Rank.MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
if (args.length < 2) {
sender.sendMessage(CC.RED + "Usage: /unban <player> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
if ((profile != null ? profile.getActiveBan() : null) == null) {
sender.sendMessage(CC.RED + "That player is not banned.");
return;
}
boolean silent = args[args.length - 1].equalsIgnoreCase("-s");
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = profile.getActiveBan();
punishment.setPardonedAt(System.currentTimeMillis());
punishment.setPardonedReason(args[1]);
punishment.setPardoned(true);
if (sender instanceof Player) {
punishment.setPardonedBy(((Player) sender).getUniqueId());
}
profile.save(true);
punishment.broadcast(staffName, target.getPlayer(), silent);
}
}

View File

@ -0,0 +1,57 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class UnmuteCommand extends BaseCommand {
private final LandCore plugin;
public UnmuteCommand(LandCore plugin) {
super("unmute", Rank.MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = Bukkit.getPlayer(args[0]);
if (args.length < 2) {
sender.sendMessage(CC.RED + "Usage: /unmute <player> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
if ((profile != null ? profile.getActiveMute() : null) == null) {
sender.sendMessage(CC.RED + "That player is not muted.");
return;
}
boolean silent = args[args.length - 1].equalsIgnoreCase("-s");
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = profile.getActiveMute();
punishment.setPardonedAt(System.currentTimeMillis());
punishment.setPardonedReason(args[1]);
punishment.setPardoned(true);
if (sender instanceof Player) {
punishment.setPardonedBy(((Player) sender).getUniqueId());
}
profile.save(true);
punishment.broadcast(staffName, target, silent);
}
}

View File

@ -0,0 +1,67 @@
package me.devkevin.landcore.commands.impl.staff.punish;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.punishment.Punishment;
import me.devkevin.landcore.punishment.PunishmentType;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Objects;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 15:52
* WarnCommand / me.devkevin.landcore.commands.impl.staff.punish / LandCore
*/
public class WarnCommand extends BaseCommand {
private final LandCore plugin;
public WarnCommand(LandCore plugin) {
super("warn", Rank.TRIAL_MOD);
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player target = Bukkit.getPlayer(args[0]);
if (args.length < 2) {
sender.sendMessage(CC.RED + "Usage: /warn <player> <reason> " + CC.GRAY + "[-s]" + CC.RED + ".");
}
CoreProfile profile = plugin.getProfileManager().getProfile(target.getUniqueId());
if (profile == null) {
sender.sendMessage(CC.RED + "Could no load " + target.getName() + " database. Contact with the developer.");
}
boolean silent = args[args.length - 1].equalsIgnoreCase("-s");
String staffName = sender instanceof Player ? plugin.getProfileManager().getProfile(((Player) sender).getUniqueId()).getGrant().getRank().getColor() + sender.getName() : CC.D_RED + "Console";
Punishment punishment = new Punishment(target.getUniqueId(), PunishmentType.WARN, System.currentTimeMillis(),
args[1], -1);
if (sender instanceof Player) {
punishment.setAddedBy(((Player) sender).getUniqueId());
}
Objects.requireNonNull(profile).getPunishments().add(punishment);
profile.save(true);
Player player = profile.getPlayer();
if (player != null) {
String senderName = sender instanceof Player ? plugin.getProfileManager().getProfiles().get(((Player) sender).getUniqueId()).getGrant().getRank().getColor() : CC.D_RED + "Console";
player.sendMessage(CC.RED + "You have been warned by " + senderName + CC.RED + " for: " + CC.YELLOW + args[1]);
}
punishment.broadcast(staffName, target, silent);
}
}

View File

@ -0,0 +1,26 @@
package me.devkevin.landcore.commands.impl.toggle;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class ToggleGlobalChat extends PlayerCommand {
private final LandCore plugin;
public ToggleGlobalChat(LandCore plugin) {
super("toggleglobalchat");
this.plugin = plugin;
setAliases("togglechat", "tgc");
}
@Override
public void execute(Player player, String[] args) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
boolean enabled = !profile.isGlobalChatEnabled();
profile.setGlobalChatEnabled(enabled);
player.sendMessage(enabled ? CC.GREEN + "Global chat enabled." : CC.RED + "Global chat disabled.");
}
}

View File

@ -0,0 +1,26 @@
package me.devkevin.landcore.commands.impl.toggle;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class ToggleMessagesCommand extends PlayerCommand {
private final LandCore plugin;
public ToggleMessagesCommand(LandCore plugin) {
super("togglemessages");
this.plugin = plugin;
setAliases("tpm");
}
@Override
public void execute(Player player, String[] args) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
boolean messaging = !profile.isMessaging();
profile.setMessaging(messaging);
player.sendMessage(messaging ? CC.GREEN + "Messages enabled." : CC.RED + "Messages disabled.");
}
}

View File

@ -0,0 +1,26 @@
package me.devkevin.landcore.commands.impl.toggle;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
public class ToggleSoundsCommand extends PlayerCommand {
private final LandCore plugin;
public ToggleSoundsCommand(LandCore plugin) {
super("togglesounds");
this.plugin = plugin;
setAliases("sounds", "ts");
}
@Override
public void execute(Player player, String[] args) {
CoreProfile profile = plugin.getProfileManager().getProfile(player.getUniqueId());
boolean playingSounds = !profile.isPlayingSounds();
profile.setPlayingSounds(playingSounds);
player.sendMessage(playingSounds ? CC.GREEN + "Sounds enabled." : CC.RED + "Sounds disabled.");
}
}

View File

@ -0,0 +1,67 @@
package me.devkevin.landcore.disguise.commands;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.disguise.manager.DisguiseManager;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.haoshoku.nick.api.NickAPI;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 18:58
* DisguiseCommand / me.devkevin.landcore.disguise / LandCore
*/
public class DisguiseCommand extends BaseCommand {
private final LandCore plugin;
public DisguiseCommand(LandCore plugin) {
super("disguise", Rank.TRIAL_MOD); // temp rank for test
this.plugin = plugin;
}
@Override
protected void execute(CommandSender sender, String[] args) {
Player player = (Player) sender;
if ("random".equals(args[0])) {
String disguiseName;
String disguiseSkin = DisguiseManager.generateSkin().split(":")[0];
if (DisguiseManager.nickData.get(player) != null) {
disguiseName = DisguiseManager.nickData.get(player);
} else {
disguiseName = DisguiseManager.generate();
}
plugin.getDisguiseManager().setPlayerDisguise(player, disguiseName, disguiseSkin);
// first disguise a player and then after 2 sec open the rank menu
plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
// check is player in nicked yet so we won't get errors
if (NickAPI.isNicked(player)) {
player.openInventory(this.plugin.getDisguiseMenu().getRankMenu().getCurrentPage());
}
}, 20L);
} else {
if (NickAPI.nickExists(args[0])) {
player.sendMessage(CC.RED + "That name is already used.");
return;
}
plugin.getDisguiseManager().setPlayerDisguise(player, args[0], args[1]);
// first disguise a player and then after 2 sec open the rank menu
plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
// check is player in nicked yet so we won't get errors
if (NickAPI.isNicked(player)) {
player.openInventory(this.plugin.getDisguiseMenu().getRankMenu().getCurrentPage());
}
}, 20L);
}
}
}

View File

@ -0,0 +1,52 @@
package me.devkevin.landcore.disguise.commands;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.BaseCommand;
import me.devkevin.landcore.managers.PlayerManager;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.haoshoku.nick.NickPlugin;
import xyz.haoshoku.nick.api.NickAPI;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 10/02/2023 @ 0:23
* UndisguiseCommand / me.devkevin.landcore.disguise / LandCore
*/
public class UndisguiseCommand extends BaseCommand {
private final LandCore plugin;
public UndisguiseCommand(LandCore plugin) {
super("undisguise", Rank.TRIAL_MOD); // temp rank for test
this.plugin = plugin;
}
@Override
public void execute(CommandSender sender, String[] args) {
Player player = (Player) sender;
CoreProfile coreProfile = plugin.getProfileManager().getProfile(player.getUniqueId());
if (NickAPI.isNicked(player)) {
NickAPI.resetNick(player);
NickAPI.resetSkin(player);
NickAPI.resetGameProfileName(player);
NickAPI.resetUniqueId(player);
NickAPI.refreshPlayer(player);
NickAPI.refreshPlayerSync(player);
coreProfile.setDisguiseRank(null); // when player un disguise we reset the rank
player.setDisplayName(player.getName());
player.setPlayerListName(player.getName());
player.sendMessage(CC.SECONDARY + "You've been " + CC.RED + "undisguised" + CC.SECONDARY + " and reset to your default skin.");
} else {
player.sendMessage(CC.RED + "You aren't currently disguised!");
}
}
}

View File

@ -0,0 +1,265 @@
package me.devkevin.landcore.disguise.manager;
import lombok.Getter;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.nametag.impl.InternalNametag;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.message.CC;
import net.minecraft.server.v1_8_R3.EntityPlayer;
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo;
import net.minecraft.server.v1_8_R3.PacketPlayOutRespawn;
import net.minecraft.server.v1_8_R3.WorldSettings;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import xyz.haoshoku.nick.NickPlugin;
import xyz.haoshoku.nick.api.NickAPI;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 18:53
* DisguiseManager / me.devkevin.landcore.disguise / LandCore
*/
@Getter
public class DisguiseManager {
public static HashMap<Player, String> nickData = new HashMap<>();
private static final List<String> skinNames = Arrays.asList("_rsu:Killer", "E_Girl:E-girl", "MHF_Sheep:Sheep Man", "BackupDancer:L", "Arro:Arabian", "bennyknight:Badman", "MHF_Herobrine:Herobrine",
"MHF_Villager:Villager", "CocoDeMedellin:Black Goku", "SheAGoldDigger:Blue Goku", "MHF_Enderman:Enderman", "Marcel:Marcel", "Zwergoor:Emoji",
"HikakinGames:Youtuber", "loudoggydog3010:Juice Wrld", "Reinstallation:Rambo Chicken", "SolluxCaptor:Nezuko", "DevKevin:DevKevin", "Brandy:Brandy",
"Grief:Grief", "Nimble:Nimble", "fangirl:fangirl", "Pokemon:Pokemon", "icy:icy", "Magista80:Magista80");
private static final List<String> shortWords = Arrays.asList("About", "Active", "Admit", "Advise", "Again", "After", "Agent", "Alive", "Alone", "Beach", "Basket", "Basic", "Bath", "Battle",
"Bean", "Beat", "Bed", "Become", "Begin", "Before", "Beer", "Behind", "Blade", "Black", "Blue", "Bomb", "Brush", "Build", "Bunch", "Button", "Biz", "Busy",
"Box", "Boy", "Break", "Best", "Better", "Cake", "Camera", "Campus", "Cap", "Card", "Care", "Case", "Catch", "Center", "Chain", "Chair", "Chara", "Charge",
"Chase", "Cheap", "Cheese", "Check", "Close", "Choose", "Christ", "Circle", "Dad", "Dance", "Dark", "Data", "Dead", "Defend", "Desert", "Desk", "Device",
"Detect", "Dinner", "Direct", "Dirt", "Dirty", "Doctor", "Down", "Drama", "Draw", "Dream", "Drop", "Earth", "Eat", "Easy", "Editor", "Effect", "Eight",
"Elect", "Effort", "Emote", "Enter", "Engine", "Enemy", "Empty", "Entry", "Error", "Enough", "Every", "Exact", "Eye", "Expert", "Face", "Fact", "Fade",
"Fail", "Family", "Famous", "Farmer", "Father", "Fight", "Find", "Finger", "Fire", "First", "Fit", "Fix", "Fish", "Field", "Floor", "Focus", "Fly",
"Forest", "Force", "Frame", "Uber");
private static final List<String> longWords = Arrays.asList("Actually", "Aircraft", "Backbone", "Blooming", "Brightly", "Building", "Camellia", "Cardinal", "Careless", "Chemical", "Cheerful",
"Civilian", "Daughter", "Demolish", "Detector", "Disaster", "Disposal", "Electron", "Elective", "Engaging", "Enormous", "Erection", "Evidence", "Exertion",
"External", "Faithful", "Familiar", "Favorite", "Fearless", "Fixation", "Fragment", "Generous", "Grateful", "Grievous", "Hydrogen", "Horrible", "Ignorant",
"Industry", "Majority", "Military", "Mountain", "Mythical", "Normally", "Numerous", "Organism", "Overview", "Pacifist", "Pentagon", "Perilous", "Physical",
"Precious", "Prestige", "Puzzling", "Railroad", "Reckless");
private static final List<String> conjuctions = Arrays.asList("The", "Da", "And", "Of", "By", "Is", "El", "Its", "MC", "GANGMEMBER", "xXx", "_", "__");
private static final List<String> onlyNames = Arrays.asList("Ibirawyr", "Niniel", "Celahan", "Gwysien", "Figovudd", "Zathiel", "Adwiawyth", "Nydinia", "Laraeb", "Eowendasa", "Grendakin",
"Werradia", "Cauth", "Umigolian", "Tardond", "Dwearia", "Yeiwyn", "Adraclya", "Zaev", "Thabeth", "Chuven", "Zaredon", "Bob", "Robert", "Johnny", "Joy",
"Matthew", "Michael", "Jacob", "Joshua", "Daniel", "Christopher", "Andrew", "Ethan", "Joseph", "William", "Anthony", "David", "Alexander", "Nicholas",
"Ryan", "Tyler", "James", "John", "Jonathan", "Noah", "Brandon", "Christian", "Dylan", "Samuel", "Benjamin", "Nathan", "Zachary", "Logan", "Justin",
"Gabriel", "Emily", "Madison", "Emma", "Olivia", "Hannah", "Abigail", "Isabella", "Samantha", "Elizabeth", "Ashley", "Alexis", "Sarah", "Sophia",
"Alyssa", "Grace", "Ava", "Taylor", "Brianna", "Lauren", "Chloe", "Natalie", "Kayla", "Jessica", "Anna", "Victoria", "Mia", "Hailey", "Sydney", "Jasmine");
private static final List<String> japaneseNames = Arrays.asList("Ai", "Aya", "Ayako", "Itsuki", "Eita", "Eiko", "Kanta", "Kaito", "Kenta", "Kento", "Kouki", "Kouta", "Kouya", "Kou",
"Keito", "Keita", "Saya", "Sayako", "Sara", "Sizuki", "Sizuko", "Sizuno", "Sizuya", "Suzuka", "Suzuki", "Suzuko", "Sumi", "Seiya", "Souta", "Souya",
"Sou", "Taichi", "Takuya", "Tatsuki", "Chitose", "Tutomu", "Tumuya", "Tetsuya", "Tetsuto", "Tekuto", "Touya", "Tomi", "Nami", "Nao", "Neo", "Notomi",
"Haruya", "Harumi", "Haruto", "Hitomi", "Hitoshi", "Fuuta", "Fuyuki", "Fuuto", "Mami", "Maya", "Mai", "Masaya", "Masahiro", "Masato", "Misaki", "Mitsuki",
"Mutsuki", "Mei", "Yae", "Yuuto", "Yuuta", "Yuuya", "Youta", "Youki");
public static String generate() {
Random random = new Random();
return generate(NicknamePattern.values()[random.nextInt(NicknamePattern.values().length)]);
}
public static String generateSkin() {
Random random = new Random();
return skinNames.get(random.nextInt(skinNames.size()));
}
public static String generate(NicknamePattern pattern) {
String disguiseNickname = null;
if (pattern.equals(NicknamePattern.NameWithNumbers)) {
Random random = new Random();
String name = onlyNames.get(random.nextInt(onlyNames.size()));
if (name.length() <= 10 && chance(50.0)) {
disguiseNickname = name + "_" + random.nextInt(9999);
} else {
disguiseNickname = name + random.nextInt(9999);
}
}
if (pattern.equals(NicknamePattern.TwoShortsWithConjunction)) {
pattern = NicknamePattern.JapaneseNameWithBirth;
}
if (pattern.equals(NicknamePattern.JapaneseNameWithBirth)) {
Random random = new Random();
String name = japaneseNames.get(random.nextInt(japaneseNames.size()));
String birth = random.nextInt(12) + 1 + String.valueOf(random.nextInt(30) + 1);
if (chance(50.0)) {
disguiseNickname = name + "_" + birth;
} else {
disguiseNickname = name + birth;
}
}
if (pattern.equals(NicknamePattern.LongWithNumbers)) {
Random random = new Random();
String name = longWords.get(random.nextInt(longWords.size()));
if (chance(50.0)) {
disguiseNickname = name + "_" + random.nextInt(9999);
} else {
disguiseNickname = name + random.nextInt(9999);
}
}
if (pattern.equals(NicknamePattern.ShortWithConjunction)) {
Random random = new Random();
String name = conjuctions.get(random.nextInt(conjuctions.size()));
String secondName = shortWords.get(random.nextInt(shortWords.size()));
if (chance(50.0)) {
disguiseNickname = name + "_" + secondName;
} else {
disguiseNickname = name + secondName;
}
}
if (pattern.equals(NicknamePattern.ShortAndLong)) {
Random random = new Random();
String name = shortWords.get(random.nextInt(shortWords.size()));
String secondName = longWords.get(random.nextInt(longWords.size()));
disguiseNickname = name + secondName;
}
if (chance(50.0)) {
assert disguiseNickname != null;
disguiseNickname = disguiseNickname.toLowerCase();
}
return disguiseNickname;
}
private static boolean chance(double percent) {
return Math.random() < percent / 100.0;
}
public void setPlayerDisguise(Player player, String disguiseName, String disguiseSkin) {
LandCore.getInstance().getStaffManager().messageStaff(Rank.TRIAL_MOD, CC.GRAY + "[Staff] " +
LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId()).getGrant().getRank().getColor() +
player.getName() + CC.GRAY + " has disguise as " + CC.PRIMARY + disguiseName
);
NickAPI.nick(player, disguiseName);
NickAPI.setGameProfileName(player, disguiseName);
NickAPI.setUniqueId(player, disguiseName);
NickAPI.setSkin(player, disguiseSkin);
NickAPI.refreshPlayer(player);
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
entityPlayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityPlayer));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutRespawn(
entityPlayer.getWorld().worldProvider.getDimension(),
entityPlayer.getWorld().worldData.getDifficulty(),
entityPlayer.getWorld().worldData.getType(),
WorldSettings.EnumGamemode.valueOf(entityPlayer.getBukkitEntity().getGameMode().name())
));
updateTablist();
updateCache(player);
player.setDisplayName(player.getName());
player.setPlayerListName(player.getName());
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
NickAPI.refreshPlayer(player);
NickAPI.refreshPlayerSync(player);
}
});
player.sendMessage(CC.SECONDARY + "You've disguised as " + CC.PRIMARY + disguiseName + CC.GRAY + " (with a random skin)" + CC.SECONDARY + ".");
}
public boolean isNameUsed(String[] args, Player player) {
for (Player p : LandCore.getInstance().getServer().getOnlinePlayers()) {
if (p.getName().equalsIgnoreCase(args[0])) {
player.sendMessage(CC.RED + "That name is already used.");
return true;
}
}
return false;
}
// Make it check if the name contains a filtered word in between, before or after the text
boolean isFiltered(String[] args, Player player) {
List<String> filteredWord = LandCore.getInstance().getConfig().getStringList("FILTERED-WORDS");
if (filteredWord.contains(args[0].toLowerCase())) {
player.sendMessage(CC.RED + "You can't use that name because it contains a filtered word in it!");
return true;
}
return false;
}
public void updateTablist() {
final List<EntityPlayer> playerList = new ArrayList<>(net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList().players);
final List<EntityPlayer> finalList = playerList.stream()
.sorted(Comparator.comparingInt(potPlayer -> -(LandCore.getInstance().getProfileManager().getProfile(potPlayer.getUniqueID()).getDisguiseRank() != null ? LandCore.getInstance().getProfileManager().getProfile(potPlayer.getUniqueID()).getDisguiseRank().getWeight() : LandCore.getInstance().getProfileManager().getProfile(potPlayer.getUniqueID()).getGrant().getRank().getWeight())))
.collect(Collectors.toList());
try {
final Object list = net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList().getClass()
.getMethod("playerList", ((Class<?>[]) null))
.invoke(net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList());
final Class<?> playerListClass = list.getClass().getSuperclass();
final Field declaredField = playerListClass.getDeclaredField("players");
declaredField.set(list, finalList);
} catch (Exception ignored) {
}
}
public void updateCache(Player player) {
final List<EntityPlayer> playerList = new ArrayList<>(net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList().players);
final EntityPlayer entityPlayer = playerList.stream()
.filter(entityPlayer1 -> entityPlayer1.getUniqueID().equals(player.getUniqueId()))
.findFirst().orElse(null);
playerList.remove(entityPlayer);
playerList.add(((CraftPlayer) player).getHandle());
try {
final Object list = net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList().getClass()
.getMethod("playerList", ((Class<?>[]) null))
.invoke(net.minecraft.server.v1_8_R3.MinecraftServer.getServer().getPlayerList());
final Class<?> playerListClass = list.getClass().getSuperclass();
final Field declaredField = playerListClass.getDeclaredField("players");
declaredField.set(list, playerList);
} catch (Exception ignored) {
}
}
public enum NicknamePattern {
ShortAndLong,
NameWithNumbers,
LongWithNumbers,
ShortWithConjunction,
JapaneseNameWithBirth,
TwoShortsWithConjunction
}
}

View File

@ -0,0 +1,252 @@
package me.devkevin.landcore.disguise.menu;
import lombok.Getter;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.nametag.impl.InternalNametag;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.rank.Rank;
import me.devkevin.landcore.utils.inventory.InventoryUI;
import me.devkevin.landcore.utils.item.ItemBuilder;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import xyz.haoshoku.nick.api.NickAPI;
import java.util.Arrays;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 09/02/2023 @ 19:00
* DisguiseMenu / me.devkevin.landcore.disguise / LandCore
*/
@Getter
public class DisguiseMenu {
private final InventoryUI rankMenu = new InventoryUI(CC.GRAY + "Pick a Rank -> (Disguise)", 1);
public DisguiseMenu() {
setup();
}
private void setup() {
this.rankMenu.setItem(0, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.BLUE)
.name(CC.BLUE + "" + CC.GREEN + "Basic")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.BASIC);
player.sendMessage(CC.GREEN + "You has choose " + CC.BLUE + "" + CC.GREEN + "Basic" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
}
});
}
});
this.rankMenu.setItem(1, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.YELLOW)
.name(CC.YELLOW + "" + CC.GOLD + "Gold")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.GOLD);
player.sendMessage(CC.GREEN + "You has choose " + CC.YELLOW + "" + CC.GOLD + "Gold" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
}
});
}
});
this.rankMenu.setItem(2, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.LIME)
.name(CC.GREEN + "" + CC.DARK_GREEN + "Emerald")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.EMERALD);
player.sendMessage(CC.GREEN + "You has choose " + CC.GREEN + "" + CC.DARK_GREEN + "Emerald" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
}
});
}
});
this.rankMenu.setItem(3, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.AQUA)
.name(CC.AQUA + "" + CC.D_AQUA + "Diamond")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.DIAMOND);
player.sendMessage(CC.GREEN + "You has choose " + CC.AQUA + "" + CC.D_AQUA + "Diamond" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
}
});
}
});
this.rankMenu.setItem(4, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.ORANGE)
.name(CC.GOLD + "" + CC.YELLOW + "LOL")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.LOL);
player.sendMessage(CC.GREEN + "You has choose " + CC.GOLD + "" + CC.YELLOW + "LOL" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
}
});
}
});
this.rankMenu.setItem(8, new InventoryUI.AbstractClickableItem(
new ItemBuilder(Material.LEATHER_CHESTPLATE).color(Color.GREEN)
.name(CC.GREEN + "Member")
.lore(Arrays.asList(
"",
CC.GRAY + CC.B + "In disguise mode",
CC.GRAY + CC.B + "you can only choose",
CC.GRAY + CC.B + "donor ranks or member.",
""
))
.build()) {
@Override
public void onClick(InventoryClickEvent event) {
Player player = (Player)event.getWhoClicked();
CoreProfile coreProfile = LandCore.getInstance().getProfileManager().getProfile(player.getUniqueId());
coreProfile.setDisguiseRank(Rank.MEMBER);
player.sendMessage(CC.GREEN + "You has choose " + CC.GREEN + "Member" + CC.GREEN + " rank.");
player.closeInventory();
Bukkit.getScheduler().runTask(LandCore.getInstance(), () -> {
for (Player player1 : Bukkit.getOnlinePlayers()) {
player1.hidePlayer(player);
player1.showPlayer(player);
LandCore.getInstance().getDisguiseManager().updateTablist();
InternalNametag.reloadPlayer(player);
InternalNametag.reloadOthersFor(player);
NickAPI.refreshPlayerSync(player);
}
});
}
});
}
}

View File

@ -0,0 +1,39 @@
package me.devkevin.landcore.event;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import java.util.UUID;
@RequiredArgsConstructor
@Getter
public class BanEvent extends Event implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final CommandSender punisher;
private final UUID punishedId;
private boolean cancelled;
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}

View File

@ -0,0 +1,31 @@
package me.devkevin.landcore.event;
import me.devkevin.landcore.LandCore;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 16/01/2023 @ 12:36
* BaseEvent / land.pvp.core.event / LandCore
*/
public class BaseEvent extends Event {
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public boolean call() {
LandCore.getInstance().getServer().getPluginManager().callEvent(this);
return this instanceof Cancellable && ((Cancellable) this).isCancelled();
}
}

View File

@ -0,0 +1,24 @@
package me.devkevin.landcore.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/01/2023 @ 18:31
* CoreEvent / me.devkevin.landcore.event / LandCore
*/
public class CoreEvent extends Event {
private static HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
}

View File

@ -0,0 +1,22 @@
package me.devkevin.landcore.event;
import me.devkevin.landcore.player.CoreProfile;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 16/01/2023 @ 12:34
* CoreProfileEvent / land.pvp.core.event / LandCore
*/
@Getter
@RequiredArgsConstructor
public class CoreProfileEvent extends BaseEvent {
private final CoreProfile profile;
public UUID getUniqueId() {
return this.profile.getId();
}
}

View File

@ -0,0 +1,28 @@
package me.devkevin.landcore.event;
import lombok.Getter;
import org.bukkit.entity.Player;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 15:14
* PlayerFakeEvent / land.pvp.core.event / LandCore
*/
@Getter
public class PlayerFakeEvent extends BaseEvent {
private Player player;
public PlayerFakeEvent(Player player) {
this.player = player;
}
public Player getPlayer() {
return player;
}
public UUID getUniqueId() {
return player.getUniqueId();
}
}

View File

@ -0,0 +1,44 @@
package me.devkevin.landcore.event.disguise;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 19/01/2023 @ 17:19
* PreDisguiseEvent / land.pvp.core.event.disguise / LandCore
*/
@Getter
@RequiredArgsConstructor
public class PreDisguiseEvent extends Event implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
private boolean cancelled;
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
@Override
public void setCancelled(boolean b) {
this.cancelled = b;
}
}

View File

@ -0,0 +1,30 @@
package me.devkevin.landcore.event.disguise;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 19/01/2023 @ 17:20
* UnDisguiseEvent / land.pvp.core.event.disguise / LandCore
*/
@Getter
@RequiredArgsConstructor
public class UnDisguiseEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
}

View File

@ -0,0 +1,28 @@
package me.devkevin.landcore.event.player;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import me.devkevin.landcore.event.CoreEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/01/2023 @ 18:27
* PlayerFreezeEvent / me.devkevin.landcore.event.player / LandCore
*/
@Getter
@Setter
public class PlayerFreezeEvent extends PlayerEvent {
public PlayerFreezeEvent(Player who) {
super(who);
}
@Override
public HandlerList getHandlers() {
return null;
}
}

View File

@ -0,0 +1,28 @@
package me.devkevin.landcore.event.player;
import lombok.Getter;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
@Getter
public class PlayerMessageEvent extends PlayerEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Player receiver;
private final String message;
public PlayerMessageEvent(Player sender, Player receiver, String message) {
super(sender);
this.receiver = receiver;
this.message = message;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
}

View File

@ -0,0 +1,32 @@
package me.devkevin.landcore.event.player;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.player.grant.Grant;
import lombok.Getter;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
@Getter
public class PlayerRankChangeEvent extends PlayerEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final CoreProfile profile;
private final Grant newRank;
private final long duration;
public PlayerRankChangeEvent(Player who, CoreProfile profile, Grant newRank, long duration) {
super(who);
this.profile = profile;
this.newRank = newRank;
this.duration = duration;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
}

View File

@ -0,0 +1,17 @@
package me.devkevin.landcore.event.server;
import org.bukkit.event.HandlerList;
import org.bukkit.event.server.ServerEvent;
public class ServerShutdownCancelEvent extends ServerEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
}

View File

@ -0,0 +1,17 @@
package me.devkevin.landcore.event.server;
import org.bukkit.event.HandlerList;
import org.bukkit.event.server.ServerEvent;
public class ServerShutdownScheduleEvent extends ServerEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
}

View File

@ -0,0 +1,49 @@
package me.devkevin.landcore.faction;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:38
* Faction / me.devkevin.landcore.faction / LandCore
*/
@Getter
@Setter
@RequiredArgsConstructor
public class Faction {
private final String name;
private final UUID leader;
private int limit = 12;
private List<UUID> members = new ArrayList<>();
private List<UUID> captains = new ArrayList<>();
private String description;
private String password;
private String dateCreated;
private int elo = 1000;
private int wins;
private int losses;
private int winStreak;
private boolean factionChat;
public void broadcast(String message) {
members.forEach(users -> {
Player player = (Player) Bukkit.getOfflinePlayer(users);
if (player != null) {
player.sendMessage(message);
}
});
}
}

View File

@ -0,0 +1,51 @@
package me.devkevin.landcore.faction.commands;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
import java.util.Arrays;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 2:11
* FactionHelpCommand / me.devkevin.landcore.faction.commands / LandCore
*/
public class FactionHelpCommand extends PlayerCommand {
public FactionHelpCommand(LandCore plugin) {
super("faction");
setAliases(Arrays.asList("f", "f help", "faction help"));
}
@Override
public void execute(Player player, String[] args) {
player.sendMessage(new String[] {
CC.GRAY + CC.BOARD_SEPARATOR,
CC.GOLD + CC.B + "Factions Help " + CC.GRAY + "-" + CC.GRAY + " Information on how to use faction commands",
CC.GRAY + CC.BOARD_SEPARATOR,
CC.GOLD + "General Commands:",
CC.YELLOW + "/faction create " + CC.GRAY + "- Create a new faction",
CC.YELLOW + "/faction leave " + CC.GRAY + "- Leave your current faction",
CC.YELLOW + "/faction accept [faction|player] " + CC.GRAY + "- Accept clan invitation",
CC.YELLOW + "/faction info [faction|player] " + CC.GRAY + "- View a clan's information",
"",
CC.GOLD + "Leader Commands:",
CC.YELLOW + "/faction disband " + CC.GRAY + "- Disband your faction",
CC.YELLOW + "/faction description <text> " + CC.GRAY + "- Set your faction's description",
CC.YELLOW + "/faction password <password> " + CC.GRAY + "- Sets faction password",
CC.YELLOW + "/faction promote <player> " + CC.GRAY + "- Promote a player",
CC.YELLOW + "/faction demote <player> " + CC.GRAY + "- Demote a player",
"",
CC.GOLD + "Captain Commands:",
CC.YELLOW + "/faction invite <player> " + CC.GRAY + "- Invite a player to join your faction",
CC.YELLOW + "/faction kick <player> " + CC.GRAY + "- Kick a player from your faction",
"",
CC.GOLD + "Other Help:",
CC.YELLOW + "To use " + CC.PINK + "faction chat" + CC.YELLOW + " /factionchat or /fc",
CC.YELLOW + "Factions are limited to " + CC.PINK + "12 members" + CC.YELLOW + ".",
CC.GRAY + CC.BOARD_SEPARATOR
});
}
}

View File

@ -0,0 +1,66 @@
package me.devkevin.landcore.faction.commands.captain;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:50
* FactionDemoteCommand / me.devkevin.landcore.faction.commands.captain / LandCore
*/
public class FactionDemoteCommand extends PlayerCommand {
private final LandCore plugin;
public FactionDemoteCommand(LandCore plugin) {
super("faction.demote");
this.plugin = plugin;
setAliases("f.demote");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction demote <player>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (!faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not the faction leader!");
return;
}
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(args[0]);
if (offlinePlayer.getPlayer() != null && offlinePlayer.getPlayer() == player) {
player.sendMessage(CC.RED + "You may not demote yourself!");
return;
}
if (!faction.getMembers().contains(offlinePlayer.getUniqueId())) {
player.sendMessage(player.getName() + CC.RED + " is not in your faction!");
return;
}
if (!faction.getCaptains().contains(offlinePlayer.getUniqueId())) {
player.sendMessage(player.getName() + CC.RED + " is not a faction captain!");
return;
}
faction.getCaptains().remove(offlinePlayer.getUniqueId());
faction.broadcast(player.getName() + CC.YELLOW + " has been demoted to faction member!");
}
}

View File

@ -0,0 +1,94 @@
package me.devkevin.landcore.faction.commands.captain;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.invite.FactionInvite;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:53
* FactionInviteCommand / me.devkevin.landcore.faction.commands.captain / LandCore
*/
public class FactionInviteCommand extends PlayerCommand {
private final LandCore plugin;
public FactionInviteCommand(LandCore plugin) {
super("faction.invite");
this.plugin = plugin;
setAliases("f.invite");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction invite <player>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (faction.getMembers().size() >= faction.getLimit()) {
player.sendMessage(CC.RED + "Your faction has exceeded the max member limit, you are unable to invite no one currently!");
return;
}
if (!faction.getCaptains().contains(player.getUniqueId()) && !faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not a faction captain!");
return;
}
Player target = this.plugin.getServer().getPlayer(args[0]);
if (target == null) {
player.sendMessage(CC.RED + "Could not find player.");
return;
}
if (target == player) {
player.sendMessage(CC.RED + "Yoy may not invite yourself to a faction!");
return;
}
if (faction.getMembers().contains(target.getUniqueId())) {
player.sendMessage(target.getDisplayName() + CC.RED + " is already in your faction!");
return;
}
FactionProfile targetProfile = this.plugin.getFactionManager().getProfile(target);
if (targetProfile.getFaction() != null) {
player.sendMessage(target.getDisplayName() + CC.RED + " already belongs to a faction. They must first leave their faction to be able to receive invites.");
return;
}
FactionInvite factionInvite = targetProfile.getInviteList().stream().filter(ci -> ci.getFaction() == faction && System.currentTimeMillis() - ci.getTimestamp() <= 60000).findFirst().orElse(null);
if (factionInvite != null) {
player.sendMessage(target.getDisplayName() + CC.RED + " has already been invited to the faction within the last 60 seconds.");
return;
}
targetProfile.getInviteList().add(new FactionInvite(faction));
faction.broadcast(target.getDisplayName() + CC.YELLOW + " has been invited to the faction.");
TextComponent textComponent = new TextComponent(CC.YELLOW + "Click ");
TextComponent clickable = new TextComponent(CC.GOLD + "here");
textComponent.addExtra(clickable);
textComponent.addExtra(CC.YELLOW + " to accept the invite");
clickable.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(CC.GREEN + "Click to join " + target.getDisplayName() + CC.GREEN + "'s faction").create()));
clickable.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/faction join " + player.getName()));
target.sendMessage(player.getDisplayName() + CC.YELLOW + " has invited you to join their faction " + CC.GRAY + "'" + CC.DARK_GREEN + faction.getName() + CC.GRAY + "'");
target.spigot().sendMessage(textComponent);
}
}

View File

@ -0,0 +1,74 @@
package me.devkevin.landcore.faction.commands.captain;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:59
* FactionKickCommand / me.devkevin.landcore.faction.commands.captain / LandCore
*/
public class FactionKickCommand extends PlayerCommand {
private final LandCore plugin;
public FactionKickCommand(LandCore plugin) {
super("faction.kick");
this.plugin = plugin;
setAliases("f.kick");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction kick <player>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (!faction.getCaptains().contains(player.getUniqueId()) && !faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not a faction captain!");
return;
}
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(args[0]);
if (offlinePlayer.getPlayer() != null && offlinePlayer.getPlayer() == player) {
player.sendMessage(CC.RED + "You may not kick yourself from the faction!");
return;
}
if (!faction.getMembers().contains(offlinePlayer.getUniqueId())) {
player.sendMessage(player.getName() + CC.RED + " is not in your faction!");
return;
}
if ((faction.getCaptains().contains(offlinePlayer.getUniqueId()) && !faction.getLeader().equals(player.getUniqueId())) || faction.getLeader() == offlinePlayer.getUniqueId()) {
player.sendMessage(CC.RED + "You may only kick faction members.");
return;
}
faction.getMembers().remove(offlinePlayer.getUniqueId());
faction.getCaptains().remove(offlinePlayer.getUniqueId());
if (offlinePlayer.getPlayer() != null && offlinePlayer.getPlayer().isOnline()) {
Player target = offlinePlayer.getPlayer();
FactionProfile targetProfile = this.plugin.getFactionManager().getProfile(target);
targetProfile.setFaction(null);
target.sendMessage(CC.RED + CC.B + "You have been kicked from the faction!");
}
faction.broadcast(player.getName() + CC.YELLOW + " has been kicked from the faction!");
}
}

View File

@ -0,0 +1,48 @@
package me.devkevin.landcore.faction.commands.captain;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 14:02
* FactionPasswordCommand / me.devkevin.landcore.faction.commands.captain / LandCore
*/
public class FactionPasswordCommand extends PlayerCommand {
private final LandCore plugin;
public FactionPasswordCommand(LandCore plugin) {
super("faction.password");
this.plugin = plugin;
setAliases("f.password");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction password <password>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (!faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not the faction leader!");
return;
}
String password = args[0];
faction.setPassword(password);
player.sendMessage(CC.YELLOW + "Your faction password is now " + CC.GRAY + "'" + CC.DARK_GREEN + password + CC.GRAY + "'" + CC.YELLOW + ".");
}
}

View File

@ -0,0 +1,65 @@
package me.devkevin.landcore.faction.commands.captain;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 14:04
* FactionPromoteCommand / me.devkevin.landcore.faction.commands.captain / LandCore
*/
public class FactionPromoteCommand extends PlayerCommand {
private final LandCore plugin;
public FactionPromoteCommand(LandCore plugin) {
super("faction.promote");
this.plugin = plugin;
setAliases("f.promote");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction promote <player>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (!faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not the faction leader!");
return;
}
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(args[0]);
if (offlinePlayer.getPlayer() != null && offlinePlayer.getPlayer() == player) {
player.sendMessage(CC.RED + "You may not promote yourself!");
return;
}
if (!faction.getMembers().contains(offlinePlayer.getUniqueId())) {
player.sendMessage(player.getName() + CC.RED + " is not in your faction!");
return;
}
if (faction.getCaptains().contains(offlinePlayer.getUniqueId())) {
player.sendMessage(player.getName() + CC.RED + " is already a faction captain!");
return;
}
faction.getCaptains().add(offlinePlayer.getUniqueId());
faction.broadcast(player.getName() + CC.YELLOW + " has been promoted to faction captain!");
}
}

View File

@ -0,0 +1,50 @@
package me.devkevin.landcore.faction.commands.leader;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.StringUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:38
* FactionDescriptionCommand / me.devkevin.landcore.faction.commands.leader / LandCore
*/
public class FactionDescriptionCommand extends PlayerCommand {
private final LandCore plugin;
public FactionDescriptionCommand(LandCore plugin) {
super("faction.description");
this.plugin = plugin;
setAliases("f.description");
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(CC.RED + "Usage: /faction description <text>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (faction.getLeader() != player.getUniqueId()) {
player.sendMessage(CC.RED + "You are not the faction leader!");
return;
}
String description = StringUtil.buildString(args, 0);
faction.setDescription(description);
faction.broadcast(player.getDisplayName() + CC.YELLOW + " has set the faction's description to " + CC.GRAY + "'" + CC.DARK_GREEN + description + CC.GRAY + "'" + CC.YELLOW + ".");
}
}

View File

@ -0,0 +1,57 @@
package me.devkevin.landcore.faction.commands.leader;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:46
* FactionDisbandCommand / me.devkevin.landcore.faction.commands.leader / LandCore
*/
public class FactionDisbandCommand extends PlayerCommand {
private final LandCore plugin;
public FactionDisbandCommand(LandCore plugin) {
super("faction.disband");
this.plugin = plugin;
setAliases("f.disband");
}
@Override
public void execute(Player player, String[] args) {
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
Faction faction = factionProfile.getFaction();
if (!faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are not the faction leader!");
return;
}
player.sendMessage(CC.RED + CC.B + "You have successfully disbanded your faction!");
faction.getMembers().remove(player.getUniqueId());
factionProfile.setFaction(null);
faction.broadcast(CC.RED + CC.B + "Your faction has been disbanded.");
faction.getMembers().forEach(u -> {
Player member = this.plugin.getServer().getPlayer(u);
if (member != null) {
FactionProfile memberProfile = this.plugin.getFactionManager().getProfile(member);
memberProfile.setFaction(null);
}
});
this.plugin.getFactionManager().getFactions().remove(faction);
}
}

View File

@ -0,0 +1,83 @@
package me.devkevin.landcore.faction.commands.player;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.invite.FactionInvite;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
import java.util.Arrays;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 2:17
* FactionAcceptCommand / me.devkevin.landcore.faction.commands.player / LandCore
*/
public class FactionAcceptCommand extends PlayerCommand {
private final LandCore plugin;
public FactionAcceptCommand(LandCore plugin) {
super("faction.accept");
this.plugin = plugin;
setAliases(Arrays.asList("f.accept", "faction.join", "f.join"));
}
@Override
public void execute(Player player, String[] args) {
if (args.length < 1) {
player.sendMessage(CC.RED + "Usage: /faction <player|faction>");
return;
}
String name = args[0];
FactionInvite factionInvite = getInvite(player, name);
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() != null) {
player.sendMessage(CC.RED + "You are already in a faction!");
return;
}
if (factionInvite == null && (getFaction(name) == null || getFaction(name).getPassword() == null)) {
player.sendMessage(CC.RED + "You weren't invited to a faction with this name or a faction with a member with this name.");
return;
}
if (factionInvite == null && getFaction(name).getPassword() != null && args.length < 2) {
player.sendMessage(CC.RED + "You need the password or an invitation to join this faction.");
player.sendMessage(CC.YELLOW + "To join with a password, use " + CC.PINK + "/faction join " + name + " <password>");
return;
}
Faction faction = getFaction(name);
if (faction.getPassword() != null && args.length >= 2 && factionInvite == null) {
String password = args[1];
if (!faction.getPassword().equalsIgnoreCase(password)) {
player.sendMessage(CC.RED + "The password you have entered is incorrect.");
return;
}
}
factionProfile.setFaction(faction);
faction.getMembers().add(player.getUniqueId());
if (factionInvite != null) factionProfile.getInviteList().remove(factionInvite);
faction.broadcast(player.getDisplayName() + CC.YELLOW + " has joined the faction!");
}
private FactionInvite getInvite(Player player, String name) {
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
return factionProfile.getInviteList().stream().filter(ci -> ci.getFaction() == getFaction(name) && System.currentTimeMillis() - ci.getTimestamp() <= 60000 && !ci.isCancelled()).findFirst().orElse(null);
}
private Faction getFaction(String name) {
return this.plugin.getFactionManager().getFactions().stream().filter(c -> c.getName().equalsIgnoreCase(name) || c.getMembers().contains(this.plugin.getServer().getOfflinePlayer(name).getUniqueId())).findFirst().orElse(null);
}
}

View File

@ -0,0 +1,33 @@
package me.devkevin.landcore.faction.commands.player;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 22/03/2023 @ 12:42
* FactionChatCommand / me.devkevin.landcore.faction.commands.player / LandCore
*/
public class FactionChatCommand extends PlayerCommand {
private final LandCore plugin;
public FactionChatCommand(LandCore plugin) {
super("factionchat");
this.plugin = plugin;
setAliases("fc");
}
@Override
public void execute(Player player, String[] args) {
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
boolean inFactionChat = !factionProfile.getFaction().isFactionChat();
factionProfile.getFaction().setFactionChat(inFactionChat);
player.sendMessage(inFactionChat ? CC.GREEN + "You are now in faction chat." : CC.RED + "You are no longer in faction chat.");
}
}

View File

@ -0,0 +1,77 @@
package me.devkevin.landcore.faction.commands.player;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.LandCoreAPI;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.TaskUtil;
import me.devkevin.landcore.utils.message.CC;
import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 2:28
* FactionCreateCommand / me.devkevin.landcore.faction.commands.player / LandCore
*/
public class FactionCreateCommand extends PlayerCommand {
private final LandCore plugin;
public FactionCreateCommand(LandCore plugin) {
super("faction.create");
this.plugin = plugin;
setAliases("f create");
}
@Override
public void execute(Player player, String[] args) {
if (args.length != 1) {
player.sendMessage(CC.RED + "Usage: /faction create <name>");
return;
}
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() != null) {
player.sendMessage(CC.RED + "You are already in a faction.");
return;
}
String name = args[0];
if (name.length() < 2) {
player.sendMessage(CC.RED + "Faction names must be greater than or equal to 2 characters long.");
return;
}
if (!StringUtils.isAlpha(name)) {
player.sendMessage(CC.RED + "Faction names must only contain alpha characters (letters only).");
return;
}
if (name.length() > 8) {
player.sendMessage(CC.RED + "Faction names must be less than or equal to 8 characters long.");
return;
}
Faction faction = this.plugin.getFactionManager().getFaction(name);
if (faction != null) {
player.sendMessage(CC.RED + "A faction with that name already exists!");
return;
}
Faction createdFaction = new Faction(name, player.getUniqueId());
createdFaction.getMembers().add(player.getUniqueId());
factionProfile.setFaction(createdFaction);
createdFaction.setDescription("This is the default description...");
createdFaction.setDateCreated(LandCoreAPI.getTodayDate() + " " + LandCoreAPI.getCurrentTime());
this.plugin.getFactionManager().getFactions().add(createdFaction);
player.sendMessage(CC.GREEN + "You have successfully created a new faction!");
TaskUtil.runAsync(plugin.getFactionManager()::save);
this.plugin.getFactionManager().savePlayerFaction(player);
}
}

View File

@ -0,0 +1,89 @@
package me.devkevin.landcore.faction.commands.player;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.member.FactionMember;
import me.devkevin.landcore.faction.member.FactionMemberType;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.OfflinePlayer;
import org.bukkit.craftbukkit.libs.joptsimple.internal.Strings;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 13:32
* FactionInfoCommand / me.devkevin.landcore.faction.commands.player / LandCore
*/
public class FactionInfoCommand extends PlayerCommand {
private final LandCore plugin;
public FactionInfoCommand(LandCore plugin) {
super("faction.info");
this.plugin = plugin;
setAliases("f info");
}
@Override
public void execute(Player player, String[] args) {
if (args.length == 0) {
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() == null) {
player.sendMessage(CC.RED + "You are not in a faction!");
return;
}
describeFaction(player, factionProfile.getFaction());
return;
}
String name = args[0];
Faction faction = this.plugin.getFactionManager().getFaction(name);
Faction playerFaction = playerFaction(name);
if (faction == null && playerFaction == null) {
player.sendMessage(CC.RED + "No faction found with the name or member with the name '" + name + "'");
return;
}
if (playerFaction != null && faction == playerFaction) {
describeFaction(player, faction);
return;
}
if (faction != null) describeFaction(player, faction);
if (playerFaction != null) describeFaction(player, playerFaction);
}
private void describeFaction(Player player, Faction faction) {
List<FactionMember> factionMembers = new ArrayList<>();
faction.getMembers().forEach(u -> factionMembers.add(new FactionMember(u, faction.getLeader().equals(u) ? FactionMemberType.LEADER : faction.getCaptains().contains(u) ? FactionMemberType.CAPTAIN : FactionMemberType.MEMBER)));
factionMembers.sort(Comparator.comparing(cm -> cm.getType().getWeight()));
List<String> playerNames = new ArrayList<>();
factionMembers.forEach(cm -> playerNames.add((faction.getLeader().equals(cm.getUuid()) ? CC.DARK_GREEN + "***" : faction.getCaptains().contains(cm.getUuid()) ? CC.DARK_GREEN + "*" : "") + colorName(cm.getUuid())));
player.sendMessage(CC.GRAY + CC.BOARD_SEPARATOR);
player.sendMessage(CC.DARK_GREEN + CC.B + faction.getName() + CC.GRAY + " [" + faction.getMembers().size() + "/12]");
player.sendMessage(CC.YELLOW + "Description: " + CC.GRAY + faction.getDescription());
player.sendMessage(CC.YELLOW + "Members: " + Strings.join(playerNames, CC.GRAY + ", "));
player.sendMessage(CC.YELLOW + "Elo: " + CC.DARK_GREEN + (faction.getElo() == 0 ? "[N/A]" : faction.getElo()));
player.sendMessage(CC.YELLOW + "Date Created: " + CC.GREEN + faction.getDateCreated());
player.sendMessage(CC.GOLD + "View this faction on our site: " + CC.GRAY + "www.prac.lol/faction/" + faction.getName());
player.sendMessage(CC.GRAY + CC.BOARD_SEPARATOR);
}
private Faction playerFaction(String name) {
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(name);
return this.plugin.getFactionManager().getFactions().stream().filter(faction -> faction.getMembers().contains(offlinePlayer.getUniqueId())).findFirst().orElse(null);
}
private String colorName(UUID uuid) {
OfflinePlayer offlinePlayer = this.plugin.getServer().getOfflinePlayer(uuid);
return offlinePlayer.isOnline() ? CC.GREEN + offlinePlayer.getName() : CC.RED + offlinePlayer.getName();
}
}

View File

@ -0,0 +1,51 @@
package me.devkevin.landcore.faction.commands.player;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.commands.PlayerCommand;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.TaskUtil;
import me.devkevin.landcore.utils.message.CC;
import org.bukkit.entity.Player;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 2:36
* FactionLeaveCommand / me.devkevin.landcore.faction.commands.player / LandCore
*/
public class FactionLeaveCommand extends PlayerCommand {
private final LandCore plugin;
public FactionLeaveCommand(LandCore plugin) {
super("faction.leave");
this.plugin = plugin;
setAliases("f.leave");
}
@Override
public void execute(Player player, String[] args) {
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile.getFaction() != null) {
player.sendMessage(CC.RED + "You are already in a faction.");
return;
}
Faction faction = factionProfile.getFaction();
if (faction.getLeader().equals(player.getUniqueId())) {
player.sendMessage(CC.RED + "You are the faction leader. You must disband the faction or promote someone else.");
return;
}
faction.getMembers().remove(player.getUniqueId());
faction.getCaptains().remove(player.getUniqueId());
factionProfile.setFaction(null);
faction.broadcast(player.getDisplayName() + CC.YELLOW + " has left the faction!");
player.sendMessage(CC.RED + CC.B + "You have left the faction!");
TaskUtil.runAsync(plugin.getFactionManager()::save);
this.plugin.getFactionManager().savePlayerFaction(player);
}
}

View File

@ -0,0 +1,20 @@
package me.devkevin.landcore.faction.invite;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import me.devkevin.landcore.faction.Faction;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:38
* FactionInvite / me.devkevin.landcore.faction.invite / LandCore
*/
@Getter
@Setter
@RequiredArgsConstructor
public class FactionInvite {
private final Faction faction;
private long timestamp = System.currentTimeMillis();
private boolean cancelled;
}

View File

@ -0,0 +1,84 @@
package me.devkevin.landcore.faction.listener;
import com.google.common.collect.Maps;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.player.CoreProfile;
import me.devkevin.landcore.utils.message.Messages;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.Map;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 1:29
* FactionListener / me.devkevin.landcore.faction.listener / LandCore
*/
public class FactionListener implements Listener {
private final LandCore plugin = LandCore.getInstance();
@EventHandler
public void onPlayerLoginEvent(PlayerLoginEvent event) {
Player player = event.getPlayer();
this.plugin.getFactionManager().addPlayer(player);
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile == null) {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, Messages.DATA_LOAD_FAIL);
return;
}
this.plugin.getFactionManager().loadPlayerFaction(player);
}
@EventHandler
public void onPlayerJoinEvent(PlayerJoinEvent event) {
Player player = event.getPlayer();
CoreProfile profile = this.plugin.getProfileManager().getProfile(player.getUniqueId());
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile != null) {
Map<String, Object> message = Maps.newHashMap();
message.put("server", this.plugin.getServerName());
message.put("sender", profile.getRank().getColor() + player.getName());
plugin.getRedisMessenger().send("faction-join", message);
}
}
@EventHandler
public void onPlayerQuitEvent(PlayerQuitEvent event) {
Player player = event.getPlayer();
this.plugin.getFactionManager().removePlayer(player);
this.plugin.getFactionManager().savePlayerFaction(player);
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String chatMessage = event.getMessage();
CoreProfile coreProfile = this.plugin.getProfileManager().getProfile(player.getUniqueId());
FactionProfile factionProfile = this.plugin.getFactionManager().getProfile(player);
if (factionProfile != null && factionProfile.getFaction() != null && factionProfile.getFaction().isFactionChat()) {
Map<String, Object> message = Maps.newHashMap();
message.put("server", plugin.getServerName());
message.put("format", coreProfile.getRank().getColor() + player.getName());
message.put("message", chatMessage);
message.put("sender", event.getPlayer().getName());
plugin.getRedisMessenger().send("faction-chat", message);
}
}
}

View File

@ -0,0 +1,145 @@
package me.devkevin.landcore.faction.manager;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.ReplaceOptions;
import lombok.Getter;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.profile.FactionProfile;
import me.devkevin.landcore.utils.message.CC;
import org.bson.Document;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.*;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:48
* FactionManager / me.devkevin.landcore.faction.manager / LandCore
*/
@Getter
public class FactionManager {
private final LandCore plugin = LandCore.getInstance();
private final List<Faction> factions = new ArrayList<>();
private final Map<UUID, FactionProfile> factionProfileMap = new HashMap<>();
public FactionManager() {
load();
}
private void load() {
MongoCollection<Document> collection = this.plugin.getMongoStorage().getFactionsCollection();
for (Document document : collection.find()) {
Faction faction = new Faction(document.getString("name"), (UUID) document.get("leader"));
faction.setMembers((List<UUID>) document.get("members"));
faction.getMembers().add((UUID) document.get("leader"));
faction.setCaptains((List<UUID>) document.get("captains"));
faction.setDescription(document.getString("description"));
faction.setDateCreated(document.getString("date-created"));
faction.setElo(document.getInteger("elo"));
faction.setWins(document.getInteger("wins"));
faction.setLosses(document.getInteger("losses"));
faction.setWinStreak(document.getInteger("winStreak"));
if (document.containsKey("description")) {
faction.setDescription(document.getString("description"));
}
if (document.containsKey("password")) {
faction.setPassword(document.getString("password"));
}
faction.setFactionChat(document.getBoolean("faction_chat_enabled"));
factions.add(faction);
}
}
public void save() {
MongoCollection<Document> collection = this.plugin.getMongoStorage().getFactionsCollection();
collection.deleteMany(new Document());
for (Faction faction : factions) {
Document document = new Document()
.append("name", faction.getName())
.append("leader", faction.getLeader())
.append("members", faction.getMembers())
.append("captains", faction.getCaptains())
.append("date-created", faction.getDateCreated())
.append("elo", faction.getElo())
.append("wins", faction.getWins())
.append("losses", faction.getLosses())
.append("winStreak", faction.getWinStreak())
.append("faction_chat_enabled", faction.isFactionChat());
if (faction.getDescription() != null) {
document.append("description", faction.getDescription());
}
if (faction.getPassword() != null) {
document.append("password", faction.getPassword());
}
collection.insertOne(document);
}
}
public void loadPlayerFaction(Player player) {
MongoCollection<Document> collection = this.plugin.getMongoStorage().getFactionsPlayersCollection();
Document document = collection.find(Filters.eq("uuid", player.getUniqueId().toString())).first();
if (document != null) {
FactionProfile factionProfile = this.getProfile(player);
Faction faction = this.getFaction(document.getString("faction"));
factionProfile.setFaction(faction);
}
}
public void savePlayerFaction(Player player) {
MongoCollection<Document> collection = this.plugin.getMongoStorage().getFactionsPlayersCollection();
String uuid = player.getUniqueId().toString();
FactionProfile factionProfile = this.getProfile(player);
if (factionProfile == null) {
collection.deleteOne(Filters.eq("uuid", uuid));
} else {
Document document = new Document("uuid", uuid)
.append("faction", factionProfile.getFaction().getName());
collection.replaceOne(Filters.eq("uuid", uuid), document, new ReplaceOptions().upsert(true));
}
}
public Faction getFaction(String name) {
return factions.stream().filter(faction -> faction.getName().equalsIgnoreCase(name)).findFirst().orElse(null);
}
public void addPlayer(Player player) {
factionProfileMap.put(player.getUniqueId(), new FactionProfile());
}
public void removePlayer(Player player) {
factionProfileMap.remove(player.getUniqueId());
}
public FactionProfile getProfile(Player player) {
return factionProfileMap.get(player.getUniqueId());
}
public boolean hasProfile(Player player) {
return factionProfileMap.containsKey(player.getUniqueId());
}
public void broadcastToFactions(String message, String server) {
for (Faction faction : factions) {
faction.broadcast(CC.DARK_GREEN + "(Faction) " + message + " " + server);
}
}
public void broadcastToFactionsChat(String displayName, String message, String server) {
for (Faction faction : factions) {
faction.broadcast(CC.DARK_GREEN + "(Faction) " + CC.GOLD + " [" + server + "] " + displayName + CC.GRAY + " : " + CC.R + message);
}
}
}

View File

@ -0,0 +1,20 @@
package me.devkevin.landcore.faction.member;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.util.UUID;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:39
* FactionMember / me.devkevin.landcore.faction.member / LandCore
*/
@Getter
@Setter
@AllArgsConstructor
public class FactionMember {
private final UUID uuid;
private final FactionMemberType type;
}

View File

@ -0,0 +1,20 @@
package me.devkevin.landcore.faction.member;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:40
* FactionMemberType / me.devkevin.landcore.faction.member / LandCore
*/
@Getter
@AllArgsConstructor
public enum FactionMemberType {
LEADER("Leader", 0),
CAPTAIN("Captain", 1),
MEMBER("Member", 2);
private final String name;
private final int weight;
}

View File

@ -0,0 +1,21 @@
package me.devkevin.landcore.faction.profile;
import lombok.Getter;
import lombok.Setter;
import me.devkevin.landcore.faction.Faction;
import me.devkevin.landcore.faction.invite.FactionInvite;
import java.util.ArrayList;
import java.util.List;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 21/03/2023 @ 0:43
* FactionProfile / me.devkevin.landcore.faction.profile / LandCore
*/
@Getter
@Setter
public class FactionProfile {
private Faction faction;
private List<FactionInvite> inviteList = new ArrayList<>();
}

View File

@ -0,0 +1,77 @@
package me.devkevin.landcore.gson;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.utils.location.CustomLocation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.io.IOException;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 15:15
* CustomLocationTypeAdapterFactory / land.pvp.core.gson / LandCore
*/
public class CustomLocationTypeAdapterFactory implements TypeAdapterFactory {
public static LocationData serialize(CustomLocation customLocation) {
Preconditions.checkNotNull(customLocation);
return new LocationData(customLocation.getWorld(), customLocation.getX(), customLocation.getY(),
customLocation.getZ(), customLocation.getYaw(), customLocation.getPitch());
}
public static CustomLocation deserialize(LocationData locationData) {
Preconditions.checkNotNull(locationData);
return new CustomLocation(locationData.getWorld(), locationData.getX(), locationData.getY(), locationData
.getZ(), locationData.getYaw(), locationData.getPitch());
}
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
if (!CustomLocation.class.isAssignableFrom(typeToken.getRawType())) {
return null;
}
return new TypeAdapter<T>() {
@Override
public void write(JsonWriter jsonWriter, T location) throws IOException {
if (location == null) {
jsonWriter.nullValue();
} else {
LandCore.GSON.toJson(serialize((CustomLocation) location), LocationData.class, jsonWriter);
}
}
@Override
public T read(JsonReader jsonReader) throws IOException {
if (jsonReader.peek() == null) {
jsonReader.nextNull();
return null;
} else {
return (T) deserialize(LandCore.GSON.fromJson(jsonReader, LocationData.class));
}
}
};
}
@Getter
@RequiredArgsConstructor
private static class LocationData {
private final String world;
private final double x;
private final double y;
private final double z;
private final float yaw;
private final float pitch;
}
}

View File

@ -0,0 +1,175 @@
package me.devkevin.landcore.gson;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import me.devkevin.landcore.LandCore;
import me.devkevin.landcore.gson.item.EnchantType;
import me.devkevin.landcore.gson.item.ItemMetaType;
import me.devkevin.landcore.gson.item.ItemType;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.*;
import org.bukkit.potion.PotionEffect;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 15:15
* ItemStackTypeAdapterFactory / land.pvp.core.gson / LandCore
*/
public class ItemStackTypeAdapterFactory implements TypeAdapterFactory {
public static ItemType serializeItem(ItemStack itemStack) {
Preconditions.checkNotNull(itemStack);
ItemType item;
ItemMeta itemStackMeta;
ItemMetaType itemMeta = null;
List<EnchantType> itemEnchants = null;
if (itemStack.hasItemMeta()) {
itemStackMeta = itemStack.getItemMeta();
itemMeta = new ItemMetaType();
if (itemStackMeta.hasDisplayName()) {
itemMeta.setDisplayName(itemStackMeta.getDisplayName());
}
if (itemStackMeta.hasLore()) {
itemMeta.setLore(itemStackMeta.getLore());
}
if (itemStackMeta instanceof EnchantmentStorageMeta) {
EnchantmentStorageMeta esm = (EnchantmentStorageMeta) itemStackMeta;
if (esm.hasStoredEnchants()) {
List<EnchantType> storedEnchants = new ArrayList<>();
for (Map.Entry<Enchantment, Integer> entry : esm.getStoredEnchants().entrySet()) {
storedEnchants.add(new EnchantType(entry.getKey().getName(), entry.getValue()));
}
itemMeta.setStoredEnchants(storedEnchants);
}
}
if (itemStackMeta instanceof Repairable) {
itemMeta.setRepairCost(((Repairable) itemStackMeta).getRepairCost());
}
if (itemStackMeta instanceof LeatherArmorMeta) {
itemMeta.setLeatherArmorColor(((LeatherArmorMeta) itemStackMeta).getColor().asRGB());
}
if (itemStackMeta instanceof PotionMeta) {
PotionMeta potionMeta = (PotionMeta) itemStackMeta;
if (potionMeta.hasCustomEffects()) {
List<PotionEffect> potionEffects = new ArrayList<>();
potionEffects.addAll(potionMeta.getCustomEffects());
itemMeta.setPotionEffects(potionEffects);
}
}
}
for (Map.Entry<Enchantment, Integer> e : itemStack.getEnchantments().entrySet()) {
if (itemEnchants == null) {
itemEnchants = new ArrayList<>();
}
itemEnchants.add(new EnchantType(e.getKey().getName(), e.getValue()));
}
item = new ItemType(itemStack.getType().toString(), itemStack.getDurability(), itemStack.getAmount(),
itemEnchants, itemMeta);
return item;
}
public static ItemStack deserializeItem(ItemType item) {
Preconditions.checkNotNull(item);
ItemStack itemStack = new ItemStack(Material.matchMaterial(item.getType()), item.getAmount());
ItemMeta itemMeta = itemStack.getItemMeta();
itemStack.setDurability(item.getDurability());
if (item.getEnchants() != null) {
for (EnchantType enchant : item.getEnchants()) {
itemMeta.addEnchant(Enchantment.getByName(enchant.getType()), enchant.getTier(), true);
}
}
if (item.getMeta() != null) {
if (item.getMeta().getDisplayName() != null) {
itemMeta.setDisplayName(item.getMeta().getDisplayName());
}
if (item.getMeta().getLore() != null) {
itemMeta.setLore(item.getMeta().getLore());
}
if (itemMeta instanceof EnchantmentStorageMeta && item.getMeta().getStoredEnchants() != null) {
EnchantmentStorageMeta esm = (EnchantmentStorageMeta) itemMeta;
for (EnchantType enchant : item.getMeta().getStoredEnchants()) {
esm.addStoredEnchant(Enchantment.getByName(enchant.getType()), enchant.getTier(), true);
}
}
if (itemMeta instanceof Repairable && item.getMeta().getRepairCost() != null) {
((Repairable) itemMeta).setRepairCost(item.getMeta().getRepairCost());
}
if (itemMeta instanceof LeatherArmorMeta && item.getMeta().getLeatherArmorColor() != null) {
((LeatherArmorMeta) itemMeta).setColor(Color.fromRGB(item.getMeta().getLeatherArmorColor()));
}
if (itemMeta instanceof PotionMeta && item.getMeta().getPotionEffects() != null) {
PotionMeta potionMeta = (PotionMeta) itemMeta;
for (PotionEffect effect : item.getMeta().getPotionEffects()) {
potionMeta.addCustomEffect(effect, true);
}
}
}
itemStack.setItemMeta(itemMeta);
return itemStack;
}
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
if (!ItemStack.class.isAssignableFrom(type.getRawType())) {
return null;
}
return new TypeAdapter<T>() {
@Override
public void write(JsonWriter writer, T item) throws IOException {
if (item == null) {
writer.nullValue();
} else {
LandCore.GSON.toJson(serializeItem((ItemStack) item), ItemType.class, writer);
}
}
@Override
public T read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return null;
} else {
return (T) deserializeItem(LandCore.GSON.fromJson(reader, ItemType.class));
}
}
};
}
}

View File

@ -0,0 +1,16 @@
package me.devkevin.landcore.gson.item;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 15:17
* EnchantType / land.pvp.core.gson.item / LandCore
*/
@Getter
@RequiredArgsConstructor
public class EnchantType {
private final String type;
private final int tier;
}

View File

@ -0,0 +1,23 @@
package me.devkevin.landcore.gson.item;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.potion.PotionEffect;
import java.util.List;
/**
* @author DevKevin (devkevinggg@gmail.com)
* 18/01/2023 @ 15:17
* ItemMetaType / land.pvp.core.gson.item / LandCore
*/
@Getter
@Setter
public class ItemMetaType {
private String displayName;
private List<String> lore;
private List<EnchantType> storedEnchants;
private Integer repairCost;
private Integer leatherArmorColor;
private List<PotionEffect> potionEffects;
}

Some files were not shown because too many files have changed in this diff Show More