Commit v0.2.1

Fixed issues with disconnect items.
This commit is contained in:
CoolJWB 2019-02-01 19:00:50 +01:00
parent 755c1b8240
commit 9ab7948625
21 changed files with 396 additions and 319 deletions

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
.idea/modules.xml Normal file
View file

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

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="4936b74f-7f02-49b6-ab4a-bce2a5ed4ff7" name="Default Changelist" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="-10" />
<option name="y" value="-10" />
<option name="width" value="1750" />
<option name="height" value="980" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="Scope" />
<pane id="ProjectPane" />
</panes>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="4936b74f-7f02-49b6-ab4a-bce2a5ed4ff7" name="Default Changelist" comment="" />
<created>1548667472501</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1548667472501</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
<layout>
<window_info id="Designer" />
<window_info id="UI Designer" />
<window_info id="Favorites" side_tool="true" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24966443" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" />
<window_info anchor="bottom" id="Terminal" />
<window_info anchor="bottom" id="Event Log" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="right" id="Palette" />
<window_info anchor="right" id="Maven" />
<window_info anchor="right" id="Palette&#9;" />
<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" />
</layout>
</component>
</project>

View file

@ -1,31 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="1f395f0b-1a62-4de7-8311-18be358f8f46" name="Default Changelist" comment="">
<list default="true" id="3d5d2873-4535-445c-81cf-26429875d278" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/bin/main/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/bin/main/config.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/bin/main/plugin.yml" beforeDir="false" afterPath="$PROJECT_DIR$/bin/main/plugin.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/gradle.properties" beforeDir="false" afterPath="$PROJECT_DIR$/gradle.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandVulnerabilityPatcher.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandVulnerabilityPatcher.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Egg.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Items.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Items.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Disconnect_Items.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Disconnect_Items.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Player_Knockback.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/config.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/plugin.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/plugin.yml" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
<ignored path="$PROJECT_DIR$/.gradle/" />
<ignored path="$PROJECT_DIR$/build/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -40,52 +35,34 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Enum" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_IDs.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/ConfigManager.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Items.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Egg.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Items.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Player_Knockback.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Disconnect_Items.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" />
<option value="$PROJECT_DIR$/src/main/resources/config.yml" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java" />
<option value="$PROJECT_DIR$/src/main/resources/plugin.yml" />
<option value="$PROJECT_DIR$/gradle.properties" />
<option value="$PROJECT_DIR$/src/main/resources/plugin.yml" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="324" />
<option name="y" value="100" />
<option name="width" value="1440" />
<option name="height" value="780" />
<option name="x" value="62" />
<option name="y" value="46" />
<option name="width" value="1750" />
<option name="height" value="980" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
@ -99,48 +76,6 @@
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="vulnerabilitypatcher" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="vulnerabilitypatcher" type="462c0819:PsiDirectoryNode" />
<item name="patches" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="resources" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
@ -148,9 +83,6 @@
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1548451724817" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
@ -168,241 +100,174 @@
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="1f395f0b-1a62-4de7-8311-18be358f8f46" name="Default Changelist" comment="" />
<created>1547829118400</created>
<changelist id="3d5d2873-4535-445c-81cf-26429875d278" name="Default Changelist" comment="" />
<created>1549009858370</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1547829118400</updated>
<updated>1549009858370</updated>
</task>
<servers />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.15724947" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25746268" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Image Layers" order="2" />
<window_info id="Designer" order="3" />
<window_info id="Capture Tool" order="4" />
<window_info id="UI Designer" order="5" />
<window_info id="Favorites" order="6" side_tool="true" />
<window_info id="Designer" order="2" />
<window_info id="UI Designer" order="3" />
<window_info id="Favorites" order="4" side_tool="true" />
<window_info id="Image Layers" order="5" />
<window_info id="Capture Tool" order="6" />
<window_info anchor="bottom" id="Build" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32936078" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Terminal" order="7" />
<window_info anchor="bottom" id="Event Log" order="8" side_tool="true" />
<window_info anchor="bottom" id="Version Control" order="9" />
<window_info anchor="bottom" id="Build" order="10" weight="0.32936078" />
<window_info anchor="bottom" id="TODO" order="6" weight="0.32936078" />
<window_info anchor="bottom" id="Version Control" order="7" />
<window_info anchor="bottom" id="Terminal" order="8" />
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
<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" />
<window_info anchor="right" id="Palette" order="3" />
<window_info anchor="right" id="Maven" order="4" />
<window_info anchor="right" id="Gradle" order="5" />
<window_info anchor="right" id="Theme Preview" order="6" />
<window_info anchor="right" id="Capture Analysis" order="7" />
<window_info anchor="right" id="Palette&#9;" order="8" />
<window_info anchor="right" id="Palette&#9;" order="5" />
<window_info anchor="right" id="Capture Analysis" order="6" />
<window_info anchor="right" id="Gradle" order="7" />
<window_info anchor="right" id="Theme Preview" order="8" />
</layout>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/LICENSE.md">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-663" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/gradlew">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-2397" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="11" column="76" lean-forward="true" selection-start-line="11" selection-start-column="76" selection-end-line="11" selection-end-column="76" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="561">
<caret line="33" column="71" lean-forward="true" selection-start-line="33" selection-start-column="71" selection-end-line="33" selection-end-column="71" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="493">
<caret line="43" column="105" lean-forward="true" selection-start-line="43" selection-start-column="105" selection-end-line="43" selection-end-column="105" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/ConfigManager.java" />
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Items.java" />
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandVulnerabilityPatcher.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="130">
<caret line="30" column="13" selection-start-line="30" selection-start-column="13" selection-end-line="30" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/net/minecraft/server/v1_13_R2/EntityArrow.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="306">
<caret line="307" column="10" lean-forward="true" selection-start-line="307" selection-start-column="10" selection-end-line="307" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/net/minecraft/server/v1_13_R2/GeneratorAccess.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="10" column="17" selection-start-line="10" selection-start-column="17" selection-end-line="10" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/net/minecraft/server/v1_13_R2/Block.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-187">
<caret line="25" column="13" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="62" column="57" selection-start-line="62" selection-start-column="57" selection-end-line="62" selection-end-column="57" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Egg.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="286">
<caret line="47" column="41" lean-forward="true" selection-start-line="47" selection-start-column="41" selection-end-line="47" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Items.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2329">
<caret line="159" column="57" selection-start-line="159" selection-start-column="57" selection-end-line="159" selection-end-column="57" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-357">
<caret line="107" column="19" lean-forward="true" selection-start-line="107" selection-start-column="19" selection-end-line="107" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="59" column="57" selection-start-line="59" selection-start-column="57" selection-end-line="59" selection-end-column="57" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" />
<state relative-caret-position="408">
<caret line="24" column="12" selection-start-line="24" selection-start-column="12" selection-end-line="24" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="116">
<caret line="35" selection-start-line="35" selection-end-line="35" />
<state relative-caret-position="722">
<caret line="73" column="21" selection-start-line="73" selection-start-column="21" selection-end-line="73" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/config.yml">
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="10" selection-start-line="10" selection-start-column="10" selection-end-line="10" selection-end-column="10" />
<state relative-caret-position="-43">
<caret line="62" column="21" selection-start-line="62" selection-start-column="21" selection-end-line="62" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java">
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Crash_Items.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="147">
<caret line="159" column="21" selection-start-line="159" selection-start-column="21" selection-end-line="159" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Potions.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="537">
<caret line="93" column="21" selection-start-line="93" selection-start-column="21" selection-end-line="93" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="680">
<caret line="104" column="44" selection-start-line="104" selection-start-column="44" selection-end-line="104" selection-end-column="44" />
<caret line="48" column="21" selection-start-line="48" selection-start-column="8" selection-end-line="48" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="368">
<caret line="40" lean-forward="true" selection-start-line="40" selection-end-line="40" />
<state relative-caret-position="283">
<caret line="35" column="13" selection-start-line="35" selection-start-column="13" selection-end-line="35" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="195">
<caret line="39" column="66" selection-start-line="39" selection-start-column="66" selection-end-line="39" selection-end-column="66" />
<state relative-caret-position="722">
<caret line="72" column="21" selection-start-line="72" selection-start-column="21" selection-end-line="72" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="640">
<caret line="51" column="21" selection-start-line="51" selection-start-column="21" selection-end-line="51" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1357">
<caret line="126" column="21" selection-start-line="126" selection-start-column="21" selection-end-line="126" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="782">
<caret line="110" column="64" selection-start-line="110" selection-start-column="64" selection-end-line="110" selection-end-column="64" />
<folding>
<element signature="e#6590#6591#0" expanded="true" />
<element signature="e#6686#6687#0" expanded="true" />
<element signature="e#9970#9971#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="78">
<caret line="24" column="45" lean-forward="true" selection-start-line="24" selection-start-column="45" selection-end-line="24" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Disconnect_Items.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2170">
<caret line="164" column="32" selection-start-line="164" selection-start-column="32" selection-end-line="164" selection-end-column="32" />
<state relative-caret-position="-1502">
<caret line="73" column="13" lean-forward="true" selection-start-line="73" selection-start-column="13" selection-end-line="73" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/gradlew">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/gradle.properties">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
<caret line="1" column="20" selection-start-line="1" selection-start-column="20" selection-end-line="1" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/plugin.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" column="12" selection-start-line="1" selection-start-column="12" selection-end-line="1" selection-end-column="12" />
<caret line="1" column="14" selection-start-line="1" selection-start-column="14" selection-end-line="1" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="29" column="5" lean-forward="true" selection-start-line="29" selection-start-column="5" selection-end-line="29" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="586">
<caret line="125" selection-start-line="125" selection-end-line="125" />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

