Compatible with Java 16

This commit is contained in:
mbax
2021-05-21 23:21:21 -04:00
parent 4a79cfd41c
commit 4e735b5546
@@ -44,14 +44,17 @@ import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.SimplePluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import sun.misc.Unsafe;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -236,17 +239,19 @@ public class PlayerVaults extends JavaPlugin {
}); });
try { try {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
Class<?> clazz = Class.forName(this.getServer().getClass().getPackage().getName() + ".util.CraftNBTTagConfigSerializer"); Class<?> clazz = Class.forName(this.getServer().getClass().getPackage().getName() + ".util.CraftNBTTagConfigSerializer");
Field field = clazz.getDeclaredField("INTEGER"); Field field = clazz.getDeclaredField("INTEGER");
field.setAccessible(true);
Field modifiers = Field.class.getDeclaredField("modifiers"); Pattern pattern = (Pattern) unsafe.getObject(clazz, unsafe.staticFieldOffset(field));
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
Pattern pattern = (Pattern) field.get(null);
if (pattern.pattern().equals("[-+]?(?:0|[1-9][0-9]*)?i")) { if (pattern.pattern().equals("[-+]?(?:0|[1-9][0-9]*)?i")) {
field.set(null, Pattern.compile("[-+]?(?:0|[1-9][0-9]*)i", Pattern.CASE_INSENSITIVE)); unsafe.putObject(clazz, unsafe.staticFieldOffset(field), Pattern.compile("[-+]?(?:0|[1-9][0-9]*)i", Pattern.CASE_INSENSITIVE));
this.getLogger().info("Patched Spigot item storage bug.");
} }
this.getLogger().info("Patched Spigot item storage bug.");
} catch (Exception ignored) { } catch (Exception ignored) {
// Don't worry about it. // Don't worry about it.
} }