From bd1d0c207bd575070d297e37e5e1696c388dd0bc Mon Sep 17 00:00:00 2001 From: Jerom van der Sar Date: Sat, 5 Mar 2016 22:03:06 +0100 Subject: [PATCH] Update to v4.3 Mavenized project Refractored files to me.totalfreedom.bukkittelnet package Use instances instead of singletons Fix event behaviour Fix not being able to execute vanilla commands Mass format Compile for Java 1.7 Other changes --- .gitignore | 22 +- LICENSE.md | 55 +- checkstyle.xml | 133 ++ nbproject/build-impl.xml | 1394 ----------------- nbproject/genfiles.properties | 8 - nbproject/project.properties | 102 -- nbproject/project.xml | 13 - pom.xml | 128 ++ .../bukkittelnet/BukkitTelnet.java | 55 + .../bukkittelnet}/PlayerEventListener.java | 24 +- .../bukkittelnet}/SocketListener.java | 27 +- .../bukkittelnet/TelnetConfigLoader.java} | 37 +- .../bukkittelnet}/TelnetLogAppender.java | 67 +- .../bukkittelnet}/TelnetLogger.java | 6 +- .../bukkittelnet}/TelnetServer.java | 34 +- .../me/totalfreedom/bukkittelnet}/Util.java | 3 +- .../totalfreedom/bukkittelnet/api/Server.java | 19 + .../bukkittelnet}/api/TelnetCommandEvent.java | 17 +- .../bukkittelnet/api/TelnetEvent.java | 8 + .../api/TelnetPreLoginEvent.java | 18 +- .../api/TelnetRequestDataTagsEvent.java | 18 +- .../bukkittelnet}/session/ClientSession.java | 60 +- .../bukkittelnet}/session/FilterMode.java | 3 +- .../session/SessionCommandSender.java | 57 +- .../bukkittelnet/thirdparty}/FileUtils.java | 6 +- .../bukkittelnet/thirdparty}/YamlConfig.java | 13 +- src/{ => main/resources}/config.yml | 4 +- src/main/resources/plugin.yml | 5 + .../BukkitTelnet/BukkitTelnet.java | 44 - .../BukkitTelnet/api/TelnetEvent.java | 20 - src/plugin.yml | 5 - supressions.xml | 9 + 32 files changed, 666 insertions(+), 1748 deletions(-) create mode 100644 checkstyle.xml delete mode 100644 nbproject/build-impl.xml delete mode 100644 nbproject/genfiles.properties delete mode 100644 nbproject/project.properties delete mode 100644 nbproject/project.xml create mode 100644 pom.xml create mode 100644 src/main/java/me/totalfreedom/bukkittelnet/BukkitTelnet.java rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/PlayerEventListener.java (84%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/SocketListener.java (86%) rename src/{me/StevenLawson/BukkitTelnet/TelnetConfig.java => main/java/me/totalfreedom/bukkittelnet/TelnetConfigLoader.java} (74%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/TelnetLogAppender.java (63%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/TelnetLogger.java (92%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/TelnetServer.java (77%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/Util.java (95%) create mode 100644 src/main/java/me/totalfreedom/bukkittelnet/api/Server.java rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/api/TelnetCommandEvent.java (75%) create mode 100644 src/main/java/me/totalfreedom/bukkittelnet/api/TelnetEvent.java rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/api/TelnetPreLoginEvent.java (75%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/api/TelnetRequestDataTagsEvent.java (61%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/session/ClientSession.java (90%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/session/FilterMode.java (60%) rename src/{me/StevenLawson/BukkitTelnet => main/java/me/totalfreedom/bukkittelnet}/session/SessionCommandSender.java (71%) rename src/{net/pravian/bukkitlib => main/java/me/totalfreedom/bukkittelnet/thirdparty}/FileUtils.java (97%) rename src/{net/pravian/bukkitlib => main/java/me/totalfreedom/bukkittelnet/thirdparty}/YamlConfig.java (94%) rename src/{ => main/resources}/config.yml (89%) create mode 100644 src/main/resources/plugin.yml delete mode 100644 src/me/StevenLawson/BukkitTelnet/BukkitTelnet.java delete mode 100644 src/me/StevenLawson/BukkitTelnet/api/TelnetEvent.java delete mode 100644 src/plugin.yml create mode 100644 supressions.xml diff --git a/.gitignore b/.gitignore index 82884df..27af358 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,26 @@ # Netbeans excludes -/nbproject/private/ -/dist/ -/build/ +/nbproject/private +/dist +/build +nb-configuration.xml manifest.mf +# Now defines that Maven CheckStyle is used +# nb-configuration.xml # Eclipse excludes .project .classpath -/bin/ -/.settings/ +/bin +/.settings + +# IntelliJ excludes +*.iml +*.ipr +*.iws +/.idea + +# Maven excludes +/target # OS generated files .DS_Store diff --git a/LICENSE.md b/LICENSE.md index 65cc83b..99a177f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,3 +1,54 @@ -# BukkitTelnet License # +# TotalFreedom General License # +_Version 2.0, 27th February 2015_ -BukkitTelnet is licensed under the TotalFreedom General License. It is available [here](https://github.com/TotalFreedom/License/blob/master/LICENSE.md). +Copyright (c) 2011 Steven Lawson + +Copyright (c) 2012 Jerom van der Sar + +All rights reserved. + +##### 1. Definitions ##### +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by this document. + +"Licensor" shall mean the copyright holder or entity authorised by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You", "Your" or "Yourself" shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, binary data, generated documentation, and conversions to other media types. + +"Work" and "This Software" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work. + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +"Redistribution" shall mean any partial or complete availability, transfer or publication of the Work from one Legal Entity to another. + +##### 2. Grant of Copyright License ##### + Subject to the terms and conditions of this License, You are granted a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to prepare Derivative Works of, publicly display, publicly perform, inspect and redistribute the Work and such Derivative Works as long as the following conditions are met: + +1. Redistributions of This Software must solely occur in Source form. Redistribution in Object form is prohibited without prior written permission from the Licensor. + +2. Neither the names of the copyright holders nor the names this software's contributors may be removed from This Software's source code. + +3. Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from This Software without specific prior written permission. + +4. Accreditations referencing This Software's copyright holders or contributors may neither be altered or removed from source code nor withheld from reproduction in Object form whatsoever. + +5. Any conditions specified by this license may be temporarily or permanently waived by any the aforementioned copyright holders. + +6. Redistributions of This Software must retain this License document in its exact form. + +7. Sub licensing of This Software is prohibited without prior written permission from the Licensor. + +##### 3. Submission of Contributions ##### +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +##### 4. Disclaimer of Warranty ##### +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000..e091b33 --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml deleted file mode 100644 index 61e42af..0000000 --- a/nbproject/build-impl.xml +++ /dev/null @@ -1,1394 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set src.dir - Must set build.dir - Must set dist.dir - Must set build.classes.dir - Must set dist.javadoc.dir - Must set build.test.classes.dir - Must set build.test.results.dir - Must set build.classes.excludes - Must set dist.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No tests executed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set JVM to use for profiling in profiler.info.jvm - Must set profiler agent JVM arguments in profiler.info.jvmargs.agent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - - - - - - java -cp "${run.classpath.with.dist.jar}" ${main.class} - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - java -jar "${dist.jar.resolved}" - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - Must select one file in the IDE or set run.class - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set debug.class - - - - - Must select one file in the IDE or set debug.class - - - - - Must set fix.includes - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - Must select one file in the IDE or set profile.class - This target only works when run from inside the NetBeans IDE. - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - - - Must select some files in the IDE or set test.includes - - - - - Must select one file in the IDE or set run.class - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - Some tests failed; see details above. - - - - - - - - - Must select some files in the IDE or set test.includes - - - - Some tests failed; see details above. - - - - Must select some files in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - Some tests failed; see details above. - - - - - Must select one file in the IDE or set test.class - - - - Must select one file in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - - - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties deleted file mode 100644 index f01c92f..0000000 --- a/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=ad7c8973 -build.xml.script.CRC32=48b261b8 -build.xml.stylesheet.CRC32=8064a381@1.74.2.48 -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=ad7c8973 -nbproject/build-impl.xml.script.CRC32=2da68af5 -nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46 diff --git a/nbproject/project.properties b/nbproject/project.properties deleted file mode 100644 index b37d8eb..0000000 --- a/nbproject/project.properties +++ /dev/null @@ -1,102 +0,0 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4 -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4 -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=4 -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=0 -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none -auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader=0 -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.enableCommentFormatting=false -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true -auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true -application.title=BukkitTelnet -application.vendor=Steven Lawson -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/BukkitTelnet.jar -dist.javadoc.dir=${dist.dir}/javadoc -endorsed.classpath= -excludes= -includes=** -jar.archive.disabled=${jnlp.enabled} -jar.compress=false -jar.index=${jnlp.enabled} -javac.classpath=\ - ${libs.Bukkit.classpath}:\ - ${libs.Log4J-core.classpath}:\ - ${libs.Log4J-api.classpath} -# Space-separated list of extra javac options -javac.compilerargs=-Xlint:unchecked -Xlint:deprecation -javac.deprecation=false -javac.processorpath=\ - ${javac.classpath} -javac.source=1.6 -javac.target=1.6 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir}:\ - ${libs.junit.classpath}:\ - ${libs.junit_4.classpath} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -jnlp.codebase.type=no.codebase -jnlp.descriptor=application -jnlp.enabled=false -jnlp.mixed.code=default -jnlp.offline-allowed=false -jnlp.signed=false -jnlp.signing= -jnlp.signing.alias= -jnlp.signing.keystore= -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=true -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project -# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value -# or test-sys-prop.name=value to set system properties for unit tests): -run.jvmargs= -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -source.encoding=UTF-8 -src.dir=src diff --git a/nbproject/project.xml b/nbproject/project.xml deleted file mode 100644 index 68cbb93..0000000 --- a/nbproject/project.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - org.netbeans.modules.java.j2seproject - - - BukkitTelnet - - - - - - - diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ca03365 --- /dev/null +++ b/pom.xml @@ -0,0 +1,128 @@ + + + 4.0.0 + + me.totalfreedom + bukkittelnet + 4.3 + jar + + + UTF-8 + ${project.name} + + + BukkitTelnet + Admin telnet access for minecraft servers. + https://github.com/TotalFreedom/BukkitTelnet + + + + TotalFreedom General License + https://github.com/TotalFreedom/License/blob/master/LICENSE.md + + + + + Total Freedom + https://totalfreedom.me + + + + scm:git:git@github.com:TotalFreedom/BukkitTelnet.git + scm:git:git@github.com:TotalFreedom/BukkitTelnet.git + git@github.com:TotalFreedom/BukkitTelnet.git + + + + + spigot + https://hub.spigotmc.org/nexus/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.9-SNAPSHOT + compile + + + + org.projectlombok + lombok + 1.16.6 + provided + + + + org.apache.logging.log4j + log4j-core + 2.5 + compile + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.7 + 1.7 + 1.7 + + + + + + org.apache.maven.plugins + 2.17 + maven-checkstyle-plugin + + + process-sources + + check + + + + + checkstyle.xml + true + true + true + + + + + + + + + + org.apache.maven.plugins + maven-jxr-plugin + 2.5 + + + + org.apache.maven.plugins + 2.17 + maven-checkstyle-plugin + + checkstyle.xml + true + true + true + + + + + + \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/bukkittelnet/BukkitTelnet.java b/src/main/java/me/totalfreedom/bukkittelnet/BukkitTelnet.java new file mode 100644 index 0000000..dd302e0 --- /dev/null +++ b/src/main/java/me/totalfreedom/bukkittelnet/BukkitTelnet.java @@ -0,0 +1,55 @@ +package me.totalfreedom.bukkittelnet; + +import org.bukkit.Bukkit; +import org.bukkit.event.HandlerList; +import org.bukkit.plugin.java.JavaPlugin; + +public class BukkitTelnet extends JavaPlugin +{ + + private BukkitTelnet plugin; + public TelnetConfigLoader config; + public TelnetServer telnet; + public TelnetLogAppender appender; + public PlayerEventListener listener; + + @Override + public void onLoad() + { + plugin = this; + config = new TelnetConfigLoader(plugin); + telnet = new TelnetServer(plugin, config.getConfig()); + appender = new TelnetLogAppender(); + listener = new PlayerEventListener(plugin); + + TelnetLogger.setPluginLogger(plugin.getLogger()); + TelnetLogger.setServerLogger(Bukkit.getLogger()); + } + + @Override + public void onEnable() + { + config.load(); + + appender.attach(); + + telnet.startServer(); + + getServer().getPluginManager().registerEvents(listener, plugin); + + TelnetLogger.info(plugin.getName() + " v" + plugin.getDescription().getVersion() + " enabled"); + } + + @Override + public void onDisable() + { + HandlerList.unregisterAll(plugin); + + appender.deattach(); + appender.removeAllSesssions(); + + telnet.stopServer(); + + TelnetLogger.info(plugin.getName() + " disabled"); + } +} diff --git a/src/me/StevenLawson/BukkitTelnet/PlayerEventListener.java b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java similarity index 84% rename from src/me/StevenLawson/BukkitTelnet/PlayerEventListener.java rename to src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java index 046ae78..050a952 100644 --- a/src/me/StevenLawson/BukkitTelnet/PlayerEventListener.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java @@ -1,9 +1,9 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import me.StevenLawson.BukkitTelnet.api.TelnetRequestDataTagsEvent; +import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -20,8 +20,12 @@ import org.json.simple.JSONObject; public class PlayerEventListener implements Listener { - public PlayerEventListener() + + private final BukkitTelnet plugin; + + public PlayerEventListener(BukkitTelnet plugin) { + this.plugin = plugin; } @EventHandler(priority = EventPriority.MONITOR) @@ -30,12 +34,6 @@ public class PlayerEventListener implements Listener triggerPlayerListUpdates(); } - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerKick(PlayerKickEvent event) - { - triggerPlayerListUpdates(); - } - @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { @@ -44,7 +42,7 @@ public class PlayerEventListener implements Listener private static BukkitTask updateTask = null; - public static void triggerPlayerListUpdates() + public void triggerPlayerListUpdates() { if (updateTask != null) { @@ -56,7 +54,7 @@ public class PlayerEventListener implements Listener @Override public void run() { - final SocketListener socketListener = TelnetServer.getInstance().getSocketListener(); + final SocketListener socketListener = plugin.telnet.getSocketListener(); if (socketListener != null) { final TelnetRequestDataTagsEvent event = new TelnetRequestDataTagsEvent(); @@ -64,7 +62,7 @@ public class PlayerEventListener implements Listener socketListener.triggerPlayerListUpdates(generatePlayerList(event.getDataTags())); } } - }.runTaskLater(BukkitTelnet.plugin, 20L * 2L); + }.runTaskLater(plugin, 20L * 2L); } @SuppressWarnings("unchecked") @@ -75,7 +73,7 @@ public class PlayerEventListener implements Listener final Iterator>> dataTagsIt = dataTags.entrySet().iterator(); while (dataTagsIt.hasNext()) { - final HashMap info = new HashMap(); + final HashMap info = new HashMap<>(); final Map.Entry> dataTagsEntry = dataTagsIt.next(); final Player player = dataTagsEntry.getKey(); diff --git a/src/me/StevenLawson/BukkitTelnet/SocketListener.java b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java similarity index 86% rename from src/me/StevenLawson/BukkitTelnet/SocketListener.java rename to src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java index 46fcda8..578655c 100644 --- a/src/me/StevenLawson/BukkitTelnet/SocketListener.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/SocketListener.java @@ -1,4 +1,4 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.io.BufferedWriter; import java.io.IOException; @@ -12,20 +12,22 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import me.StevenLawson.BukkitTelnet.session.ClientSession; +import me.totalfreedom.bukkittelnet.session.ClientSession; public class SocketListener extends Thread { - public static long LISTEN_THRESHOLD_MILLIS = 10000; - private final ServerSocket serverSocket; - private final List clientSessions; - private final Map recentIPs; - public SocketListener(ServerSocket serverSocket) + public static long LISTEN_THRESHOLD_MILLIS = 10000; + // + private final TelnetServer telnet; + private final ServerSocket serverSocket; + private final List clientSessions = new ArrayList<>(); + private final Map recentIPs = new HashMap<>(); + + public SocketListener(TelnetServer telnet, ServerSocket serverSocket) { + this.telnet = telnet; this.serverSocket = serverSocket; - this.clientSessions = new ArrayList(); - this.recentIPs = new HashMap(); } @Override @@ -46,7 +48,6 @@ public class SocketListener extends Thread // Remove old entries final Iterator> it = recentIPs.entrySet().iterator(); - Entry entry; while (it.hasNext()) { if (it.next().getValue() + LISTEN_THRESHOLD_MILLIS < System.currentTimeMillis()) @@ -89,12 +90,14 @@ public class SocketListener extends Thread recentIPs.put(addr, System.currentTimeMillis()); - final ClientSession clientSession = new ClientSession(clientSocket); + final ClientSession clientSession = new ClientSession(telnet, clientSocket); clientSessions.add(clientSession); clientSession.start(); removeDisconnected(); } + + TelnetLogger.info("Server closed"); } private void removeDisconnected() @@ -107,7 +110,7 @@ public class SocketListener extends Thread if (!session.syncIsConnected()) { - TelnetLogAppender.getInstance().removeSession(session); + telnet.getPlugin().appender.removeSession(session); it.remove(); } } diff --git a/src/me/StevenLawson/BukkitTelnet/TelnetConfig.java b/src/main/java/me/totalfreedom/bukkittelnet/TelnetConfigLoader.java similarity index 74% rename from src/me/StevenLawson/BukkitTelnet/TelnetConfig.java rename to src/main/java/me/totalfreedom/bukkittelnet/TelnetConfigLoader.java index 2c676b2..9c073c9 100644 --- a/src/me/StevenLawson/BukkitTelnet/TelnetConfig.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/TelnetConfigLoader.java @@ -1,23 +1,24 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import net.pravian.bukkitlib.YamlConfig; +import me.totalfreedom.bukkittelnet.thirdparty.YamlConfig; -public class TelnetConfig +public class TelnetConfigLoader { - private final YamlConfig config; - private final SimpleConfigEntries configEntries; - private TelnetConfig() + private final YamlConfig config; + private final TelnetConfig configEntries; + + public TelnetConfigLoader(BukkitTelnet plugin) { - configEntries = new SimpleConfigEntries(); - config = new YamlConfig(BukkitTelnet.plugin, "config.yml", true); + configEntries = new TelnetConfig(); + config = new YamlConfig(plugin, "config.yml", true); } - public void loadConfig() + public void load() { config.load(); @@ -48,21 +49,22 @@ public class TelnetConfig } } - public SimpleConfigEntries getConfigEntries() + public TelnetConfig getConfig() { return configEntries; } - public static final class SimpleConfigEntries + public static final class TelnetConfig { + private int port; private String address; private String password; private final Map> admins; - private SimpleConfigEntries() + private TelnetConfig() { - admins = new HashMap>(); + admins = new HashMap<>(); } public int getPort() @@ -111,13 +113,4 @@ public class TelnetConfig } } - public static TelnetConfig getInstance() - { - return TelnetConfigHolder.INSTANCE; - } - - private static class TelnetConfigHolder - { - private static final TelnetConfig INSTANCE = new TelnetConfig(); - } } diff --git a/src/me/StevenLawson/BukkitTelnet/TelnetLogAppender.java b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java similarity index 63% rename from src/me/StevenLawson/BukkitTelnet/TelnetLogAppender.java rename to src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java index 59967dc..44c5e73 100644 --- a/src/me/StevenLawson/BukkitTelnet/TelnetLogAppender.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogAppender.java @@ -1,26 +1,30 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Collections; +import java.util.Date; import java.util.HashSet; import java.util.Set; -import me.StevenLawson.BukkitTelnet.session.ClientSession; -import me.StevenLawson.BukkitTelnet.session.FilterMode; +import me.totalfreedom.bukkittelnet.session.ClientSession; +import me.totalfreedom.bukkittelnet.session.FilterMode; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.appender.AbstractAppender; public class TelnetLogAppender extends AbstractAppender { + private final Set sessions; private final SimpleDateFormat dateFormat; - private TelnetLogAppender() + public TelnetLogAppender() { super("BukkitTelnet", null, null); - this.sessions = new HashSet(); + this.sessions = new HashSet<>(); this.dateFormat = new SimpleDateFormat("HH:mm:ss"); super.start(); @@ -53,33 +57,33 @@ public class TelnetLogAppender extends AbstractAppender for (ClientSession session : sessions) { - if (!session.syncIsConnected()) + try { - continue; - } - - if (session.getFilterMode() == FilterMode.CHAT_ONLY) - { - if (!(message.startsWith("<") - || message.startsWith("[Server") - || message.startsWith("[CONSOLE") || message.startsWith("[TotalFreedomMod] [ADMIN]"))) + if (!session.syncIsConnected()) { - return; + continue; } - } - if (session.getFilterMode() == FilterMode.NONCHAT_ONLY) - { - if (message.startsWith("<") + boolean chat = message.startsWith("<") || message.startsWith("[Server") - || message.startsWith("[CONSOLE") - || message.startsWith("[TotalFreedomMod] [ADMIN]")) - { - return; - } - } + || message.startsWith("[CONSOLE") || message.startsWith("[TotalFreedomMod] [ADMIN]"); - session.printRawLine(formatMessage(message, event)); + if (session.getFilterMode() == FilterMode.CHAT_ONLY && !chat) + { + continue; + } + + if (session.getFilterMode() == FilterMode.NONCHAT_ONLY && chat) + { + continue; + } + + session.writeRawLine(formatMessage(message, event)); + } + catch (Exception ex) + { + ex.printStackTrace(); + } } } @@ -89,7 +93,7 @@ public class TelnetLogAppender extends AbstractAppender final Throwable ex = event.getThrown(); builder.append("["); - builder.append(dateFormat.format(event.getMillis())); + builder.append(dateFormat.format(new Date())); builder.append(" "); builder.append(event.getLevel().name().toUpperCase()); builder.append("]: "); @@ -105,13 +109,14 @@ public class TelnetLogAppender extends AbstractAppender return builder.toString(); } - public static TelnetLogAppender getInstance() + public void attach() { - return TelnetLogAppenderHolder.INSTANCE; + ((Logger) LogManager.getRootLogger()).addAppender(this); } - private static class TelnetLogAppenderHolder + public void deattach() { - private static final TelnetLogAppender INSTANCE = new TelnetLogAppender(); + ((Logger) LogManager.getRootLogger()).removeAppender(this); } + } diff --git a/src/me/StevenLawson/BukkitTelnet/TelnetLogger.java b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogger.java similarity index 92% rename from src/me/StevenLawson/BukkitTelnet/TelnetLogger.java rename to src/main/java/me/totalfreedom/bukkittelnet/TelnetLogger.java index ca2c994..defea67 100644 --- a/src/me/StevenLawson/BukkitTelnet/TelnetLogger.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/TelnetLogger.java @@ -1,18 +1,16 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.util.logging.Logger; import org.apache.commons.lang.exception.ExceptionUtils; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; public final class TelnetLogger { + private static Logger serverLogger = null; private static Logger pluginLogger = null; private TelnetLogger() { - throw new AssertionError(); } public static void setServerLogger(Logger serverLogger) diff --git a/src/me/StevenLawson/BukkitTelnet/TelnetServer.java b/src/main/java/me/totalfreedom/bukkittelnet/TelnetServer.java similarity index 77% rename from src/me/StevenLawson/BukkitTelnet/TelnetServer.java rename to src/main/java/me/totalfreedom/bukkittelnet/TelnetServer.java index 1ea6979..9dcb89c 100644 --- a/src/me/StevenLawson/BukkitTelnet/TelnetServer.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/TelnetServer.java @@ -1,26 +1,35 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.UnknownHostException; -import me.StevenLawson.BukkitTelnet.TelnetConfig.SimpleConfigEntries; +import lombok.Getter; +import me.totalfreedom.bukkittelnet.TelnetConfigLoader.TelnetConfig; +import me.totalfreedom.bukkittelnet.api.Server; -public class TelnetServer +public class TelnetServer implements Server { + + @Getter + private final BukkitTelnet plugin; + @Getter + private final TelnetConfig config; + // private SocketListener socketListener; - private TelnetServer() + public TelnetServer(BukkitTelnet plugin, TelnetConfig config) { + this.plugin = plugin; + this.config = config; } + @Override public void startServer() { // If the server is running, stop it stopServer(); - final SimpleConfigEntries config = TelnetConfig.getInstance().getConfigEntries(); - // Server address, optional. final InetAddress hostAddress; @@ -64,13 +73,14 @@ public class TelnetServer return; } - socketListener = new SocketListener(serversocket); + socketListener = new SocketListener(this, serversocket); socketListener.start(); final String host = serversocket.getInetAddress().getHostAddress().replace("0.0.0.0", "*"); TelnetLogger.info("Server started on " + host + ":" + serversocket.getLocalPort()); } + @Override public void stopServer() { if (socketListener == null) @@ -81,18 +91,10 @@ public class TelnetServer socketListener.stopServer(); } + @Override public SocketListener getSocketListener() { return socketListener; } - public static TelnetServer getInstance() - { - return TelnetServerHolder.INSTANCE; - } - - private static class TelnetServerHolder - { - private static final TelnetServer INSTANCE = new TelnetServer(); - } } diff --git a/src/me/StevenLawson/BukkitTelnet/Util.java b/src/main/java/me/totalfreedom/bukkittelnet/Util.java similarity index 95% rename from src/me/StevenLawson/BukkitTelnet/Util.java rename to src/main/java/me/totalfreedom/bukkittelnet/Util.java index 2f5ef61..b89cae3 100644 --- a/src/me/StevenLawson/BukkitTelnet/Util.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/Util.java @@ -1,7 +1,8 @@ -package me.StevenLawson.BukkitTelnet; +package me.totalfreedom.bukkittelnet; public class Util { + public static boolean fuzzyIpMatch(String a, String b, int octets) { boolean match = true; diff --git a/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java b/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java new file mode 100644 index 0000000..0fffc1e --- /dev/null +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/Server.java @@ -0,0 +1,19 @@ +/* + * 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; + +import me.totalfreedom.bukkittelnet.SocketListener; + +public interface Server +{ + + public void startServer(); + + public void stopServer(); + + public SocketListener getSocketListener(); + +} diff --git a/src/me/StevenLawson/BukkitTelnet/api/TelnetCommandEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetCommandEvent.java similarity index 75% rename from src/me/StevenLawson/BukkitTelnet/api/TelnetCommandEvent.java rename to src/main/java/me/totalfreedom/bukkittelnet/api/TelnetCommandEvent.java index 61b935d..53fbe95 100644 --- a/src/me/StevenLawson/BukkitTelnet/api/TelnetCommandEvent.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetCommandEvent.java @@ -1,10 +1,14 @@ -package me.StevenLawson.BukkitTelnet.api; +package me.totalfreedom.bukkittelnet.api; import org.bukkit.command.CommandSender; import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; public class TelnetCommandEvent extends TelnetEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled; private CommandSender sender; private String command; @@ -52,4 +56,15 @@ public class TelnetCommandEvent extends TelnetEvent implements Cancellable this.command = command; } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } } diff --git a/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetEvent.java new file mode 100644 index 0000000..e124f6a --- /dev/null +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetEvent.java @@ -0,0 +1,8 @@ +package me.totalfreedom.bukkittelnet.api; + +import org.bukkit.event.server.ServerEvent; + +public abstract class TelnetEvent extends ServerEvent +{ + +} diff --git a/src/me/StevenLawson/BukkitTelnet/api/TelnetPreLoginEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetPreLoginEvent.java similarity index 75% rename from src/me/StevenLawson/BukkitTelnet/api/TelnetPreLoginEvent.java rename to src/main/java/me/totalfreedom/bukkittelnet/api/TelnetPreLoginEvent.java index fb6bfcb..ef46c8b 100644 --- a/src/me/StevenLawson/BukkitTelnet/api/TelnetPreLoginEvent.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetPreLoginEvent.java @@ -1,11 +1,14 @@ -package me.StevenLawson.BukkitTelnet.api; +package me.totalfreedom.bukkittelnet.api; import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; public class TelnetPreLoginEvent extends TelnetEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancelled = false; - // private String name; private final String ip; private boolean bypassPassword; @@ -53,4 +56,15 @@ public class TelnetPreLoginEvent extends TelnetEvent implements Cancellable { this.bypassPassword = bypassPassword; } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } } diff --git a/src/me/StevenLawson/BukkitTelnet/api/TelnetRequestDataTagsEvent.java b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java similarity index 61% rename from src/me/StevenLawson/BukkitTelnet/api/TelnetRequestDataTagsEvent.java rename to src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java index 7a3c818..c02b810 100644 --- a/src/me/StevenLawson/BukkitTelnet/api/TelnetRequestDataTagsEvent.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/api/TelnetRequestDataTagsEvent.java @@ -1,13 +1,16 @@ -package me.StevenLawson.BukkitTelnet.api; +package me.totalfreedom.bukkittelnet.api; import java.util.HashMap; import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; public class TelnetRequestDataTagsEvent extends TelnetEvent { - private final Map> dataTags = new HashMap>(); + + private static final HandlerList handlers = new HandlerList(); + private final Map> dataTags = new HashMap<>(); public TelnetRequestDataTagsEvent() { @@ -21,4 +24,15 @@ public class TelnetRequestDataTagsEvent extends TelnetEvent { return dataTags; } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } } diff --git a/src/me/StevenLawson/BukkitTelnet/session/ClientSession.java b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java similarity index 90% rename from src/me/StevenLawson/BukkitTelnet/session/ClientSession.java rename to src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java index 51d7d21..42c0b9c 100644 --- a/src/me/StevenLawson/BukkitTelnet/session/ClientSession.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/session/ClientSession.java @@ -1,7 +1,7 @@ -package me.StevenLawson.BukkitTelnet.session; +package me.totalfreedom.bukkittelnet.session; -import me.StevenLawson.BukkitTelnet.api.TelnetPreLoginEvent; -import me.StevenLawson.BukkitTelnet.api.TelnetCommandEvent; +import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent; +import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; @@ -11,12 +11,9 @@ import java.net.Socket; import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import me.StevenLawson.BukkitTelnet.BukkitTelnet; -import me.StevenLawson.BukkitTelnet.PlayerEventListener; -import me.StevenLawson.BukkitTelnet.TelnetConfig; -import me.StevenLawson.BukkitTelnet.TelnetLogAppender; -import me.StevenLawson.BukkitTelnet.TelnetLogger; -import me.StevenLawson.BukkitTelnet.Util; +import me.totalfreedom.bukkittelnet.TelnetLogger; +import me.totalfreedom.bukkittelnet.TelnetServer; +import me.totalfreedom.bukkittelnet.Util; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; @@ -24,14 +21,16 @@ import org.bukkit.scheduler.BukkitRunnable; public final class ClientSession extends Thread { + public static final Pattern NONASCII_FILTER = Pattern.compile("[^\\x20-\\x7E]"); 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/\\?!\\.]+"); // + private final TelnetServer telnet; private final Socket clientSocket; private final String clientAddress; - // private final SessionCommandSender commandSender; + // private FilterMode filterMode; // private BufferedWriter writer; @@ -40,21 +39,21 @@ public final class ClientSession extends Thread private boolean hasTerminated; private boolean enhancedMode = false; - public ClientSession(Socket clientSocket) + public ClientSession(TelnetServer telnet, Socket clientSocket) { + this.telnet = telnet; this.clientSocket = clientSocket; this.clientAddress = clientSocket.getInetAddress().getHostAddress(); this.username = ""; this.commandSender = new SessionCommandSender(this); this.filterMode = FilterMode.FULL; this.hasTerminated = false; - - TelnetLogger.info("Client connected: " + clientAddress); } @Override public void run() { + TelnetLogger.info("Client connected: " + clientAddress); try { synchronized (clientSocket) @@ -100,7 +99,7 @@ public final class ClientSession extends Thread hasTerminated = true; TelnetLogger.info("Closing connection: " + clientAddress + (username.isEmpty() ? "" : " (" + username + ")")); - TelnetLogAppender.getInstance().removeSession(this); + telnet.getPlugin().appender.removeSession(this); synchronized (clientSocket) { @@ -141,7 +140,12 @@ public final class ClientSession extends Thread this.filterMode = filterMode; } - public void printRawLine(String message) + public void writeLine(String message) + { + writeRawLine("[" + (username.isEmpty() ? "" : username + "@") + "BukkitTelnet]$ " + message); + } + + public void writeRawLine(String message) { if (writer == null || !syncIsConnected()) { @@ -158,11 +162,6 @@ public final class ClientSession extends Thread } } - public void writeLine(String message) - { - printRawLine("[" + (username.isEmpty() ? "" : username + "@") + "BukkitTelnet]$ " + message); - } - public void flush() { if (writer == null || !syncIsConnected()) @@ -191,19 +190,14 @@ public final class ClientSession extends Thread final TelnetCommandEvent event = new TelnetCommandEvent(commandSender, command); server.getPluginManager().callEvent(event); - if (event.isCancelled()) - { - return; - } - - if (event.getCommand().isEmpty()) + if (event.isCancelled() || event.getCommand().isEmpty()) { return; } server.dispatchCommand(event.getSender(), event.getCommand()); } - }.runTask(BukkitTelnet.plugin); + }.runTask(telnet.getPlugin()); } private boolean authenticate() @@ -218,7 +212,7 @@ public final class ClientSession extends Thread // Pre-authenticate IP addresses if (clientAddress != null) { - final Map> admins = TelnetConfig.getInstance().getConfigEntries().getAdmins(); + final Map> admins = telnet.getConfig().getAdmins(); // For every admin for (String name : admins.keySet()) @@ -337,7 +331,7 @@ public final class ClientSession extends Thread input = AUTH_INPUT_FILTER.matcher(input).replaceAll("").trim(); - if (TelnetConfig.getInstance().getConfigEntries().getPassword().equals(input)) + if (telnet.getConfig().getPassword().equals(input)) { return true; } @@ -366,7 +360,7 @@ public final class ClientSession extends Thread TelnetLogger.info(clientAddress + " logged in as \"" + username + "\"."); // Start feeding data to the client. - TelnetLogAppender.getInstance().addSession(this); + telnet.getPlugin().appender.addSession(this); // Process commands while (syncIsConnected()) @@ -379,6 +373,7 @@ public final class ClientSession extends Thread } catch (IOException ex) { + TelnetLogger.severe(ex); break; } @@ -421,6 +416,7 @@ public final class ClientSession extends Thread { writeLine("Shutting down the server..."); TelnetLogger.warning(username + ": Shutting down the server..."); + Bukkit.shutdown(); System.exit(0); } else if ("telnet.log".equalsIgnoreCase(command)) @@ -449,7 +445,7 @@ public final class ClientSession extends Thread } else if ("telnet.exit".equalsIgnoreCase(command)) { - writeLine("Goodbye."); + writeLine("Goodbye. <3"); syncTerminateSession(); } else if ("telnet.enhanced".equalsIgnoreCase(command)) @@ -458,7 +454,7 @@ public final class ClientSession extends Thread writeLine((enhancedMode ? "A" : "Dea") + "ctivated enhanced mode."); if (enhancedMode) { - PlayerEventListener.triggerPlayerListUpdates(); + telnet.getPlugin().listener.triggerPlayerListUpdates(); } } else diff --git a/src/me/StevenLawson/BukkitTelnet/session/FilterMode.java b/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java similarity index 60% rename from src/me/StevenLawson/BukkitTelnet/session/FilterMode.java rename to src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java index aaa55fc..0649504 100644 --- a/src/me/StevenLawson/BukkitTelnet/session/FilterMode.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/session/FilterMode.java @@ -1,7 +1,8 @@ -package me.StevenLawson.BukkitTelnet.session; +package me.totalfreedom.bukkittelnet.session; public enum FilterMode { + FULL, NONCHAT_ONLY, CHAT_ONLY; diff --git a/src/me/StevenLawson/BukkitTelnet/session/SessionCommandSender.java b/src/main/java/me/totalfreedom/bukkittelnet/session/SessionCommandSender.java similarity index 71% rename from src/me/StevenLawson/BukkitTelnet/session/SessionCommandSender.java rename to src/main/java/me/totalfreedom/bukkittelnet/session/SessionCommandSender.java index d63f625..c61814e 100644 --- a/src/me/StevenLawson/BukkitTelnet/session/SessionCommandSender.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/session/SessionCommandSender.java @@ -1,16 +1,19 @@ -package me.StevenLawson.BukkitTelnet.session; +package me.totalfreedom.bukkittelnet.session; import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Server; -import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.conversations.Conversation; +import org.bukkit.conversations.ConversationAbandonedEvent; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.Plugin; -public class SessionCommandSender implements CommandSender +public class SessionCommandSender implements ConsoleCommandSender { + private final ClientSession session; public SessionCommandSender(ClientSession session) @@ -21,13 +24,7 @@ public class SessionCommandSender implements CommandSender @Override public void sendMessage(String message) { - session.printRawLine(message); - } - - @Override - public String getName() - { - return this.session.getUserName(); + session.writeRawLine(message); } @Override @@ -39,6 +36,12 @@ public class SessionCommandSender implements CommandSender } } + @Override + public String getName() + { + return this.session.getUserName(); + } + @Override public Server getServer() { @@ -119,4 +122,38 @@ public class SessionCommandSender implements CommandSender public void setOp(boolean value) { } + + @Override + public boolean isConversing() + { + return false; + } + + @Override + public void acceptConversationInput(String string) + { + } + + @Override + public boolean beginConversation(Conversation c) + { + return false; + } + + @Override + public void abandonConversation(Conversation c) + { + } + + @Override + public void abandonConversation(Conversation c, ConversationAbandonedEvent cae) + { + } + + @Override + public void sendRawMessage(String string) + { + session.writeRawLine(string); + } + } diff --git a/src/net/pravian/bukkitlib/FileUtils.java b/src/main/java/me/totalfreedom/bukkittelnet/thirdparty/FileUtils.java similarity index 97% rename from src/net/pravian/bukkitlib/FileUtils.java rename to src/main/java/me/totalfreedom/bukkittelnet/thirdparty/FileUtils.java index e5c43dc..a384017 100644 --- a/src/net/pravian/bukkitlib/FileUtils.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/thirdparty/FileUtils.java @@ -1,4 +1,4 @@ -package net.pravian.bukkitlib; +package me.totalfreedom.bukkittelnet.thirdparty; import java.io.File; import java.io.FileInputStream; @@ -19,6 +19,7 @@ import org.bukkit.plugin.Plugin; */ public class FileUtils { + /** * Downloads a file from the specified URIL and saves it at the specified location. * @@ -121,7 +122,8 @@ public class FileUtils /** * Delete a specified folder and all contents quietly. * - *

Warning: This method will delete files, only folders!

+ *

+ * Warning: This method will delete files, only folders!

* * @param file The folder to delete. * @return true if the delete was successful. diff --git a/src/net/pravian/bukkitlib/YamlConfig.java b/src/main/java/me/totalfreedom/bukkittelnet/thirdparty/YamlConfig.java similarity index 94% rename from src/net/pravian/bukkitlib/YamlConfig.java rename to src/main/java/me/totalfreedom/bukkittelnet/thirdparty/YamlConfig.java index a1aa343..c9d1196 100644 --- a/src/net/pravian/bukkitlib/YamlConfig.java +++ b/src/main/java/me/totalfreedom/bukkittelnet/thirdparty/YamlConfig.java @@ -1,4 +1,4 @@ -package net.pravian.bukkitlib; +package me.totalfreedom.bukkittelnet.thirdparty; import java.io.File; import java.io.IOException; @@ -13,6 +13,7 @@ import org.bukkit.plugin.Plugin; */ public class YamlConfig extends YamlConfiguration { + private final Plugin PLUGIN; private final File CONFIG_FILE; private final boolean COPY_DEFAULTS; @@ -20,7 +21,8 @@ public class YamlConfig extends YamlConfiguration /** * Creates a new YamlConfig instance. * - *

Example: + *

+ * Example: *

      * YamlConfig config = new YamlConfig(this, "config.yml", true);
      * config.load();
@@ -38,7 +40,8 @@ public class YamlConfig extends YamlConfiguration
     /**
      * Creates a new YamlConfig instance.
      *
-     * 

Example: + *

+ * Example: *

      * YamlConfig config = new YamlConfig(this, new File(plugin.getDataFolder() + "/players", "DarthSalamon.yml"), false);
      * config.load();
@@ -76,7 +79,8 @@ public class YamlConfig extends YamlConfiguration
     /**
      * Loads the configuration from the predefined file.
      *
-     * 

Optionally, if loadDefaults has been set to true, the file will be copied over from the default inside the jar-file of the owning plugin.

+ *

+ * Optionally, if loadDefaults has been set to true, the file will be copied over from the default inside the jar-file of the owning plugin.

* * @see #YamlConfig(Plugin, String, boolean) */ @@ -126,6 +130,7 @@ public class YamlConfig extends YamlConfiguration /** * Returns the default configuration as been stored in the jar-file of the owning plugin. + * * @return The default configuration. */ public YamlConfiguration getDefaultConfig() diff --git a/src/config.yml b/src/main/resources/config.yml similarity index 89% rename from src/config.yml rename to src/main/resources/config.yml index b491616..81ccde1 100644 --- a/src/config.yml +++ b/src/main/resources/config.yml @@ -13,7 +13,7 @@ password: 'walrus' admins: madgeek1450: - 74.131.135.3 - darthsalamon: - - 94.209.214.179 + prozza: + - 176.56.237.227 markbyron: - 71.47.67.103 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..e73663f --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,5 @@ +name: BukkitTelnet +main: me.totalfreedom.bukkittelnet.BukkitTelnet +version: 4.3 +description: Telnet console access plugin. +authors: [bekvon, Madgeek1450, Prozza] diff --git a/src/me/StevenLawson/BukkitTelnet/BukkitTelnet.java b/src/me/StevenLawson/BukkitTelnet/BukkitTelnet.java deleted file mode 100644 index 51c9a1b..0000000 --- a/src/me/StevenLawson/BukkitTelnet/BukkitTelnet.java +++ /dev/null @@ -1,44 +0,0 @@ -package me.StevenLawson.BukkitTelnet; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.core.Logger; -import org.bukkit.Server; -import org.bukkit.plugin.java.JavaPlugin; - -public class BukkitTelnet extends JavaPlugin -{ - public static BukkitTelnet plugin; - public static Server server; - - @Override - public void onLoad() - { - plugin = this; - server = plugin.getServer(); - - TelnetLogger.setPluginLogger(plugin.getLogger()); - TelnetLogger.setServerLogger(server.getLogger()); - } - - @Override - public void onEnable() - { - TelnetConfig.getInstance().loadConfig(); - - ((Logger) LogManager.getRootLogger()).addAppender(TelnetLogAppender.getInstance()); - - TelnetServer.getInstance().startServer(); - - TelnetLogger.info(plugin.getName() + " v" + plugin.getDescription().getVersion() + " enabled"); - - this.getServer().getPluginManager().registerEvents(new PlayerEventListener(), plugin); - } - - @Override - public void onDisable() - { - TelnetServer.getInstance().stopServer(); - - TelnetLogger.info(plugin.getName() + " disabled."); - } -} diff --git a/src/me/StevenLawson/BukkitTelnet/api/TelnetEvent.java b/src/me/StevenLawson/BukkitTelnet/api/TelnetEvent.java deleted file mode 100644 index 643181a..0000000 --- a/src/me/StevenLawson/BukkitTelnet/api/TelnetEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -package me.StevenLawson.BukkitTelnet.api; - -import org.bukkit.event.HandlerList; -import org.bukkit.event.server.ServerEvent; - -public abstract class TelnetEvent extends ServerEvent -{ - private static final HandlerList handlers = new HandlerList(); - - @Override - public HandlerList getHandlers() - { - return handlers; - } - - public static HandlerList getHandlerList() - { - return handlers; - } -} diff --git a/src/plugin.yml b/src/plugin.yml deleted file mode 100644 index dbbcc4c..0000000 --- a/src/plugin.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: BukkitTelnet -main: me.StevenLawson.BukkitTelnet.BukkitTelnet -version: 4.2 -description: Telnet console access plugin. -authors: [bekvon, Madgeek1450, DarthSalamon] diff --git a/supressions.xml b/supressions.xml new file mode 100644 index 0000000..5fdfc91 --- /dev/null +++ b/supressions.xml @@ -0,0 +1,9 @@ + + + + + + +