Commit v1.7

Added new patches but also eased up on old patches for 1.16 that were causing problems.
This commit is contained in:
CoolJWB 2020-07-02 17:26:40 +02:00
parent 058c89ecbb
commit c325ec9374
12 changed files with 134 additions and 31 deletions

View file

@ -2,12 +2,18 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="4038a6e9-7d52-4dd0-91ef-d9a12aa1c1b2" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Beehives.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Skulls.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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/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_2.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_13_2.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/modifiers/NBTModifier_1_15.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_15.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_16.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/modifiers/NBTModifier_1_16.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/Patches.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/me/cooljwb/vulnerabilitypatcher/patches/Patches.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/config.yml" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />

View file

@ -3,16 +3,11 @@ 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;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.Potion;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
@ -144,6 +139,8 @@ public final class VulnerabilityPatcher extends JavaPlugin {
case "Handswitch": listeners.add(new Handswitch()); break;
case "Fireworks": listeners.add(new Fireworks()); break;
case "Chests": listeners.add(new Chests()); break;
case "Beehives": listeners.add(new Beehives()); break;
case "Skulls": listeners.add(new Skulls()); break;
} // Adds all events to the event register.
}
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this)); // Register the events.

View file

@ -322,4 +322,22 @@ public class NBTModifier {
return false;
}
}
protected boolean isDangerousSkull(ItemStack item) {
switch(getVersion()) {
case "1.13.2":
nbt_1_13_2.isDangerousSkull(item);
break;
case "1.14":
nbt_1_14.isDangerousSkull(item);
break;
case "1.15":
nbt_1_15.isDangerousSkull(item);
break;
case "1.16":
nbt_1_16.isDangerousSkull(item);
break;
}
return false;
}
}

View file

@ -275,7 +275,7 @@ public class NBTModifier_1_13_2 {
}
}
else if(item.toString().length() > 60000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
else if(item.toString().length() > 262140 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
@ -356,4 +356,14 @@ public class NBTModifier_1_13_2 {
}
return false;
}
boolean isDangerousSkull(ItemStack item) {
if(item != null && item.hasItemMeta()) {
NBTTagCompound tag = CraftItemStack.asNMSCopy(item).getTag();
if (tag != null && tag.hasKey("SkullOwner") && tag.getString("SkullOwner").trim().equals("")) {
return true;
}
}
return false;
}
}

View file

@ -294,7 +294,7 @@ public class NBTModifier_1_14 {
}
}
else if(item.toString().length() > 60000 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
else if(item.toString().length() > 262140 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
@ -375,4 +375,14 @@ public class NBTModifier_1_14 {
}
return false;
}
boolean isDangerousSkull(ItemStack item) {
if(item != null && item.hasItemMeta()) {
NBTTagCompound tag = CraftItemStack.asNMSCopy(item).getTag();
if (tag != null && tag.hasKey("SkullOwner") && tag.getString("SkullOwner").trim().equals("")) {
return true;
}
}
return false;
}
}

View file

@ -296,7 +296,7 @@ public class NBTModifier_1_15 {
}
}
else if(item.toString().length() > 65535 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
else if(item.toString().length() > 262140 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
@ -377,4 +377,15 @@ public class NBTModifier_1_15 {
}
return false;
}
boolean isDangerousSkull(ItemStack item) {
if(item != null && item.hasItemMeta()) {
NBTTagCompound tag = CraftItemStack.asNMSCopy(item).getTag();
if (tag != null && tag.hasKey("SkullOwner") && tag.getString("SkullOwner").trim().equals("")) {
return true;
}
}
return false;
}
}

View file

@ -297,10 +297,14 @@ public class NBTModifier_1_16 {
}
}
else if(item.toString().length() > 131070 || isMovementDisconnectItem(item) || isInvalidAttributeName(item)) {
else if(item.toString().length() > 262140) {
fired_countermeasure("isLargeNBTDisconnectItem");
return true;
}
else if(isMovementDisconnectItem(item) /*|| isInvalidAttributeName(item)*/) {
return true;
}
}
return false;
}
@ -341,6 +345,11 @@ public class NBTModifier_1_16 {
}
return false;
}
/**
* Does not have any use as this is patched in newer versions and only causes issues.
*/
@Deprecated
private boolean isInvalidAttributeName(NBTTagCompound tag) {
if(tag != null) {
NBTTagList attrlist = tag.getList("AttributeModifiers", 10);
@ -378,4 +387,15 @@ public class NBTModifier_1_16 {
}
return false;
}
boolean isDangerousSkull(ItemStack item) {
if(item != null && item.hasItemMeta()) {
NBTTagCompound tag = CraftItemStack.asNMSCopy(item).getTag();
if (tag != null && tag.hasKey("SkullOwner") && tag.getString("SkullOwner").trim().equals("")) {
return true;
}
}
return false;
}
}

