Commit v1.2

Added foundation for an automatic updating config.
Also added more patches and fixed small issues with death potions.
This commit is contained in:
CoolJWB 2019-01-25 22:37:52 +01:00
parent a5a62e424d
commit 755c1b8240
22 changed files with 459 additions and 291 deletions

View file

@ -3,14 +3,24 @@
<component name="ChangeListManager">
<list default="true" id="1f395f0b-1a62-4de7-8311-18be358f8f46" 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$/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/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/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/" />
@ -28,29 +38,14 @@
</projectState>
</component>
<component name="FileEditorManager">
<leaf>
<file pinned="false" current-in-tab="false">
<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="-153">
<caret line="54" column="77" lean-forward="true" selection-start-line="54" selection-start-column="77" selection-end-line="54" selection-end-column="77" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<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="705">
<caret line="106" column="65" lean-forward="true" selection-start-line="106" selection-start-column="65" selection-end-line="106" selection-end-column="65" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
<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$" />
@ -58,29 +53,37 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<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/Follow_Range.java" />
<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/patches/Crash_Egg.java" />
<option value="$PROJECT_DIR$/src/main/resources/config.yml" />
<option value="$PROJECT_DIR$/src/main/resources/plugin.yml" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.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/commands/CommandGetNBT.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java" />
<option value="$PROJECT_DIR$/gradle.properties" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.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/Death_Potions.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/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" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="235" />
<option name="y" value="75" />
<option name="width" value="1400" />
<option name="height" value="1000" />
<option name="x" value="324" />
<option name="y" value="100" />
<option name="width" value="1440" />
<option name="height" value="780" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
@ -88,7 +91,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
@ -123,15 +125,6 @@
<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="commands" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
@ -152,10 +145,11 @@
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1547941302342" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1548451724817" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
@ -184,9 +178,8 @@
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2771855" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.15724947" />
<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" />
@ -194,7 +187,7 @@
<window_info id="UI Designer" order="5" />
<window_info id="Favorites" order="6" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32936078" />
<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" />
@ -226,30 +219,6 @@
<state relative-caret-position="-2397" />
</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="-720">
<caret line="40" column="13" selection-start-line="40" selection-start-column="13" selection-end-line="40" selection-end-column="13" />
</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="-1179">
<caret line="43" column="13" selection-start-line="43" selection-start-column="13" selection-end-line="43" 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="435">
<caret line="66" column="85" selection-start-line="66" selection-start-column="85" selection-end-line="66" selection-end-column="85" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
@ -257,51 +226,6 @@
</state>
</provider>
</entry>
<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="file://$PROJECT_DIR$/src/main/resources/config.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="493">
<caret line="29" column="14" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" />
</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="252">
<caret line="42" column="26" lean-forward="true" selection-start-line="42" selection-start-column="26" selection-end-line="42" selection-end-column="26" />
</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="-94">
<caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</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="-544">
<caret line="44" column="13" selection-start-line="44" selection-start-column="13" selection-end-line="44" selection-end-column="13" />
</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="1071">
<caret line="96" column="50" selection-start-line="96" selection-start-column="50" selection-end-line="96" selection-end-column="50" />
</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">
@ -309,13 +233,6 @@
</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="765">
<caret line="63" column="5" selection-start-line="63" selection-start-column="5" selection-end-line="63" selection-end-column="5" />
</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">
@ -323,48 +240,151 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Player_Knockback.java">
<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="354">
<caret line="33" column="67" lean-forward="true" selection-start-line="33" selection-start-column="67" selection-end-line="33" selection-end-column="67" />
<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>
</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>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/config.yml">
<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>
</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="810">
<caret line="103" column="11" lean-forward="true" selection-start-line="103" selection-start-column="11" selection-end-line="103" selection-end-column="11" />
<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" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.java">
<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="-153">
<caret line="54" column="77" lean-forward="true" selection-start-line="54" selection-start-column="77" selection-end-line="54" selection-end-column="77" />
<state relative-caret-position="368">
<caret line="40" lean-forward="true" selection-start-line="40" selection-end-line="40" />
</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>
</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>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<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="15" selection-start-line="1" selection-start-column="15" selection-end-line="1" selection-end-column="15" />
<caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
</state>
</provider>
</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="14" selection-start-line="1" selection-start-column="14" selection-end-line="1" selection-end-column="14" />
<caret line="1" column="12" selection-start-line="1" selection-start-column="12" selection-end-line="1" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Books.java">
<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="705">
<caret line="106" column="65" lean-forward="true" selection-start-line="106" selection-start-column="65" selection-end-line="106" selection-end-column="65" />
<folding>
<element signature="imports" expanded="true" />
</folding>
<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>

