feat: add basic Discord Integration
BREAKING CHANGE: teams.json needs manual migration
This commit is contained in:
parent
63603178ee
commit
72c6fa8d9c
10 changed files with 526 additions and 42 deletions
30
varo/.factorypath
Normal file
30
varo/.factorypath
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<factorypath>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/destroystokyo/paper/paper-api/1.15.2-R0.1-SNAPSHOT/paper-api-1.15.2-R0.1-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/21.0/guava-21.0.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/md-5/bungeecord-chat/1.15-SNAPSHOT/bungeecord-chat-1.15-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/1.25/snakeyaml-1.25.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm/8.0.1/asm-8.0.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-commons/8.0.1/asm-commons-8.0.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-tree/8.0.1/asm-tree-8.0.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-analysis/8.0.1/asm-analysis-8.0.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/spigotmc/spigot/1.15.2-R0.1-SNAPSHOT/spigot-1.15.2-R0.1-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/dv8tion/JDA/4.1.1_101/JDA-4.1.1_101.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/16.0.1/annotations-16.0.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/neovisionaries/nv-websocket-client/2.9/nv-websocket-client-2.9.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/3.13.0/okhttp-3.13.0.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/1.17.2/okio-1.17.2.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/junit/junit/4.10/junit-4.10.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-core/2.1/log4j-core-2.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.1/log4j-api-2.1.jar" enabled="true" runInBatchMode="false"/>
|
||||||
|
</factorypath>
|
|
@ -1,2 +1,4 @@
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.apt.aptEnabled=false
|
org.eclipse.jdt.apt.aptEnabled=true
|
||||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
|
||||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations
|
||||||
|
|
|
@ -4,6 +4,6 @@ org.eclipse.jdt.core.compiler.compliance=11
|
||||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||||
org.eclipse.jdt.core.compiler.processAnnotations=disabled
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled
|
||||||
org.eclipse.jdt.core.compiler.release=disabled
|
org.eclipse.jdt.core.compiler.release=disabled
|
||||||
org.eclipse.jdt.core.compiler.source=11
|
org.eclipse.jdt.core.compiler.source=11
|
||||||
|
|
135
varo/pom.xml
135
varo/pom.xml
|
@ -26,6 +26,11 @@
|
||||||
<id>papermc</id>
|
<id>papermc</id>
|
||||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>jcenter</id>
|
||||||
|
<name>jcenter-bintray</name>
|
||||||
|
<url>https://jcenter.bintray.com</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<!--Paperclip API -->
|
<!--Paperclip API -->
|
||||||
|
@ -42,6 +47,31 @@
|
||||||
<version>1.15.2-R0.1-SNAPSHOT</version>
|
<version>1.15.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- Java Discord API (JDA) -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.dv8tion</groupId>
|
||||||
|
<artifactId>JDA</artifactId>
|
||||||
|
<version>4.1.1_101</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>club.minnced</groupId>
|
||||||
|
<artifactId>opus-java</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<!-- json.simple -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.json-simple</groupId>
|
||||||
|
<artifactId>json-simple</artifactId>
|
||||||
|
<version>1.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- log4j -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>2.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
|
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
|
||||||
|
@ -53,5 +83,110 @@
|
||||||
</includes>
|
</includes>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>11</source>
|
||||||
|
<target>11</target>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.3</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<relocations>
|
||||||
|
<!-- relocated because Bukkit includes Gson and I have no control over it -->
|
||||||
|
<!-- <relocation>
|
||||||
|
<pattern>com.google</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.google</shadedPattern>
|
||||||
|
</relocation> -->
|
||||||
|
|
||||||
|
<!-- relocated due to api usage -->
|
||||||
|
<relocation>
|
||||||
|
<pattern>net.dv8tion.jda</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.jda</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.neovisionaries.ws</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.ws</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>net.kyori</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.net.kyori</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>me.vankka</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.me.vankka</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
|
||||||
|
<!-- relocated due to dependency hell -->
|
||||||
|
<!-- <relocation>
|
||||||
|
<pattern>org.apache.commons</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.commons</shadedPattern>
|
||||||
|
</relocation> -->
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.apache.http</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.apache.http</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.json</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.json</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.json.simple</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.json.simple</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>okhttp3</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.okhttp3</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>okio</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.okio</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<!-- <relocation>
|
||||||
|
<pattern>gnu.trove</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.trove</shadedPattern>
|
||||||
|
</relocation> -->
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.fasterxml.jackson</pattern>
|
||||||
|
<shadedPattern>de.cliffbreak.varo.dependencies.jackson</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>commons-logging:commons-logging</artifact>
|
||||||
|
<includes>
|
||||||
|
<include>**</include>
|
||||||
|
</includes>
|
||||||
|
</filter>
|
||||||
|
<filter>
|
||||||
|
<artifact>com.fasterxml.jackson.core:jackson-databind</artifact>
|
||||||
|
<includes>
|
||||||
|
<include>**</include>
|
||||||
|
</includes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</project>
|
</project>
|
|
@ -5,19 +5,20 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import de.cliffbreak.varo.commands.CoordsCommand;
|
import de.cliffbreak.varo.commands.CoordsCommand;
|
||||||
import de.cliffbreak.varo.commands.VaroCommand;
|
import de.cliffbreak.varo.commands.VaroCommand;
|
||||||
import de.cliffbreak.varo.commands.VaroTabCompleter;
|
import de.cliffbreak.varo.commands.VaroTabCompleter;
|
||||||
|
import de.cliffbreak.varo.discord.DiscordBot;
|
||||||
import de.cliffbreak.varo.listeners.BannedActionListener;
|
import de.cliffbreak.varo.listeners.BannedActionListener;
|
||||||
import de.cliffbreak.varo.listeners.BannedItemListener;
|
import de.cliffbreak.varo.listeners.BannedItemListener;
|
||||||
import de.cliffbreak.varo.listeners.ChatListener;
|
import de.cliffbreak.varo.listeners.ChatListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerInteractNPCListener;
|
|
||||||
import de.cliffbreak.varo.listeners.EntityRegainHealthListener;
|
import de.cliffbreak.varo.listeners.EntityRegainHealthListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerClientOptionsChangeListener;
|
import de.cliffbreak.varo.listeners.PlayerClientOptionsChangeListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerDeathListener;
|
import de.cliffbreak.varo.listeners.PlayerDeathListener;
|
||||||
|
import de.cliffbreak.varo.listeners.PlayerInteractNPCListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerJoinQuitListener;
|
import de.cliffbreak.varo.listeners.PlayerJoinQuitListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerLoginListener;
|
import de.cliffbreak.varo.listeners.PlayerLoginListener;
|
||||||
import de.cliffbreak.varo.listeners.PlayerResourcePackStatusListener;
|
import de.cliffbreak.varo.listeners.PlayerResourcePackStatusListener;
|
||||||
|
@ -38,6 +39,7 @@ public class Varo extends JavaPlugin {
|
||||||
private VaroUtils varoUtils;
|
private VaroUtils varoUtils;
|
||||||
private TeamManager teamManager;
|
private TeamManager teamManager;
|
||||||
private MessageUtils messageUtils;
|
private MessageUtils messageUtils;
|
||||||
|
private DiscordBot discordBot;
|
||||||
|
|
||||||
private boolean canCreatePortal = false;
|
private boolean canCreatePortal = false;
|
||||||
|
|
||||||
|
@ -53,11 +55,13 @@ public class Varo extends JavaPlugin {
|
||||||
this.playerCache = new PlayerCache(this);
|
this.playerCache = new PlayerCache(this);
|
||||||
this.banUtils = new BanUtils(this);
|
this.banUtils = new BanUtils(this);
|
||||||
this.varoUtils = new VaroUtils(this);
|
this.varoUtils = new VaroUtils(this);
|
||||||
this.teamManager = new TeamManager(this);
|
this.teamManager = new TeamManager();
|
||||||
this.messageUtils = new MessageUtils(this);
|
this.messageUtils = new MessageUtils(this);
|
||||||
|
|
||||||
this.config.addDefault("Varo.Start", 1590427800000f);
|
this.config.addDefault("Varo.Start", 1590427800000f);
|
||||||
this.config.addDefault("Varo.Debug", false);
|
this.config.addDefault("Varo.Debug", false);
|
||||||
|
this.config.addDefault("Varo.Discord.Token", "insert.token.here");
|
||||||
|
this.config.addDefault("Varo.Discord.Channel", "numeric.channel.id");
|
||||||
this.config.addDefault("Varo.RetroHealthRegen", false);
|
this.config.addDefault("Varo.RetroHealthRegen", false);
|
||||||
this.config.addDefault("Varo.Bans", new ArrayList<String>());
|
this.config.addDefault("Varo.Bans", new ArrayList<String>());
|
||||||
this.config.options().copyDefaults(true);
|
this.config.options().copyDefaults(true);
|
||||||
|
@ -79,12 +83,19 @@ public class Varo extends JavaPlugin {
|
||||||
this.getCommand("coords").setExecutor(new CoordsCommand(this));
|
this.getCommand("coords").setExecutor(new CoordsCommand(this));
|
||||||
|
|
||||||
this.varoUtils.init();
|
this.varoUtils.init();
|
||||||
|
|
||||||
|
this.discordBot = new DiscordBot(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
this.getLogger().info("Stopping CliffbreakVaro!");
|
this.getLogger().info("Stopping CliffbreakVaro!");
|
||||||
this.playerCache.shutdown();
|
this.playerCache.shutdown();
|
||||||
|
try {
|
||||||
|
this.discordBot.shutdown();
|
||||||
|
} catch (final NoClassDefFoundError err) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -129,4 +140,8 @@ public class Varo extends JavaPlugin {
|
||||||
public void setCanCreatePortal(final boolean canCreatePortal) {
|
public void setCanCreatePortal(final boolean canCreatePortal) {
|
||||||
this.canCreatePortal = canCreatePortal;
|
this.canCreatePortal = canCreatePortal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DiscordBot getDiscordBot() {
|
||||||
|
return this.discordBot;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
package de.cliffbreak.varo.discord;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
|
|
||||||
|
import javax.security.auth.login.LoginException;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.core.Filter;
|
||||||
|
import org.apache.logging.log4j.core.Logger;
|
||||||
|
|
||||||
|
import de.cliffbreak.varo.Varo;
|
||||||
|
import de.cliffbreak.varo.discord.filters.JDAFilter;
|
||||||
|
import de.cliffbreak.varo.discord.listeners.MessageListener;
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
|
import net.dv8tion.jda.api.utils.cache.CacheFlag;
|
||||||
|
|
||||||
|
public class DiscordBot {
|
||||||
|
|
||||||
|
private final Varo plugin;
|
||||||
|
private final JDA jda;
|
||||||
|
|
||||||
|
public DiscordBot(final Varo plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
((Logger) LogManager.getRootLogger()).addFilter((Filter) new JDAFilter());
|
||||||
|
this.jda = getJDA();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
this.jda.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void broadcastMessage(final String message) {
|
||||||
|
this.jda.getTextChannelById(this.plugin.getConfig().getString("Varo.Discord.Channel")).sendMessage(message)
|
||||||
|
.queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private JDA getJDA() {
|
||||||
|
try {
|
||||||
|
return new JDABuilder().setAutoReconnect(true).setBulkDeleteSplittingEnabled(false)
|
||||||
|
.setDisabledCacheFlags(EnumSet.of(CacheFlag.ACTIVITY, CacheFlag.VOICE_STATE))
|
||||||
|
.setToken(this.plugin.getConfig().getString("Varo.Discord.Token")).setContextEnabled(false)
|
||||||
|
.addEventListeners(new MessageListener(this.plugin)).build().awaitReady();
|
||||||
|
} catch (LoginException | InterruptedException e) {
|
||||||
|
this.plugin.getLogger().warning("The Discord-Service didn't connect properly.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,172 @@
|
||||||
|
package de.cliffbreak.varo.discord.filters;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Marker;
|
||||||
|
import org.apache.logging.log4j.core.Filter;
|
||||||
|
import org.apache.logging.log4j.core.LogEvent;
|
||||||
|
import org.apache.logging.log4j.core.Logger;
|
||||||
|
import org.apache.logging.log4j.message.Message;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
public class JDAFilter implements Filter {
|
||||||
|
|
||||||
|
public Result check(final Logger logger, final Level level, final String message, final Throwable throwable) {
|
||||||
|
// only listen for JDA logs
|
||||||
|
if (!logger.getName().startsWith("de.cliffbreak.varo.dependencies.jda"))
|
||||||
|
return Result.NEUTRAL;
|
||||||
|
|
||||||
|
switch (level.name()) {
|
||||||
|
case "INFO":
|
||||||
|
Bukkit.getLogger().info("[Discord:INFO] " + message);
|
||||||
|
break;
|
||||||
|
case "WARN":
|
||||||
|
Bukkit.getLogger().warning("[Discord:WARN] " + message);
|
||||||
|
break;
|
||||||
|
case "ERROR":
|
||||||
|
if (message.contains("Got an unexpected error. Please redirect following message to the"))
|
||||||
|
return Result.DENY;
|
||||||
|
Bukkit.getLogger().warning("[Discord:ERROR] " + message);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Bukkit.getLogger().info("[Discord] " + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// all JDA messages should be denied because we handle them ourselves
|
||||||
|
return Result.DENY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final LogEvent logEvent) {
|
||||||
|
return check((Logger) LogManager.getLogger(logEvent.getLoggerName()), logEvent.getLevel(),
|
||||||
|
logEvent.getMessage().getFormattedMessage(), logEvent.getThrown());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger logger, final Level level, final Marker marker, final String message,
|
||||||
|
final Object... parameters) {
|
||||||
|
return check(logger, level, message, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger logger, final Level level, final Marker marker, final Object message,
|
||||||
|
final Throwable throwable) {
|
||||||
|
return check(logger, level, message.toString(), throwable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger logger, final Level level, final Marker marker, final Message message,
|
||||||
|
final Throwable throwable) {
|
||||||
|
return check(logger, level, message.getFormattedMessage(), throwable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isStarted() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isStopped() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result getOnMismatch() {
|
||||||
|
return Result.NEUTRAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result getOnMatch() {
|
||||||
|
return Result.NEUTRAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public State getState() {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
// Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8, final Object arg9) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8, final Object arg9,
|
||||||
|
final Object arg10) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8, final Object arg9,
|
||||||
|
final Object arg10, final Object arg11) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8, final Object arg9,
|
||||||
|
final Object arg10, final Object arg11, final Object arg12) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result filter(final Logger arg0, final Level arg1, final Marker arg2, final String arg3, final Object arg4,
|
||||||
|
final Object arg5, final Object arg6, final Object arg7, final Object arg8, final Object arg9,
|
||||||
|
final Object arg10, final Object arg11, final Object arg12, final Object arg13) {
|
||||||
|
// Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package de.cliffbreak.varo.discord.listeners;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import de.cliffbreak.varo.Varo;
|
||||||
|
import net.dv8tion.jda.api.entities.EmbedType;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageEmbed.Field;
|
||||||
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
|
||||||
|
public class MessageListener extends ListenerAdapter {
|
||||||
|
|
||||||
|
final Varo plugin;
|
||||||
|
|
||||||
|
public MessageListener(final Varo plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessageReceived(final MessageReceivedEvent e) {
|
||||||
|
// Don't respond to Bot accounts (and myself)
|
||||||
|
if (e.getAuthor().isBot()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Only answer in configured Channels
|
||||||
|
final MessageChannel channel = e.getChannel();
|
||||||
|
if (!channel.getId().equals(this.plugin.getConfig().getString("Varo.Discord.Channel"))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Message message = e.getMessage();
|
||||||
|
switch (message.getContentRaw()) {
|
||||||
|
case "!ping":
|
||||||
|
channel.sendMessage("Pong!").queue();
|
||||||
|
break;
|
||||||
|
case "!test":
|
||||||
|
channel.sendMessage(new MessageEmbed(null, "title", "description", EmbedType.RICH, null, 0, null, null,
|
||||||
|
null, null, null, null, new ArrayList<Field>(Arrays.asList()))).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,6 +27,8 @@ public class PlayerDeathListener implements Listener {
|
||||||
e.getEntity().setHealth(20d); // Reset health to prevent death dialog after rejoin (if unbanned)
|
e.getEntity().setHealth(20d); // Reset health to prevent death dialog after rejoin (if unbanned)
|
||||||
e.getEntity().setGameMode(GameMode.SPECTATOR);
|
e.getEntity().setGameMode(GameMode.SPECTATOR);
|
||||||
this.plugin.getBanUtils().addBan(e.getEntity().getUniqueId());
|
this.plugin.getBanUtils().addBan(e.getEntity().getUniqueId());
|
||||||
|
this.plugin.getDiscordBot().broadcastMessage("Der Spieler <@!"
|
||||||
|
+ this.plugin.getTeamManager().getDiscordIdByPlayer(e.getEntity()) + "> ist gestorben.");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -15,27 +15,24 @@ import org.json.simple.JSONObject;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
import org.json.simple.parser.ParseException;
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
import de.cliffbreak.varo.Varo;
|
|
||||||
import de.cliffbreak.varo.uitls.JSONConfig;
|
import de.cliffbreak.varo.uitls.JSONConfig;
|
||||||
import de.cliffbreak.varo.uitls.WebUtils;
|
import de.cliffbreak.varo.uitls.WebUtils;
|
||||||
|
|
||||||
public class TeamManager {
|
public class TeamManager {
|
||||||
|
|
||||||
private final Varo plugin;
|
|
||||||
private final JSONConfig config;
|
private final JSONConfig config;
|
||||||
private final Scoreboard scoreboard;
|
private final Scoreboard scoreboard;
|
||||||
private final ArrayList<Team> teams;
|
private final ArrayList<Team> teams;
|
||||||
private static final String TEAM_PREFIX = "~";
|
private static final String TEAM_PREFIX = "~";
|
||||||
|
|
||||||
public TeamManager(final Varo plugin) {
|
public TeamManager() {
|
||||||
this.plugin = plugin;
|
|
||||||
this.config = new JSONConfig(new File("plugins/CliffbreakVaro", "teams.json"), getDefaults());
|
this.config = new JSONConfig(new File("plugins/CliffbreakVaro", "teams.json"), getDefaults());
|
||||||
this.config.save();
|
this.config.save();
|
||||||
|
|
||||||
this.scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
this.scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
this.teams = new ArrayList<Team>();
|
this.teams = new ArrayList<Team>();
|
||||||
|
|
||||||
for (Team team : this.scoreboard.getTeams()) {
|
for (final Team team : this.scoreboard.getTeams()) {
|
||||||
team.unregister();
|
team.unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,49 +40,56 @@ public class TeamManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
final JSONArray jsonTeams = config.getArray("Teams");
|
final JSONArray jsonTeams = config.getArray("teams");
|
||||||
|
int teamKey = -1;
|
||||||
for (final Object jsonRawTeam : jsonTeams) {
|
for (final Object jsonRawTeam : jsonTeams) {
|
||||||
|
teamKey++;
|
||||||
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
||||||
final Team team, afkTeam;
|
final Team team, afkTeam;
|
||||||
if (jsonTeam.get("Name") == null) {
|
if (jsonTeam.get("name") == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (this.scoreboard.getTeam((String) jsonTeam.get("Name")) == null) {
|
if (this.scoreboard.getTeam((String) jsonTeam.get("name")) == null) {
|
||||||
team = this.scoreboard.registerNewTeam((String) jsonTeam.get("Name"));
|
team = this.scoreboard.registerNewTeam((String) jsonTeam.get("name"));
|
||||||
} else {
|
} else {
|
||||||
team = this.scoreboard.getTeam((String) jsonTeam.get("Name"));
|
team = this.scoreboard.getTeam((String) jsonTeam.get("name"));
|
||||||
}
|
}
|
||||||
if (this.scoreboard.getTeam(TEAM_PREFIX + jsonTeam.get("Name")) == null) {
|
if (this.scoreboard.getTeam(TEAM_PREFIX + jsonTeam.get("name")) == null) {
|
||||||
afkTeam = this.scoreboard.registerNewTeam(TEAM_PREFIX + jsonTeam.get("Name"));
|
afkTeam = this.scoreboard.registerNewTeam(TEAM_PREFIX + jsonTeam.get("name"));
|
||||||
} else {
|
} else {
|
||||||
afkTeam = this.scoreboard.getTeam(TEAM_PREFIX + jsonTeam.get("Name"));
|
afkTeam = this.scoreboard.getTeam(TEAM_PREFIX + jsonTeam.get("name"));
|
||||||
}
|
}
|
||||||
this.teams.add(team);
|
this.teams.add(team);
|
||||||
this.teams.add(afkTeam);
|
this.teams.add(afkTeam);
|
||||||
team.setPrefix(ChatColor.valueOf((String) jsonTeam.get("Color")) + "§l[" + jsonTeam.get("Prefix") + "] ");
|
team.setPrefix(ChatColor.valueOf((String) jsonTeam.get("color")) + "§l[" + jsonTeam.get("prefix") + "] ");
|
||||||
afkTeam.setPrefix("§8§l[AFK] ");
|
afkTeam.setPrefix("§8§l[AFK] ");
|
||||||
team.setColor(ChatColor.WHITE);
|
team.setColor(ChatColor.WHITE);
|
||||||
afkTeam.setColor(ChatColor.valueOf((String) jsonTeam.get("Color")));
|
afkTeam.setColor(ChatColor.valueOf((String) jsonTeam.get("color")));
|
||||||
for (final String entry : team.getEntries()) {
|
for (final String entry : team.getEntries()) {
|
||||||
team.removeEntry(entry);
|
team.removeEntry(entry);
|
||||||
}
|
}
|
||||||
for (final String entry : afkTeam.getEntries()) {
|
for (final String entry : afkTeam.getEntries()) {
|
||||||
team.removeEntry(entry);
|
team.removeEntry(entry);
|
||||||
}
|
}
|
||||||
for (final Object uuid : (JSONArray) jsonTeam.get("Players")) {
|
String playerName = "";
|
||||||
|
int playerKey = -1;
|
||||||
|
for (final Object rawPlayer : (JSONArray) jsonTeam.get("players")) {
|
||||||
|
playerKey++;
|
||||||
|
final JSONObject player = (JSONObject) rawPlayer;
|
||||||
try {
|
try {
|
||||||
final String result = WebUtils
|
final String result = WebUtils
|
||||||
.GET("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid);
|
.GET("https://sessionserver.mojang.com/session/minecraft/profile/" + player.get("uuid"));
|
||||||
if (result.isEmpty()) {
|
if (result.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final JSONObject profile = (JSONObject) JSONValue.parseWithException(result);
|
final JSONObject profile = (JSONObject) JSONValue.parseWithException(result);
|
||||||
team.addEntry((String) profile.get("name"));
|
playerName = (String) profile.get("name");
|
||||||
|
config.updatePlayerName(teamKey, playerKey, playerName);
|
||||||
|
|
||||||
} catch (IOException | ParseException e) {
|
} catch (IOException | ParseException e) {
|
||||||
this.plugin.getLogger().info(
|
playerName = (String) player.get("name");
|
||||||
"§c§lFehler:§r§c beim Verbinden mit der Mojang-API ist ein Fehler aufgetreten. Eventuell sind die Mojang Server down.");
|
|
||||||
}
|
}
|
||||||
|
team.addEntry(playerName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +103,20 @@ public class TeamManager {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDiscordIdByPlayer(final Player player) {
|
||||||
|
final JSONArray jsonTeams = config.getArray("teams");
|
||||||
|
for (final Object jsonRawTeam : jsonTeams) {
|
||||||
|
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
||||||
|
for (final Object rawPlayer : ((JSONArray) jsonTeam.get("players"))) {
|
||||||
|
final JSONObject jsonPlayer = (JSONObject) rawPlayer;
|
||||||
|
if (jsonPlayer.get("uuid").equals(player.getUniqueId().toString().replace("-", ""))) {
|
||||||
|
return jsonPlayer.get("discord").toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
public void setAFK(final String player) {
|
public void setAFK(final String player) {
|
||||||
final Team oldTeam = getTeamByPlayer(player);
|
final Team oldTeam = getTeamByPlayer(player);
|
||||||
for (final Team team : this.teams) {
|
for (final Team team : this.teams) {
|
||||||
|
@ -109,13 +127,16 @@ public class TeamManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTeam(final Player player) {
|
public void setTeam(final Player player) {
|
||||||
final JSONArray jsonTeams = config.getArray("Teams");
|
final JSONArray jsonTeams = config.getArray("teams");
|
||||||
for (final Object jsonRawTeam : jsonTeams) {
|
for (final Object jsonRawTeam : jsonTeams) {
|
||||||
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
||||||
if (((JSONArray) jsonTeam.get("Players")).contains(player.getUniqueId().toString().replace("-", ""))) {
|
for (final Object rawPlayer : ((JSONArray) jsonTeam.get("players"))) {
|
||||||
for (final Team team : this.teams) {
|
final JSONObject jsonPlayer = (JSONObject) rawPlayer;
|
||||||
if (team.getName().equals(jsonTeam.get("Name").toString())) {
|
if (jsonPlayer.get("uuid").equals(player.getUniqueId().toString().replace("-", ""))) {
|
||||||
team.addEntry(player.getName());
|
for (final Team team : this.teams) {
|
||||||
|
if (team.getName().equals(jsonTeam.get("name").toString())) {
|
||||||
|
team.addEntry(player.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,26 +148,38 @@ public class TeamManager {
|
||||||
final HashMap<String, Object> defaults = new HashMap<String, Object>();
|
final HashMap<String, Object> defaults = new HashMap<String, Object>();
|
||||||
|
|
||||||
final JSONObject team1 = new JSONObject();
|
final JSONObject team1 = new JSONObject();
|
||||||
team1.put("Name", "Demo-Team");
|
team1.put("name", "Demo-Team");
|
||||||
team1.put("Color", ChatColor.RED);
|
team1.put("color", ChatColor.RED);
|
||||||
team1.put("Prefix", "DMO");
|
team1.put("prefix", "DMO");
|
||||||
final JSONArray team1Players = new JSONArray();
|
final JSONArray team1Players = new JSONArray();
|
||||||
team1Players.add("a6019ccffe694bf780bcc3f3afa265dd");
|
final JSONObject player = new JSONObject();
|
||||||
team1Players.add("069a79f444e94726a5befca90e38aaf5");
|
player.put("name", "AragurLP");
|
||||||
team1.put("Players", team1Players);
|
player.put("uuid", "a6019ccffe694bf780bcc3f3afa265dd");
|
||||||
|
player.put("discord", "99820967022329856");
|
||||||
|
team1Players.add(player);
|
||||||
|
final JSONObject player2 = new JSONObject();
|
||||||
|
player2.put("name", "Notch");
|
||||||
|
player2.put("uuid", "069a79f444e94726a5befca90e38aaf5");
|
||||||
|
player2.put("discord", "");
|
||||||
|
team1Players.add(player2);
|
||||||
|
team1.put("players", team1Players);
|
||||||
|
|
||||||
final JSONObject team2 = new JSONObject();
|
final JSONObject team2 = new JSONObject();
|
||||||
team2.put("Name", "Demo-Team 2");
|
team2.put("name", "Demo-Team 2");
|
||||||
team2.put("Color", ChatColor.GREEN);
|
team2.put("color", ChatColor.GREEN);
|
||||||
team2.put("Prefix", "DM2");
|
team2.put("prefix", "DM2");
|
||||||
final JSONArray team2Players = new JSONArray();
|
final JSONArray team2Players = new JSONArray();
|
||||||
team2Players.add("dff082fcd52d4ad2b2d8d8202aea53ec");
|
final JSONObject player3 = new JSONObject();
|
||||||
team2.put("Players", team2Players);
|
player3.put("name", "AragurTV");
|
||||||
|
player3.put("uuid", "dff082fcd52d4ad2b2d8d8202aea53ec");
|
||||||
|
player3.put("discord", "550794603754815520");
|
||||||
|
team2Players.add(player3);
|
||||||
|
team2.put("players", team2Players);
|
||||||
|
|
||||||
final JSONArray teams = new JSONArray();
|
final JSONArray teams = new JSONArray();
|
||||||
teams.add(team1);
|
teams.add(team1);
|
||||||
teams.add(team2);
|
teams.add(team2);
|
||||||
defaults.put("Teams", teams);
|
defaults.put("teams", teams);
|
||||||
return defaults;
|
return defaults;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue