Commit v0.5

Added basic Paper 1.13 and 1.14 support.
This commit is contained in:
CoolJWB 2019-07-29 16:18:08 +02:00
parent e92f16631f
commit 7da3fb9b18
32 changed files with 1591 additions and 619 deletions

View file

@ -1,15 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/acb4e5ffd25814ef0a53acedec9a94d79dd3f7a1/paper-api-1.13.2-R0.1-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/f7ef5c5518b628b2a34ea8f4cae361d44c20509a/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/2daddae5bcc8c14d08b014a7e2366a82497f4fd5/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/e27f6d6e0d9ff5618be8298262586fe4c59f54cd/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/29425a28f9797b501425b65a6e85382085c6885d/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/e4e756ec274f5d9e66e849b971df02e23cbb22d6/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View file

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: com.destroystokyo.paper:paper-api:1.14-R0.1-SNAPSHOT">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.14-R0.1-SNAPSHOT/389a9162fe8fe8b127d4ec5b7d9c7e69f6a03e04/paper-api-1.14-R0.1-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.14-R0.1-SNAPSHOT/d8eb6e238bfa98e57fbfaa2963c230e33dffcc47/paper-api-1.14-R0.1-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="VulnerabilityPatcher-Paper" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.version="v0.4" type="JAVA_MODULE" version="4">
<module external.linked.project.id="VulnerabilityPatcher-Paper" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.version="v0.5" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$/../..">

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="VulnerabilityPatcher-Paper:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.type="sourceSet" external.system.module.version="v0.4" type="JAVA_MODULE" version="4">
<module external.linked.project.id="VulnerabilityPatcher-Paper:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.type="sourceSet" external.system.module.version="v0.5" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
@ -21,16 +21,25 @@
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../../libs/spigot-1.13.2.jar!/" />
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.13.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Gradle: com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.14.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Gradle: com.destroystokyo.paper:paper-api:1.14-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" name="Gradle: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Gradle: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" name="Gradle: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" name="Gradle: net.md-5:bungeecord-chat:1.13-SNAPSHOT" level="project" />
<orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.0" level="project" />

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="VulnerabilityPatcher-Paper:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.type="sourceSet" external.system.module.version="v0.4" type="JAVA_MODULE" version="4">
<module external.linked.project.id="VulnerabilityPatcher-Paper:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="me.cooljwb.vulnerabilitypatcher" external.system.module.type="sourceSet" external.system.module.version="v0.5" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
@ -22,15 +22,25 @@
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../../libs/spigot-1.13.2.jar!/" />
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.13.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Gradle: com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.14.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Gradle: com.destroystokyo.paper:paper-api:1.14-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" name="Gradle: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" name="Gradle: junit:junit:4.12" level="project" />
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Gradle: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" name="Gradle: net.md-5:bungeecord-chat:1.13-SNAPSHOT" level="project" />
@ -42,7 +52,6 @@
<orderEntry type="library" name="Gradle: org.ow2.asm:asm-analysis:7.1" level="project" />
<orderEntry type="library" name="Gradle: org.ow2.asm:asm-tree:7.1" level="project" />
<orderEntry type="library" name="Gradle: org.ow2.asm:asm:7.1" level="project" />
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
</component>
<component name="TestModuleProperties" production-module="me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.main" />
</module>

124
.idea/uiDesigner.xml Normal file
View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

View file

