Class ReflectionUtils

java.lang.Object
me.devnatan.inventoryframework.runtime.thirdparty.ReflectionUtils

public final class ReflectionUtils extends Object
ReflectionUtils - Reflection handler for NMS and CraftBukkit.
Caches the packet related methods and is asynchronous.

This class does not handle null checks as most of the requests are from the other utility classes that already handle null checks.

Clientbound Packets are considered fake updates to the client without changing the actual data. Since all the data is handled by the server.

A useful resource used to compare mappings is Mini's Mapping Viewer

  • Field Details

    • NMS_VERSION

      public static final String NMS_VERSION
      We use reflection mainly to avoid writing a new class for version barrier. The version barrier is for NMS that uses the Minecraft version as the main package name.

      E.g. EntityPlayer in 1.15 is in the class net.minecraft.server.v1_15_R1 but in 1.14 it's in net.minecraft.server.v1_14_R1 In order to maintain cross-version compatibility we cannot import these classes.

      Performance is not a concern for these specific statically initialized values.

      Versions Legacy

    • MINOR_NUMBER

      public static final int MINOR_NUMBER
      The raw minor version number. E.g. v1_17_R1 to 17
      Since:
      4.0.0
      See Also:
    • PATCH_NUMBER

      public static final int PATCH_NUMBER
      The raw patch version number. E.g. v1_17_R1 to 1

      I'd not recommend developers to support individual patches at all. You should always support the latest patch. For example, between v1.14.0, v1.14.1, v1.14.2, v1.14.3 and v1.14.4 you should only support v1.14.4

      This can be used to warn server owners when your plugin will break on older patches.

      Since:
      7.0.0
    • CRAFTBUKKIT_PACKAGE

      public static final String CRAFTBUKKIT_PACKAGE
      Mojang remapped their NMS in 1.17: Spigot Thread
    • NMS_PACKAGE

      public static final String NMS_PACKAGE
      Mojang remapped their NMS in 1.17: Spigot Thread
  • Method Details

    • getVersionInformation

      public static String getVersionInformation()
      Gets the full version information of the server. Useful for including in errors.
      Since:
      7.0.0
    • supportsMC1202

      public static boolean supportsMC1202()
    • v

      public static <T> ReflectionUtils.VersionHandler<T> v(int version, T handle)
      This method is purely for readability. No performance is gained.
      Since:
      5.0.0
    • supports

      public static boolean supports(int minorNumber)
      Checks whether the server version is equal or greater than the given version.
      Parameters:
      minorNumber - the version to compare the server version with.
      Returns:
      true if the version is equal or newer, otherwise false.
      Since:
      4.0.0
      See Also:
    • getNMSClass

      @Nullable public static @Nullable Class<?> getNMSClass(String newPackage, String name)
      Get a NMS (net.minecraft.server) class which accepts a package for 1.17 compatibility.
      Parameters:
      newPackage - the 1.17 package name.
      name - the name of the class.
      Returns:
      the NMS class or null if not found.
      Since:
      4.0.0
    • getNMSClass

      @Nullable public static @Nullable Class<?> getNMSClass(String name)
      Get a NMS (net.minecraft.server) class.
      Parameters:
      name - the name of the class.
      Returns:
      the NMS class or null if not found.
      Since:
      1.0.0
    • getEntityPlayer

      public static Object getEntityPlayer(Object craftPlayer) throws Throwable
      Throws:
      Throwable
    • sendPacketSync

      public static void sendPacketSync(org.bukkit.entity.Player player, Object... packets) throws Throwable
      Sends a packet to the player synchronously if they're online.
      Parameters:
      player - the player to send the packet to.
      packets - the packets to send.
      Throws:
      Throwable
      Since:
      2.0.0
    • getCraftClass

      @Nullable public static @Nullable Class<?> getCraftClass(String name)
      Get a CraftBukkit (org.bukkit.craftbukkit) class.
      Parameters:
      name - the name of the class to load.
      Returns:
      the CraftBukkit class or null if not found.
      Since:
      1.0.0