View file

@ -1,11 +1,11 @@
# VulnerabilityPatcher by CoolJWB
# Patches:
# DeathPotions, DeathItems, CrashSigns, Books, RougeEntity, Knockback, Riptide, FollowRange, DisconnectItems, CrashEgg.
# VulnerabilityPatcher by CoolJWB.
# Patches: DeathPotions, DeathItems, CrashItems, Books, RougeEntity, Knockback, Riptide, FollowRange, DisconnectItems, CrashEgg, EntityTag.
# All patches added in the list below will be activated on server startup.
Patches:
- DeathPotions
- DeathItems
- CrashSigns
- CrashItems
- Books
- RougeEntity
- Knockback
@ -13,6 +13,12 @@ Patches:
- FollowRange
- DisconnectItems
- CrashEgg
- EntityTag
# All entities added below will be blocked to use in a spawn egg.
BlockedEntityTags:
- lightning_bolt
- falling_block
Commands:
Help:
@ -27,4 +33,7 @@ Notify:
Permission: vulnerability.notify
# DevMode should be set to false, unless you're a developer of this plugin.
DevMode: false
DevMode: false
# This should not be changed unless you know what you're doing.
ConfVersion: 0

View file

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

View file

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

View file

@ -0,0 +1,16 @@
package me.cooljwb.vulnerabilitypatcher;
import java.util.Arrays;
import java.util.List;
public enum Variables {
Attributes(Arrays.asList("generic.maxhealth", "generic.followrange", "generic.knockbackresistance",
"generic.movementspeed", "generic.attackdamage", "generic.armor", "generic.armortoughness",
"generic.attackspeed", "generic.luck", "horse.jumpstrenght", "generic.attackknockback", "generic.flyingspeed",
"zombie.spawnreinforcements"));
public List<String> liststr;
Variables(List<String> strings) {
liststr = strings;
}
}

View file

@ -3,10 +3,13 @@ package me.cooljwb.vulnerabilitypatcher;
import me.cooljwb.vulnerabilitypatcher.commands.CommandGetNBT;
import me.cooljwb.vulnerabilitypatcher.commands.CommandVulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.*;
import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
@ -36,7 +39,7 @@ public final class VulnerabilityPatcher extends JavaPlugin {
/*
* 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.
* Large follow range, Disconnect Items, Crash Eggs, Knowledge Books, Negative Damage Arrows, much more.
*/
public static VulnerabilityPatcher main;
@ -57,6 +60,12 @@ public final class VulnerabilityPatcher extends JavaPlugin {
@Override
public void onEnable() {
try {
updateConfig();
} catch(IOException e) {
log.log(Level.WARNING, String.format("[%s] Could not update the config: " + e.getLocalizedMessage(), pluginName));
}
initialize();
patches.initialize();
@ -97,13 +106,33 @@ public final class VulnerabilityPatcher extends JavaPlugin {
case "CrashItems": listeners.add(new Crash_Items()); break;
case "Books": listeners.add(new Books()); break;
case "RougeEntity": listeners.add(new Rouge_Entity()); break;
case "Knockback": listeners.add(new Player_Knockback()); break;
case "Arrows": listeners.add(new Arrows()); break;
case "Riptide": listeners.add(new Trident_Riptide()); break;
case "FollowRange": listeners.add(new Follow_Range()); break;
case "DisconnectItems": listeners.add(new Disconnect_Items()); break;
case "CrashEgg": listeners.add(new Crash_Egg()); break;
case "EntityTag": listeners.add(new Entity_Tag()); break;
}
}
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));
}
public void updateConfig() throws IOException {
File conf = new File("plugins/VulnerabilityPatcher/config.yml");
String confstr = FileUtils.readFileToString(conf);
if(confstr.contains("ConfVersion")) {
// Foundation of automatic update system.
}
else {
log.log(Level.WARNING, String.format("[%s] Did not find the ConfVersion in config.yml, reverting to ConfVersion 0 (if you have recently updated from version 0.1.1 then this is normal).", pluginName));
File confbackup = new File("plugins/VulnerabilityPatcher/config-backup.yml");
FileUtils.copyFile(conf, confbackup);
log.log(Level.INFO, String.format("[%s] Made backup of config.yml at plugins/VulnerabilityPatcher/config-backup.yml", pluginName));
FileUtils.forceDelete(conf);
}
}
}