@ -1,25 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BookmarkManager">
<bookmark url="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.java" line="108" />
</component>
<component name="ChangeListManager">
<list default="true" id="4038a6e9-7d52-4dd0-91ef-d9a12aa1c1b2" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Chunks.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/libraries/Gradle__com_destroystokyo_paper_paper_api_1_13_2_R0_1_SNAPSHOT.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/libraries/Gradle__com_destroystokyo_paper_paper_api_1_13_2_R0_1_SNAPSHOT.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Gradle__com_destroystokyo_paper_paper_api_1_14_R0_1_SNAPSHOT.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Handswitch.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/libraries/Gradle__com_destroystokyo_paper_paper_api_1_13_2_R0_1_SNAPSHOT.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.main.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.main.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.test.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.test.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
<change beforePath="$PROJECT_DIR$/gradle.properties" beforeDir="false" afterPath="$PROJECT_DIR$/gradle.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/resources/plugin.yml" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/resources/plugin.yml" 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/Variables.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Variables.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/Blocks.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Blocks.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_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/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/Item_Frames.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.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/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/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>
@ -49,17 +62,42 @@
<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="408">
<caret line="39" column="39" lean-forward="true" selection-start-line="39" selection-start-column="39" selection-end-line="39" selection-end-column="39" />
<state relative-caret-position="-281">
<caret line="55" column="17" selection-start-line="55" selection-start-column="17" selection-end-line="55" selection-end-column="17" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<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="317">
<caret line="120" column="46" lean-forward="true" selection-start-line="120" selection-start-column="46" selection-end-line="120" selection-end-column="46" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#7367#7631#1" />
<element signature="method#notify#0;class#Patches#0" />
<element signature="method#notify#1;class#Patches#0" />
<element signature="method#notifyViolation#0;class#Patches#0" />
<element signature="method#notifyViolation#1;class#Patches#0" />
<element signature="method#log#0;class#Patches#0" />
<element signature="method#debug#0;class#Patches#0" />
<element signature="method#fired_countermeasure#0;class#Patches#0" />
<element signature="method#mode#0;class#Patches#0" />
<element signature="e#11334#11373#1" />
<element signature="e#11111#11112#0" expanded="true" />
<element signature="method#clearItemMeta#1;class#Patches#0" />
<element signature="method#itemInVisibleSlot#0;class#Patches#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/resources/config.yml">
<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="603">
<caret line="43" column="43" lean-forward="true" selection-start-line="43" selection-start-column="43" selection-end-line="43" selection-end-column="43" />
<state relative-caret-position="405">
<caret line="50" column="51" lean-forward="true" selection-start-line="50" selection-start-column="51" selection-end-line="50" selection-end-column="51" />
</state>
</provider>
</entry>
@ -82,6 +120,11 @@
<find>getHandle().</find>
<find>c(NBT</find>
<find>containsDeathItem</find>
<find>setAmount</find>
<find>containsIgnore</find>
<find>NBTTagCompound</find>
<find>System.out.p</find>
<find>System.out.</find>
</findStrings>
<dirStrings>
<dir>C:\Users\William\.gradle\caches\modules-2\files-2.1\com.destroystokyo.paper\paper-api\1.13.2-R0.1-SNAPSHOT\c59a5eecaa5170937a7044fefd475b1373bb255\paper-api-1.13.2-R0.1-SNAPSHOT.jar!\org</dir>
@ -93,31 +136,38 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/build.gradle" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.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/Structure_Blocks.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Variables.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java" />
<option value="$PROJECT_DIR$/src/main/resources/plugin.yml" />
<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/patches/Chunks.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.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/Follow_Range.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandVulnerabilityPatcher.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/Patches.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.java" />
<option value="$PROJECT_DIR$/src/main/resources/config.yml" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Handswitch.java" />
<option value="$PROJECT_DIR$/src/main/resources/plugin.yml" />
<option value="$PROJECT_DIR$/build.gradle" />
<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/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_Potions.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/modifiers/NBTModifier.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetNBT.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.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/commands/CommandVulnerabilityPatcher.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Arrows.java" />
<option value="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/VulnerabilityPatcher.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" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="124" />
<option name="y" value="37" />
<component name="ProjectFrameBounds" extendedState="7">
<option name="x" value="-106" />
<option name="y" value="6" />
<option name="width" value="1936" />
<option name="height" value="1056" />
</component>
@ -127,7 +177,7 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<expand>
@ -170,6 +220,15 @@
<item name="vulnerabilitypatcher" type="462c0819:PsiDirectoryNode" />
<item name="commands" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher-Paper" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher-Paper" 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="modifiers" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="VulnerabilityPatcher-Paper" type="b2602c69:ProjectViewProjectNode" />
<item name="VulnerabilityPatcher-Paper" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
@ -190,23 +249,18 @@
<item name="VulnerabilityPatcher-Paper" type="b2602c69:ProjectViewProjectNode" />
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
</path>
<path>
<item name="VulnerabilityPatcher-Paper" type="b2602c69:ProjectViewProjectNode" />
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
<item name="Gradle: com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT" type="70bed36:NamedLibraryElementNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1562107277651" />
<property name="project.structure.last.edited" value="Modules" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1564325093141" />
<property name="project.structure.last.edited" value="SDKs" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.2" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
@ -254,11 +308,20 @@
</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" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.20788912" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24520256" />
<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" />
@ -271,7 +334,7 @@
<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 active="true" anchor="bottom" id="TODO" order="6" visible="true" weight="0.32936078" />
<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" />
@ -290,71 +353,7 @@
</layout>
</component>
<component name="editorHistoryManager">
<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="299">
<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/Trident_Riptide.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="161">
<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/Blocks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
</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="272">
<caret line="16" column="13" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="13" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Structure_Blocks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="16" column="41" lean-forward="true" selection-start-line="16" selection-start-column="41" selection-end-line="16" selection-end-column="41" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</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="399">
<caret line="43" column="55" lean-forward="true" selection-start-line="43" selection-start-column="55" selection-end-line="43" selection-end-column="55" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Variables.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="9" column="35" lean-forward="true" selection-start-line="9" selection-start-column="35" selection-end-line="9" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/29425a28f9797b501425b65a6e85382085c6885d/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/org/bukkit/entity/Entity.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2465">
<caret line="167" column="81" selection-start-line="167" selection-start-column="79" selection-end-line="167" selection-end-column="81" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.destroystokyo.paper/paper-api/1.13.2-R0.1-SNAPSHOT/29425a28f9797b501425b65a6e85382085c6885d/paper-api-1.13.2-R0.1-SNAPSHOT-sources.jar!/org/bukkit/entity/Entity.java" />
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/org/bukkit/craftbukkit/v1_13_R2/entity/CraftEntity.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="13277">
@ -365,10 +364,164 @@
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/net/minecraft/server/v1_13_R2/Entity.class">
<entry file="file://$PROJECT_DIR$/src/main/resources/config.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1564">
<caret line="1425" column="24" selection-start-line="1425" selection-start-column="19" selection-end-line="1425" selection-end-column="24" />
<state relative-caret-position="722">
<caret line="51" column="20" selection-start-line="51" selection-start-column="20" selection-end-line="51" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="25" column="41" selection-start-line="25" selection-start-column="41" selection-end-line="25" selection-end-column="41" />
</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="34">
<caret line="11" column="32" lean-forward="true" selection-start-line="11" selection-start-column="32" selection-end-line="11" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Chunks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="22" column="53" lean-forward="true" selection-start-line="22" selection-start-column="53" selection-end-line="22" selection-end-column="53" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#808#809#0" expanded="true" />
<element signature="e#868#869#0" 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="286">
<caret line="85" column="5" lean-forward="true" selection-start-line="85" selection-start-column="5" selection-end-line="85" selection-end-column="5" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#onBlockDispenseEvent#0;class#Death_Items#0" />
<element signature="method#onPlayerDropEvent#0;class#Death_Items#0" />
</folding>
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/Spigot-1.14.jar!/org/bukkit/projectiles/ProjectileSource.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
<caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="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="1173">
<caret line="82" column="55" selection-start-line="82" selection-start-column="55" selection-end-line="82" selection-end-column="55" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/Spigot-1.13.jar!/net/minecraft/server/v1_13_R1/NBTBase.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-765">
<caret line="11" column="17" selection-start-line="11" selection-start-column="17" selection-end-line="11" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/Spigot-1.13.jar!/org/apache/commons/lang3/StringUtils.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="481" column="40" selection-start-line="481" selection-start-column="26" selection-end-line="481" selection-end-column="40" />
</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="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/Handswitch.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="99">
<caret line="15" column="26" selection-start-line="15" selection-start-column="26" selection-end-line="15" selection-end-column="26" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="391">
<caret line="29" column="49" selection-start-line="29" selection-start-column="49" selection-end-line="29" selection-end-column="49" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/libs/Spigot-1.13.jar!/org/bukkit/entity/Arrow.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="9" column="17" selection-start-line="9" selection-start-column="17" selection-end-line="9" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/Variables.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="9" column="35" selection-start-line="9" selection-start-column="35" selection-end-line="9" selection-end-column="35" />
</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="663">
<caret line="41" column="44" lean-forward="true" selection-start-line="41" selection-start-column="44" selection-end-line="41" selection-end-column="44" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="32" column="47" selection-start-line="32" selection-start-column="47" selection-end-line="32" selection-end-column="47" />
<folding>
<element signature="method#getVersion#0;class#NBTModifier#0" />
<element signature="method#itemToString#0;class#NBTModifier#0" />
<element signature="method#removePlayerdata#0;class#NBTModifier#0" />
<element signature="method#resetMeta#0;class#NBTModifier#0" />
<element signature="method#isPlayer#0;class#NBTModifier#0" />
<element signature="method#getArrowDamage#0;class#NBTModifier#0" />
<element signature="method#setArrowDamage#0;class#NBTModifier#0" />
<element signature="method#isCrashItem#0;class#NBTModifier#0" />
<element signature="method#isCrashItem#1;class#NBTModifier#0" />
<element signature="method#isDeathItem#0;class#NBTModifier#0" />
<element signature="method#containsDeathItem#0;class#NBTModifier#0" />
<element signature="method#isDisconnectItem#0;class#NBTModifier#0" />
<element signature="method#containsDisconnectItem#0;class#NBTModifier#0" />
<element signature="method#isDangerousEgg#0;class#NBTModifier#0" />
</folding>
</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="408">
<caret line="31" column="13" selection-start-line="31" selection-start-column="13" selection-end-line="31" selection-end-column="13" />
</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="640">
<caret line="58" column="94" selection-start-line="58" selection-start-column="94" selection-end-line="58" selection-end-column="94" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
@ -382,137 +535,177 @@
<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="18" lean-forward="true" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Structure_Blocks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="391">
<caret line="23" column="37" selection-start-line="23" selection-start-column="37" selection-end-line="23" selection-end-column="37" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Chunks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="22" column="53" lean-forward="true" selection-start-line="22" selection-start-column="53" selection-end-line="22" selection-end-column="53" />
<state relative-caret-position="272">
<caret line="16" column="41" lean-forward="true" selection-start-line="16" selection-start-column="41" selection-end-line="16" selection-end-column="41" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#868#869#0" expanded="true" />
</folding>
</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="790">
<caret line="81" column="44" lean-forward="true" selection-start-line="81" selection-start-column="44" selection-end-line="81" selection-end-column="44" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Item_Frames.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" />
</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="33">
<caret line="2" selection-start-line="2" selection-end-line="2" />
</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="365">
<caret line="80" column="71" selection-start-line="80" selection-start-column="71" selection-end-line="80" selection-end-column="71" />
<state relative-caret-position="-638">
<caret line="63" column="13" lean-forward="true" selection-start-line="63" selection-start-column="13" selection-end-line="63" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/SMG.java">
<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="637">
<caret line="50" column="86" lean-forward="true" selection-start-line="50" selection-start-column="86" selection-end-line="50" selection-end-column="86" />
<state relative-caret-position="609">
<caret line="65" column="42" lean-forward="true" selection-start-line="65" selection-start-column="42" selection-end-line="65" selection-end-column="42" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Follow_Range.java">
<entry file="jar://$PROJECT_DIR$/libs/spigot-1.13.2.jar!/net/minecraft/server/v1_13_R2/Entity.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" lean-forward="true" selection-start-line="1" selection-end-line="1" />
<caret line="1425" column="24" selection-start-line="1425" selection-start-column="19" selection-end-line="1425" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Death_Items.java">
<entry file="jar://$PROJECT_DIR$/libs/Spigot-1.14.jar!/net/minecraft/server/v1_14_R1/Entity.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="660">
<caret line="162" lean-forward="true" selection-start-line="162" selection-end-line="162" />
<state relative-caret-position="-1411">
<caret line="1429" column="35" selection-start-line="1429" selection-start-column="21" selection-end-line="1429" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="280">
<caret line="32" column="4" selection-start-line="32" selection-start-column="4" selection-end-line="32" selection-end-column="4" />
<folding>
<element signature="method#onBlockDispenseEvent#0;class#Death_Items#0" />
<element signature="method#onPlayerDropEvent#0;class#Death_Items#0" />
<element signature="method#containsDeathItem#0;class#Death_Items#0" />
<element signature="imports" expanded="true" />
<element signature="method#log#0;class#NBTModifier_1_14#0" />
<element signature="method#fired_countermeasure#0;class#NBTModifier_1_14#0" />
<element signature="method#getItemNBT#0;class#NBTModifier_1_14#0" />
<element signature="method#getEntityNBT#0;class#NBTModifier_1_14#0" />
<element signature="method#setEntityNBT#0;class#NBTModifier_1_14#0" />
<element signature="method#getAttributeList#0;class#NBTModifier_1_14#0" />
<element signature="method#itemToString#0;class#NBTModifier_1_14#0" />
<element signature="method#removePlayerdata#0;class#NBTModifier_1_14#0" />
<element signature="method#resetMeta#0;class#NBTModifier_1_14#0" />
<element signature="method#getArrowDamage#0;class#NBTModifier_1_14#0" />
<element signature="method#setArrowDamage#0;class#NBTModifier_1_14#0" />
<element signature="method#isCrashItem#0;class#NBTModifier_1_14#0" />
<element signature="method#containsCrashItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isDeathItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isDeathItem#1;class#NBTModifier_1_14#0" />
<element signature="method#containsDeathItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isDisconnectItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isDisconnectItem#1;class#NBTModifier_1_14#0" />
<element signature="method#containsDisconnectItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isMovementDisconnectItem#0;class#NBTModifier_1_14#0" />
<element signature="method#isInvalidAttributeName#0;class#NBTModifier_1_14#0" />
<element signature="method#isDangerousEgg#0;class#NBTModifier_1_14#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Entity_Tag.java">
<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="-34">
<caret line="17" column="13" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
<state relative-caret-position="340">
<caret line="35" column="4" selection-start-line="35" selection-start-column="4" selection-end-line="35" selection-end-column="4" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Blocks.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="764">
<caret line="302" column="4" selection-start-line="302" selection-start-column="4" selection-end-line="302" selection-end-column="4" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#log#0;class#NBTModifier_1_13#0" />
<element signature="method#fired_countermeasure#0;class#NBTModifier_1_13#0" />
<element signature="method#getItemNBT#0;class#NBTModifier_1_13#0" />
<element signature="method#getEntityNBT#0;class#NBTModifier_1_13#0" />
<element signature="method#setEntityNBT#0;class#NBTModifier_1_13#0" />
<element signature="method#getAttributeList#0;class#NBTModifier_1_13#0" />
<element signature="method#itemToString#0;class#NBTModifier_1_13#0" />
<element signature="method#removePlayerdata#0;class#NBTModifier_1_13#0" />
<element signature="method#resetMeta#0;class#NBTModifier_1_13#0" />
<element signature="method#getArrowDamage#0;class#NBTModifier_1_13#0" />
<element signature="method#setArrowDamage#0;class#NBTModifier_1_13#0" />
<element signature="method#isCrashItem#0;class#NBTModifier_1_13#0" />
<element signature="method#containsCrashItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isDeathItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isDeathItem#1;class#NBTModifier_1_13#0" />
<element signature="method#containsDeathItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isDisconnectItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isDisconnectItem#1;class#NBTModifier_1_13#0" />
<element signature="method#containsDisconnectItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isMovementDisconnectItem#0;class#NBTModifier_1_13#0" />
<element signature="method#isInvalidAttributeName#0;class#NBTModifier_1_13#0" />
<element signature="method#isDangerousEgg#0;class#NBTModifier_1_13#0" />
</folding>
</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="-1420">
<caret line="46" column="13" selection-start-line="46" selection-start-column="13" selection-end-line="46" 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="385">
<caret line="102" column="21" lean-forward="true" selection-start-line="102" selection-start-column="21" selection-end-line="102" 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="102">
<caret line="57" column="129" lean-forward="true" selection-start-line="57" selection-start-column="129" selection-end-line="57" selection-end-column="129" />
<folding>
<element signature="method#notify#0;class#Patches#0" />
<element signature="method#notify#1;class#Patches#0" />
<element signature="method#notifyViolation#0;class#Patches#0" />
<element signature="method#notifyViolation#1;class#Patches#0" />
<element signature="method#debug#0;class#Patches#0" />
<element signature="method#fired_countermeasure#0;class#Patches#0" />
<element signature="method#mode#0;class#Patches#0" />
<element signature="e#11198#11234#0" />
<element signature="e#11663#11664#0" expanded="true" />
<element signature="method#clearItemMeta#1;class#Patches#0" />
<element signature="method#getNBTItemTag#0;class#Patches#0" />
<element signature="method#getNBTAttributeList#0;class#Patches#0" />
<element signature="method#itemToString#0;class#Patches#0" />
<element signature="method#itemInVisibleSlot#0;class#Patches#0" />
</folding>
<state relative-caret-position="178">
<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/VulnerabilityPatcher.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="408">
<caret line="39" column="39" lean-forward="true" selection-start-line="39" selection-start-column="39" selection-end-line="39" selection-end-column="39" />
<state relative-caret-position="-281">
<caret line="55" column="17" selection-start-line="55" selection-start-column="17" selection-end-line="55" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/config.yml">
<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="603">
<caret line="43" column="43" lean-forward="true" selection-start-line="43" selection-start-column="43" selection-end-line="43" selection-end-column="43" />
<state relative-caret-position="541">
<caret line="52" column="90" selection-start-line="52" selection-start-column="90" selection-end-line="52" selection-end-column="90" />
</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="317">
<caret line="120" column="46" lean-forward="true" selection-start-line="120" selection-start-column="46" selection-end-line="120" selection-end-column="46" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#7367#7631#1" />
<element signature="method#notify#0;class#Patches#0" />
<element signature="method#notify#1;class#Patches#0" />
<element signature="method#notifyViolation#0;class#Patches#0" />
<element signature="method#notifyViolation#1;class#Patches#0" />
<element signature="method#log#0;class#Patches#0" />
<element signature="method#debug#0;class#Patches#0" />
<element signature="method#fired_countermeasure#0;class#Patches#0" />
<element signature="method#mode#0;class#Patches#0" />
<element signature="e#11334#11373#1" />
<element signature="e#11111#11112#0" expanded="true" />
<element signature="method#clearItemMeta#1;class#Patches#0" />
<element signature="method#itemInVisibleSlot#0;class#Patches#0" />
</folding>
</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="405">
<caret line="50" column="51" lean-forward="true" selection-start-line="50" selection-start-column="51" selection-end-line="50" selection-end-column="51" />
</state>
</provider>
</entry>

View file

@ -20,8 +20,10 @@ repositories {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT'
compile files('libs/spigot-1.13.2.jar')
compile 'com.destroystokyo.paper:paper-api:1.13-R0.1-SNAPSHOT'
compile 'com.destroystokyo.paper:paper-api:1.14-R0.1-SNAPSHOT'
compile files('libs/Spigot-1.13.jar')
compile files('libs/Spigot-1.14.jar')
}
import org.apache.tools.ant.filters.ReplaceTokens

View file

@ -1,2 +1,2 @@
pluginGroup=me.cooljwb.vulnerabilitypatcher
pluginVersion=v0.4
pluginVersion=v0.5

BIN
libs/Spigot-1.13.jar Normal file

Binary file not shown.

BIN
libs/Spigot-1.14.jar Normal file

Binary file not shown.

View file

@ -45,10 +45,16 @@ public enum SMG {
BLOCK(SMG.VULNERABILITYPATCHER.msg + "&cThis block is not allowed."),
VERSION(SMG.VULNERABILITYPATCHER.msg + "&7This server utilizes %s-%s made by %s"),
NO_PERMISSION(SMG.VULNERABILITYPATCHER.msg + "&cYou do not have permission to do this."),
NOT_PLAYER(SMG.VULNERABILITYPATCHER.msg + "&cThis command can only be done in game."),
UNKNOWN_ARGUMENT(SMG.VULNERABILITYPATCHER.msg + "&cUnknown argument."),
PLAYER_NOT_FOUND(SMG.VULNERABILITYPATCHER.msg + "&cPlayer %s could not be found."),
REMOVED_DATA(SMG.VULNERABILITYPATCHER.msg + "&cRemoved all userdata from player %s."),
GET_ITEM_IN_MAINHAND(SMG.VULNERABILITYPATCHER.msg + "&cGet an item in your hand."),
NO_TAG(SMG.VULNERABILITYPATCHER.msg + "&cThis item has no tag."),
TOO_LARGE_ITEM(SMG.VULNERABILITYPATCHER.msg + "&cItem was too large."),
BLOCKED_TAGS(SMG.VULNERABILITYPATCHER.msg + "&aBlocked tag %s in all monster eggs."),
UNBLOCKED_TAGS(SMG.VULNERABILITYPATCHER.msg + "&cUnblocked tag %s in all monster eggs."),

View file

@ -33,11 +33,16 @@ import java.util.logging.Logger;
public final class VulnerabilityPatcher extends JavaPlugin {
// TODO: Make the EventPriority customizable.
// TODO: Check version command.
// TODO: Check version loader.
public static VulnerabilityPatcher main;
private Logger log = Logger.getLogger("Minecraft");
private Logger log = Logger.getLogger("Minecraft"); // Get the server logger.
private final String version = Bukkit.getVersion().substring((Bukkit.getVersion().indexOf(":") + 1), Bukkit.getVersion().indexOf(")")).trim();
public static String pluginName, pluginVersion;
private List<String> pluginAuthors;
public static List<String> pluginAuthors;
private ArrayList<Listener> listeners = new ArrayList<>();
@ -45,34 +50,62 @@ public final class VulnerabilityPatcher extends JavaPlugin {
private CommandVulnerabilityPatcher commandvulnerabilitypatcher = new CommandVulnerabilityPatcher(this);
private CommandGetNBT commandgetnbt = new CommandGetNBT(this);
public static Death_Items death_items = new Death_Items();
public static Disconnect_Items disconnect_items = new Disconnect_Items();
public static Crash_Items crash_items = new Crash_Items();
public final Death_Items death_items = new Death_Items();
public final Disconnect_Items disconnect_items = new Disconnect_Items();
public final Crash_Items crash_items = new Crash_Items();
private final Handswitch hand_switch = new Handswitch();
@Override
public void onEnable() {
initialize();
patches.initialize();
if(initialize()) {
patches.initialize();
registerConfig();
registerEvents();
registerConfig();
registerEvents();
Bukkit.getServer().getPluginCommand(commandvulnerabilitypatcher.vulnerabilitypatcher).setExecutor(commandvulnerabilitypatcher);
Bukkit.getServer().getPluginCommand(commandgetnbt.getnbt).setExecutor(commandgetnbt);
Bukkit.getServer().getPluginCommand(CommandVulnerabilityPatcher.vulnerabilitypatcher).setExecutor(commandvulnerabilitypatcher);
Bukkit.getServer().getPluginCommand(CommandGetNBT.getnbt).setExecutor(commandgetnbt);
log.log(Level.INFO, String.format("[%s] %s v%s was enabled.", pluginName, pluginName, pluginVersion));
log.log(Level.INFO, String.format("[%s] %s patches were loaded.", pluginName, listeners.size()));
hand_switch.runnable();
log.log(Level.INFO, String.format("[%s] %s v%s was enabled.", pluginName, pluginName, pluginVersion));
log.log(Level.INFO, String.format("[%s] %s patches were loaded.", pluginName, listeners.size()));
}
}
public void initialize() {
this.pluginName = this.getName();
this.pluginVersion = this.getDescription().getVersion();
this.pluginAuthors = this.getDescription().getAuthors();
private boolean version() {
switch(version) {
case "1.13":
case "1.13.1":
case "1.13.2":
case "1.14":
case "1.14.1":
case "1.14.2":
case "1.14.3":
case "1.14.4":
return true;
default:
log.log(Level.WARNING, String.format("[%s] Server version %s may not work fully or at all with %s-%s, plugin was disabled.", pluginName, version, pluginName, pluginVersion));
Bukkit.getPluginManager().disablePlugin(this);
}
return false;
}
private boolean initialize() {
pluginName = this.getName();
pluginVersion = this.getDescription().getVersion();
pluginAuthors = this.getDescription().getAuthors();
if(!version())
return false;
this.patches = new Patches(this);
this.main = this;
main = this;
return true;
}
public void registerConfig() {
private void registerConfig() {
getConfig().options().copyDefaults(true);
saveDefaultConfig();
}
@ -83,7 +116,7 @@ public final class VulnerabilityPatcher extends JavaPlugin {
patches.initialize();
}
public void registerEvents() {
private void registerEvents() {
for(String patch : getConfig().getStringList("Patches")) {
if(Patches.devmode)
log.log(Level.INFO, patch);
@ -102,8 +135,9 @@ public final class VulnerabilityPatcher extends JavaPlugin {
case "StructureBlocks": listeners.add(new Structure_Blocks()); break;
case "Chunks": listeners.add(new Chunks()); break;
case "ItemFrames": listeners.add(new Item_Frames()); break;
}
case "Handswitch": listeners.add(new Handswitch()); break;
} // Adds all events to the event register.
}
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this)); // Register the events.
}
}

View file

@ -3,14 +3,12 @@ package me.cooljwb.vulnerabilitypatcher.commands;
import me.cooljwb.vulnerabilitypatcher.SMG;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -33,15 +31,16 @@ public class CommandGetNBT extends Patches implements CommandExecutor {
Player player = Bukkit.getPlayer(((Player) sender).getUniqueId());
ItemStack item = player.getInventory().getItemInMainHand();
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
NBTTagCompound tag = nmsItemStack.getTag();
String strItem = itemToString(item);
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()));
if(item != null && item.getType() != Material.AIR && strItem != null && !(strItem.length() > 5000))
msg(sender, SMG.VULNERABILITYPATCHER.msg + ChatColor.GRAY + "Item data: " + ChatColor.GREEN + ChatColor.stripColor(strItem));
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.");
msg(sender, SMG.GET_ITEM_IN_MAINHAND.msg);
else if(strItem == null)
msg(sender, SMG.NO_TAG.msg);
else if(strItem.length() > 5000)
msg(sender, SMG.TOO_LARGE_ITEM.msg);
}
return true;
}