View file

@ -4,8 +4,7 @@ VulnerabilityPatcher is a light weight Spigot plugin that runs on 1.13.2 servers
Its task is to prevent bugs in Spigot to cause issues for both the server and the players.
**Patches:**
It currently prevents 4 server crash bugs, 2 client crash bugs, 2 disconnect bugs,
2 bugs that kills creative users and 1 that causes commands to run when clicking in books.
It currently prevents 15+ vulnerabilities from being executed.
**Planned:**
- More security patches.

View file

@ -1,6 +1,6 @@
# VulnerabilityPatcher by CoolJWB.
# Patches: DeathPotions, DeathItems, CrashItems, Books, RougeEntity, Knockback, Riptide, FollowRange, DisconnectItems, CrashEgg, EntityTag.
# Patches: DeathPotions, DeathItems, CrashItems, Books, RougeEntity, Arrows, Riptide, FollowRange, DisconnectItems, EntityTag.
# All patches added in the list below will be activated on server startup.
Patches:
- DeathPotions
@ -8,11 +8,10 @@ Patches:
- CrashItems
- Books
- RougeEntity
- Knockback
- Arrows
- Riptide
- FollowRange
- DisconnectItems
- CrashEgg
- EntityTag
# All entities added below will be blocked to use in a spawn egg.

