jakub 2 years ago
commit d43e96b3e0
  1. 3
      .idea/.gitignore
  2. 24
      .idea/artifacts/DiscordAuthorizator_jar.xml
  3. 14
      .idea/compiler.xml
  4. 7
      .idea/discord.xml
  5. 7
      .idea/encodings.xml
  6. 7
      .idea/inspectionProfiles/Project_Default.xml
  7. 30
      .idea/jarRepositories.xml
  8. 14
      .idea/misc.xml
  9. 8
      .idea/modules.xml
  10. 124
      .idea/uiDesigner.xml
  11. 6
      .idea/vcs.xml
  12. 13
      DiscordAuthorizator.iml
  13. 83
      pom.xml
  14. 126
      src/main/java/xyz/soukup/discordauthorizator/DiscordAuthorizator.java
  15. 29
      src/main/java/xyz/soukup/discordauthorizator/commands/authorize.java
  16. 75
      src/main/java/xyz/soukup/discordauthorizator/commands/link.java
  17. 51
      src/main/java/xyz/soukup/discordauthorizator/commands/msg.java
  18. 44
      src/main/java/xyz/soukup/discordauthorizator/commands/r.java
  19. 140
      src/main/java/xyz/soukup/discordauthorizator/commands/voting.java
  20. 55
      src/main/java/xyz/soukup/discordauthorizator/events/ChatEvent.java
  21. 34
      src/main/java/xyz/soukup/discordauthorizator/events/DiscordSendMessage.java
  22. 25
      src/main/java/xyz/soukup/discordauthorizator/events/playerDie.java
  23. 19
      src/main/java/xyz/soukup/discordauthorizator/events/playerJoin.java
  24. 35
      src/main/java/xyz/soukup/discordauthorizator/events/playerLeave.java
  25. 102
      src/main/java/xyz/soukup/discordauthorizator/events/playerLogin.java
  26. 5
      src/main/resources/config.yml
  27. 9
      src/main/resources/plugin.yml
  28. 5
      target/classes/config.yml
  29. 9
      target/classes/plugin.yml
  30. BIN
      target/classes/xyz/soukup/discordauthorizator/DiscordAuthorizator.class
  31. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/authorize.class
  32. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/link.class
  33. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/msg.class
  34. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/r.class
  35. BIN
      target/classes/xyz/soukup/discordauthorizator/commands/voting.class
  36. BIN
      target/classes/xyz/soukup/discordauthorizator/events/ChatEvent.class
  37. BIN
      target/classes/xyz/soukup/discordauthorizator/events/DiscordSendMessage.class
  38. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerDie.class
  39. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerJoin$1.class
  40. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerJoin.class
  41. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLeave$1.class
  42. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLeave.class
  43. BIN
      target/classes/xyz/soukup/discordauthorizator/events/playerLogin.class

3
.idea/.gitignore vendored

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

@ -0,0 +1,24 @@
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="DiscordAuthorizator:jar">
<output-path>$USER_HOME$/mineconomia/dev-server/plugins</output-path>
<root id="archive" name="DiscordAuthorizator.jar">
<element id="module-output" name="DiscordAuthorizator" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/sf/trove4j/core/3.1.0/core-3.1.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/kotlin-stdlib-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA/5.0.0-beta.23/JDA-5.0.0-beta.23.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/neovisionaries/nv-websocket-client/2.14/nv-websocket-client-2.14.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.16.0/jackson-annotations-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.10/kotlin-stdlib-common-1.9.10.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" path-in-jar="/" />
</root>
</artifact>
</component>

@ -0,0 +1,14 @@
<?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="DiscordAuthorizator" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="17" />
</component>
</project>

@ -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>

@ -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>

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="StringTemplateMigration" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="UNCHECKED_WARNING" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

@ -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="sonatype" />
<option name="name" value="sonatype" />
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="spigotmc-repo" />
<option name="name" value="spigotmc-repo" />
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" />
</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>
</component>
</project>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<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_17" project-jdk-name="17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/DiscordAuthorizator.iml" filepath="$PROJECT_DIR$/DiscordAuthorizator.iml" />
</modules>
</component>
</project>