View file

@ -4,18 +4,13 @@ import me.cooljwb.vulnerabilitypatcher.SMG;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
import java.io.File;
import java.util.List;
import java.util.logging.Logger;
import net.minecraft.server.v1_13_R2.EntityPlayer;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity;
/*
* Copyright 2019 CoolJWB
@ -58,8 +53,12 @@ public class CommandVulnerabilityPatcher extends Patches implements CommandExecu
}
else if(args[0].equalsIgnoreCase("version")) {
StringBuilder authors = new StringBuilder();
for(String author : VulnerabilityPatcher.pluginAuthors)
authors.append(author).append(" ");
if(sender.hasPermission(main.getConfig().getString("Commands.Version.Permission")))
msg(sender, SMG.VULNERABILITYPATCHER.msg + ChatColor.GRAY + String.format("Server is running " + ChatColor.GREEN + main.getName() + "-" + main.getDescription().getVersion()));
msg(sender, String.format(SMG.VERSION.msg, VulnerabilityPatcher.pluginName, VulnerabilityPatcher.pluginVersion, authors.toString()));
else
msg(sender, SMG.NO_PERMISSION.msg);
}
@ -76,12 +75,8 @@ public class CommandVulnerabilityPatcher extends Patches implements CommandExecu
else if(args[0].equalsIgnoreCase("delete") && args.length == 2) {
if(sender.hasPermission(main.getConfig().getString("Commands.Delete.Permission"))) {
if(Bukkit.getPlayer(args[1]) != null)
((CraftEntity)Bukkit.getPlayer(args[1])).getHandle().f(new NBTTagCompound());
else if(Bukkit.getOfflinePlayer(args[1]) != null) {
File file = new File(Bukkit.getServer().getWorldContainer() + "/world/playerdata/" + Bukkit.getOfflinePlayer(args[1]).getUniqueId().toString() + ".dat");
file.delete();
}
if(removePlayerdata(sender.getName()))
msg(sender, String.format(SMG.REMOVED_DATA.msg, args[1]));
else
msg(sender, String.format(SMG.PLAYER_NOT_FOUND.msg, args[1]));
}

View file

@ -0,0 +1,166 @@
package me.cooljwb.vulnerabilitypatcher.modifiers;
import org.bukkit.Bukkit;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.projectiles.ProjectileSource;
import java.util.logging.Logger;
public class NBTModifier {
private Logger log = Logger.getLogger("Minecraft"); // Get the server logger.
private NBTModifier_1_13 nbt_1_13 = new NBTModifier_1_13();
private NBTModifier_1_14 nbt_1_14 = new NBTModifier_1_14();
public static String getVersion() {
switch(Bukkit.getVersion().substring((Bukkit.getVersion().indexOf(":") + 1), Bukkit.getVersion().indexOf(")")).trim()) {
case "1.13":
case "1.13.1":
case "1.13.2":
return "1.13";
case "1.14":
case "1.14.1":
case "1.14.2":
case "1.14.3":
case "1.14.4":
return "1.14";
default:
return "";
}
}
public String itemToString(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.itemToString(item);
case "1.14":
return nbt_1_14.itemToString(item);
default:
return "";
}
}
public boolean removePlayerdata(String player) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.removePlayerdata(player);
case "1.14":
return nbt_1_14.removePlayerdata(player);
}
return false;
}
public void resetMeta(Player player, ItemStack item, boolean mainhand) {
switch(getVersion()) {
case "1.13":
nbt_1_13.resetMeta(player, item, mainhand);
break;
case "1.14":
nbt_1_14.resetMeta(player, item, mainhand);
break;
}
}
public boolean isPlayer(ProjectileSource source) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.isPlayer(source);
case "1.14":
return nbt_1_14.isPlayer(source);
default:
return false;
}
}
public double getArrowDamage(Arrow arrow) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.getArrowDamage(arrow);
case "1.14":
return nbt_1_14.getArrowDamage(arrow);
default:
return 0;
}
}
public void setArrowDamage(Arrow arrow, double amount) {
switch(getVersion()) {
case "1.13":
nbt_1_13.setArrowDamage(arrow, amount);
break;
case "1.14":
nbt_1_14.setArrowDamage(arrow, amount);
break;
}
}
public boolean isCrashItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.isCrashItem(item);
case "1.14":
return nbt_1_14.isCrashItem(item);
default:
return false;
}
}
public boolean containsCrashItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.containsCrashItem(item);
case "1.14":
return nbt_1_14.containsCrashItem(item);
default:
return false;
}
}
public boolean isDeathItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.isDeathItem(item);
case "1.14":
return nbt_1_14.isDeathItem(item);
default:
return false;
}
}
public boolean containsDeathItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.containsDeathItem(item);
case "1.14":
return nbt_1_14.containsDeathItem(item);
default:
return false;
}
}
public boolean isDisconnectItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.isDisconnectItem(item);
case "1.14":
return nbt_1_14.isDisconnectItem(item);
default:
return false;
}
}
public boolean containsDisconnectItem(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.containsDisconnectItem(item);
case "1.14":
return nbt_1_14.containsDisconnectItem(item);
default:
return false;
}
}
public boolean isDangerousEgg(ItemStack item) {
switch(getVersion()) {
case "1.13":
return nbt_1_13.isDangerousEgg(item);
case "1.14":
return nbt_1_14.isDangerousEgg(item);
default:
return false;
}
}
}

View file

@ -0,0 +1,312 @@
package me.cooljwb.vulnerabilitypatcher.modifiers;
import me.cooljwb.vulnerabilitypatcher.Variables;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
import net.minecraft.server.v1_13_R1.NBTBase;
import net.minecraft.server.v1_13_R1.NBTTagCompound;
import net.minecraft.server.v1_13_R1.NBTTagList;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.projectiles.ProjectileSource;
import java.io.File;
import java.util.HashMap;
import java.util.logging.*;
public class NBTModifier_1_13 {
private Logger log = Logger.getLogger("Minecraft");
/* Misc */
public void log(Level level, String message) {
log.log(level, String.format("[%s] %s", VulnerabilityPatcher.pluginName, message));
}
private void fired_countermeasure(String reason) {
if (Patches.devmode)
log(Level.INFO, String.format("Fired countermeasure in %s reason: %s", getClass().getName(), reason));
}
private NBTTagCompound getItemNBT(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null)
return nmsItemStack.getTag();
}
return null;
}
private NBTTagCompound getEntityNBT(Entity entity) {
net.minecraft.server.v1_13_R1.Entity nmsEntity = ((CraftEntity)entity).getHandle();
NBTTagCompound tag = new NBTTagCompound();
nmsEntity.save(tag);
return tag;
}
private void setEntityNBT(Entity entity, NBTTagCompound nbtTagCompound) {
net.minecraft.server.v1_13_R1.Entity nmsEntity = ((CraftEntity)entity).getHandle();
nmsEntity.f(nbtTagCompound);
}
public NBTTagList getAttributeList(ItemStack item) {
NBTTagCompound itemtag = getItemNBT(item);
if(item != null && itemtag != null && itemtag.hasKey("AttributeModifiers"))
return getItemNBT(item).getList("AttributeModifiers", 10);
return null;
}
String itemToString(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.hasTag())
return nmsItemStack.getTag().toString();
}
return "";
}
boolean removePlayerdata(String player) {
if(Bukkit.getPlayer(player) != null) {
((CraftEntity) Bukkit.getPlayer(player)).getHandle().f(new NBTTagCompound());
return true;
}
else if(Bukkit.getOfflinePlayer(player) != null) {
File file = new File(Bukkit.getServer().getWorldContainer() + "/world/playerdata/" + Bukkit.getOfflinePlayer(player).getUniqueId().toString() + ".dat");
return file.delete();
}
return false;
}
void resetMeta(Player player, ItemStack item, boolean mainhand) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.hasTag() && nmsItemStack.getTag().hasKey("pages")) {
if (nmsItemStack.getTag().getList("pages", 8).toString().contains("run_command")) {
BookMeta meta = (BookMeta) item.getItemMeta();
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
meta.setPages(meta.getPages());
book.setItemMeta(meta);
if (mainhand)
player.getInventory().setItemInMainHand(book);
else
player.getInventory().setItemInOffHand(book);
}
}
}
boolean isPlayer(ProjectileSource source) {
return source instanceof CraftPlayer;
}
double getArrowDamage(Arrow arrow) {
return getEntityNBT(arrow).hasKey("damage") ? getEntityNBT(arrow).getDouble("damage") : 0;
}
void setArrowDamage(Arrow arrow, double amount) {
NBTTagCompound tag = getEntityNBT(arrow);
if(tag.hasKey("damage")) {
tag.setDouble("damage", amount);
setEntityNBT(arrow, tag);
}
}
boolean isCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound itemtag = nmsItemStack.getTag();
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("isCrashItem");
return true;
}
}
}
return false;
}
boolean containsCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagCompound itemtag = itemlist.getCompound(a).getCompound("tag");
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("containsCrashItem");
return true;
}
}
}
}
return false;
}
boolean isDeathItem(ItemStack item) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDeathItem(nmsItemStack.getTag());
return false;
}
private boolean isDeathItem(NBTTagCompound item) {
if(item != null) {
NBTTagList attrlist = item.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) {
fired_countermeasure("isDeathItem");
return true;
}
}
}
}
return false;
}
boolean containsDeathItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagList attrlist = itemlist.getCompound(a).getCompound("tag").getList("AttributeModifiers", 10);
for(int b = 0; b <= attrlist.size(); b++) {
String attribute_name = attrlist.getCompound(b).getString("AttributeName");
String name = attrlist.getCompound(b).getString("Name");
Double amount = attrlist.getCompound(b).getDouble("Amount");
if((name.equalsIgnoreCase("MAX_HEALTH") || attribute_name.equalsIgnoreCase("generic.maxHealth")) && amount <= 0) {
fired_countermeasure("containsDeathItem");
return true;
}
}
}
}
}
return false;
}
boolean isDisconnectItem(ItemStack item) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDisconnectItem(nmsItemStack.getTag());
return false;
}
private boolean isDisconnectItem(NBTTagCompound item) {
if(item != null) {
if(item.hasKey("CustomPotionColor") && item.getInt("CustomPotionColor") < 0) {
fired_countermeasure("isCustomPotionColorDisconnectItem");
return true;
}
else if((item.getCompound("display").hasKey("color") && item.getCompound("display").getInt("color") < 0)) {
fired_countermeasure("isDisplayColorDisconnectItem");
return true;
}
else if(item.getCompound("BlockEntityTag").hasKey("Patterns")) {
NBTTagList list = item.getCompound("BlockEntityTag").getList("Patterns", 10);
for(int x = 0; x <= list.size(); x++) {
if(list.get(x).getTypeId() == 10) {
if(list.getCompound(x).hasKey("Color") && list.getCompound(x).getInt("Color") < 0)
return true;
}
}
for(NBTBase base : item.getCompound("BlockEntityTag").getList("Patterns", 10)) {
if(base.b_().contains("Color:-1")) {
fired_countermeasure("isDisplayBannedColorDisconnectItem");
return true;
}
}
}
else if(item.toString().length() > 60000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
}
return false;
}
boolean containsDisconnectItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.getTag() != null) {
NBTTagList items = nmsItemStack.getTag().getCompound("BlockEntityTag").getList("Items", 10);
if(items != null) {
for (int a = 0; a <= items.size(); a++) {
NBTTagCompound nmsitem = items.getCompound(a);
return isDisconnectItem(nmsitem.getCompound("tag"));
}
}
}
}
return false;
}
private boolean isMovementDisconnectItem(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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"))) {
fired_countermeasure("isMovementDisconnectItem");
return true;
}
attributes.put(attribute.getString("AttributeName").toLowerCase(), attribute.getFloat("Amount"));
}
}
}
return false;
}
private boolean isInvalidAttributeName(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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())) {
fired_countermeasure("isInvalidAttributeNameDisconnectItem");
return true;
}
}
}
}
}
return false;
}
boolean isDangerousEgg(ItemStack item) {
if (item != null && item.getType().name().equalsIgnoreCase("spawn_egg")) {
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if (nmsItemStack.hasTag() && VulnerabilityPatcher.main.getConfig().getStringList("BlockedEntityTags").contains(nmsItemStack.getTag().getCompound("EntityTag").getString("id").replaceAll("minecraft:", "")))
return true;
}
return false;
}
}

