mirror of
https://github.com/TotalFreedomMC/BukkitTelnet.git
synced 2024-09-28 04:54:47 +00:00
Compare commits
20 commits
Author | SHA1 | Date | |
---|---|---|---|
f8ef36ae6a | |||
97ebc4bdb9 | |||
0aa07d46fc | |||
a76fc5a5b2 | |||
67d0383cad | |||
13125dbeb8 | |||
1a8b6c7394 | |||
63eab7c0d9 | |||
1ae73cbfea | |||
2c4ad8df02 | |||
3436800815 | |||
09346eaab6 | |||
e35273ca76 | |||
932f5dcf37 | |||
3e367eecca | |||
f9ebc49c12 | |||
541e9fdb84 | |||
66124908d9 | |||
3e57ef87bf | |||
da383026e5 |
46
.github/workflows/codacy-analysis.yml
vendored
Normal file
46
.github/workflows/codacy-analysis.yml
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# This workflow checks out code, performs a Codacy security scan
|
||||||
|
# and integrates the results with the
|
||||||
|
# GitHub Advanced Security code scanning feature. For more information on
|
||||||
|
# the Codacy security scan action usage and parameters, see
|
||||||
|
# https://github.com/codacy/codacy-analysis-cli-action.
|
||||||
|
# For more information on Codacy Analysis CLI in general, see
|
||||||
|
# https://github.com/codacy/codacy-analysis-cli.
|
||||||
|
|
||||||
|
name: Codacy Security Scan
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
codacy-security-scan:
|
||||||
|
name: Codacy Security Scan
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
# Checkout the repository to the GitHub Actions runner
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
||||||
|
- name: Run Codacy Analysis CLI
|
||||||
|
uses: codacy/codacy-analysis-cli-action@1.1.0
|
||||||
|
with:
|
||||||
|
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
|
||||||
|
# You can also omit the token and run the tools that support default configurations
|
||||||
|
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||||
|
verbose: true
|
||||||
|
output: results.sarif
|
||||||
|
format: sarif
|
||||||
|
# Adjust severity of non-security issues
|
||||||
|
gh-code-scanning-compat: true
|
||||||
|
# Force 0 exit code to allow SARIF file generation
|
||||||
|
# This will handover control about PR rejection to the GitHub side
|
||||||
|
max-allowed-issues: 2147483647
|
||||||
|
|
||||||
|
# Upload the SARIF file generated in the previous step
|
||||||
|
- name: Upload SARIF results file
|
||||||
|
uses: github/codeql-action/upload-sarif@v1
|
||||||
|
with:
|
||||||
|
sarif_file: results.sarif
|
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '39 23 * * 4'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'java' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
24
.github/workflows/maven.yml
vendored
Normal file
24
.github/workflows/maven.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# This workflow will build a Java project with Maven
|
||||||
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
|
||||||
|
|
||||||
|
name: Java CI with Maven
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v1
|
||||||
|
with:
|
||||||
|
java-version: 17
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn -B package --file pom.xml
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -29,3 +29,4 @@ manifest.mf
|
||||||
.Trashes
|
.Trashes
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
|
70
pom.xml
70
pom.xml
|
@ -1,10 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>me.totalfreedom</groupId>
|
<groupId>me.totalfreedom</groupId>
|
||||||
<artifactId>bukkittelnet</artifactId>
|
<artifactId>BukkitTelnet</artifactId>
|
||||||
<version>4.4</version>
|
<version>4.7</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -29,53 +30,90 @@
|
||||||
</organization>
|
</organization>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
<connection>scm:git:git@github.com:TotalFreedom/BukkitTelnet.git</connection>
|
<connection>scm:git:git@github.com:TotalFreedomMC/BukkitTelnet.git</connection>
|
||||||
<developerConnection>scm:git:git@github.com:TotalFreedom/BukkitTelnet.git</developerConnection>
|
<developerConnection>scm:git:git@github.com:TotalFreedomMC/BukkitTelnet.git</developerConnection>
|
||||||
<url>git@github.com:TotalFreedom/BukkitTelnet.git</url>
|
<url>git@github.com:TotalFreedomMC/BukkitTelnet.git</url>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
|
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>essentialsx-repo</id>
|
||||||
|
<url>https://repo.essentialsx.net/releases/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>CodeMC</id>
|
||||||
|
<url>https://repo.codemc.org/repository/maven-public/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.9-R0.1-SNAPSHOT</version>
|
<version>1.18.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.16.6</version>
|
<version>1.18.22</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.5</version>
|
<version>2.17.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.essentialsx</groupId>
|
||||||
|
<artifactId>EssentialsX</artifactId>
|
||||||
|
<version>2.19.4</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.json</groupId>
|
||||||
|
<artifactId>json</artifactId>
|
||||||
|
<version>20220320</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<!-- Compiler -->
|
<!-- Compiler -->
|
||||||
|
<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>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.3</version>
|
<version>3.8.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<compilerVersion>1.7</compilerVersion>
|
<source>17</source>
|
||||||
<source>1.7</source>
|
<target>17</target>
|
||||||
<target>1.7</target>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
@ -107,7 +145,7 @@
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-jxr-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
<version>2.5</version>
|
<version>2.5</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package me.totalfreedom.bukkittelnet;
|
package me.totalfreedom.bukkittelnet;
|
||||||
|
|
||||||
|
import me.totalfreedom.bukkittelnet.api.Server;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.plugin.ServicePriority;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
public class BukkitTelnet extends JavaPlugin
|
public class BukkitTelnet extends JavaPlugin
|
||||||
|
@ -24,6 +26,7 @@ public class BukkitTelnet extends JavaPlugin
|
||||||
|
|
||||||
TelnetLogger.setPluginLogger(plugin.getLogger());
|
TelnetLogger.setPluginLogger(plugin.getLogger());
|
||||||
TelnetLogger.setServerLogger(Bukkit.getLogger());
|
TelnetLogger.setServerLogger(Bukkit.getLogger());
|
||||||
|
System.setProperty("log4j2.formatMsgNoLookups", "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,6 +40,8 @@ public class BukkitTelnet extends JavaPlugin
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(listener, plugin);
|
getServer().getPluginManager().registerEvents(listener, plugin);
|
||||||
|
|
||||||
|
getServer().getServicesManager().register(Server.class, telnet, this, ServicePriority.Normal);
|
||||||
|
|
||||||
TelnetLogger.info(plugin.getName() + " v" + plugin.getDescription().getVersion() + " enabled");
|
TelnetLogger.info(plugin.getName() + " v" + plugin.getDescription().getVersion() + " enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package me.totalfreedom.bukkittelnet;
|
package me.totalfreedom.bukkittelnet;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import com.earth2me.essentials.Essentials;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
|
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
|
||||||
|
import me.totalfreedom.bukkittelnet.api.TelnetRequestUsageEvent;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -11,16 +10,23 @@ import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerKickEvent;
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class PlayerEventListener implements Listener
|
public class PlayerEventListener implements Listener
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static Essentials essentials = null;
|
||||||
|
|
||||||
private final BukkitTelnet plugin;
|
private final BukkitTelnet plugin;
|
||||||
|
|
||||||
public PlayerEventListener(BukkitTelnet plugin)
|
public PlayerEventListener(BukkitTelnet plugin)
|
||||||
|
@ -40,6 +46,18 @@ public class PlayerEventListener implements Listener
|
||||||
triggerPlayerListUpdates();
|
triggerPlayerListUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Essentials getEssentials()
|
||||||
|
{
|
||||||
|
Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials");
|
||||||
|
if (ess instanceof Essentials)
|
||||||
|
{
|
||||||
|
essentials = (Essentials) ess;
|
||||||
|
return essentials;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static BukkitTask updateTask = null;
|
private static BukkitTask updateTask = null;
|
||||||
|
|
||||||
public void triggerPlayerListUpdates()
|
public void triggerPlayerListUpdates()
|
||||||
|
@ -70,34 +88,79 @@ public class PlayerEventListener implements Listener
|
||||||
{
|
{
|
||||||
final JSONArray players = new JSONArray();
|
final JSONArray players = new JSONArray();
|
||||||
|
|
||||||
final Iterator<Map.Entry<Player, Map<String, Object>>> dataTagsIt = dataTags.entrySet().iterator();
|
for (Map.Entry<Player, Map<String, Object>> playerMapEntry : dataTags.entrySet())
|
||||||
while (dataTagsIt.hasNext())
|
|
||||||
{
|
{
|
||||||
final HashMap<String, String> info = new HashMap<>();
|
final HashMap<String, String> info = new HashMap<>();
|
||||||
|
|
||||||
final Map.Entry<Player, Map<String, Object>> dataTagsEntry = dataTagsIt.next();
|
final Player player = playerMapEntry.getKey();
|
||||||
final Player player = dataTagsEntry.getKey();
|
final Map<String, Object> playerTags = playerMapEntry.getValue();
|
||||||
final Map<String, Object> playerTags = dataTagsEntry.getValue();
|
|
||||||
|
|
||||||
info.put("name", player.getName());
|
info.put("name", player.getName());
|
||||||
info.put("ip", player.getAddress().getAddress().getHostAddress());
|
info.put("ip", player.getAddress().getAddress().getHostAddress());
|
||||||
info.put("displayName", StringUtils.trimToEmpty(player.getDisplayName()));
|
info.put("displayName", StringUtils.trimToEmpty(player.getDisplayName()));
|
||||||
info.put("uuid", player.getUniqueId().toString());
|
info.put("uuid", player.getUniqueId().toString());
|
||||||
|
|
||||||
final Iterator<Map.Entry<String, Object>> playerTagsIt = playerTags.entrySet().iterator();
|
for (Map.Entry<String, Object> playerTagsEntry : playerTags.entrySet())
|
||||||
while (playerTagsIt.hasNext())
|
|
||||||
{
|
{
|
||||||
final Map.Entry<String, Object> playerTagsEntry = playerTagsIt.next();
|
|
||||||
final Object value = playerTagsEntry.getValue();
|
final Object value = playerTagsEntry.getValue();
|
||||||
info.put(playerTagsEntry.getKey(), value != null ? value.toString() : "null");
|
info.put(playerTagsEntry.getKey(), value != null ? value.toString() : "null");
|
||||||
}
|
}
|
||||||
|
|
||||||
players.add(info);
|
players.put(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
final JSONObject response = new JSONObject();
|
final JSONObject response = new JSONObject();
|
||||||
response.put("players", players);
|
response.put("players", players);
|
||||||
|
return response.toString();
|
||||||
|
}
|
||||||
|
|
||||||
return response.toJSONString();
|
private static BukkitTask usageUpdateTask = null;
|
||||||
|
|
||||||
|
// Just putting this stuff here
|
||||||
|
public void triggerUsageUpdates()
|
||||||
|
{
|
||||||
|
if (usageUpdateTask != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
usageUpdateTask = new BukkitRunnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
final SocketListener socketListener = plugin.telnet.getSocketListener();
|
||||||
|
if (socketListener != null)
|
||||||
|
{
|
||||||
|
final TelnetRequestUsageEvent event = new TelnetRequestUsageEvent();
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
socketListener.triggerDataUsageUpdates(generateUsageStats());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimer(plugin, 100L, 100L); // every 5 seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private static String generateUsageStats()
|
||||||
|
{
|
||||||
|
if (essentials == null)
|
||||||
|
{
|
||||||
|
essentials = getEssentials();
|
||||||
|
}
|
||||||
|
|
||||||
|
final JSONObject info = new JSONObject();
|
||||||
|
|
||||||
|
String cpuUsage = null;
|
||||||
|
String ramUsage = null;
|
||||||
|
String tps = null;
|
||||||
|
|
||||||
|
if (essentials != null)
|
||||||
|
{
|
||||||
|
tps = String.valueOf(String.valueOf(BigDecimal.valueOf(essentials.getTimer().getAverageTPS()).setScale(1, RoundingMode.CEILING)));
|
||||||
|
}
|
||||||
|
|
||||||
|
info.put("tps", tps);
|
||||||
|
return info.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.net.InetAddress;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -47,14 +48,7 @@ public class SocketListener extends Thread
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove old entries
|
// Remove old entries
|
||||||
final Iterator<Entry<InetAddress, Long>> it = recentIPs.entrySet().iterator();
|
recentIPs.entrySet().removeIf(inetAddressLongEntry -> inetAddressLongEntry.getValue() + LISTEN_THRESHOLD_MILLIS < System.currentTimeMillis());
|
||||||
while (it.hasNext())
|
|
||||||
{
|
|
||||||
if (it.next().getValue() + LISTEN_THRESHOLD_MILLIS < System.currentTimeMillis())
|
|
||||||
{
|
|
||||||
it.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final InetAddress addr = clientSocket.getInetAddress();
|
final InetAddress addr = clientSocket.getInetAddress();
|
||||||
if (addr == null)
|
if (addr == null)
|
||||||
|
@ -93,7 +87,6 @@ public class SocketListener extends Thread
|
||||||
final ClientSession clientSession = new ClientSession(telnet, clientSocket);
|
final ClientSession clientSession = new ClientSession(telnet, clientSocket);
|
||||||
clientSessions.add(clientSession);
|
clientSessions.add(clientSession);
|
||||||
clientSession.start();
|
clientSession.start();
|
||||||
|
|
||||||
removeDisconnected();
|
removeDisconnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,16 +111,14 @@ public class SocketListener extends Thread
|
||||||
|
|
||||||
public void triggerPlayerListUpdates(final String playerListData)
|
public void triggerPlayerListUpdates(final String playerListData)
|
||||||
{
|
{
|
||||||
final Iterator<ClientSession> it = clientSessions.iterator();
|
clientSessions.forEach(session ->
|
||||||
|
session.syncTriggerPlayerListUpdate(playerListData));
|
||||||
|
}
|
||||||
|
|
||||||
while (it.hasNext())
|
public void triggerDataUsageUpdates(final String usageData)
|
||||||
{
|
{
|
||||||
final ClientSession session = it.next();
|
clientSessions.forEach(session ->
|
||||||
if (session != null)
|
session.syncUsageUpdate(usageData));
|
||||||
{
|
|
||||||
session.syncTriggerPlayerListUpdate(playerListData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopServer()
|
public void stopServer()
|
||||||
|
@ -149,4 +140,9 @@ public class SocketListener extends Thread
|
||||||
clientSessions.clear();
|
clientSessions.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ClientSession> getSessions()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableList(clientSessions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.core.LogEvent;
|
import org.apache.logging.log4j.core.LogEvent;
|
||||||
import org.apache.logging.log4j.core.Logger;
|
import org.apache.logging.log4j.core.Logger;
|
||||||
import org.apache.logging.log4j.core.appender.AbstractAppender;
|
import org.apache.logging.log4j.core.appender.AbstractAppender;
|
||||||
|
import org.apache.logging.log4j.core.config.Property;
|
||||||
|
|
||||||
public class TelnetLogAppender extends AbstractAppender
|
public class TelnetLogAppender extends AbstractAppender
|
||||||
{
|
{
|
||||||
|
@ -23,7 +24,7 @@ public class TelnetLogAppender extends AbstractAppender
|
||||||
|
|
||||||
public TelnetLogAppender()
|
public TelnetLogAppender()
|
||||||
{
|
{
|
||||||
super("BukkitTelnet", null, null);
|
super("BukkitTelnet", null, null, true, Property.EMPTY_ARRAY);
|
||||||
|
|
||||||
this.sessions = new HashSet<>();
|
this.sessions = new HashSet<>();
|
||||||
this.dateFormat = new SimpleDateFormat("HH:mm:ss");
|
this.dateFormat = new SimpleDateFormat("HH:mm:ss");
|
||||||
|
@ -74,7 +75,7 @@ public class TelnetLogAppender extends AbstractAppender
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (session.getFilterMode() == FilterMode.NONCHAT_ONLY && chat)
|
if (session.getFilterMode() == FilterMode.NON_CHAT_ONLY && chat)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,11 @@ import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.List;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.totalfreedom.bukkittelnet.TelnetConfigLoader.TelnetConfig;
|
import me.totalfreedom.bukkittelnet.TelnetConfigLoader.TelnetConfig;
|
||||||
import me.totalfreedom.bukkittelnet.api.Server;
|
import me.totalfreedom.bukkittelnet.api.Server;
|
||||||
|
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
||||||
|
|
||||||
public class TelnetServer implements Server
|
public class TelnetServer implements Server
|
||||||
{
|
{
|
||||||
|
@ -15,7 +17,7 @@ public class TelnetServer implements Server
|
||||||
private final BukkitTelnet plugin;
|
private final BukkitTelnet plugin;
|
||||||
@Getter
|
@Getter
|
||||||
private final TelnetConfig config;
|
private final TelnetConfig config;
|
||||||
//
|
@Getter
|
||||||
private SocketListener socketListener;
|
private SocketListener socketListener;
|
||||||
|
|
||||||
public TelnetServer(BukkitTelnet plugin, TelnetConfig config)
|
public TelnetServer(BukkitTelnet plugin, TelnetConfig config)
|
||||||
|
@ -92,9 +94,9 @@ public class TelnetServer implements Server
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SocketListener getSocketListener()
|
public List<ClientSession> getSessions()
|
||||||
{
|
{
|
||||||
return socketListener;
|
return socketListener.getSessions();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,23 @@
|
||||||
/*
|
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
|
||||||
* To change this template file, choose Tools | Templates
|
|
||||||
* and open the template in the editor.
|
|
||||||
*/
|
|
||||||
package me.totalfreedom.bukkittelnet.api;
|
package me.totalfreedom.bukkittelnet.api;
|
||||||
|
|
||||||
import me.totalfreedom.bukkittelnet.SocketListener;
|
import me.totalfreedom.bukkittelnet.SocketListener;
|
||||||
|
import me.totalfreedom.bukkittelnet.TelnetConfigLoader.TelnetConfig;
|
||||||
|
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface Server
|
public interface Server
|
||||||
{
|
{
|
||||||
|
|
||||||
public void startServer();
|
void startServer();
|
||||||
|
|
||||||
public void stopServer();
|
void stopServer();
|
||||||
|
|
||||||
public SocketListener getSocketListener();
|
@Deprecated
|
||||||
|
SocketListener getSocketListener();
|
||||||
|
|
||||||
|
TelnetConfig getConfig();
|
||||||
|
|
||||||
|
List<ClientSession> getSessions();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package me.totalfreedom.bukkittelnet.api;
|
package me.totalfreedom.bukkittelnet.api;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
public class TelnetCommandEvent extends TelnetEvent implements Cancellable
|
public class TelnetCommandEvent extends Event implements Cancellable
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@ -15,6 +17,7 @@ public class TelnetCommandEvent extends TelnetEvent implements Cancellable
|
||||||
|
|
||||||
public TelnetCommandEvent(CommandSender sender, String command)
|
public TelnetCommandEvent(CommandSender sender, String command)
|
||||||
{
|
{
|
||||||
|
super(!Bukkit.getServer().isPrimaryThread());
|
||||||
this.cancelled = false;
|
this.cancelled = false;
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.command = command;
|
this.command = command;
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
package me.totalfreedom.bukkittelnet.api;
|
|
||||||
|
|
||||||
import org.bukkit.event.server.ServerEvent;
|
|
||||||
|
|
||||||
public abstract class TelnetEvent extends ServerEvent
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,8 +2,10 @@ package me.totalfreedom.bukkittelnet.api;
|
||||||
|
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
public class TelnetPreLoginEvent extends TelnetEvent implements Cancellable
|
public class TelnetPreLoginEvent extends Event implements Cancellable
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@ -15,6 +17,7 @@ public class TelnetPreLoginEvent extends TelnetEvent implements Cancellable
|
||||||
|
|
||||||
public TelnetPreLoginEvent(String ip, String name, boolean bypassPassword)
|
public TelnetPreLoginEvent(String ip, String name, boolean bypassPassword)
|
||||||
{
|
{
|
||||||
|
super(!Bukkit.getServer().isPrimaryThread());
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.bypassPassword = bypassPassword;
|
this.bypassPassword = bypassPassword;
|
||||||
|
@ -26,6 +29,7 @@ public class TelnetPreLoginEvent extends TelnetEvent implements Cancellable
|
||||||
return cancelled;
|
return cancelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCancelled(boolean cancel)
|
public void setCancelled(boolean cancel)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,9 +4,10 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
public class TelnetRequestDataTagsEvent extends TelnetEvent
|
public class TelnetRequestDataTagsEvent extends Event
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@ -14,9 +15,10 @@ public class TelnetRequestDataTagsEvent extends TelnetEvent
|
||||||
|
|
||||||
public TelnetRequestDataTagsEvent()
|
public TelnetRequestDataTagsEvent()
|
||||||
{
|
{
|
||||||
|
super(!Bukkit.getServer().isPrimaryThread());
|
||||||
for (final Player player : Bukkit.getServer().getOnlinePlayers())
|
for (final Player player : Bukkit.getServer().getOnlinePlayers())
|
||||||
{
|
{
|
||||||
dataTags.put(player, new HashMap<String, Object>());
|
dataTags.put(player, new HashMap<>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package me.totalfreedom.bukkittelnet.api;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class TelnetRequestUsageEvent extends Event
|
||||||
|
{
|
||||||
|
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
public TelnetRequestUsageEvent()
|
||||||
|
{
|
||||||
|
super(!Bukkit.getServer().isPrimaryThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers()
|
||||||
|
{
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,9 +23,9 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||||
public final class ClientSession extends Thread
|
public final class ClientSession extends Thread
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final Pattern NONASCII_FILTER = Pattern.compile("[^\\x20-\\x7E]");
|
public static final Pattern NON_ASCII_FILTER = Pattern.compile("[^\\x20-\\x7E]");
|
||||||
public static final Pattern AUTH_INPUT_FILTER = Pattern.compile("[^_a-zA-Z0-9]");
|
public static final Pattern AUTH_INPUT_FILTER = Pattern.compile("[^_a-zA-Z0-9]");
|
||||||
public static final Pattern COMMAND_INPUT_FILTER = Pattern.compile("^[^_a-zA-Z0-9/\\?!\\.]+");
|
public static final Pattern COMMAND_INPUT_FILTER = Pattern.compile("^[^_a-zA-Z0-9/?!.]+");
|
||||||
//
|
//
|
||||||
private final TelnetServer telnet;
|
private final TelnetServer telnet;
|
||||||
private final Socket clientSocket;
|
private final Socket clientSocket;
|
||||||
|
@ -39,7 +39,8 @@ public final class ClientSession extends Thread
|
||||||
private String username = "";
|
private String username = "";
|
||||||
private volatile boolean terminated = false;
|
private volatile boolean terminated = false;
|
||||||
private volatile boolean authenticated = false;
|
private volatile boolean authenticated = false;
|
||||||
private volatile boolean enhancedMode = false;
|
private boolean enhancedMode = false;
|
||||||
|
private boolean enhancedPlusMode = false;
|
||||||
|
|
||||||
public ClientSession(TelnetServer telnet, Socket clientSocket)
|
public ClientSession(TelnetServer telnet, Socket clientSocket)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +85,8 @@ public final class ClientSession extends Thread
|
||||||
mainLoop();
|
mainLoop();
|
||||||
|
|
||||||
syncTerminateSession();
|
syncTerminateSession();
|
||||||
|
|
||||||
|
telnet.getPlugin().listener.triggerUsageUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean syncIsAuthenticated()
|
public boolean syncIsAuthenticated()
|
||||||
|
@ -118,17 +121,12 @@ public final class ClientSession extends Thread
|
||||||
|
|
||||||
synchronized (clientSocket)
|
synchronized (clientSocket)
|
||||||
{
|
{
|
||||||
if (clientSocket == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
writeLine("Closing connection...");
|
writeLine("Closing connection...");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
clientSocket.close();
|
clientSocket.close();
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ignored)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +169,7 @@ public final class ClientSession extends Thread
|
||||||
writer.write(":" + ChatColor.stripColor(message) + "\r\n");
|
writer.write(":" + ChatColor.stripColor(message) + "\r\n");
|
||||||
writer.flush();
|
writer.flush();
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ignored)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +185,7 @@ public final class ClientSession extends Thread
|
||||||
{
|
{
|
||||||
writer.flush();
|
writer.flush();
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ignored)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -358,7 +356,7 @@ public final class ClientSession extends Thread
|
||||||
{
|
{
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
}
|
}
|
||||||
catch (InterruptedException ex)
|
catch (InterruptedException ignored)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -401,7 +399,7 @@ public final class ClientSession extends Thread
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
command = COMMAND_INPUT_FILTER.matcher(NONASCII_FILTER.matcher(command).replaceAll("")).replaceFirst("").trim();
|
command = COMMAND_INPUT_FILTER.matcher(NON_ASCII_FILTER.matcher(command).replaceAll("")).replaceFirst("").trim();
|
||||||
if (command.isEmpty())
|
if (command.isEmpty())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -446,11 +444,11 @@ public final class ClientSession extends Thread
|
||||||
}
|
}
|
||||||
case CHAT_ONLY:
|
case CHAT_ONLY:
|
||||||
{
|
{
|
||||||
filterMode = FilterMode.NONCHAT_ONLY;
|
filterMode = FilterMode.NON_CHAT_ONLY;
|
||||||
writeLine("Showing only non-chat logs.");
|
writeLine("Showing only non-chat logs.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NONCHAT_ONLY:
|
case NON_CHAT_ONLY:
|
||||||
{
|
{
|
||||||
filterMode = FilterMode.NONE;
|
filterMode = FilterMode.NONE;
|
||||||
writeLine("Showing all logs.");
|
writeLine("Showing all logs.");
|
||||||
|
@ -472,6 +470,11 @@ public final class ClientSession extends Thread
|
||||||
telnet.getPlugin().listener.triggerPlayerListUpdates();
|
telnet.getPlugin().listener.triggerPlayerListUpdates();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ("telnet.enhancedplus".equalsIgnoreCase(command))
|
||||||
|
{
|
||||||
|
enhancedPlusMode = !enhancedPlusMode;
|
||||||
|
writeLine((enhancedPlusMode ? "A" : "Dea") + "ctivated enhanced+ mode.");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writeLine("Invalid telnet command, use \"telnet.help\" to view help.");
|
writeLine("Invalid telnet command, use \"telnet.help\" to view help.");
|
||||||
|
@ -495,4 +498,22 @@ public final class ClientSession extends Thread
|
||||||
writeLine("playerList~" + playerListData);
|
writeLine("playerList~" + playerListData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void syncUsageUpdate(String usageData)
|
||||||
|
{
|
||||||
|
if (!enhancedPlusMode)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized (clientSocket)
|
||||||
|
{
|
||||||
|
if (clientSocket.isClosed())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
writeLine("usage~" + usageData);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,6 @@ public enum FilterMode
|
||||||
{
|
{
|
||||||
|
|
||||||
NONE,
|
NONE,
|
||||||
NONCHAT_ONLY,
|
NON_CHAT_ONLY,
|
||||||
CHAT_ONLY;
|
CHAT_ONLY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.totalfreedom.bukkittelnet.session;
|
package me.totalfreedom.bukkittelnet.session;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
|
@ -156,4 +158,43 @@ public class SessionCommandSender implements ConsoleCommandSender
|
||||||
session.writeRawLine(string);
|
session.writeRawLine(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Spigot spigot()
|
||||||
|
{
|
||||||
|
return new Spigot()
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(BaseComponent component)
|
||||||
|
{
|
||||||
|
SessionCommandSender.this.sendMessage(component.toPlainText());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(BaseComponent... components)
|
||||||
|
{
|
||||||
|
for (BaseComponent bc : components)
|
||||||
|
{
|
||||||
|
sendMessage(bc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID uuid, String string) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID uuid, String[] strings) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawMessage(UUID uuid, String string) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,10 @@ package me.totalfreedom.bukkittelnet.thirdparty;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||||
|
import org.apache.logging.log4j.core.util.IOUtils;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
@ -138,7 +141,8 @@ public class YamlConfig extends YamlConfiguration
|
||||||
final YamlConfiguration DEFAULT_CONFIG = new YamlConfiguration();
|
final YamlConfiguration DEFAULT_CONFIG = new YamlConfiguration();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DEFAULT_CONFIG.load(PLUGIN.getResource(CONFIG_FILE.getName()));
|
final String configString = IOUtils.toString(new InputStreamReader(PLUGIN.getResource(CONFIG_FILE.getName())));
|
||||||
|
DEFAULT_CONFIG.loadFromString(configString);
|
||||||
}
|
}
|
||||||
catch (Throwable ex)
|
catch (Throwable ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# BukkitTelnet v4.2 Configuration File
|
# BukkitTelnet v4.6.1 Configuration File
|
||||||
|
|
||||||
# Address to listen on, leave blank for all
|
# Address to listen on, leave blank for all
|
||||||
address: ''
|
address: ''
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
name: BukkitTelnet
|
name: BukkitTelnet
|
||||||
main: me.totalfreedom.bukkittelnet.BukkitTelnet
|
main: me.totalfreedom.bukkittelnet.BukkitTelnet
|
||||||
version: 4.4
|
version: 4.7
|
||||||
|
api-version: "1.18"
|
||||||
description: Telnet console access plugin.
|
description: Telnet console access plugin.
|
||||||
authors: [bekvon, Madgeek1450, Prozza]
|
authors: [bekvon, Madgeek1450, Prozza]
|
||||||
|
|
Loading…
Reference in a new issue