View file

@ -1,5 +1,5 @@
name: VulnerabilityPatcher
version: 0.1.2
version: 0.2
main: me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher
api-version: 1.13
authors: [CoolJWB]

View file

@ -1,2 +1,2 @@
pluginGroup=me.CoolJWB.VulnerabilityPatcher
pluginVersion=v0.2
pluginVersion=v0.2.1

View file

@ -32,6 +32,7 @@ public enum SMG {
"&8 - &7/getnbt &aPrint the item in hands NBT."),
ITEM(SMG.VULNERABILITYPATCHER.msg + "&cThis item is not allowed."),
ITEMS(SMG.VULNERABILITYPATCHER.msg + "&cAn item in your inventory has been cleared for being potentially dangerous."),
ITEM_IN_CONTAINER(SMG.VULNERABILITYPATCHER.msg + "&cAn item in this container is not allowed."),
ITEM_NOTIFY(SMG.VULNERABILITYPATCHER.msg + "&c%s tried to %s a %s at x:%s y:%s z:%s"),

View file

@ -38,6 +38,10 @@ import java.util.logging.Logger;
public final class VulnerabilityPatcher extends JavaPlugin {
/*
* TODO: Fix that disconnect item shulkers return null in dispensers.
* TODO: Issues with potions?
* TODO: Fix command signs.
* TODO: Fix ReflectionToStringBuilder parse error in shulker.
* Patches: Books with commands, Invalid translations (crashes both client and server), Death Items, Death Potions, Rouge Entities, Arrow knockback, Trident speed,
* Large follow range, Disconnect Items, Crash Eggs, Knowledge Books, Negative Damage Arrows, much more.
*/
@ -121,7 +125,28 @@ public final class VulnerabilityPatcher extends JavaPlugin {
String confstr = FileUtils.readFileToString(conf);
if(confstr.contains("ConfVersion")) {
// Foundation of automatic update system.
// Check if this prints the real config version.
//switch(main.getConfig().getInt("ConfVersion")) { // Switch the versions, and try to update all versions forward.
// This won't be needed yet, since all versions before this will trigger the config.yml reset.
// This is now generating ConfVersion 0. Next version will need to update from ConfVersion 0 to 1.
/*
case 0:
if(confstr.contains("CrashSigns"))
confstr = confstr.replaceAll("CrashSigns", "CrashItems");
if(!confstr.contains("EntityTag"))
// Does this really work if you have changed the config.yml so it has no spacing/new lines or?
if(!confstr.contains("BlockedEntityTags")) {
confstr = new StringBuilder(confstr).insert((confstr.indexOf("Commands") - 2), "\n# All entity tags that are added here are blocked to use in a monster spawn egg.\n" +
"BlockedEntityTags:\n" +
" - lightning_bolt\n" +
" - falling_block\n").toString();
}
*/
//}
//FileUtils.write(conf, confstr);
}
else {

View file

@ -41,7 +41,7 @@ public class Arrows extends Patches implements Listener {
if(event.getVelocity().getX() > 10 || event.getVelocity().getY() > 10 || event.getVelocity().getZ() > 10)
event.setCancelled(true);
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler
@ -56,7 +56,7 @@ public class Arrows extends Patches implements Listener {
arrow.setDamage(0);
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -71,6 +71,6 @@ public class Arrows extends Patches implements Listener {
arrow.setDamage(0);
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
}

View file

@ -60,7 +60,7 @@ public class Books extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public void writtenBook(Player player, EquipmentSlot hand) {

View file

@ -80,7 +80,7 @@ public class Crash_Items extends Patches implements Listener {
notifyViolation(event.getBlock().getType().toString(), "drop", event.getItem().getType() + " with crash item in it", event.getBlock().getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -96,7 +96,7 @@ public class Crash_Items extends Patches implements Listener {
notifyViolation(player, "interact with", "crash item", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -115,7 +115,7 @@ public class Crash_Items extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -141,7 +141,7 @@ public class Crash_Items extends Patches implements Listener {
}, 0L);
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -157,7 +157,7 @@ public class Crash_Items extends Patches implements Listener {
notifyViolation(player, "drop", "crash item", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public static boolean isCrashItem(ItemStack item) {

View file

@ -62,7 +62,7 @@ public class Death_Items extends Patches implements Listener {
notifyViolation("Dispenser", "place", event.getItem().getType() + " with death item in it", event.getBlock().getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -82,7 +82,7 @@ public class Death_Items extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -108,7 +108,7 @@ public class Death_Items extends Patches implements Listener {
}, 0L);
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -124,22 +124,26 @@ public class Death_Items extends Patches implements Listener {
notifyViolation(player, "drop", "death item", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public static boolean isDeathItem(ItemStack item) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDeathItem(nmsItemStack.getTag());
return false;
}
public static boolean isDeathItem(NBTTagCompound item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
NBTTagList attrlist = item.getList("AttributeModifiers", 10);
if(nmsItemStack.getTag() != null) {
NBTTagList attrlist = nmsItemStack.getTag().getList("AttributeModifiers", 10);
if(attrlist != null) {
for(int i = 0; i < attrlist.size(); i++) {
NBTTagCompound compound = (NBTTagCompound)attrlist.get(i);
if((compound.getString("Name").equalsIgnoreCase("MAX_HEALTH") || compound.getString("AttributeName").equalsIgnoreCase("generic.maxHealth")) && compound.getDouble("Amount") <= 0)
return true;
}
if(attrlist != null) {
for(int i = 0; i < attrlist.size(); i++) {
NBTTagCompound compound = (NBTTagCompound)attrlist.get(i);
if((compound.getString("Name").equalsIgnoreCase("MAX_HEALTH") || compound.getString("AttributeName").equalsIgnoreCase("generic.maxHealth")) && compound.getDouble("Amount") <= 0)
return true;
}
}
}

View file

@ -57,7 +57,7 @@ public class Death_Potions extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -74,7 +74,7 @@ public class Death_Potions extends Patches implements Listener {
notifyViolation(player, "splash", "death potion", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -91,7 +91,7 @@ public class Death_Potions extends Patches implements Listener {
notifyViolation(player, "splash", "death potion", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public static boolean isDeathPotion(List<PotionEffect> effects) {

View file

@ -62,6 +62,8 @@ public class Disconnect_Items extends Patches implements Listener {
String invstr = "";
for (ItemStack item : container.getInventory().getContents()) {
if(isDisconnectItem(item))
clearItemMeta(item);
invstr = invstr + itemToString(item);
}
@ -72,26 +74,33 @@ public class Disconnect_Items extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockDispenseEvent(BlockDispenseEvent event) {
if(containsDisconnectItem(event.getItem())) {
ItemStack item = event.getItem();
if(isDisconnectItem(item)) {
event.setCancelled(true);
clearItemMeta(item);
}
if(containsDisconnectItem(item)) {
event.setCancelled(true);
Container container = (Container) event.getBlock().getState();
for(int c = 0; c < container.getInventory().getSize(); c++) {
if(container.getInventory().getItem(c) != null) {
if (container.getInventory().getItem(c).isSimilar(event.getItem()))
container.getInventory().getItem(c).setItemMeta(null);
clearItemMeta(container.getInventory().getItem(c));
}
}
notifyViolation("Dispenser", "place", event.getItem().getType() + " with disconnect item in it", event.getBlock().getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -111,7 +120,7 @@ public class Disconnect_Items extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -137,7 +146,7 @@ public class Disconnect_Items extends Patches implements Listener {
}, 0L);
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -153,17 +162,25 @@ public class Disconnect_Items extends Patches implements Listener {
notifyViolation(player, "drop", "disconnect item", player.getLocation());
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public boolean isDisconnectItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.getTag() != null) {
if((nmsItemStack.getTag().getInt("CustomPotionColor") < 0) || (nmsItemStack.getTag().getCompound("display").getInt("color") < 0) || (nmsItemStack.getTag().toString().length() > 50000) || isMovementDisconnectItem(nmsItemStack) || isInvalidAttributeName(nmsItemStack))
return true;
}
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDisconnectItem(nmsItemStack.getTag());
return false;
}
public boolean isDisconnectItem(NBTTagCompound item) {
if(item != null) {
if(item.hasKey("CustomPotionColor") && item.getInt("CustomPotionColor") <= 0)
return true;
else if(item.getCompound("display").hasKey("color") && item.getCompound("display").getInt("color") <= 0)
return true;
else if(item.toString().length() > 50000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item))
return true;
}
return false;
}
@ -177,8 +194,8 @@ public class Disconnect_Items extends Patches implements Listener {
if(items != null) {
for (int a = 0; a <= items.size(); a++) {
if((nmsItemStack.getTag().getInt("CustomPotionColor") < 0) || (nmsItemStack.getTag().getCompound("display").getInt("color") < 0) || (nmsItemStack.getTag().toString().length() > 50000) || isMovementDisconnectItem(nmsItemStack) || isInvalidAttributeName(nmsItemStack))
return true;
NBTTagCompound nmsitem = items.getCompound(a);
return isDisconnectItem(nmsitem.getCompound("tag"));
}
}
}
@ -186,9 +203,9 @@ public class Disconnect_Items extends Patches implements Listener {
return false;
}
public boolean isMovementDisconnectItem(net.minecraft.server.v1_13_R2.ItemStack nmsItemStack) {
if(nmsItemStack != null) {
NBTTagList attrlist = nmsItemStack.getTag().getList("AttributeModifiers", 10);
public boolean isMovementDisconnectItem(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.getList("AttributeModifiers", 10);
if(attrlist != null) {
HashMap<String, Float> attributes = new HashMap<>();
@ -204,13 +221,15 @@ public class Disconnect_Items extends Patches implements Listener {
}
return false;
}
public boolean isInvalidAttributeName(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.getList("AttributeModifiers", 10);
public boolean isInvalidAttributeName(net.minecraft.server.v1_13_R2.ItemStack nmsItemStack) {
if(nmsItemStack != null) {
NBTTagList attrlist = nmsItemStack.getTag().getList("AttributeModifiers", 10);
if(attrlist != null) {
for(int a = 0; a <= attrlist.size(); a++) {
NBTTagCompound attribute = attrlist.getCompound(a);
if(attribute != null && attribute.getString("AttributeName").toLowerCase() != "") {
if(!Variables.Attributes.liststr.contains(attribute.getString("AttributeName").toLowerCase()))
return true;

View file

@ -26,7 +26,7 @@ public class Entity_Tag extends Patches implements Listener {
if(isDangerousEgg(item))
clearItemMeta(event.getItem());
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -49,7 +49,7 @@ public class Entity_Tag extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
public boolean isDangerousEgg(ItemStack item) {

View file

@ -46,6 +46,6 @@ public class Follow_Range extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
}

View file

@ -4,20 +4,29 @@ import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.SMG;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.*;
import net.minecraft.server.v1_13_R2.AttributeModifier;
import net.minecraft.server.v1_13_R2.ChatMessageException;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import net.minecraft.server.v1_13_R2.NBTTagList;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -55,6 +64,7 @@ public class Patches implements Listener {
private Rouge_Entity rouge_entity;
private Logger log = Logger.getLogger("Minecraft");
private HashMap<String, Float> active_attributes = new HashMap<>();
public Patches() {}
public Patches(VulnerabilityPatcher main) {
@ -81,31 +91,55 @@ public class Patches implements Listener {
public void run() {
for(Player player : Bukkit.getOnlinePlayers()) {
for(ItemStack item : player.getInventory()) {
if(listeners.contains("DisconnectItems") && itemInVisibleSlot(player.getInventory(), item)) {
NBTTagList item_attributes = getNBTAttributeList(item);
if(item_attributes != null) {
for(int a = 0; a <= item_attributes.size(); a++) {
NBTTagCompound attribute = item_attributes.getCompound(a);
if(attribute != null && !attribute.isEmpty()) {
String attr_name = attribute.getString("AttributeName").toLowerCase();
float attr_amount = attribute.getFloat("Amount");
if((active_attributes.containsKey("generic.movementspeed") && attr_name.equalsIgnoreCase("generic.movementspeed")) && (Float.isFinite(active_attributes.get("generic.movementspeed")) || Float.isInfinite(active_attributes.get("generic.movementspeed")) || active_attributes.get("generic.movementspeed") == Float.NEGATIVE_INFINITY) && (Float.isFinite(attr_amount) || Float.isInfinite(attr_amount) || attr_amount == Float.NEGATIVE_INFINITY)) {
msg(player, SMG.ITEMS.msg);
clearItemMeta(item);
}
active_attributes.put(attr_name, attr_amount);
}
}
}
}
for(String listener : listeners) {
switch(listener) {
case "DeathItems":
if(death_items.isDeathItem(item) || death_items.containsDeathItem(item)) {
clearItemMeta(item);
notifyViolation(player, "acquire", "death item", player.getLocation());
msg(player, SMG.ITEM.msg);
}
msg(player, SMG.ITEMS.msg);
} break;
case "DisconnectItems":
if(disconnect_items.isDisconnectItem(item) || disconnect_items.containsDisconnectItem(item)) {
clearItemMeta(item);
notifyViolation(player, "acquire", "disconnect item", player.getLocation());
msg(player, SMG.ITEM.msg);
msg(player, SMG.ITEMS.msg);
} break;
case "CrashItems":
if(crash_items.isCrashItem(item) || crash_items.containsCrashItem(item)) {
clearItemMeta(item);
notifyViolation(player.getName(), "acquire", "crash item", player.getLocation());
msg(player, SMG.ITEM.msg);
msg(player, SMG.ITEMS.msg);
} break;
}
}
}
active_attributes.clear();
}
}
}, 0L, 0);
@ -170,9 +204,13 @@ public class Patches implements Listener {
notify(notification);
}
public void debug(String event) {
if(devmode)
log.log(Level.INFO, String.format("[%s] Event in %s: %s", pluginName, getClass().getName(), event));
public void debug(Event event) {
try {
if (devmode)
log.log(Level.INFO, String.format("[%s] Event in %s: %s", pluginName, getClass().getName(), ReflectionToStringBuilder.toString(event)));
} catch(ChatMessageException e) {
log.log(Level.INFO, String.format("[%s] Could not debug event in %s.", pluginName, getClass().getName()));
}
}
public void clearItemMeta(ItemStack item) {
@ -186,6 +224,30 @@ public class Patches implements Listener {
}
}
public NBTTagCompound getNBTItemTag(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null)
return nmsItemStack.getTag();
}
return null;
}
public NBTTagCompound getEntityNMS(Entity entity) {
net.minecraft.server.v1_13_R2.Entity nmsEntity = ((CraftEntity)entity).getHandle();
NBTTagCompound tag = new NBTTagCompound();
nmsEntity.save(tag);
return tag;
}
public NBTTagList getNBTAttributeList(ItemStack item) {
NBTTagCompound itemtag = getNBTItemTag(item);
if(item != null && itemtag != null && itemtag.hasKey("AttributeModifiers"))
return getNBTItemTag(item).getList("AttributeModifiers", 10);
return null;
}
public String itemToString(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
@ -195,11 +257,22 @@ public class Patches implements Listener {
}
return "";
}
public boolean itemInVisibleSlot(PlayerInventory inv, ItemStack item) {
ItemStack mainhand = inv.getItemInMainHand();
ItemStack offhand = inv.getItemInOffHand();
public NBTTagCompound getEntityNMS(Entity entity) {
net.minecraft.server.v1_13_R2.Entity nmsEntity = ((CraftEntity)entity).getHandle();
NBTTagCompound tag = new NBTTagCompound();
nmsEntity.save(tag);
return tag;
if(item != null && inv != null && mainhand != null && offhand != null) {
if(inv.getItemInMainHand().isSimilar(item) || inv.getItemInOffHand().isSimilar(item))
return true;
else {
for(ItemStack items : inv.getArmorContents()) {
if(items != null && items.isSimilar(item))
return true;
}
}
}
return false;
}
}

View file

@ -57,7 +57,7 @@ public class Trident_Riptide extends Patches implements Listener {
}
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
@EventHandler
@ -70,6 +70,6 @@ public class Trident_Riptide extends Patches implements Listener {
item.addUnsafeEnchantment(Enchantment.RIPTIDE, enchantlevel.get(player));
}
debug(ReflectionToStringBuilder.toString(event));
debug(event);
}
}

View file

@ -1,5 +1,5 @@
name: VulnerabilityPatcher
version: 0.2
version: 0.2.1
main: me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher
api-version: 1.13
authors: [CoolJWB]