View file

@ -0,0 +1,312 @@
package me.cooljwb.vulnerabilitypatcher.modifiers;
import me.cooljwb.vulnerabilitypatcher.Variables;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
import net.minecraft.server.v1_14_R1.NBTBase;
import net.minecraft.server.v1_14_R1.NBTTagCompound;
import net.minecraft.server.v1_14_R1.NBTTagList;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.projectiles.ProjectileSource;
import java.io.File;
import java.util.HashMap;
import java.util.logging.*;
public class NBTModifier_1_14 {
private Logger log = Logger.getLogger("Minecraft");
/* Misc */
public void log(Level level, String message) {
log.log(level, String.format("[%s] %s", VulnerabilityPatcher.pluginName, message));
}
private void fired_countermeasure(String reason) {
if (Patches.devmode)
log(Level.INFO, String.format("Fired countermeasure in %s reason: %s", getClass().getName(), reason));
}
private NBTTagCompound getItemNBT(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null)
return nmsItemStack.getTag();
}
return null;
}
private NBTTagCompound getEntityNBT(Entity entity) {
net.minecraft.server.v1_14_R1.Entity nmsEntity = ((CraftEntity)entity).getHandle();
NBTTagCompound tag = new NBTTagCompound();
nmsEntity.save(tag);
return tag;
}
private void setEntityNBT(Entity entity, NBTTagCompound nbtTagCompound) {
net.minecraft.server.v1_14_R1.Entity nmsEntity = ((CraftEntity)entity).getHandle();
nmsEntity.f(nbtTagCompound);
}
public NBTTagList getAttributeList(ItemStack item) {
NBTTagCompound itemtag = getItemNBT(item);
if(item != null && itemtag != null && itemtag.hasKey("AttributeModifiers"))
return getItemNBT(item).getList("AttributeModifiers", 10);
return null;
}
String itemToString(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.hasTag())
return nmsItemStack.getTag().toString();
}
return "";
}
boolean removePlayerdata(String player) {
if(Bukkit.getPlayer(player) != null) {
((CraftEntity) Bukkit.getPlayer(player)).getHandle().f(new net.minecraft.server.v1_14_R1.NBTTagCompound());
return true;
}
else if(Bukkit.getOfflinePlayer(player) != null) {
File file = new File(Bukkit.getServer().getWorldContainer() + "/world/playerdata/" + Bukkit.getOfflinePlayer(player).getUniqueId().toString() + ".dat");
return file.delete();
}
return false;
}
void resetMeta(Player player, ItemStack item, boolean mainhand) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.hasTag() && nmsItemStack.getTag().hasKey("pages")) {
if (nmsItemStack.getTag().getList("pages", 8).toString().contains("run_command")) {
BookMeta meta = (BookMeta) item.getItemMeta();
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
meta.setPages(meta.getPages());
book.setItemMeta(meta);
if (mainhand)
player.getInventory().setItemInMainHand(book);
else
player.getInventory().setItemInOffHand(book);
}
}
}
boolean isPlayer(ProjectileSource source) {
return source instanceof CraftPlayer;
}
double getArrowDamage(Arrow arrow) {
return getEntityNBT(arrow).hasKey("damage") ? getEntityNBT(arrow).getDouble("damage") : 0;
}
void setArrowDamage(Arrow arrow, double amount) {
NBTTagCompound tag = getEntityNBT(arrow);
if(tag.hasKey("damage")) {
tag.setDouble("damage", amount);
setEntityNBT(arrow, tag);
}
}
boolean isCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound itemtag = nmsItemStack.getTag();
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("isCrashItem");
return true;
}
}
}
return false;
}
boolean containsCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagCompound itemtag = itemlist.getCompound(a).getCompound("tag");
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("containsCrashItem");
return true;
}
}
}
}
return false;
}
boolean isDeathItem(ItemStack item) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDeathItem(nmsItemStack.getTag());
return false;
}
private boolean isDeathItem(NBTTagCompound item) {
if(item != null) {
NBTTagList attrlist = item.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) {
fired_countermeasure("isDeathItem");
return true;
}
}
}
}
return false;
}
boolean containsDeathItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagList attrlist = itemlist.getCompound(a).getCompound("tag").getList("AttributeModifiers", 10);
for(int b = 0; b <= attrlist.size(); b++) {
String attribute_name = attrlist.getCompound(b).getString("AttributeName");
String name = attrlist.getCompound(b).getString("Name");
Double amount = attrlist.getCompound(b).getDouble("Amount");
if((name.equalsIgnoreCase("MAX_HEALTH") || attribute_name.equalsIgnoreCase("generic.maxHealth")) && amount <= 0) {
fired_countermeasure("containsDeathItem");
return true;
}
}
}
}
}
return false;
}
boolean isDisconnectItem(ItemStack item) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDisconnectItem(nmsItemStack.getTag());
return false;
}
private boolean isDisconnectItem(NBTTagCompound item) {
if(item != null) {
if(item.hasKey("CustomPotionColor") && item.getInt("CustomPotionColor") < 0) {
fired_countermeasure("isCustomPotionColorDisconnectItem");
return true;
}
else if((item.getCompound("display").hasKey("color") && item.getCompound("display").getInt("color") < 0)) {
fired_countermeasure("isDisplayColorDisconnectItem");
return true;
}
else if(item.getCompound("BlockEntityTag").hasKey("Patterns")) {
NBTTagList list = item.getCompound("BlockEntityTag").getList("Patterns", 10);
for(int x = 0; x <= list.size(); x++) {
if(list.get(x).getTypeId() == 10) {
if(list.getCompound(x).hasKey("Color") && list.getCompound(x).getInt("Color") < 0)
return true;
}
}
for(NBTBase base : item.getCompound("BlockEntityTag").getList("Patterns", 10)) {
if(base.asString().contains("Color:-1")) {
fired_countermeasure("isDisplayBannedColorDisconnectItem");
return true;
}
}
}
else if(item.toString().length() > 60000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
}
return false;
}
boolean containsDisconnectItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.getTag() != null) {
NBTTagList items = nmsItemStack.getTag().getCompound("BlockEntityTag").getList("Items", 10);
if(items != null) {
for (int a = 0; a <= items.size(); a++) {
NBTTagCompound nmsitem = items.getCompound(a);
return isDisconnectItem(nmsitem.getCompound("tag"));
}
}
}
}
return false;
}
private boolean isMovementDisconnectItem(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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"))) {
fired_countermeasure("isMovementDisconnectItem");
return true;
}
attributes.put(attribute.getString("AttributeName").toLowerCase(), attribute.getFloat("Amount"));
}
}
}
return false;
}
private boolean isInvalidAttributeName(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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())) {
fired_countermeasure("isInvalidAttributeNameDisconnectItem");
return true;
}
}
}
}
}
return false;
}
boolean isDangerousEgg(ItemStack item) {
if (item != null && item.getType().name().equalsIgnoreCase("spawn_egg")) {
net.minecraft.server.v1_14_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if (nmsItemStack.hasTag() && VulnerabilityPatcher.main.getConfig().getStringList("BlockedEntityTags").contains(nmsItemStack.getTag().getCompound("EntityTag").getString("id").replaceAll("minecraft:", "")))
return true;
}
return false;
}
}

View file

@ -34,8 +34,7 @@ import java.util.logging.Logger;
public class Arrows extends Patches implements Listener {
private Logger log = Logger.getLogger("Minecraft");
private ArrayList<EntityType> blockedEntityTypes = new ArrayList<>(Arrays.asList(EntityType.ARROW, EntityType.SPECTRAL_ARROW, EntityType.TIPPED_ARROW));
private ArrayList<EntityType> blockedEntityTypes = new ArrayList<>(Arrays.asList(EntityType.ARROW, EntityType.SPECTRAL_ARROW)); // Tipped arrow?
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerVelocityEvent(PlayerVelocityEvent event) {
@ -51,15 +50,16 @@ public class Arrows extends Patches implements Listener {
public void onEntitySpawnEvent(EntitySpawnEvent event) {
if(event.getEntity().getType() == EntityType.ARROW) {
Arrow arrow = (Arrow) event.getEntity();
double damage = getArrowDamage(arrow);
if (arrow.getKnockbackStrength() > 10) {
fired_countermeasure("ArrowKnockbackStrenght: " + arrow.getKnockbackStrength());
arrow.setKnockbackStrength(10);
}
if(arrow.getDamage() < 0 || arrow.getDamage() > 214748364) {
fired_countermeasure("ArrowDamage: " + arrow.getDamage());
arrow.setDamage(0);
if(damage < 0 || damage > 214748364) {
fired_countermeasure("ArrowDamage: " + damage);
setArrowDamage(arrow, 0);
}
}
@ -70,15 +70,16 @@ public class Arrows extends Patches implements Listener {
public void onProjectileLaunchEvent(ProjectileLaunchEvent event) {
if(blockedEntityTypes.contains(event.getEntity().getType())) {
Arrow arrow = (Arrow) event.getEntity();
double damage = getArrowDamage(arrow);
if (arrow.getKnockbackStrength() > 10) {
fired_countermeasure("ArrowKnockbackStrenght: " + arrow.getKnockbackStrength());
arrow.setKnockbackStrength(10);
}
if(arrow.getDamage() < 0 || arrow.getDamage() > 214748364) {
fired_countermeasure("ArrowDamage: " + arrow.getDamage());
arrow.setDamage(0);
if(damage < 0 || damage > 214748364) {
fired_countermeasure("ArrowDamage: " + damage);
setArrowDamage(arrow, 0);
}
}

View file

@ -1,10 +1,8 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
public class Blocks extends Patches {

View file

@ -1,10 +1,5 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
import net.minecraft.server.v1_13_R2.ChatMessageException;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -13,9 +8,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
@ -89,22 +82,5 @@ public class Books extends Patches implements Listener {
}
}
public void resetMeta(Player player, ItemStack hand_item, boolean mainhand) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(hand_item);
if(nmsItemStack.hasTag() && nmsItemStack.getTag().hasKey("pages")) {
if (nmsItemStack.getTag().getList("pages", 8).toString().contains("run_command")) {
BookMeta meta = (BookMeta) hand_item.getItemMeta();
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
meta.setPages(meta.getPages());
book.setItemMeta(meta);
if (mainhand)
player.getInventory().setItemInMainHand(book);
else
player.getInventory().setItemInOffHand(book);
}
}
}
}

View file

@ -1,19 +1,14 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
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.block.Container;
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.BlockDispenseEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
@ -21,7 +16,6 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
@ -159,41 +153,4 @@ public class Crash_Items extends Patches implements Listener {
debug(event);
}
public boolean isCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound itemtag = nmsItemStack.getTag();
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("isCrashItem");
return true;
}
}
}
return false;
}
public boolean containsCrashItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagCompound itemtag = itemlist.getCompound(a).getCompound("tag");
if(itemtag.toString().contains("translation.test.invalid")) {
fired_countermeasure("containsCrashItem");
return true;
}
}
}
}
return false;
}
}

View file

@ -1,12 +1,8 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
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.block.Container;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -19,7 +15,6 @@ import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
@ -133,59 +128,4 @@ public class Death_Items extends Patches implements Listener {
debug(event);
}
/* Check if an item is a death item. */
public 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;
}
/* Check if a NBTTagCompound is a death item. */
public boolean isDeathItem(NBTTagCompound item) {
if(item != null) {
NBTTagList attrlist = item.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) {
fired_countermeasure("isDeathItem");
return true;
}
}
}
}
return false;
}
/* Check if an item such as a chest contains a death item. */
public boolean containsDeathItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack.getTag() != null) {
NBTTagCompound blockentitytag = nmsItemStack.getTag().getCompound("BlockEntityTag");
NBTTagList itemlist = blockentitytag.getList("Items", 10);
for(int a = 0; a <= itemlist.size(); a++) {
NBTTagList attrlist = itemlist.getCompound(a).getCompound("tag").getList("AttributeModifiers", 10);
for(int b = 0; b <= attrlist.size(); b++) {
String attribute_name = attrlist.getCompound(b).getString("AttributeName");
String name = attrlist.getCompound(b).getString("Name");
Double amount = attrlist.getCompound(b).getDouble("Amount");
if((name.equalsIgnoreCase("MAX_HEALTH") || attribute_name.equalsIgnoreCase("generic.maxHealth")) && amount <= 0) {
fired_countermeasure("containsDeathItem");
return true;
}
}
}
}
}
return false;
}
}