View file

@ -0,0 +1,19 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.bukkit.block.EntityBlockStorage;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent;
public class Beehives extends Patches {
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
switch(getVersion()) {
case "1.15":
case "1.16":
if (event.getBlockPlaced().getState() instanceof EntityBlockStorage) {
clearItemMeta(event.getItemInHand()); // Remove all NBT traces from all entity block storages.
}
break;
}
}
}

View file

@ -3,18 +3,15 @@ package me.cooljwb.vulnerabilitypatcher.patches;
import me.cooljwb.vulnerabilitypatcher.SMG;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.*;
import org.bukkit.craftbukkit.v1_14_R1.block.CraftJukebox;
import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftItem;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.block.Jukebox;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
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;
@ -23,15 +20,9 @@ import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.material.MaterialData;
import org.bukkit.potion.Potion;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.logging.Logger;
/*
* Copyright 2019 CoolJWB
*
@ -100,7 +91,7 @@ public class Disconnect_Items extends Patches implements Listener {
}
}
if(itemSize.length() >= 65535) {
if(itemSize.length() >= 262140) {
event.setCancelled(true);
clearItemMeta(container.getInventory().getContents());
}
@ -238,7 +229,7 @@ public class Disconnect_Items extends Patches implements Listener {
inventoryString.append(itemToString(item));
}
if(inventoryString.length() >= 65535) {
if(inventoryString.length() >= 262140) {
event.setCancelled(true);
clearItemMeta(container.getInventory().getContents());
}

View file

@ -1,7 +1,5 @@
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;
@ -11,8 +9,6 @@ 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.entity.Entity;
import org.bukkit.entity.Player;
@ -22,7 +18,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.potion.PotionEffect;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.HashMap;
@ -156,7 +151,7 @@ public class Patches extends NBTModifier implements Listener {
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;
double speed = Math.abs(speedX) + Math.abs(speedY) + Math.abs(speedZ);
if(speed > 5 || speed < -5) {
event.setCancelled(true);

View file

@ -0,0 +1,23 @@
package me.cooljwb.vulnerabilitypatcher.patches;
import org.bukkit.block.Container;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
public class Skulls extends Patches implements Listener {
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if(event.getBlockPlaced().getState() instanceof Container) {
Container container = (Container) event.getBlockPlaced().getState();
for(ItemStack item : container.getInventory()) {
if(item != null) {
if(isDangerousSkull(item)) {
clearItemMeta(item);
}
}
}
}
}
}

View file

@ -1,6 +1,7 @@
# VulnerabilityPatcher by CoolJWB.
# Patches: DeathPotions, DeathItems, CrashItems, Books, RougeEntity, Arrows, Riptide, FollowRange, DisconnectItems, EntityTag, Blocks, StructureBlocks, Chunks, ItemFrames.
# Patches: DeathPotions, DeathItems, CrashItems, Books, RougeEntity, Arrows, Riptide, FollowRange, DisconnectItems,
# EntityTag, Blocks, StructureBlocks, Chunks, ItemFrames, Handswitch, Fireworks, Chests, Beehives, Skulls.
# All patches added in the list below will be activated on server startup.
Patches:
- DeathPotions # Potions that kill creative players
@ -20,6 +21,8 @@ Patches:
- Handswitch # Hand switcher hack that crashes clients and possibly the server
- Fireworks # Lags the clients when too many effects
- Chests # Disables chest drops fully to avoid large item drops
- Beehives # Removes all NBT data from any EntityBlockStorage such as beehives
- Skulls # Purges empty skull owner IDs
# All entities added below will be blocked to use in a spawn egg.
BlockedEntityTags: