Removed the proxy and added the MineOnline protocol.

This commit is contained in:
Codie Newark 2021-07-09 01:08:16 +01:00
parent 7acc9c0171
commit fa109c49e5
9 changed files with 292 additions and 654 deletions

455
.idea/workspace.xml generated
View File

@ -7,34 +7,15 @@
</component>
<component name="ChangeListManager">
<list default="true" id="e42abf2d-5ce3-4d3a-b3e0-db470c42f0ce" name="Default Changelist" comment="Added bukkit chat bridge.">
<change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/artifacts/MineOnlineBroadcast.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/libraries/Minecraft_Mod.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/libraries/Minecraft_Mod.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/CheckServerURLConnection.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandler.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandlerFactory.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/MineOnlineBroadcast.iml" beforeDir="false" afterPath="$PROJECT_DIR$/OnlineModeFix.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lib/JDA-4.2.0_168-withDependencies-min.jar" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/lib/discord-webhooks-0.5.0.jar" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/lib/json.jar" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/res/plugin.yml" beforeDir="false" afterPath="$PROJECT_DIR$/res/plugin.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/MineOnlineBroadcast.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/OnlineModeFix.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/MineOnlineBroadcastListener.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/MineOnlineConfig.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/common/input/AbstractColorCodeProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/common/input/EColorCodeColor.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/common/input/IColorCodeProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/minecraft/server/AbstractMinecraftColorCodeProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/minecraft/server/MinecraftColorCodeProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/api/MineOnlineAPI.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/discord/DiscordChatBridge.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/discord/IAvatarProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/discord/IMessageRecievedListener.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/discord/IShutdownListener.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/discord/MinotarAvatarProvider.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineBroadcastListener.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineBroadcastPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineConfig.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/OnlineModeFix.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/OnlineModeFix.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/ProxyThread.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/gg/codie/utils/ArrayUtils.java" beforeDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@ -46,8 +27,35 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/CheckServerURLConnection.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-85">
<caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#1635#1636#0" expanded="true" />
<element signature="e#1729#1730#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandler.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="15" column="12" selection-start-line="15" selection-start-column="12" selection-end-line="15" selection-end-column="12" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandlerFactory.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="15" selection-start-line="15" selection-end-line="15" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
@ -59,19 +67,20 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/OnlineModeFix.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="16" column="52" selection-start-line="16" selection-start-column="52" selection-end-line="16" selection-end-column="52" />
<state relative-caret-position="204">
<caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#631#632#0" expanded="true" />
<element signature="e#665#666#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
@ -84,11 +93,10 @@
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
<caret line="18" column="17" selection-start-line="18" selection-end-line="19" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2569#2570#0" expanded="true" />
<element signature="e#2597#2598#0" expanded="true" />
<element signature="e#760#761#0" expanded="true" />
<element signature="e#805#806#0" expanded="true" />
</folding>
</state>
</provider>
@ -97,20 +105,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/res/plugin.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="9" column="10" selection-start-line="9" selection-start-column="10" selection-end-line="9" selection-end-column="10" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/ProxyThread.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-2135">
<caret line="102" column="35" selection-start-line="102" selection-start-column="35" selection-end-line="102" selection-end-column="35" />
<folding>
<element signature="imports" expanded="true" />
</folding>
<state relative-caret-position="136">
<caret line="8" column="15" lean-forward="true" selection-start-line="8" selection-start-column="15" selection-end-line="8" selection-end-column="15" />
</state>
</provider>
</entry>
@ -139,6 +135,7 @@
<find>PLAYER_</find>
<find>discord.</find>
<find>online-mo</find>
<find>1.1.0</find>
</findStrings>
</component>
<component name="Git.Settings">
@ -174,19 +171,23 @@
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/RemoteStatusChallenge.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/StatusChallengeUtils.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineBroadcastPlugin.java" />
<option value="$PROJECT_DIR$/.idea/artifacts/MineOnlineBroadcast.xml" />
<option value="$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/SkinURLConnection.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/CheckServerURLConnection.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/OnlineModeURLStreamHandler.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandler.java" />
<option value="$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java" />
<option value="$PROJECT_DIR$/src/OnlineModeFix.java" />
<option value="$PROJECT_DIR$/res/plugin.yml" />
<option value="$PROJECT_DIR$/.idea/artifacts/MineOnlineBroadcast.xml" />
<option value="$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1294" />
<option name="height" value="1417" />
<component name="ProjectFrameBounds">
<option name="x" value="-11" />
<option name="y" value="-11" />
<option name="width" value="1943" />
<option name="height" value="2136" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
@ -194,86 +195,54 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name=".idea" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name=".idea" type="462c0819:PsiDirectoryNode" />
<item name="artifacts" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name=".idea" type="462c0819:PsiDirectoryNode" />
<item name="libraries" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
<item name="lib" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
<item name="res" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="codie" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="onlinemodefix" type="b2602c69:ProjectViewProjectNode" />
<item name="onlinemodefix" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="codie" type="462c0819:PsiDirectoryNode" />
<item name="api" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="codie" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="MineOnlineBroadcast" type="b2602c69:ProjectViewProjectNode" />
<item name="MineOnlineBroadcast" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="codie" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
<item name="bukkit" type="462c0819:PsiDirectoryNode" />
<item name="mineonline" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1621561939297" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../MineOnlineBroadcast-Bukkit/lib/Minecraft_Mod.jar!/" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1625789267014" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="project.structure.last.edited" value="Libraries" />
@ -282,24 +251,24 @@
<property name="settings.editor.selected.configurable" value="preferences.lookFeel" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\lib" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\res" />
</key>
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
<recent name="" />
<recent name="gg.codie.mineonline.plugin" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\minecraft" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\common" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\lib" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\utils" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit" />
</key>
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="gg.codie.mineonline.discord" />
<recent name="gg.codie.minecraft" />
</key>
<key name="MoveFile.RECENT_KEYS">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\Projects\GitHub\onlinemodefix\src\gg\codie\mineonline\protocol" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\minecraft" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\common" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\lib" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\res" />
<recent name="D:\Projects\GitHub\MineOnlineBroadcast-Bukkit\src\gg\codie\utils" />
</key>
</component>
<component name="RunDashboard">
@ -314,55 +283,6 @@
</list>
</option>
</component>
<component name="RunManager">
<configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin">
<module name="OnlineModeFix" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script">
<module name="OnlineModeFix" />
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
@ -399,6 +319,7 @@
<workItem from="1615055987620" duration="1626000" />
<workItem from="1615072373374" duration="9000" />
<workItem from="1621561390267" duration="549000" />
<workItem from="1625787948441" duration="1305000" />
</task>
<task id="LOCAL-00001" summary="Added missing plugin.yml resource.">
<created>1601569681272</created>
@ -516,12 +437,13 @@
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="34673000" />
<option name="totallyTimeSpent" value="35978000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="2576" height="1426" extended-state="6" />
<frame x="-7" y="-7" width="1295" height="1424" extended-state="0" />
<editor active="true" />
<layout>
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.14864865" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.30526316" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Designer" order="2" />
<window_info id="Image Layers" order="3" />
@ -541,7 +463,7 @@
<window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.50161815" side_tool="true" weight="0.32791957" />
<window_info anchor="bottom" id="Messages" order="11" weight="0.32943925" />
<window_info anchor="bottom" id="Database Changes" order="12" />
<window_info active="true" anchor="bottom" id="Version Control" order="13" sideWeight="0.49920508" visible="true" weight="0.32637277" />
<window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.49920508" visible="true" weight="0.32585138" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
@ -622,13 +544,6 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/utils/JSONUtils.java" />
<entry file="jar://$PROJECT_DIR$/lib/craftbukkit-1.2_01_02.jar!/org/bukkit/event/Event.class" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/utils/ArrayUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="23" selection-start-column="23" selection-end-column="23" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/craftbukkit1-7-3(1060).jar!/org/bukkit/event/player/PlayerListener.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
@ -650,42 +565,14 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IAvatarProvider.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/MinotarAvatarProvider.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IMessageRecievedListener.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IShutdownListener.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/AbstractColorCodeProvider.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/minecraft/server/AbstractMinecraftColorCodeProvider.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="5" column="22" selection-start-line="5" selection-start-column="22" selection-end-line="5" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/DiscordChatBridge.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1207">
<caret line="82" column="30" selection-start-line="82" selection-start-column="30" selection-end-line="82" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/EColorCodeColor.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IAvatarProvider.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/MinotarAvatarProvider.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IMessageRecievedListener.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/IShutdownListener.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/AbstractColorCodeProvider.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/minecraft/server/AbstractMinecraftColorCodeProvider.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/discord/DiscordChatBridge.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/EColorCodeColor.java" />
<entry file="jar://$PROJECT_DIR$/lib/craftbukkit1-7-3(1060).jar!/org/bukkit/event/Event.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="765">
@ -693,27 +580,9 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/IColorCodeProvider.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="6" selection-start-line="6" selection-end-line="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/minecraft/server/MinecraftColorCodeProvider.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="7" selection-start-line="7" selection-end-line="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/MineOnlineBroadcastListener.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="561">
<caret line="36" selection-start-line="36" selection-end-line="36" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/common/input/IColorCodeProvider.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/minecraft/server/MinecraftColorCodeProvider.java" />
<entry file="file://$PROJECT_DIR$/src/MineOnlineBroadcastListener.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/query/LegacyPingImplementation.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/query/QueryServer.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/RemoteStatusChallenge.java" />
@ -721,48 +590,81 @@
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/RemoteStatusReply.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/query/Request.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/StatusChallengeUtils.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/api/MineOnlineAPI.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-758">
<caret line="32" column="25" lean-forward="true" selection-start-line="32" selection-start-column="25" selection-end-line="32" selection-end-column="25" />
</state>
</provider>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/api/MineOnlineAPI.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineBroadcastListener.java" />
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineConfig.java" />
<entry file="file://$PROJECT_DIR$/src/MineOnlineConfig.java" />
<entry file="file://$PROJECT_DIR$/.idea/artifacts/MineOnlineBroadcast.xml" />
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineBroadcastListener.java">
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/ProxyThread.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="595">
<caret line="37" selection-start-line="37" selection-end-line="37" />
<state relative-caret-position="1462">
<caret line="102" column="35" selection-start-line="102" selection-start-column="35" selection-end-line="102" selection-end-column="35" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/MineOnlineConfig.java">
<entry file="file://$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-391">
<caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
<state relative-caret-position="119">
<caret line="7" column="12" selection-start-line="7" selection-start-column="12" selection-end-line="7" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/CapeURLConnection.java">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/SkinURLConnection.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="11" column="13" selection-start-line="11" selection-start-column="13" selection-end-line="11" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandler.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="15" column="12" selection-start-line="15" selection-start-column="12" selection-end-line="15" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/MineOnlineURLStreamHandlerFactory.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="15" selection-start-line="15" selection-end-line="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/utils/ArrayUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/protocol/CheckServerURLConnection.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-85">
<caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#1635#1636#0" expanded="true" />
<element signature="e#1729#1730#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/bukkit/OnlineModeFixPlugin.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
<caret line="18" column="17" selection-start-line="18" selection-end-line="19" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2569#2570#0" expanded="true" />
<element signature="e#2597#2598#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/gg/codie/mineonline/plugin/ProxyThread.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-2135">
<caret line="102" column="35" selection-start-line="102" selection-start-column="35" selection-end-line="102" selection-end-column="35" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#760#761#0" expanded="true" />
<element signature="e#805#806#0" expanded="true" />
</folding>
</state>
</provider>
@ -774,47 +676,24 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/MineOnlineConfig.java">
<entry file="file://$PROJECT_DIR$/res/plugin.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
<state relative-caret-position="136">
<caret line="8" column="15" lean-forward="true" selection-start-line="8" selection-start-column="15" selection-end-line="8" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/OnlineModeFix.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="16" column="52" selection-start-line="16" selection-start-column="52" selection-end-line="16" selection-end-column="52" />
<state relative-caret-position="204">
<caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#631#632#0" expanded="true" />
<element signature="e#665#666#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/res/plugin.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="9" column="10" selection-start-line="9" selection-start-column="10" selection-end-line="9" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.idea/artifacts/MineOnlineBroadcast.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51">
<caret line="3" column="48" lean-forward="true" selection-start-line="3" selection-start-column="48" selection-end-line="3" selection-end-column="48" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/.idea/artifacts/OnlineModeFix.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="12" selection-start-line="7" selection-start-column="12" selection-end-line="7" selection-end-column="12" />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>

View File

@ -1,6 +1,6 @@
name: OnlineModeFix
version: 1.0.0
description: Fixes online-mode authentication
version: 1.1.0
description: Fixes online-mode authentication.
author: craftycodie
authors: [Codie]
website: https://twitter.com/craftycodie

View File

@ -1,34 +1,20 @@
import gg.codie.mineonline.plugin.ProxyThread;
import gg.codie.mineonline.protocol.MineOnlineURLStreamHandlerFactory;
import java.io.*;
import java.net.ServerSocket;
import java.net.URL;
import java.util.Properties;
import java.util.logging.Logger;
public class OnlineModeFix extends Plugin {
private static String NAME = "OnlineModeFix";
Logger log;
ProxyThread proxyThread;
boolean initialized;
public void launchProxy() throws IOException {
ServerSocket serverSocket = new ServerSocket(0);
proxyThread = new ProxyThread(serverSocket);
proxyThread.start();
public void enableOnlineMode() {
this.log = Logger.getLogger("Minecraft");
System.out.println("Enabling online-mode fix.");
log.info("Enabling online-mode fix.");
System.setProperty("http.proxyHost", serverSocket.getInetAddress().getHostAddress());
System.setProperty("http.proxyPort", "" + serverSocket.getLocalPort());
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
}
public void stopProxy() {
if (proxyThread != null) {
proxyThread.stop();
proxyThread = null;
}
URL.setURLStreamHandlerFactory(new MineOnlineURLStreamHandlerFactory());
}
public void enable() {
@ -38,23 +24,7 @@ public class OnlineModeFix extends Plugin {
}
public void initialize() {
if (initialized)
return;
this.log = Logger.getLogger("Minecraft");
Properties propertiesFile = new Properties();
try {
propertiesFile.load(new FileInputStream(new File("server.properties")));
boolean onlineMode = propertiesFile.getProperty("online-mode", "true").equals("true");
if (onlineMode)
launchProxy();
} catch (Exception ex) {
log.warning("Failed to enable online-mode fix. Authentication may fail.");
}
initialized = true;
enableOnlineMode();
}
private void register(PluginLoader.Hook hook, PluginListener.Priority priority) {
@ -70,13 +40,6 @@ public class OnlineModeFix extends Plugin {
}
public void disable() {
if (!initialized)
return;
unregister();
stopProxy();
initialized = false;
}
}

View File

@ -1,271 +0,0 @@
package gg.codie.mineonline.plugin;
import gg.codie.minecraft.api.SessionServer;
import gg.codie.utils.ArrayUtils;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProxyThread implements Runnable {
private AtomicReference<ServerSocket> serverSocket = new AtomicReference<>();
private Thread worker;
private AtomicBoolean running = new AtomicBoolean(false);
public void start() {
worker = new Thread(this);
worker.start();
}
public void stop() {
running.set(false);
}
boolean isRunning() {
return running.get();
}
public ProxyThread(ServerSocket serverSocket) {
this.serverSocket.set(serverSocket);
}
@Override
public void run() {
running.set(true);
System.setProperty("java.net.preferIPv4Stack", "true");
Socket clientSocket = null;
// DEBUG
// System.out.println(serverSocket.get().getInetAddress() + ":" + serverSocket.get().getLocalPort());
while (running.get()) {
//Stream to put data to the browser
PrintWriter outGoing = null;
try {
clientSocket = serverSocket.get().accept();
outGoing = new PrintWriter(clientSocket.getOutputStream(), true);
final int bufferSize = 8096;
byte[] buffer = new byte[bufferSize];
int bytes_read;
LinkedList<Byte> request = new LinkedList();
bytes_read = clientSocket.getInputStream().read(buffer, 0, bufferSize);
for(int i = 0; i < bytes_read; i++)
request.add(buffer[i]);
String requestHeaders = new String(buffer).split("\r\n\r\n")[0];
// keep reading.
String requestString = new String(buffer);
for (String header : requestHeaders.split("\r\n")) {
if(header.contains("Content-Length")) {
int contentLength = Integer.parseInt(header.split(": ")[1]);
int headerLength = requestString.substring(0, requestString.indexOf("\r\n\r\n") + 4).length();
while(request.size() < contentLength + headerLength) {
bytes_read = clientSocket.getInputStream().read(buffer, 0, bufferSize);
for(int i = 0; i < bytes_read; i++)
request.add(buffer[i]);
}
break;
}
}
byte[] requestBytes = ArrayUtils.toPrimitives(request.toArray(new Byte[0]));
requestString = new String(requestBytes);
int headerSize = requestString.split("\r\n\r\n")[0].length() + 4;
// DEBUG
// System.out.println("Request");
requestHeaders = requestString.split("\r\n\r\n")[0];
// DEBUG
// System.out.println(requestString);
String urlString = "";
try {
urlString = pullLinks(requestString).get(0);
} catch (IndexOutOfBoundsException ex) {
return;
}
// Fix online-mode.
if(urlString.contains("minecraft.net/game/checkserver.jsp?")) {
String username = null;
String serverId = null;
String ip = null;
String[] args = urlString.replace("http://www.minecraft.net/game/checkserver.jsp?", "").split("&");
for (String arg : args) {
String[] keyValue = arg.split("=");
if (keyValue[0].equals("user"))
username = keyValue[1];
else if (keyValue[0].equals("serverId"))
serverId = keyValue[1];
else if (keyValue[0].equals("ip"))
ip = keyValue[1];
}
if (username != null && serverId != null) {
boolean validJoin = SessionServer.hasJoined(
username,
serverId,
ip
);
if (validJoin) {
String responseHeaders =
"HTTP/1.0 200 OKServer:Werkzeug/1.0.1 Python/3.7.0\r\n\r\n";
clientSocket.getOutputStream().write(responseHeaders.getBytes());
clientSocket.getOutputStream().write("YES".getBytes(StandardCharsets.UTF_8));
clientSocket.getOutputStream().flush();
clientSocket.getOutputStream().close();
continue;
} else {
String responseHeaders =
"HTTP/1.0 200 OKServer:Werkzeug/1.0.1 Python/3.7.0\r\n\r\n";
clientSocket.getOutputStream().write(responseHeaders.getBytes());
clientSocket.getOutputStream().write("bad login".getBytes(StandardCharsets.UTF_8));
clientSocket.getOutputStream().flush();
clientSocket.getOutputStream().close();
continue;
}
}
}
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
for (String header : requestHeaders.substring(requestHeaders.indexOf("\r\n") + 2).split("\r\n")) {
String headerName = header.substring(0, header.indexOf(":"));
String headerValue = header.substring(header.indexOf(":") + 2);
connection.setRequestProperty(headerName, headerValue);
}
String methodLine = requestHeaders.substring(0, requestHeaders.indexOf("\r\n"));
connection.setRequestMethod(methodLine.substring(0, methodLine.indexOf(" ")));
byte[] content = new byte[0];
try {
if (urlString.contains("s3.amazonaws.com/MinecraftSkins/"))
throw new FileNotFoundException("The skin server is offline.");
if (headerSize < requestBytes.length) {
content = Arrays.copyOfRange(requestBytes, headerSize, requestBytes.length);
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.write(content);
wr.flush();
wr.close();
} else {
connection.setUseCaches(false);
connection.setDoInput(true);
connection.connect();
}
String responseHeader = "";
for (Map.Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) {
if (header.getKey() == null) {
Iterator<String> valueIterator = header.getValue().iterator();
responseHeader += valueIterator.next();
while (valueIterator.hasNext()) {
responseHeader += " " + valueIterator.next();
}
continue;
}
responseHeader += header.getKey() + ":";
Iterator<String> valueIterator = header.getValue().iterator();
responseHeader += valueIterator.next();
while (valueIterator.hasNext()) {
responseHeader += ", " + valueIterator.next();
}
responseHeader += "\r\n";
}
responseHeader += "\r\n";
String contentString = new String(content);
// DEBUG
// System.out.println("Response");
// System.out.print(responseHeader);
// System.out.println(contentString);
InputStream is = connection.getInputStream();
clientSocket.getOutputStream().write(responseHeader.getBytes());
buffer = new byte[bufferSize];
while ((bytes_read = is.read(buffer, 0, bufferSize)) != -1) {
for (int i = 0; i < bytes_read; i++) {
clientSocket.getOutputStream().write(buffer[i]);
}
}
clientSocket.getOutputStream().flush();
clientSocket.getOutputStream().close();
} catch (Exception ex) {
String responseHeaders =
"HTTP/1.0 404 Not FoundServer:Werkzeug/1.0.1 Python/3.7.0\r\n\r\n";
clientSocket.getOutputStream().write(responseHeaders.getBytes());
clientSocket.getOutputStream().flush();
clientSocket.getOutputStream().close();
// ex.printStackTrace();
}
} catch (FileNotFoundException ex) {
System.err.println("Got a 404 for: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("Something went very wrong.");
ex.printStackTrace();
} finally {
outGoing.close();
try {
clientSocket.close();
} catch (Exception e) { }
}
}
try {
serverSocket.get().close();
} catch (Exception e) { }
running.set(false);
}
//Pull all links from the body for easy retrieval
private static ArrayList<String> pullLinks(String text) {
ArrayList<String> links = new ArrayList<String>();
String regex = "\\(?\\b(http://|www[.])[-A-Za-z0-9+&amp;@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&amp;@#/%=~_()|]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")"))
{
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
return links;
}
}

View File

@ -1,35 +1,22 @@
package gg.codie.mineonline.plugin.bukkit;
import gg.codie.mineonline.plugin.ProxyThread;
import gg.codie.mineonline.protocol.MineOnlineURLStreamHandler;
import gg.codie.mineonline.protocol.MineOnlineURLStreamHandlerFactory;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.*;
import java.net.ServerSocket;
import java.net.URL;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
public class OnlineModeFixPlugin extends JavaPlugin {
Thread broadcastThread;
Logger log;
ProxyThread proxyThread;
public void launchProxy() throws IOException {
ServerSocket serverSocket = new ServerSocket(0);
proxyThread = new ProxyThread(serverSocket);
proxyThread.start();
public void enableOnlineModeFix() {
Logger.getLogger("Minecraft").log(Level.INFO, "Enabling online-mode fix.");
System.out.println("Enabling online-mode fix.");
System.setProperty("http.proxyHost", serverSocket.getInetAddress().getHostAddress());
System.setProperty("http.proxyPort", "" + serverSocket.getLocalPort());
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
}
public void stopProxy() {
if (proxyThread != null) {
proxyThread.stop();
proxyThread = null;
}
URL.setURLStreamHandlerFactory(new MineOnlineURLStreamHandlerFactory());
}
@Override
@ -38,24 +25,11 @@ public class OnlineModeFixPlugin extends JavaPlugin {
}
public void initialize() {
this.log = Logger.getLogger("Minecraft");
Properties propertiesFile = new Properties();
try {
propertiesFile.load(new FileInputStream(new File("server.properties")));
boolean onlineMode = propertiesFile.getProperty("online-mode", "true").equals("true");
if (onlineMode)
launchProxy();
} catch (Exception ex) {
log.warning("Failed to enable online-mode fix. Authentication may fail.");
}
enableOnlineModeFix();
}
@Override
public void onDisable() {
broadcastThread.interrupt();
stopProxy();
}
}

View File

@ -0,0 +1,73 @@
package gg.codie.mineonline.protocol;
import gg.codie.minecraft.api.SessionServer;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class CheckServerURLConnection extends HttpURLConnection {
public CheckServerURLConnection(URL url) {
super(url);
}
@Override
public void disconnect() {
}
@Override
public boolean usingProxy() {
return false;
}
private String response = "bad login";
@Override
public void connect() throws IOException {
String username = null;
String serverId = null;
String ip = null;
String[] args = url.toString()
.substring(url.toString().lastIndexOf("?") + 1)
.split("&");
for (String arg : args) {
String[] keyValue = arg.split("=");
if (keyValue[0].equals("user"))
username = keyValue[1];
else if (keyValue[0].equals("serverId"))
serverId = keyValue[1];
else if (keyValue[0].equals("ip"))
ip = keyValue[1];
}
if (username == null || serverId == null) {
return;
}
boolean validJoin = SessionServer.hasJoined(username, serverId, ip);
if (validJoin) {
response = "YES";
}
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(response.getBytes());
}
@Override
public int getResponseCode() {
return 200;
}
@Override
public String getResponseMessage() {
return responseMessage;
}
}

View File

@ -0,0 +1,19 @@
package gg.codie.mineonline.protocol;
import sun.net.www.protocol.http.HttpURLConnection;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
public class MineOnlineURLStreamHandler extends URLStreamHandler {
@Override
protected URLConnection openConnection(URL url) throws IOException {
// Online-Mode fix
if (url.toString().contains("/game/checkserver.jsp"))
return new CheckServerURLConnection(url);
else
return new HttpURLConnection(url, null);
}
}

View File

@ -0,0 +1,15 @@
package gg.codie.mineonline.protocol;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
public class MineOnlineURLStreamHandlerFactory implements URLStreamHandlerFactory {
@Override
public URLStreamHandler createURLStreamHandler(String protocol) {
if ("http".equals(protocol)) {
return new MineOnlineURLStreamHandler();
}
return null;
}
}

View File

@ -1,14 +0,0 @@
package gg.codie.utils;
public class ArrayUtils {
public static byte[] toPrimitives(Byte[] oBytes)
{
byte[] bytes = new byte[oBytes.length];
for(int i = 0; i < oBytes.length; i++){
bytes[i] = oBytes[i];
}
return bytes;
}
}