View file

@ -1,13 +1,6 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import me.cooljwb.vulnerabilitypatcher.SMG;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -18,6 +11,10 @@ import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;
/*
* Copyright 2019 CoolJWB
*
@ -66,7 +63,7 @@ public class Death_Potions extends Patches implements Listener {
event.setCancelled(true);
Player player = null;
if(event.getPotion().getShooter() instanceof CraftPlayer) {
if(isPlayer(event.getPotion().getShooter())) {
player = (Player) event.getEntity().getShooter();
msg(player, SMG.ITEM.msg);
}
@ -83,7 +80,7 @@ public class Death_Potions extends Patches implements Listener {
event.setCancelled(true);
Player player = null;
if(event.getEntity().getShooter() instanceof CraftPlayer) {
if(isPlayer(event.getEntity().getShooter())) {
player = (Player) event.getEntity().getShooter();
msg(player, SMG.ITEM.msg);
}

View file

@ -1,32 +1,26 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
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.block.Jukebox;
import org.bukkit.entity.ArmorStand;
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.entity.EntitySpawnEvent;
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.potion.Potion;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
@ -51,31 +45,8 @@ import java.util.logging.Logger;
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()) {
if(isDisconnectItem(item))
clearItemMeta(item);
invstr = invstr + itemToString(item);
}
if(invstr.length() > 50000) {
event.setCancelled(true);
clearItemMeta(container.getInventory().getContents());
}
}
}
debug(event);
}
// TODO: Possibly fix disconnect items once for all, otherwise add more patches.
// TODO: Add /give disconnect items.
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockDispenseEvent(BlockDispenseEvent event) {
@ -125,9 +96,46 @@ public class Disconnect_Items extends Patches implements Listener {
}
}
else if(event.getBlockPlaced().getState() instanceof Jukebox) {
Jukebox box = (Jukebox) event.getBlockPlaced().getState();
boolean violation = false;
try {
box.getPlaying();
} catch(IllegalArgumentException ignored) {
event.setCancelled(true);
violation = true;
}
if(violation) {
Player player = event.getPlayer();
msg(player, SMG.ITEM_IN_CONTAINER.msg);
notifyViolation(player, "place", event.getBlock().getType() + " with disconnect item in it", event.getPlayer().getLocation());
}
}
debug(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntitySpawnEvent(EntitySpawnEvent event) {
if(event.getEntity() instanceof ArmorStand) {
ArmorStand armorStand = (ArmorStand) event.getEntity();
boolean violation = false;
try {
armorStand.getBoots(); armorStand.getLeggings(); armorStand.getChestplate(); armorStand.getHelmet(); armorStand.getItemInHand();
} catch(IllegalArgumentException ignored) {
event.setCancelled(true);
violation = true;
}
if(violation) {
notifyViolation("Unknown", "place", " with a disconnect item", event.getEntity().getLocation());
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onInventoryClickEvent(InventoryClickEvent event) {
if(isDisconnectItem(event.getCursor()) || containsDisconnectItem(event.getCursor())) {
@ -159,6 +167,7 @@ public class Disconnect_Items extends Patches implements Listener {
ItemStack item = event.getItemDrop().getItemStack();
if(isDisconnectItem(item) || containsDisconnectItem(item)) {
event.getItemDrop().remove();
event.setCancelled(true);
clearItemMeta(event.getItemDrop().getItemStack());
@ -170,90 +179,27 @@ public class Disconnect_Items extends Patches implements Listener {
debug(event);
}
public boolean isDisconnectItem(ItemStack item) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
@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();
if(nmsItemStack != null && nmsItemStack.hasTag())
return isDisconnectItem(nmsItemStack.getTag());
return false;
}
String invstr = "";
for (ItemStack item : container.getInventory().getContents()) {
if(isDisconnectItem(item))
clearItemMeta(item);
invstr = invstr + itemToString(item);
}
public boolean isDisconnectItem(NBTTagCompound item) {
if(item != null) {
if(item.hasKey("CustomPotionColor") && item.getInt("CustomPotionColor") < 0) {
fired_countermeasure("isCustomPotionColorDisconnectItem");
return true;
}
else if(item.getCompound("display").hasKey("color") && item.getCompound("display").getInt("color") < 0) {
fired_countermeasure("isDisplayColorDisconnectItem");
return true;
}
else if(item.toString().length() > 60000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
}
return false;
}
public boolean containsDisconnectItem(ItemStack item) {
if(item != null) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
if(nmsItemStack != null && nmsItemStack.getTag() != null) {
NBTTagList items = nmsItemStack.getTag().getCompound("BlockEntityTag").getList("Items", 10);
if(items != null) {
for (int a = 0; a <= items.size(); a++) {
NBTTagCompound nmsitem = items.getCompound(a);
return isDisconnectItem(nmsitem.getCompound("tag"));
}
if(invstr.length() > 50000) {
event.setCancelled(true);
clearItemMeta(container.getInventory().getContents());
}
}
}
return false;
}
public boolean isMovementDisconnectItem(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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"))) {
fired_countermeasure("isMovementDisconnectItem");
return true;
}
attributes.put(attribute.getString("AttributeName").toLowerCase(), attribute.getFloat("Amount"));
}
}
}
return false;
}
public boolean isInvalidAttributeName(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.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())) {
fired_countermeasure("isInvalidAttributeNameDisconnectItem");
return true;
}
}
}
}
}
return false;
debug(event);
}
}

View file

@ -1,8 +1,6 @@
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;
@ -10,11 +8,8 @@ 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");
@ -51,14 +46,4 @@ public class Entity_Tag extends Patches implements Listener {
debug(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

@ -0,0 +1,59 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.ArrayList;
import java.util.HashMap;
public class Handswitch extends Patches implements Listener {
// TODO: Improve this.
private static HashMap<Player, Integer> switches = new HashMap<>();
private static ArrayList<Player> cooldown = new ArrayList<>();
int its = 0;
public void runnable() {
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
scheduler.scheduleSyncRepeatingTask(main, new Runnable() {
@Override
public void run() {
switches.clear();
its++;
if(its >= 30) {
for(Player player : cooldown)
msg(player, ChatColor.RED + "Please do not switch items repeatedly.");
cooldown = new ArrayList<>();
its = 0;
}
}
}, 20L, 0);
}
@EventHandler
public void PlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if(cooldown.contains(event.getPlayer())) {
event.setCancelled(true);
}
if(!switches.containsKey(event.getPlayer()))
switches.put(event.getPlayer(), 1);
else {
int playerSwitches = switches.get(event.getPlayer());
if(playerSwitches > 3) {
event.setCancelled(true);
cooldown.add(event.getPlayer());
}
else
switches.put(event.getPlayer(), playerSwitches + 1);
}
}
}

View file

@ -25,7 +25,9 @@ public class Item_Frames extends Patches implements Listener {
@EventHandler
public void onEntitySpawn(EntitySpawnEvent event) {
if(!entities.contains(event.getEntity()))
if(entities.contains(event.getEntity())) {
event.setCancelled(true); // Cancels any item frame that hasn't been placed.
fired_countermeasure("ItemFrameEntity");
}
}
}

View file

@ -1,33 +1,24 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.SMG;
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
import me.cooljwb.vulnerabilitypatcher.modifiers.NBTModifier;
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 net.minecraft.server.v1_14_R1.ChatMessageException;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
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 org.fusesource.jansi.Ansi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
@ -53,7 +44,7 @@ import java.util.logging.Logger;
* @author CoolJWB
*/
public class Patches implements Listener {
public class Patches extends NBTModifier implements Listener {
// TODO: Add violation runnable that checks if it should send a violation each second for players that tries to use exploits.
@ -74,16 +65,16 @@ public class Patches implements Listener {
public Patches() {}
public Patches(VulnerabilityPatcher main) {
this.main = main;
Patches.main = main;
listeners = main.getConfig().getStringList("Patches");
runnable();
}
public void initialize() {
this.pluginName = main.getName();
this.pluginVersion = main.getDescription().getVersion();
this.notify = main.getConfig().getBoolean("Notify.Enabled");
this.devmode = main.getConfig().getBoolean("DevMode");
pluginName = main.getName();
pluginVersion = main.getDescription().getVersion();
notify = main.getConfig().getBoolean("Notify.Enabled");
devmode = main.getConfig().getBoolean("DevMode");
this.mode = mode(main.getConfig().getString("SecurityMode"));
this.death_items = main.death_items;
@ -97,14 +88,14 @@ public class Patches implements Listener {
@Override
public void run() {
for(Player player : Bukkit.getOnlinePlayers()) {
if(player.getLocation().getY() <= -29999999)
if(player.getLocation().getY() <= -29999999) // Fixes invalid movement disconnection.
player.getLocation().setY(-29999999);
else if(player.getLocation().getY() >= 29999999)
else if(player.getLocation().getY() >= 29999999) // Fixes invalid movement disconnection.
player.getLocation().setY(29999999);
for(ItemStack item : player.getInventory()) {
/*if(listeners.contains("DisconnectItems") && itemInVisibleSlot(player.getInventory(), item)) {
if(listeners.contains("DisconnectItems") && itemInVisibleSlot(player.getInventory(), item)) {
NBTTagList item_attributes = getNBTAttributeList(item);
if(item_attributes != null) {
@ -124,7 +115,7 @@ public class Patches implements Listener {
}
}
}
}
}*/
for(String listener : listeners) {
switch(listener) {
@ -160,16 +151,15 @@ public class Patches implements Listener {
entity.remove();
}
}
}
} // Remove Spawner Minecarts.
}
}, 20L, 0); // Made the delay 20 ticks cause it's easier on the server.
}
public void msg(Player player, String msg) {
void msg(Player player, String msg) {
player.sendMessage(msg);
}
public void msg(CommandSender sender, String msg) {
protected void msg(CommandSender sender, String msg) {
sender.sendMessage(msg);
}
@ -181,7 +171,7 @@ public class Patches implements Listener {
}
}
}
public void notify(BaseComponent msg) {
private void notify(BaseComponent msg) {
if(notify) {
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.hasPermission(main.getConfig().getString("Notify.Permission")))
@ -189,7 +179,7 @@ public class Patches implements Listener {
}
}
}
public void notifyViolation(Player player, String violation_form, String violation_name, Location loc) {
void notifyViolation(Player player, String violation_form, String violation_name, Location loc) {
if(player != null) {
TextComponent notification = new TextComponent(String.format(SMG.ITEM_NOTIFY.msg, player.getName(), violation_form, violation_name, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
@ -210,7 +200,7 @@ public class Patches implements Listener {
notify(notification);
}
}
public void notifyViolation(String violator, String violation_form, String violation_name, Location loc) {
void notifyViolation(String violator, String violation_form, String violation_name, Location loc) {
TextComponent notification = new TextComponent(String.format(SMG.ITEM_NOTIFY.msg, violator, violation_form, violation_name, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
notification.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "Teleport" + ChatColor.DARK_GRAY + "]").create()));
@ -220,21 +210,16 @@ public class Patches implements Listener {
notify(notification);
}
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 log(Level level, String message) {
log.log(level, String.format("[%s] %s", VulnerabilityPatcher.pluginName, message));
}
public void fired_countermeasure(String reason) {
try {
if (devmode)
log.log(Level.INFO, String.format("[%s] Fired countermeasure in %s reason: %s", pluginName, getClass().getName(), reason));
} catch(ChatMessageException e) {
log.log(Level.INFO, String.format("[%s] Could not debug event in %s.", pluginName, getClass().getName()));
}
public void debug(Event event) {
if (devmode)
log(Level.INFO, String.format("Event in %s: %s", getClass().getName(), ReflectionToStringBuilder.toString(event)));
}
void fired_countermeasure(String reason) {
if (devmode)
log(Level.INFO, String.format("Fired countermeasure in %s reason: %s", getClass().getName(), reason));
}
private byte mode(String mode) {
switch(mode) {
@ -249,48 +234,16 @@ public class Patches implements Listener {
}
}
public void clearItemMeta(ItemStack item) {
void clearItemMeta(ItemStack item) {
item.setItemMeta(null);
}
public void clearItemMeta(ItemStack[] items) {
void clearItemMeta(ItemStack[] items) {
for(ItemStack item : items) {
if(item != null)
item.setItemMeta(null);
}
}
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);
if(nmsItemStack.hasTag())
return nmsItemStack.getTag().toString();
}
return "";
}
public boolean itemInVisibleSlot(PlayerInventory inv, ItemStack item) {
ItemStack mainhand = inv.getItemInMainHand();
ItemStack offhand = inv.getItemInOffHand();

View file

@ -56,7 +56,7 @@ public class Rouge_Entity extends Patches implements Listener {
}
@EventHandler
public void onEntityKnockback(EntityKnockbackByEntityEvent event) {
public void onEntityKnockback(EntityKnockbackByEntityEvent event) { // Add Spigot support?
if(event.getKnockbackStrength() > 50) {
event.getAcceleration().multiply(50/event.getKnockbackStrength());
}

View file

@ -17,6 +17,7 @@ Patches:
- StructureBlocks
- Chunks
- ItemFrames
- Handswitch
# All entities added below will be blocked to use in a spawn egg.
BlockedEntityTags:

View file

@ -1,9 +1,9 @@
name: VulnerabilityPatcher
version: 0.4
version: 0.5
main: me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher
api-version: 1.13
authors: [CoolJWB]
description: The brand new v0.4 VulnerabilityPatcher for Paper 1.13.2 servers.
description: The brand new v0.4 VulnerabilityPatcher for 1.13.2 and 1.14 servers.
commands:
vulnerabilitypatcher:
aliases: [vp]