View file

@ -36,9 +36,9 @@ public class CommandGetNBT extends Patches implements CommandExecutor {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
NBTTagCompound tag = nmsItemStack.getTag();
if(item != null && tag != null)
if(item != null && item.getType() != Material.AIR && tag != null)
msg(sender, SMG.VULNERABILITYPATCHER.msg + ChatColor.GRAY + "Item data of item: " + ChatColor.GREEN + ChatColor.stripColor(tag.toString()));
else if(item.getType() == Material.AIR)
else if(item == null || item.getType() == Material.AIR)
msg(sender, SMG.VULNERABILITYPATCHER.msg + ChatColor.RED + "Get an item in your main hand!");
else if(tag == null)
msg(sender, SMG.VULNERABILITYPATCHER.msg + ChatColor.RED + "This item has no item tag.");

View file

@ -3,6 +3,13 @@ package me.cooljwb.vulnerabilitypatcher.commands;
import me.cooljwb.vulnerabilitypatcher.SMG;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@ -32,6 +39,7 @@ public class CommandVulnerabilityPatcher extends Patches implements CommandExecu
public static String vulnerabilitypatcher = "vulnerabilitypatcher";
private VulnerabilityPatcher main;
private Logger log = Logger.getLogger("Minecraft");
public CommandVulnerabilityPatcher(VulnerabilityPatcher main) {
this.main = main;

View file

@ -5,6 +5,7 @@ import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.player.PlayerVelocityEvent;
@ -31,7 +32,7 @@ import java.util.logging.Logger;
* @author CoolJWB
*/
public class Player_Knockback extends Patches implements Listener {
public class Arrows extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
@ -40,8 +41,22 @@ public class Player_Knockback extends Patches implements Listener {
if(event.getVelocity().getX() > 10 || event.getVelocity().getY() > 10 || event.getVelocity().getZ() > 10)
event.setCancelled(true);
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler
public void onEntitySpawnEvent(EntitySpawnEvent event) {
if(event.getEntity().getType() == EntityType.ARROW) {
Arrow arrow = (Arrow) event.getEntity();
if (arrow.getKnockbackStrength() > 10)
arrow.setKnockbackStrength(10);
if(arrow.getDamage() < 0 || arrow.getDamage() > 214748364)
arrow.setDamage(0);
}
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -51,9 +66,11 @@ public class Player_Knockback extends Patches implements Listener {
if (arrow.getKnockbackStrength() > 10)
arrow.setKnockbackStrength(10);
if(arrow.getDamage() < 0)
arrow.setDamage(0);
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
}

View file

@ -60,8 +60,7 @@ public class Books extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
public void writtenBook(Player player, EquipmentSlot hand) {

View file

@ -1,74 +0,0 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.block.Container;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.inventory.ItemStack;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* Copyright 2019 CoolJWB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author CoolJWB
*/
public class Crash_Egg extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockDispenseEvent(BlockDispenseEvent event) {
ItemStack item = event.getItem();
if(item != null) {
if (isCrashEgg(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);
}
}
notifyViolation(event.getBlock().getType().name(), "drop", "crash egg", event.getBlock().getLocation());
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
}
public boolean isCrashEgg(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.getTag() != null) {
if(nmsItemStack.getTag().getCompound("EntityTag").getString("id").equalsIgnoreCase("minecraft:lightning_bolt"))
return true;
}
}
return false;
}
}

View file

@ -80,8 +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());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -97,8 +96,7 @@ public class Crash_Items extends Patches implements Listener {
notifyViolation(player, "interact with", "crash item", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -117,8 +115,7 @@ public class Crash_Items extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -144,8 +141,7 @@ public class Crash_Items extends Patches implements Listener {
}, 0L);
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -161,8 +157,7 @@ public class Crash_Items extends Patches implements Listener {
notifyViolation(player, "drop", "crash item", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
public static boolean isCrashItem(ItemStack item) {

View file

@ -62,8 +62,7 @@ public class Death_Items extends Patches implements Listener {
notifyViolation("Dispenser", "place", event.getItem().getType() + " with death item in it", event.getBlock().getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -83,8 +82,7 @@ public class Death_Items extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -110,8 +108,7 @@ public class Death_Items extends Patches implements Listener {
}, 0L);
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -127,8 +124,7 @@ public class Death_Items extends Patches implements Listener {
notifyViolation(player, "drop", "death item", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
public static boolean isDeathItem(ItemStack item) {

View file

@ -57,8 +57,7 @@ public class Death_Potions extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -75,8 +74,7 @@ public class Death_Potions extends Patches implements Listener {
notifyViolation(player, "splash", "death potion", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -93,8 +91,7 @@ public class Death_Potions extends Patches implements Listener {
notifyViolation(player, "splash", "death potion", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
public static boolean isDeathPotion(List<PotionEffect> effects) {
@ -107,7 +104,7 @@ public class Death_Potions extends Patches implements Listener {
public static boolean isDeathPotion(Collection<PotionEffect> effects) {
for(PotionEffect effect : effects) {
if(effect.getType().getName().equalsIgnoreCase("HEAL") && (effect.getAmplifier() >= 125 || effect.getAmplifier() == 93 || effect.getAmplifier() == 61 || effect.getAmplifier() == 29))
if(effect.getType().getName().equalsIgnoreCase("HEAL") && (effect.getAmplifier() == 125 || effect.getAmplifier() == 93 || effect.getAmplifier() == 61 || effect.getAmplifier() == 29))
return true;
}
return false;

View file

@ -1,23 +1,31 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
import net.minecraft.server.v1_13_R2.NBTTagList;
import me.cooljwb.vulnerabilitypatcher.Variables;
import net.minecraft.server.v1_13_R2.*;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -45,6 +53,28 @@ public class Disconnect_Items extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInteractEvent(PlayerInteractEvent event) {
if(event.getClickedBlock() != null) {
if (event.getClickedBlock().getState() instanceof Container) {
Block block = event.getClickedBlock();
Container container = (Container) block.getState();
String invstr = "";
for (ItemStack item : container.getInventory().getContents()) {
invstr = invstr + itemToString(item);
}
if(invstr.length() > 50000) {
event.setCancelled(true);
clearItemMeta(container.getInventory().getContents());
}
}
}
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockDispenseEvent(BlockDispenseEvent event) {
if(containsDisconnectItem(event.getItem())) {
@ -61,8 +91,7 @@ public class Disconnect_Items extends Patches implements Listener {
notifyViolation("Dispenser", "place", event.getItem().getType() + " with disconnect item in it", event.getBlock().getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -82,8 +111,7 @@ public class Disconnect_Items extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -109,8 +137,7 @@ public class Disconnect_Items extends Patches implements Listener {
}, 0L);
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -126,8 +153,7 @@ public class Disconnect_Items extends Patches implements Listener {
notifyViolation(player, "drop", "disconnect item", player.getLocation());
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
public boolean isDisconnectItem(ItemStack item) {
@ -135,7 +161,7 @@ public class Disconnect_Items extends Patches implements Listener {
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))
if((nmsItemStack.getTag().getInt("CustomPotionColor") < 0) || (nmsItemStack.getTag().getCompound("display").getInt("color") < 0) || (nmsItemStack.getTag().toString().length() > 50000) || isMovementDisconnectItem(nmsItemStack) || isInvalidAttributeName(nmsItemStack))
return true;
}
}
@ -151,7 +177,7 @@ 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))
if((nmsItemStack.getTag().getInt("CustomPotionColor") < 0) || (nmsItemStack.getTag().getCompound("display").getInt("color") < 0) || (nmsItemStack.getTag().toString().length() > 50000) || isMovementDisconnectItem(nmsItemStack) || isInvalidAttributeName(nmsItemStack))
return true;
}
}
@ -159,4 +185,39 @@ 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);
if(attrlist != null) {
HashMap<String, Float> attributes = new HashMap<>();
for(int a = 0; a <= attrlist.size(); a++) {
NBTTagCompound attribute = attrlist.getCompound(a);
if(attribute.getString("AttributeName").equalsIgnoreCase("generic.movementspeed") && attributes.containsKey(attribute.getString("AttributeName").toLowerCase()) && !Float.isFinite(attribute.getFloat("Amount")))
return true;
attributes.put(attribute.getString("AttributeName").toLowerCase(), attribute.getFloat("Amount"));
}
}
}
return false;
}
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;
}
}
}
}
return false;
}
}

View file

@ -0,0 +1,64 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.block.Container;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.apache.commons.lang3.StringUtils.containsIgnoreCase;
public class Entity_Tag extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInteractEvent(PlayerInteractEvent event) {
ItemStack item = event.getItem();
if(isDangerousEgg(item))
clearItemMeta(event.getItem());
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockDispenseEvent(BlockDispenseEvent event) {
ItemStack item = event.getItem();
if(item != null) {
if (isDangerousEgg(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);
}
}
notifyViolation(event.getBlock().getType().name(), "use", "dangerous mob egg", event.getBlock().getLocation());
}
}
debug(ReflectionToStringBuilder.toString(event));
}
public boolean isDangerousEgg(ItemStack item) {
if (item != null && containsIgnoreCase(item.getType().name(), "spawn_egg")) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if (nmsItemStack.hasTag() && main.getConfig().getStringList("BlockedEntityTags").contains(nmsItemStack.getTag().getCompound("EntityTag").getString("id").replaceAll("minecraft:", "")))
return true;
}
return false;
}
}

View file

@ -8,7 +8,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntitySpawnEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
@ -47,7 +46,6 @@ public class Follow_Range extends Patches implements Listener {
}
}
if(devmode)
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
debug(ReflectionToStringBuilder.toString(event));
}
}

View file

@ -5,10 +5,12 @@ 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.NBTTagCompound;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Bukkit;
import org.bukkit.Location;
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.Listener;
@ -17,6 +19,8 @@ import org.bukkit.scheduler.BukkitScheduler;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* Copyright 2019 CoolJWB
@ -48,6 +52,9 @@ public class Patches implements Listener {
private Death_Items death_items;
private Disconnect_Items disconnect_items;
private Crash_Items crash_items;
private Rouge_Entity rouge_entity;
private Logger log = Logger.getLogger("Minecraft");
public Patches() {}
public Patches(VulnerabilityPatcher main) {
@ -81,7 +88,7 @@ public class Patches implements Listener {
clearItemMeta(item);
notifyViolation(player, "acquire", "death item", player.getLocation());
msg(player, SMG.ITEM.msg);
} break;
}
case "DisconnectItems":
if(disconnect_items.isDisconnectItem(item) || disconnect_items.containsDisconnectItem(item)) {
@ -163,6 +170,11 @@ 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 clearItemMeta(ItemStack item) {
item.setItemMeta(null);
}
@ -174,6 +186,16 @@ public class Patches implements Listener {
}
}
public String itemToString(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.hasTag())
return nmsItemStack.getTag().toString();
}
return "";
}
public NBTTagCompound getEntityNMS(Entity entity) {
net.minecraft.server.v1_13_R2.Entity nmsEntity = ((CraftEntity)entity).getHandle();
NBTTagCompound tag = new NBTTagCompound();

View file

@ -37,12 +37,10 @@ public class Rouge_Entity extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
public Rouge_Entity() {
runnable();
}
public Rouge_Entity() { checkRougeEntities(); }
public void runnable() {
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
public void checkRougeEntities() {
BukkitScheduler scheduler = Bukkit.getScheduler();
scheduler.scheduleSyncRepeatingTask(main, new Runnable() {
@Override
public void run() {

View file

@ -1,6 +1,7 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -55,6 +56,8 @@ public class Trident_Riptide extends Patches implements Listener {
}
}
}
debug(ReflectionToStringBuilder.toString(event));
}
@EventHandler
@ -66,5 +69,7 @@ public class Trident_Riptide extends Patches implements Listener {
item.removeEnchantment(Enchantment.RIPTIDE);
item.addUnsafeEnchantment(Enchantment.RIPTIDE, enchantlevel.get(player));
}
debug(ReflectionToStringBuilder.toString(event));
}
}

View file

@ -1,18 +1,23 @@
# VulnerabilityPatcher by CoolJWB
# Patches:
# DeathPotions, DeathItems, CrashSigns, Books, RougeEntity, Knockback, Riptide, FollowRange, DisconnectItems, CrashEgg.
# VulnerabilityPatcher by CoolJWB.
# 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
- DeathItems
- CrashSigns
- CrashItems
- Books
- RougeEntity
- Knockback
- Arrows
- Riptide
- FollowRange
- DisconnectItems
- CrashEgg
- EntityTag
# All entities added below will be blocked to use in a spawn egg.
BlockedEntityTags:
- lightning_bolt
- falling_block
Commands:
Help:
@ -27,4 +32,7 @@ Notify:
Permission: vulnerability.notify
# DevMode should be set to false, unless you're a developer of this plugin.
DevMode: false
DevMode: false
# This should not be changed unless you know what you're doing.
ConfVersion: 0

View file

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