diff --git a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java index 55fe0046..65fd421c 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java +++ b/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java @@ -24,9 +24,11 @@ import java.lang.reflect.Modifier; import java.util.*; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolLogger; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.injector.BukkitUnwrapper; import com.comphenix.protocol.injector.PacketConstructor; @@ -984,41 +986,48 @@ public class BukkitConverters { * @return Every converter with a unique generic class. */ @SuppressWarnings("rawtypes") - // TODO this list needs to be updated public static Map, EquivalentConverter> getConvertersForGeneric() { if (genericConverters == null) { - // Generics doesn't work, as usual - ImmutableMap.Builder, EquivalentConverter> builder = - ImmutableMap., EquivalentConverter>builder(). - put(MinecraftReflection.getDataWatcherClass(), (EquivalentConverter) getDataWatcherConverter()). - put(MinecraftReflection.getItemStackClass(), (EquivalentConverter) getItemStackConverter()). - put(MinecraftReflection.getNBTBaseClass(), (EquivalentConverter) getNbtConverter()). - put(MinecraftReflection.getNBTCompoundClass(), (EquivalentConverter) getNbtConverter()). - put(MinecraftReflection.getDataWatcherItemClass(), (EquivalentConverter) getWatchableObjectConverter()). - put(MinecraftReflection.getMobEffectClass(), (EquivalentConverter) getPotionEffectConverter()). - put(MinecraftReflection.getNmsWorldClass(), (EquivalentConverter) getWorldConverter()); - - if (hasWorldType) - builder.put(MinecraftReflection.getWorldTypeClass(), (EquivalentConverter) getWorldTypeConverter()); - if (hasAttributeSnapshot) - builder.put(MinecraftReflection.getAttributeSnapshotClass(), (EquivalentConverter) getWrappedAttributeConverter()); - - // Types added in 1.7.2 - if (MinecraftReflection.isUsingNetty()) { - builder.put(MinecraftReflection.getBlockClass(), (EquivalentConverter) getBlockConverter()); - builder.put(MinecraftReflection.getGameProfileClass(), (EquivalentConverter) getWrappedGameProfileConverter()); - builder.put(MinecraftReflection.getIChatBaseComponentClass(), (EquivalentConverter) getWrappedChatComponentConverter()); - builder.put(MinecraftReflection.getServerPingClass(), (EquivalentConverter) getWrappedServerPingConverter()); - builder.put(MinecraftReflection.getStatisticClass(), (EquivalentConverter) getWrappedStatisticConverter()); - - for (Entry, EquivalentConverter> entry : EnumWrappers.getFromNativeMap().entrySet()) { - builder.put((Class) entry.getKey(), (EquivalentConverter) entry.getValue()); - } + ImmutableMap.Builder, EquivalentConverter> builder = ImmutableMap.builder(); + addConverter(builder, MinecraftReflection::getDataWatcherClass, BukkitConverters::getDataWatcherConverter); + addConverter(builder, MinecraftReflection::getItemStackClass, BukkitConverters::getItemStackConverter); + addConverter(builder, MinecraftReflection::getNBTBaseClass, BukkitConverters::getNbtConverter); + addConverter(builder, MinecraftReflection::getNBTCompoundClass, BukkitConverters::getNbtConverter); + addConverter(builder, MinecraftReflection::getDataWatcherItemClass, BukkitConverters::getWatchableObjectConverter); + addConverter(builder, MinecraftReflection::getMobEffectClass, BukkitConverters::getPotionEffectConverter); + addConverter(builder, MinecraftReflection::getNmsWorldClass, BukkitConverters::getWorldConverter); + addConverter(builder, MinecraftReflection::getWorldTypeClass, BukkitConverters::getWorldTypeConverter); + addConverter(builder, MinecraftReflection::getAttributeSnapshotClass, BukkitConverters::getWrappedAttributeConverter); + addConverter(builder, MinecraftReflection::getBlockClass, BukkitConverters::getBlockConverter); + addConverter(builder, MinecraftReflection::getGameProfileClass, BukkitConverters::getWrappedGameProfileConverter); + addConverter(builder, MinecraftReflection::getServerPingClass, BukkitConverters::getWrappedServerPingConverter); + addConverter(builder, MinecraftReflection::getStatisticClass, BukkitConverters::getWrappedStatisticConverter); + addConverter(builder, MinecraftReflection::getIBlockDataClass, BukkitConverters::getWrappedBlockDataConverter); + + for (Entry, EquivalentConverter> entry : EnumWrappers.getFromNativeMap().entrySet()) { + addConverter(builder, entry::getKey, entry::getValue); } + genericConverters = builder.build(); } + return genericConverters; } + + private static void addConverter(ImmutableMap.Builder, EquivalentConverter> builder, + Supplier> getClass, Supplier getConverter) { + try { + Class clazz = getClass.get(); + if (clazz != null) { + EquivalentConverter converter = getConverter.get(); + if (converter != null) { + builder.put(clazz, converter); + } + } + } catch (Exception ex) { + ProtocolLogger.debug("Exception registering converter", ex); + } + } /** * Retrieve every NMS to/from Bukkit converter as unwrappers. diff --git a/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java b/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java index c5573b1c..c67d6a43 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java +++ b/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java @@ -437,8 +437,6 @@ public abstract class EnumWrappers { if (nativeClass != null) { FROM_NATIVE.put(nativeClass, converter); FROM_WRAPPER.put(wrapperClass, converter); - } else if (ProtocolLogger.isDebugEnabled()) { - // new ClassNotFoundException(wrapperClass.getSimpleName()).printStackTrace(); } } @@ -452,10 +450,7 @@ public abstract class EnumWrappers { try { return FuzzyReflection.fromClass(clazz, true).getFieldListByType(Enum.class).get(index).getType(); } catch (Throwable ex) { - if (ProtocolLogger.isDebugEnabled()) { - // ex.printStackTrace(); - } - + ProtocolLogger.debug("Exception getting enum from " + clazz + " at index " + index, ex); return null; } }