@ -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>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

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

@ -0,0 +1,83 @@
<?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>xyz.soukup</groupId>
<artifactId>DiscordAuthorizator</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>DiscordAuthorizator</name>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<compilerArgs>--enable-preview</compilerArgs>
</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>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.18.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>5.0.0-beta.23</version>
<exclusions>
<exclusion>
<groupId>club.minnced</groupId>
<artifactId>opus-java</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

@ -0,0 +1,126 @@
package xyz.soukup.discordauthorizator;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import xyz.soukup.discordauthorizator.commands.*;
import xyz.soukup.discordauthorizator.events.*;
import java.awt.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Logger;
public final class DiscordAuthorizator extends JavaPlugin {
public static HashMap<String, ChatColor> playerColor = new HashMap<>();
public static HashMap<String, Role> playerRole = new HashMap<>();
private static JDA jda;
@Override
public void onEnable() {
saveDefaultConfig();
DiscordAuthorizator plugin = this;
FileConfiguration config = plugin.getConfig();
Logger logger = Bukkit.getLogger();
logger.info("Plugin DiscordAuthorizator starting...");
jda = JDABuilder.createDefault(config.getString("token"))
.addEventListeners(new link())
.addEventListeners(new authorize())
.addEventListeners(new DiscordSendMessage())
.addEventListeners(new voting())
.enableIntents(GatewayIntent.GUILD_MEMBERS)
.enableIntents(GatewayIntent.GUILD_MESSAGES)
.enableIntents(GatewayIntent.MESSAGE_CONTENT)
.build();
jda.updateCommands().addCommands(
Commands.slash("authorize", "autorizuje novou ip"),
Commands.slash("link", "propojí discord s minecraftem"),
Commands.slash("add-votes", "prida hlas ")
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.ALL_PERMISSIONS))
.addOption(OptionType.USER, "hrac", "hrac", true)
.addOption(OptionType.INTEGER, "votes", "bb", true),
Commands.slash("hlasy", "zobrazí počet hlasy")
.addOption(OptionType.USER, "hrac", "hrac", false),
Commands.slash("hlasovat", "spustí hlasování")
.addOption(OptionType.STRING, "popis", "o čem se bude hlasovat", true)
).queue();
jda.getPresence().setActivity(Activity.customStatus("Nikdo na serveru"));
Bukkit.getPluginManager().registerEvents(new playerLogin(),this );
Bukkit.getPluginManager().registerEvents(new playerLeave(),this );
Bukkit.getPluginManager().registerEvents(new playerDie(),this );
Bukkit.getPluginManager().registerEvents(new ChatEvent(), this);
Objects.requireNonNull(this.getCommand("msg")).setExecutor(new msg());
Objects.requireNonNull(this.getCommand("msg")).setTabCompleter(new msg());
Objects.requireNonNull(this.getCommand("r")).setExecutor(new r());
Objects.requireNonNull(this.getCommand("r")).setTabCompleter(new r());
}
@Override
public void onDisable() {
saveConfig();
for(Map.Entry<Message, HashMap<String, Object>> entry : voting.activeVotings.entrySet()) {
HashMap<String, Object> voteData = entry.getValue();
Message message = entry.getKey();
User user = (User) voteData.get("author");
int yes = (int) voteData.get("yes");
int no = (int) voteData.get("no");
String description = (String) voteData.get("description");
EmbedBuilder eb = new EmbedBuilder();
eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl());
eb.setTitle("Hlasování předčasně skončilo kvůli restartu");
eb.setColor(Color.MAGENTA);
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```");
message.editMessageComponents().queue();
message.editMessageEmbeds(eb.build()).queue();
}
jda.shutdown();
}
public static JDA getJDA() {
return jda;
}
public static ChatColor convertToChatColor(Color color) {
// Extract RGB components
int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();
// Convert RGB to hexadecimal string
String hex = String.format("#%02x%02x%02x", red, green, blue);
// Return ChatColor from hex string
return ChatColor.of(hex);
}
public static void updateStatus(){
Collection<? extends Player> players =Bukkit.getOnlinePlayers();
String status = switch (players.size()) {
case 0 -> "nikdo na serveru";
case 1 -> "1 hráč na serveru";
case 2, 3, 4 -> players.size() + " hráči na serveru";
default -> players.size() + " hráčů na serveru";
};
jda.getPresence().setActivity(Activity.customStatus(status));
}
}

@ -0,0 +1,29 @@
package xyz.soukup.discordauthorizator.commands;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.bukkit.configuration.file.FileConfiguration;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import xyz.soukup.discordauthorizator.events.playerLogin;
import java.util.List;
public class authorize extends ListenerAdapter {
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
if (event.getName().equals("authorize")) {
if (playerLogin.ipToAdd.containsKey(event.getUser().getId())){
List<String> pp = playerLogin.ipToAdd.get(event.getUser().getId());
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
List<String> ipList = config.getStringList("players." + pp.get(0) + ".authorized-ips");
ipList.add(pp.get(1));
config.set("players." + pp.get(0) + ".authorized-ips", ipList);
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig();
event.reply("IP přidána").setEphemeral(true).queue();
}else{
event.reply("Nemáš žádné IP adresy k přidání").setEphemeral(true).queue();
}
}
}
}

@ -0,0 +1,75 @@
package xyz.soukup.discordauthorizator.commands;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
import net.dv8tion.jda.api.interactions.modals.Modal;
import net.dv8tion.jda.api.interactions.modals.ModalMapping;
import org.bukkit.configuration.file.FileConfiguration;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import xyz.soukup.discordauthorizator.events.playerLogin;
import java.awt.*;
import java.util.List;
import java.util.Objects;
public class link extends ListenerAdapter {
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
if (event.getName().equals("link")) {
TextInput subject = TextInput.create("username", "Tvůj minecraft nicK:", TextInputStyle.SHORT)
.setPlaceholder("PVPMaster666")
.setMaxLength(16) // or setRequiredRange(10, 100)
.build();
TextInput body = TextInput.create("code", "Verifikační kód", TextInputStyle.PARAGRAPH)
.setPlaceholder("1234")
.setMaxLength(4)
.setMinLength(4)
.build();
Modal modal = Modal.create("linkdialog", "Propojení minecraft účtu")
.addComponents(ActionRow.of(subject), ActionRow.of(body))
.build();
event.replyModal(modal).queue();
}
}
public void onModalInteraction(ModalInteractionEvent event) {
if (event.getModalId().equals("linkdialog")) {
List<ModalMapping> answers = event.getValues();
if (playerLogin.playersToVerify.containsKey(answers.get(0).getAsString())){
if (Objects.equals(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(1), answers.get(1).getAsString())){
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
config.set("players." + answers.get(0).getAsString() + ".authorized-ips", List.of(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(0)));
config.set("players." +answers.get(0).getAsString() + ".discord", event.getUser().getId());
Objects.requireNonNull(event.getGuild()).addRoleToMember(Objects.requireNonNull(event.getMember()), Objects.requireNonNull(event.getGuild().getRoleById("1236632859200983141"))).queue();
playerLogin.playersToVerify.remove(answers.get(0).getAsString());
MessageEmbed embed = new EmbedBuilder()
.setTitle("Propojeno.")
.setDescription("Přejeme příjemné hraní")
.setColor(Color.GREEN)
.build();
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig();
event.replyEmbeds(embed).setEphemeral(true).queue();
}else {
MessageEmbed embed = new EmbedBuilder()
.setTitle("Špatný kód.")
.setColor(Color.RED)
.build();
event.replyEmbeds(embed).setEphemeral(true).queue();
}
}else{
MessageEmbed embed = new EmbedBuilder()
.setTitle("Daný nick není ve verifikačním procesu.")
.setColor(Color.RED)
.build();
event.replyEmbeds(embed).setEphemeral(true).queue();
}
}
}
}

@ -0,0 +1,51 @@
package xyz.soukup.discordauthorizator.commands;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class msg implements TabExecutor {
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
if (strings.length < 1){
commandSender.sendMessage(ChatColor.RED + "nedostatek argumentů");
return false;
}
if (Bukkit.getPlayer(strings[0]) != null) {
StringBuilder message = new StringBuilder();
for(int i = 0; i < strings.length; i++) {
if (i !=0){
message.append(" ").append(strings[i]);
}
}
commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ strings[0] + "&4&l<<&f" + message));
Objects.requireNonNull(Bukkit.getPlayer(strings[0])).sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ ((Player) commandSender).getDisplayName() + "&2&l>>&f" + message));
r.lastMessaged.put((Player) commandSender, Objects.requireNonNull(Bukkit.getPlayer(strings[0])));
}else {
commandSender.sendMessage(ChatColor.RED + "Hráč není na serveru");
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
List<String> suggestions = new ArrayList<>();
if (strings.length == 0){
for (Player p: Bukkit.getOnlinePlayers()){
suggestions.add(p.getDisplayName());
}
}else{
suggestions.add("<zpráva>");
}
return null;
}
}

@ -0,0 +1,44 @@
package xyz.soukup.discordauthorizator.commands;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class r implements TabExecutor {
public static HashMap<Player, Player> lastMessaged = new HashMap<>();
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
Player player = (Player) commandSender;
if (!lastMessaged.containsKey(player)){
player.sendMessage(ChatColor.RED + "Nemáš komu rychle odpovědět");
return false;
}
if (!lastMessaged.get(player).isOnline()){
player.sendMessage(ChatColor.RED + "Hráč se kterým sis psal již není online");
return false;
}
StringBuilder message = new StringBuilder();
for (String string : strings) {
message.append(" ").append(string);
}
Player playerTo = lastMessaged.get(player);
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ playerTo.getDisplayName() + "&4&l<<&f" + message));
playerTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ player.getDisplayName() + "&2&l>>&f" + message));
return true;
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
List<String> l = new ArrayList<>();
l.add("<zpráva>");
return l;
}
}

@ -0,0 +1,140 @@
package xyz.soukup.discordauthorizator.commands;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
import net.dv8tion.jda.api.interactions.modals.Modal;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.scheduler.BukkitScheduler;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.awt.*;
import java.io.IOException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
public class voting extends ListenerAdapter {
public static HashMap<Message, HashMap<String, Object>> activeVotings = new HashMap<>();
DiscordAuthorizator plugin = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class);
FileConfiguration config = plugin.getConfig();
@Override
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
User user = event.getUser();
if (event.getOption("hrac") != null){
user = Objects.requireNonNull(event.getOption("hrac")).getAsUser();
}
String id = user.getId();
int currentVotes = config.getInt("votes." + id);
if (event.getName().equals("add-votes")) {
int votesToAdd = Objects.requireNonNull(event.getOption("votes")).getAsInt();
config.set("votes." + id, currentVotes + votesToAdd);
event.reply("připsáno. Hráč " + user.getName() + " má nyní " + config.getInt("votes." + id))
.setEphemeral(true)
.queue();
}
if (event.getName().equals("hlasy")){
event.reply("Uživatel " + user.getAsMention() + " má nyní váhu hlasu " + currentVotes).setEphemeral(true).queue();
}
if (event.getName().equals("hlasovat")){
HashMap<String, Object> votingParameters = new HashMap<>();
votingParameters.put("author", user);
String description = Objects.requireNonNull(event.getOption("popis")).getAsString();
votingParameters.put("description", description);
votingParameters.put("yes", 0);
votingParameters.put("no", 0);
List<User> voters = new ArrayList<>();
votingParameters.put("voters", voters);
EmbedBuilder eb = new EmbedBuilder();
eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl());
Instant now = Instant.now();
Instant oneDayLater = now.plus(5, ChronoUnit.HOURS);
long unixTimestamp = oneDayLater.getEpochSecond();
String formattedTimestamp = "<t:" + unixTimestamp + ":R>";
votingParameters.put("formattedTimestamp", formattedTimestamp);
eb.setDescription(description + "\n\n```Pro: 0\nProti: 0```\n\nHlasování končí " + formattedTimestamp);
eb.setColor(Color.ORANGE);
event.reply("Hlasování vytvořeno").setEphemeral(true).queue();
event.getChannel().sendMessageEmbeds(eb.build())
.addActionRow(
Button.success("yes", "Souhlasím"),
Button.danger("no", "Nesouhlasím")
).queue(msg -> {
activeVotings.put(msg, votingParameters);
BukkitScheduler scheduler = Bukkit.getScheduler();
msg.createThreadChannel("Diskuze k hlasování").queue();
scheduler.runTaskLater(plugin, () -> {
HashMap<String, Object> voteData = activeVotings.get(msg);
msg.editMessageComponents().queue();
int yes = (int) voteData.get("yes");
int no = (int) voteData.get("no");
eb.setColor(Color.RED);
if (yes > no){
eb.setColor(Color.GREEN);
}
eb.setTitle("Hlasování skončilo");
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```");
msg.editMessageEmbeds(eb.build()).queue();
activeVotings.remove(msg);
}, 20L * 3600L*5L /*<-- the delay */);
});
}
}
@Override
public void onButtonInteraction(ButtonInteractionEvent event) {
if (!(event.getComponentId().equals("yes") || event.getComponentId().equals("no"))){
return;
}
Message message = event.getMessage();
plugin.getLogger().info(message.getId());
HashMap<String, Object> voteData = activeVotings.get(message);
User user = event.getUser();
User author = (User) voteData.get("author");
String id = user.getId();
int currentVotes = config.getInt("votes." + id);
int yes = (int) voteData.get("yes");
int no = (int) voteData.get("no");
List<User> voters = (List<User>) voteData.get("voters");
if (voters.contains(user)){
event.reply("již jsi hlasoval.").setEphemeral(true).queue();
return;
}
voters.add(user);
voteData.put("voters", voters);
if (event.getComponentId().equals("yes")){
event.reply("Hlasoval jsi pro s váhou " + currentVotes).setEphemeral(true).queue();
voteData.put("yes", yes+currentVotes);
yes = yes+currentVotes;
}
if (event.getComponentId().equals("no")){
event.reply("Hlasoval jsi proti s váhou " + currentVotes).setEphemeral(true).queue();
voteData.put("no", no+currentVotes);
no = no+currentVotes;
}
activeVotings.put(message, voteData);
String formattedTimestamp = (String) voteData.get("formattedTimestamp");
String description = (String) voteData.get("description");
EmbedBuilder eb = new EmbedBuilder();
eb.setAuthor("Hlasování hráče " + author.getName() , null, author.getAvatarUrl());
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```\n\nHlasování končí " + formattedTimestamp);
eb.setColor(Color.ORANGE);
message.editMessageEmbeds(eb.build()).queue();
}
}

@ -0,0 +1,55 @@
package xyz.soukup.discordauthorizator.events;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Role;
import net.md_5.bungee.api.chat.*;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.awt.*;
import java.util.Objects;
public class ChatEvent implements Listener {
@EventHandler
public void playerChatEvent(AsyncPlayerChatEvent event){
String playerName = event.getPlayer().getDisplayName();
TextComponent messageComponent = new TextComponent();
TextComponent nameComponent = new TextComponent(playerName + ": ");
if (DiscordAuthorizator.playerColor.containsKey(playerName)){
nameComponent.setColor(DiscordAuthorizator.playerColor.get(playerName));
}
BaseComponent[] hoverText = new ComponentBuilder(ChatColor.GREEN + "[Klikni pro napsání zprávy hráči]").create();
if(DiscordAuthorizator.playerRole.containsKey(playerName)){
Role role = DiscordAuthorizator.playerRole.get(playerName);
net.md_5.bungee.api.ChatColor color = DiscordAuthorizator.playerColor.get(playerName);
hoverText = new ComponentBuilder(
ChatColor.YELLOW + "" + ChatColor.BOLD + playerName +
"\n" + color + role.getName() + "\n\n"
+ ChatColor.GREEN + "[Klikni pro napsání zprávy]"
).create();
}
nameComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText));
nameComponent.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + playerName + " "));
messageComponent.addExtra(nameComponent);
messageComponent.addExtra(ChatColor.WHITE + event.getMessage());
event.setCancelled(true);
JDA jda = DiscordAuthorizator.getJDA();
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessage("**" + playerName +"**: " + event.getMessage()).queue();
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info(event.getPlayer().getDisplayName() + ": " + event.getMessage());
for (Player p: Bukkit.getOnlinePlayers()){
p.spigot().sendMessage(messageComponent);
}
}
}

@ -0,0 +1,34 @@
package xyz.soukup.discordauthorizator.events;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.util.Objects;
public class DiscordSendMessage extends ListenerAdapter {
public void onMessageReceived(MessageReceivedEvent event){
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
if (event.getChannel().getId().equals(config.getString("chat-channel")) && !event.getAuthor().isBot()){
TextComponent content = new TextComponent(event.getMessage().getContentStripped());
TextComponent sentFromDiscord = new TextComponent(net.md_5.bungee.api.ChatColor.DARK_PURPLE + "[D] ");
sentFromDiscord.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.LIGHT_PURPLE + "Odesláno z discordu").create()));
TextComponent name = new TextComponent(event.getAuthor().getName() + ": ");
name.setColor(DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(Objects.requireNonNull(event.getMember()).getColor())));
TextComponent message = new TextComponent();
message.addExtra(sentFromDiscord);
message.addExtra(name);
message.addExtra(content);
for (Player p: Bukkit.getOnlinePlayers()){
p.spigot().sendMessage(message);
}
}
}
}

@ -0,0 +1,25 @@
package xyz.soukup.discordauthorizator.events;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.awt.*;
import java.util.Objects;
public class playerDie implements Listener {
@EventHandler
public void playerDied(PlayerDeathEvent event){
JDA jda = DiscordAuthorizator.getJDA();
EmbedBuilder eb = new EmbedBuilder();
eb.setColor(Color.DARK_GRAY);
eb.setAuthor(event.getDeathMessage(), null, "https://mc-heads.net/avatar/" + event.getEntity().getDisplayName());
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue();
}
}

@ -0,0 +1,19 @@
package xyz.soukup.discordauthorizator.events;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
public class playerJoin implements Listener {
@EventHandler
public void playerQuit(PlayerJoinEvent event){
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){
@Override
public void run(){
DiscordAuthorizator.updateStatus();
}
}, 30L);
}
}

@ -0,0 +1,35 @@
package xyz.soukup.discordauthorizator.events;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import javax.security.auth.kerberos.KerberosTicket;
import java.awt.*;
import java.util.Objects;
public class playerLeave implements Listener {
@EventHandler
public void playerQuit(PlayerQuitEvent event){
JDA jda = DiscordAuthorizator.getJDA();
EmbedBuilder eb = new EmbedBuilder();
eb.setColor(Color.RED);
eb.setAuthor("Hráč " + event.getPlayer().getDisplayName() + " se odpojil", null, "https://mc-heads.net/avatar/" + event.getPlayer().getDisplayName());
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue();
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){
@Override
public void run(){
DiscordAuthorizator.updateStatus();
}
}, 30L);
}
}

@ -0,0 +1,102 @@
package xyz.soukup.discordauthorizator.events;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import xyz.soukup.discordauthorizator.DiscordAuthorizator;
import java.util.*;
public class playerLogin implements Listener {
public static HashMap<String, List<String>> playersToVerify = new HashMap<>();
public static HashMap<String, List<String>> ipToAdd = new HashMap<>();
@EventHandler
public static void playerJoinEvent(AsyncPlayerPreLoginEvent event){
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig();
List<String> ipsAuthorized = config.getStringList("players." + event.getName() + ".authorized-ips");
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info("Nové připojení z ip " + event.getAddress());
if (!ipsAuthorized.isEmpty()){
if (!ipsAuthorized.contains(Objects.requireNonNull(event.getAddress()).toString())){
String kickMessage = "&6&lK&f&lN&6&lK&f&lS"
+ "\n\n&6&lPřihlašuješ se z nové IP"
+ "\n\n&fPoslali jsme ti na tvůj discord účet zprávu"
+ "\n&fKlikni na &3přidat ip &f a připoj se znovu"
+ "\n\n&6&lZpráva nepřišla?"
+ "\n&fMůžeš použít příkaz &3/authorize &f na našem discordu"
+ "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit"
+ "\n&7bez nutnosti zadávání hesla.";;
ipToAdd.put(config.getString("players."+ event.getName() + ".discord"), List.of(event.getName(), event.getAddress().toString()));
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage));
return;
}
JDA jda = DiscordAuthorizator.getJDA();
Guild guild = jda.getGuildById(Objects.requireNonNull(config.getString("guild")));
assert guild != null;
String id = config.getString("players." + event.getName() + ".discord");
assert id != null;
Color color;
guild.retrieveMemberById(id).queue(
member -> {
net.md_5.bungee.api.ChatColor memberColor = DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(member.getColor()));
DiscordAuthorizator.playerColor.put(event.getName(), memberColor);
DiscordAuthorizator.playerRole.put(event.getName(), member.getRoles().get(0));
DiscordAuthorizator.updateStatus();
EmbedBuilder eb = new EmbedBuilder();
eb.setColor(java.awt.Color.GREEN);
eb.setAuthor("Hráč " + event.getName() + " se připojil", null, "https://mc-heads.net/avatar/" + event.getName());
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue();
},
throwable -> {
// Error: Member was not found or an error occurred
String kickMessage = "&6&lK&f&lN&6&lK&f&lS"
+ "\n\n&c&lNejsi na našem discordu"
+ "\n\n&fPro hraní na našem server se musíš připojit na discord:"
+ "&bdiscord.gg/EK2n7TEQ4H";
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage));
}
);
}else {
String code = generateCode();
playersToVerify.put(event.getName(), List.of(event.getAddress().toString(), code));
String kickMessage = "&6&lK&f&lN&6&lK&f&lS"
+ "\n\n&cNejsi na whitelistu, &fale můžeš být ;)"
+ "\n\n"
+ "\n&f1) Zapamatuj si tento kód: &b" + code
+ "\n&f2) Připoj se na náš discord: &bdiscord.gg/EK2n7TEQ4H"
+ "\n&f3) Našemu discord botovi napiš příkaz &b/link"
+ "\n&f4) Zadej svůj nick a kód"
+ "\n&f5) znovu se připoj!"
+ "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit"
+ "\n&7bez nutnosti zadávání hesla.";
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, ChatColor.translateAlternateColorCodes('&', kickMessage));
}
}
public static String generateCode(){
int leftLimit = 48; // numeral '0'
int rightLimit = 122; // letter 'z'
int targetStringLength = 4;
Random random = new Random();
String generatedString = random.ints(leftLimit, rightLimit + 1)
.filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
.limit(targetStringLength)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
return generatedString.toUpperCase();
}
}

@ -0,0 +1,5 @@
token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4
authorized-role: 1236261645723111465
guild: 1161967821815808030
chat-channel: 1247447721175027744

@ -0,0 +1,9 @@
name: DiscordAuthorizator
version: '${project.version}'
main: xyz.soukup.discordauthorizator.DiscordAuthorizator
api-version: '1.18'
commands:
msg:
description: makes you send message to player
r:
description: quick response

@ -0,0 +1,5 @@
token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4
authorized-role: 1236261645723111465
guild: 1161967821815808030
chat-channel: 1247447721175027744

@ -0,0 +1,9 @@
name: DiscordAuthorizator
version: '1.0-SNAPSHOT'
main: xyz.soukup.discordauthorizator.DiscordAuthorizator
api-version: '1.18'
commands:
msg:
description: makes you send message to player
r:
description: quick response
Loading…
Cancel
Save