Added support for Guava 11 (and later) in Spigot #1506-1508.
Note that build #1509 reverted to Guava 10, so this is merely a future proof.
Dieser Commit ist enthalten in:
Ursprung
7e5abecfe2
Commit
09e45977f2
@ -31,6 +31,7 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -54,8 +55,8 @@ import com.comphenix.protocol.error.ReportType;
|
|||||||
import com.comphenix.protocol.injector.BukkitUnwrapper;
|
import com.comphenix.protocol.injector.BukkitUnwrapper;
|
||||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||||
import com.comphenix.protocol.reflect.ClassAnalyser;
|
import com.comphenix.protocol.reflect.ClassAnalyser;
|
||||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
|
||||||
import com.comphenix.protocol.reflect.ClassAnalyser.AsmMethod;
|
import com.comphenix.protocol.reflect.ClassAnalyser.AsmMethod;
|
||||||
|
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||||
import com.comphenix.protocol.reflect.accessors.Accessors;
|
import com.comphenix.protocol.reflect.accessors.Accessors;
|
||||||
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
|
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
|
||||||
import com.comphenix.protocol.reflect.compiler.EmptyClassVisitor;
|
import com.comphenix.protocol.reflect.compiler.EmptyClassVisitor;
|
||||||
@ -71,9 +72,7 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
|||||||
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
|
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
|
||||||
import com.comphenix.protocol.wrappers.nbt.NbtType;
|
import com.comphenix.protocol.wrappers.nbt.NbtType;
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.cache.CacheBuilder;
|
|
||||||
import com.google.common.cache.CacheLoader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methods and constants specifically used in conjuction with reflecting Minecraft object.
|
* Methods and constants specifically used in conjuction with reflecting Minecraft object.
|
||||||
@ -152,12 +151,7 @@ public class MinecraftReflection {
|
|||||||
private static Class<?> itemStackArrayClass;
|
private static Class<?> itemStackArrayClass;
|
||||||
|
|
||||||
// Cache of getBukkitEntity
|
// Cache of getBukkitEntity
|
||||||
private static Cache<Class<?>, MethodAccessor> getBukkitEntityCache = CacheBuilder.newBuilder().build(
|
private static ConcurrentMap<Class<?>, MethodAccessor> getBukkitEntityCache = Maps.newConcurrentMap();
|
||||||
new CacheLoader<Class<?>, MethodAccessor>() {
|
|
||||||
public MethodAccessor load(java.lang.Class<?> paramK) throws Exception {
|
|
||||||
return Accessors.getMethodAccessor(paramK, "getBukkitEntity");
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// The current class source
|
// The current class source
|
||||||
private static ClassSource classSource;
|
private static ClassSource classSource;
|
||||||
@ -394,7 +388,19 @@ public class MinecraftReflection {
|
|||||||
|
|
||||||
// We will have to do this dynamically, unfortunately
|
// We will have to do this dynamically, unfortunately
|
||||||
try {
|
try {
|
||||||
return getBukkitEntityCache.apply(nmsObject.getClass()).invoke(nmsObject);
|
Class<?> clazz = nmsObject.getClass();
|
||||||
|
MethodAccessor accessor = getBukkitEntityCache.get(clazz);
|
||||||
|
|
||||||
|
if (accessor == null) {
|
||||||
|
MethodAccessor created = Accessors.getMethodAccessor(clazz, "getBukkitEntity");
|
||||||
|
accessor = getBukkitEntityCache.putIfAbsent(clazz, created);
|
||||||
|
|
||||||
|
// We won the race
|
||||||
|
if (accessor == null) {
|
||||||
|
accessor = created;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accessor.invoke(nmsObject);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalArgumentException("Cannot get Bukkit entity from " + nmsObject, e);
|
throw new IllegalArgumentException("Cannot get Bukkit entity from " + nmsObject, e);
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren