mirror of
https://github.com/TotalFreedomMC/VulnerabilityPatcher.git
synced 2025-02-05 06:12:46 +00:00
Commit v1.1
Removed 1.13 support to work for no NMS code. Fixed lag issues.
This commit is contained in:
parent
48e75813ae
commit
2b84372e40
17 changed files with 179 additions and 506 deletions
|
@ -1,5 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="VulnerabilityPatcher: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="v1.0-BETA" type="JAVA_MODULE" version="4">
|
||||
<module external.linked.project.id="VulnerabilityPatcher: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="v1.1" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="minecraft" name="Minecraft">
|
||||
<configuration>
|
||||
<autoDetectTypes>
|
||||
<platformType>PAPER</platformType>
|
||||
</autoDetectTypes>
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/../../build/classes/java/main" />
|
||||
<exclude-output />
|
||||
|
@ -9,15 +18,6 @@
|
|||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.13.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="VulnerabilityPatcher: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="v1.0-BETA" type="JAVA_MODULE" version="4">
|
||||
<module external.linked.project.id="VulnerabilityPatcher: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="v1.1" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="minecraft" name="Minecraft">
|
||||
<configuration>
|
||||
<autoDetectTypes>
|
||||
<platformType>PAPER</platformType>
|
||||
</autoDetectTypes>
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output-test url="file://$MODULE_DIR$/../../build/classes/java/test" />
|
||||
<exclude-output />
|
||||
|
@ -10,15 +19,6 @@
|
|||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="VulnerabilityPatcher.main" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="jar://$MODULE_DIR$/../../libs/Spigot-1.13.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="VulnerabilityPatcher" 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="v1.0-BETA" type="JAVA_MODULE" version="4">
|
||||
<module external.linked.project.id="VulnerabilityPatcher" 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="v1.1" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/../..">
|
||||
|
|
|
@ -2,49 +2,21 @@
|
|||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="4038a6e9-7d52-4dd0-91ef-d9a12aa1c1b2" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.main.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.test.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher.main.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher.test.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/commands/CommandGetLag.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13_2.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity_Paper.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Rouge_Entity_Spigot.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/gradle.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/gradle.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher.iml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.main.iml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher-Paper.test.iml" beforeDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/events/DisconnectionAid.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.main.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.main.iml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.test.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/VulnerabilityPatcher.test.iml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules/me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher.iml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/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$/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/modifiers/NBTModifier.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_14.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/Spawner.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/modifiers/NBTModifier_1_13.java" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Chunks.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Chunks.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/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/Fireworks.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Fireworks.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/Handswitch.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Handswitch.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" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Structure_Blocks.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Structure_Blocks.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Trident_Riptide.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Spawner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Spawner.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>
|
||||
|
|
|
@ -20,9 +20,8 @@ repositories {
|
|||
|
||||
dependencies {
|
||||
testCompile group: 'junit', name: 'junit', version: '4.12'
|
||||
compile 'com.destroystokyo.paper:paper-api:1.13-R0.1-SNAPSHOT'
|
||||
compile 'com.destroystokyo.paper:paper-api:1.13.2-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.13.2.jar')
|
||||
compile files('libs/Spigot-1.14.jar')
|
||||
}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
pluginGroup=me.cooljwb.vulnerabilitypatcher
|
||||
pluginVersion=v1.0-BETA
|
||||
pluginVersion=v1.1
|
|
@ -3,6 +3,7 @@ package me.cooljwb.vulnerabilitypatcher;
|
|||
import me.cooljwb.vulnerabilitypatcher.commands.CommandGetLag;
|
||||
import me.cooljwb.vulnerabilitypatcher.commands.CommandGetNBT;
|
||||
import me.cooljwb.vulnerabilitypatcher.commands.CommandVulnerabilityPatcher;
|
||||
import me.cooljwb.vulnerabilitypatcher.events.DisconnectionAid;
|
||||
import me.cooljwb.vulnerabilitypatcher.patches.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Item;
|
||||
|
@ -71,6 +72,7 @@ public final class VulnerabilityPatcher extends JavaPlugin {
|
|||
|
||||
Bukkit.getServer().getPluginCommand(CommandVulnerabilityPatcher.vulnerabilitypatcher).setExecutor(commandvulnerabilitypatcher);
|
||||
Bukkit.getServer().getPluginCommand(CommandGetNBT.getnbt).setExecutor(commandgetnbt);
|
||||
Bukkit.getPluginManager().registerEvents(new DisconnectionAid(), this);
|
||||
//Bukkit.getServer().getPluginCommand(CommandGetLag.getlag).setExecutor(commandgetlag);
|
||||
|
||||
hand_switch.runnable();
|
||||
|
@ -91,8 +93,6 @@ public final class VulnerabilityPatcher extends JavaPlugin {
|
|||
|
||||
private boolean version() {
|
||||
switch(version) {
|
||||
case "1.13":
|
||||
case "1.13.1":
|
||||
case "1.13.2":
|
||||
case "1.14":
|
||||
case "1.14.1":
|
||||
|
@ -101,7 +101,7 @@ public final class VulnerabilityPatcher extends JavaPlugin {
|
|||
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));
|
||||
log.log(Level.WARNING, String.format("[%s] Server version %s may not work fully or at all with %s-%s, try an earlier plugin version. Plugin was disabled.", pluginName, version, pluginName, pluginVersion));
|
||||
Bukkit.getPluginManager().disablePlugin(this);
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
package me.cooljwb.vulnerabilitypatcher.events;
|
||||
|
||||
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class DisconnectionAid extends Patches implements Listener {
|
||||
|
||||
HashMap<UUID, Long> antiDisconnect = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoinEvent(PlayerLoginEvent event) {
|
||||
antiDisconnect.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerLeftEvent(PlayerQuitEvent event) {
|
||||
if(antiDisconnect.containsKey(event.getPlayer().getUniqueId()) && (System.currentTimeMillis() - antiDisconnect.get(event.getPlayer().getUniqueId())) <= 500) {
|
||||
event.getPlayer().teleport(getSafeLocation(event.getPlayer().getLocation())); // Teleport player to safe location.
|
||||
|
||||
Inventory playerInv = event.getPlayer().getInventory();
|
||||
Block block = event.getPlayer().getWorld().getBlockAt(event.getPlayer().getLocation());
|
||||
block.setType(Material.CHEST);
|
||||
|
||||
for(ItemStack item : playerInv.getContents()) {
|
||||
if(item != null && item.getType() != Material.AIR) {
|
||||
((Chest) block.getState()).getBlockInventory().addItem(item);
|
||||
}
|
||||
playerInv.clear();
|
||||
}
|
||||
}
|
||||
antiDisconnect.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public Location getSafeLocation(Location currentLocation) {
|
||||
double x = currentLocation.getX();
|
||||
double z = currentLocation.getZ();
|
||||
|
||||
if(x + 10000 > 29999900)
|
||||
currentLocation.setX(x + (Math.random() * 50000 + 10000));
|
||||
else
|
||||
currentLocation.setX(x - (Math.random() * 50000 + 10000));
|
||||
if(z + 10000 > 29999900)
|
||||
currentLocation.setZ(z + (Math.random() * 50000 + 10000));
|
||||
else
|
||||
currentLocation.setZ(z - (Math.random() * 50000 + 10000));
|
||||
|
||||
if(currentLocation.getWorld().getHighestBlockYAt(currentLocation) < 250)
|
||||
currentLocation.setY(currentLocation.getWorld().getHighestBlockYAt(currentLocation)); // Set Y to highest location.
|
||||
else {
|
||||
currentLocation.setX(29999990);
|
||||
currentLocation.setZ(29999990);
|
||||
currentLocation.setY(100);
|
||||
}
|
||||
|
||||
return currentLocation; // Returns modified current location.
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
package me.cooljwb.vulnerabilitypatcher.modifiers;
|
||||
|
||||
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SpawnEggMeta;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
@ -33,14 +35,10 @@ 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_13_2 nbt_1_13_2 = new NBTModifier_1_13_2();
|
||||
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":
|
||||
return "1.13";
|
||||
case "1.13.2":
|
||||
return "1.13.2";
|
||||
case "1.14":
|
||||
|
@ -56,8 +54,6 @@ public class NBTModifier {
|
|||
|
||||
protected String itemToString(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.itemToString(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.itemToString(item);
|
||||
case "1.14":
|
||||
|
@ -69,8 +65,6 @@ public class NBTModifier {
|
|||
|
||||
protected boolean removePlayerdata(String player) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.removePlayerdata(player);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.removePlayerdata(player);
|
||||
case "1.14":
|
||||
|
@ -80,9 +74,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected void resetMeta(Player player, ItemStack item, boolean mainhand) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
nbt_1_13.resetMeta(player, item, mainhand);
|
||||
break;
|
||||
case "1.13.2":
|
||||
nbt_1_13_2.resetMeta(player, item, mainhand);
|
||||
break;
|
||||
|
@ -93,8 +84,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected boolean isPlayer(ProjectileSource source) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.isPlayer(source);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.isPlayer(source);
|
||||
case "1.14":
|
||||
|
@ -105,8 +94,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected double getArrowDamage(Arrow arrow) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.getArrowDamage(arrow);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.getArrowDamage(arrow);
|
||||
case "1.14":
|
||||
|
@ -117,9 +104,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected void setArrowDamage(Arrow arrow, double amount) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
nbt_1_13.setArrowDamage(arrow, amount);
|
||||
break;
|
||||
case "1.13.2":
|
||||
nbt_1_13_2.setArrowDamage(arrow, amount);
|
||||
break;
|
||||
|
@ -130,8 +114,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected int getFireworkEffectSize(Firework firework) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.getFireworkEffectSize(firework);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.getFireworkEffectSize(firework);
|
||||
case "1.14":
|
||||
|
@ -142,8 +124,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected boolean hasFireworkLargeEffect(Firework firework) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.hasFireworkLargeEffect(firework);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.hasFireworkLargeEffect(firework);
|
||||
case "1.14":
|
||||
|
@ -155,8 +135,6 @@ public class NBTModifier {
|
|||
|
||||
public boolean isCrashItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.isCrashItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.isCrashItem(item);
|
||||
case "1.14":
|
||||
|
@ -167,8 +145,6 @@ public class NBTModifier {
|
|||
}
|
||||
public boolean containsCrashItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.containsCrashItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.containsCrashItem(item);
|
||||
case "1.14":
|
||||
|
@ -180,8 +156,6 @@ public class NBTModifier {
|
|||
|
||||
public boolean isDeathItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.isDeathItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.isDeathItem(item);
|
||||
case "1.14":
|
||||
|
@ -192,8 +166,6 @@ public class NBTModifier {
|
|||
}
|
||||
protected boolean containsDeathItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.containsDeathItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.containsDeathItem(item);
|
||||
case "1.14":
|
||||
|
@ -205,8 +177,6 @@ public class NBTModifier {
|
|||
|
||||
public boolean isDisconnectItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.isDisconnectItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.isDisconnectItem(item);
|
||||
case "1.14":
|
||||
|
@ -217,8 +187,6 @@ public class NBTModifier {
|
|||
}
|
||||
public boolean containsDisconnectItem(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.containsDisconnectItem(item);
|
||||
case "1.13.2":
|
||||
return nbt_1_13_2.containsDisconnectItem(item);
|
||||
case "1.14":
|
||||
|
@ -229,9 +197,6 @@ public class NBTModifier {
|
|||
}
|
||||
public void removeInvalidValues(Entity entity) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
nbt_1_13.removeInvalidValues(entity);
|
||||
break;
|
||||
case "1.13.2":
|
||||
nbt_1_13_2.removeInvalidValues(entity);
|
||||
break;
|
||||
|
@ -243,9 +208,13 @@ public class NBTModifier {
|
|||
|
||||
protected boolean isDangerousEgg(ItemStack item) {
|
||||
switch(getVersion()) {
|
||||
case "1.13":
|
||||
return nbt_1_13.isDangerousEgg(item);
|
||||
case "1.13.2":
|
||||
if(Patches.mode == 2 && item != null && item.getType().name().equalsIgnoreCase("spawn_egg"))
|
||||
return true;
|
||||
return nbt_1_13_2.isDangerousEgg(item);
|
||||
case "1.14":
|
||||
if(Patches.mode == 2 && item != null && item.getItemMeta() instanceof SpawnEggMeta)
|
||||
return true;
|
||||
return nbt_1_14.isDangerousEgg(item);
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -1,361 +0,0 @@
|
|||
package me.cooljwb.vulnerabilitypatcher.modifiers;
|
||||
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import me.cooljwb.vulnerabilitypatcher.Variables;
|
||||
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
|
||||
import me.cooljwb.vulnerabilitypatcher.patches.Patches;
|
||||
import net.minecraft.server.v1_13_R1.MojangsonParser;
|
||||
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.Firework;
|
||||
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.*;
|
||||
|
||||
/*
|
||||
* Copyright 2019 CoolJWB
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @author CoolJWB
|
||||
*/
|
||||
|
||||
public class 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);
|
||||
}
|
||||
}
|
||||
int getFireworkEffectSize(Firework firework) {
|
||||
NBTTagCompound tag = getEntityNBT(firework);
|
||||
if(tag.hasKey("FireworksItem") && tag.getCompound("FireworksItem").hasKey("tag") && tag.getCompound("FireworksItem").getCompound("tag").hasKey("Fireworks") && tag.getCompound("FireworksItem").getCompound("tag").getCompound("Fireworks").hasKey("Explosions"))
|
||||
return tag.getCompound("FireworksItem").getCompound("tag").getCompound("Fireworks").getList("Explosions", 10).size();
|
||||
return 0;
|
||||
}
|
||||
boolean hasFireworkLargeEffect(Firework firework) {
|
||||
NBTTagCompound tag = getEntityNBT(firework);
|
||||
if(tag.hasKey("FireworksItem") && tag.getCompound("FireworksItem").hasKey("tag") && tag.getCompound("FireworksItem").getCompound("tag").hasKey("Fireworks") && tag.getCompound("FireworksItem").getCompound("tag").getCompound("Fireworks").hasKey("Explosions")) {
|
||||
NBTTagList explosions = tag.getCompound("FireworksItem").getCompound("tag").getCompound("Fireworks").getList("Explosions", 10);
|
||||
for(int x = 0; x <= (explosions.size() - 1); x++) {
|
||||
if(explosions.getCompound(x).getInt("Type") == 1 || explosions.getCompound(x).getInt("Type") == 3)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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 patterns = item.getCompound("BlockEntityTag").getList("Patterns", 10);
|
||||
for(int x = 0; x <= (patterns.size() - 1); x++) {
|
||||
if(patterns.get(x).getTypeId() == 10) {
|
||||
if(patterns.getCompound(x).hasKey("Color") && patterns.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;
|
||||
}
|
||||
void removeInvalidValues(Entity entity) {
|
||||
NBTTagCompound tag = getEntityNBT(entity);
|
||||
if(tag.toString().contains("Color:-")) {
|
||||
try {
|
||||
MojangsonParser.parse(tag.toString().replaceAll("Color:-", ""));
|
||||
} catch (CommandSyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean isDangerousEgg(ItemStack item) {
|
||||
if(item != null && item.getType().name().equalsIgnoreCase("spawn_egg")) {
|
||||
net.minecraft.server.v1_13_R1.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(item);
|
||||
|
||||
return nmsItemStack.hasTag() && VulnerabilityPatcher.main.getConfig().getStringList("BlockedEntityTags").contains(nmsItemStack.getTag().getCompound("EntityTag").getString("id").replaceAll("minecraft:", ""));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ package me.cooljwb.vulnerabilitypatcher.patches;
|
|||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import org.bukkit.event.vehicle.VehicleCreateEvent;
|
||||
import org.bukkit.event.weather.LightningStrikeEvent;
|
||||
|
||||
/*
|
||||
|
@ -39,6 +40,12 @@ public class Chunks extends Patches implements Listener {
|
|||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onVehicle(VehicleCreateEvent event) {
|
||||
if(outOfRange(event.getVehicle().getLocation().getBlockX()) || outOfRange(event.getVehicle().getLocation().getBlockZ()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
private boolean outOfRange(int value) {
|
||||
return value > 29999999 || value < -29999999;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import me.cooljwb.vulnerabilitypatcher.SMG;
|
|||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.block.Jukebox;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
@ -12,6 +13,7 @@ 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.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockDispenseEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
|
@ -101,10 +103,16 @@ public class Disconnect_Items extends Patches implements Listener {
|
|||
}
|
||||
|
||||
else if(event.getBlockPlaced().getState() instanceof Jukebox) {
|
||||
Jukebox box = (Jukebox) event.getBlockPlaced().getState();
|
||||
boolean violation = false;
|
||||
|
||||
if(box.getPlaying() != Material.AIR && !box.getPlaying().isRecord()) {
|
||||
try {
|
||||
Jukebox box = (Jukebox) event.getBlockPlaced().getState();
|
||||
|
||||
if (box.getPlaying() != Material.AIR && !box.getPlaying().isRecord()) {
|
||||
event.setCancelled(true);
|
||||
violation = true;
|
||||
}
|
||||
} catch(IllegalArgumentException e) {
|
||||
event.setCancelled(true);
|
||||
violation = true;
|
||||
}
|
||||
|
@ -128,8 +136,11 @@ public class Disconnect_Items extends Patches implements Listener {
|
|||
boolean violation = false;
|
||||
|
||||
try {
|
||||
hasDisconnectItem(entity);
|
||||
} catch(NullPointerException e) {
|
||||
if(hasDisconnectItem(entity)) {
|
||||
event.setCancelled(true);
|
||||
violation = true;
|
||||
}
|
||||
} catch(NullPointerException | IllegalArgumentException e) {
|
||||
event.setCancelled(true);
|
||||
violation = true;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import java.util.ArrayList;
|
|||
|
||||
public class Item_Frames extends Patches implements Listener {
|
||||
private ArrayList<Entity> entities = new ArrayList<>();
|
||||
private ArrayList<Entity> dead = new ArrayList<>();
|
||||
|
||||
@EventHandler
|
||||
public void onHangingPlace(HangingPlaceEvent event) {
|
||||
|
@ -37,8 +38,12 @@ public class Item_Frames extends Patches implements Listener {
|
|||
entities.add(event.getEntity());
|
||||
for(Entity entity : entities) {
|
||||
if(entity.isDead())
|
||||
entities.remove(entity);
|
||||
dead.add(entity);
|
||||
} // Clears dead item frames.
|
||||
|
||||
// Avoid ConcurrentModificationException
|
||||
entities.removeAll(dead);
|
||||
dead.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package me.cooljwb.vulnerabilitypatcher.patches;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import me.cooljwb.vulnerabilitypatcher.SMG;
|
||||
import me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher;
|
||||
import me.cooljwb.vulnerabilitypatcher.modifiers.NBTModifier;
|
||||
|
@ -9,12 +11,15 @@ 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.attribute.AttributeModifier;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
@ -64,7 +69,7 @@ public class Patches extends NBTModifier implements Listener {
|
|||
private HashMap<String, Float> active_attributes = new HashMap<>();
|
||||
protected HashMap<Player, Float> player_speed = new HashMap<>();
|
||||
|
||||
protected byte mode = 0;
|
||||
public static byte mode = 0;
|
||||
|
||||
public Patches() {}
|
||||
public Patches(VulnerabilityPatcher main) {
|
||||
|
@ -90,11 +95,6 @@ public class Patches extends NBTModifier implements Listener {
|
|||
@Override
|
||||
public void run() {
|
||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
||||
if(player.getWalkSpeed() > 0.3F)
|
||||
player.setWalkSpeed(0.3F);
|
||||
if(player.getFlySpeed() > 0.15F)
|
||||
player.setFlySpeed(0.15F);
|
||||
|
||||
if(player.getLocation().getY() <= -29999990) // Fixes invalid movement disconnection.
|
||||
player.getLocation().setY(-29999990);
|
||||
else if(player.getLocation().getY() >= 29999990) // Fixes invalid movement disconnection.
|
||||
|
@ -103,38 +103,18 @@ public class Patches extends NBTModifier implements Listener {
|
|||
for(ItemStack item : player.getInventory()) {
|
||||
if(mode == 2) {
|
||||
if(item != null && item.getItemMeta() != null) {
|
||||
for (Map.Entry entry : item.getItemMeta().getEnchants().entrySet()) {
|
||||
if (((Integer) entry.getValue()) > 5) {
|
||||
clearItemMeta(item);
|
||||
if(item.getItemMeta().getEnchants() != null && !item.getItemMeta().getEnchants().isEmpty()) {
|
||||
for (Map.Entry entry : item.getItemMeta().getEnchants().entrySet()) {
|
||||
if (((Integer) entry.getValue()) > 5)
|
||||
clearItemMeta(item);
|
||||
}
|
||||
}
|
||||
|
||||
if(item.getItemMeta().getAttributeModifiers() != null && !item.getItemMeta().getAttributeModifiers().isEmpty()) {
|
||||
clearItemMeta(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(String listener : listeners) {
|
||||
switch(listener) {
|
||||
case "DeathItems":
|
||||
if(death_items.isDeathItem(item)) { // Removed containsDeathItem cause it's useless to check for death items in a container when it's checked event wise.
|
||||
clearItemMeta(item);
|
||||
notifyViolation(player, "acquire", "death item", player.getLocation());
|
||||
msg(player, SMG.ITEMS.msg);
|
||||
} break;
|
||||
|
||||
case "DisconnectItems":
|
||||
if(disconnect_items.isDisconnectItem(item) || disconnect_items.containsDisconnectItem(item)) {
|
||||
clearItemMeta(item);
|
||||
notifyViolation(player, "acquire", "disconnect item", player.getLocation());
|
||||
msg(player, SMG.ITEMS.msg);
|
||||
} break;
|
||||
|
||||
case "CrashItems":
|
||||
if(crash_items.isCrashItem(item) || crash_items.containsCrashItem(item)) {
|
||||
clearItemMeta(item);
|
||||
notifyViolation(player.getName(), "acquire", "crash item", player.getLocation());
|
||||
msg(player, SMG.ITEMS.msg);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
} // Removes enchants above level 5 and attributes if the security mode is strict.
|
||||
}
|
||||
active_attributes.clear();
|
||||
}
|
||||
|
@ -165,6 +145,17 @@ public class Patches extends NBTModifier implements Listener {
|
|||
}, 20L, 0); // Made the delay 20 ticks cause it's easier on the server.
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerMoveEvent(PlayerMoveEvent event) {
|
||||
double speedX = event.getTo().getX() - event.getFrom().getX();
|
||||
double speedY = event.getTo().getY() - event.getFrom().getY();
|
||||
double speedZ = event.getTo().getZ() - event.getFrom().getZ();
|
||||
double speed = speedX + speedY + speedZ;
|
||||
|
||||
if(speed > 5 || speed < -5)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
void msg(Player player, String msg) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package me.cooljwb.vulnerabilitypatcher.patches;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
@ -29,7 +30,14 @@ public class Spawner extends Patches {
|
|||
@EventHandler
|
||||
public void onBlockPlaceEvent(BlockPlaceEvent event) {
|
||||
if(event.getBlockPlaced().getType().equals(Material.SPAWNER)) {
|
||||
event.getBlockPlaced().getState().setBlockData(Material.SPAWNER.createBlockData());
|
||||
event.setCancelled(true); // Cancel the event to block any bad stuff.
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(main, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
event.getBlockPlaced().getLocation().getBlock().setType(Material.SPAWNER);
|
||||
}
|
||||
}, 0L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ Commands:
|
|||
DisablePatch:
|
||||
Permission: vulnerability.patch.disable
|
||||
|
||||
# Notifications of players using blocked items will be sent to all players that have the permission below (if it's enabled).
|
||||
Notify:
|
||||
Enabled: false
|
||||
Permission: vulnerability.notify
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
name: VulnerabilityPatcher
|
||||
version: 1.0-BETA
|
||||
version: 1.1
|
||||
main: me.cooljwb.vulnerabilitypatcher.VulnerabilityPatcher
|
||||
api-version: 1.13
|
||||
api-version: 1.14
|
||||
authors: [CoolJWB]
|
||||
description: The brand new v0.4 VulnerabilityPatcher for 1.13.2 and 1.14 servers.
|
||||
description: Patches vurnelabilities that cause server instabilaty.
|
||||
commands:
|
||||
vulnerabilitypatcher:
|
||||
aliases: [vp]
|
||||
|
|
Loading…
Reference in a new issue