Commit v1.1

Removed 1.13 support to work for no NMS code.
Fixed lag issues.
This commit is contained in:
CoolJWB 2019-09-17 18:51:43 +02:00
parent 48e75813ae
commit 2b84372e40
17 changed files with 179 additions and 506 deletions

View file

@ -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>

View file

@ -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>

View file

@ -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$/../..">

View file

@ -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>

View file

@ -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')
}

View file

@ -1,2 +1,2 @@
pluginGroup=me.cooljwb.vulnerabilitypatcher
pluginVersion=v1.0-BETA
pluginVersion=v1.1

View file

@ -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;

View file

@ -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.
}
}

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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();
}
}

View file

@ -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);
}

View file

@ -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);
}
}
}

View file

@ -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

View file

@ -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]