Skip to content

Instantly share code, notes, and snippets.

@SocraticPhoenix
Created August 6, 2015 17:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SocraticPhoenix/589ce43c9369f73ba77d to your computer and use it in GitHub Desktop.
Save SocraticPhoenix/589ce43c9369f73ba77d to your computer and use it in GitHub Desktop.
/**
* This document a contribution to the Qixalite project.
*/
package com.qixalite.plugins.meguy26.mipayrarbil.minigames.nms;
import org.bukkit.entity.Player;
import org.omg.PortableServer.ThreadPolicyOperations;
import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by Meguy26 on 8/6/2015. <p> Package: com.qixalite.plugins.meguy26.mipayrarbil.minigames.nms
* <p> Project: MingameFramework <p>
*/
public class NMSUtil {
private static String version;
private static Class<?> entity;
private static Class<?> craftPlayer;
private static Method getPlayerHandle;
private static Method setInvisible;
private static boolean setup = false;
public static void setPlayerInvisible(Player player, boolean invisible) {
try {
setupNMS();
Object playerEntity = entity.cast(
getPlayerHandle.invoke(craftPlayer.cast(player), new Class<?>[] {}));
setInvisible.invoke(playerEntity, invisible);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
private static void setupNMS() {
if (! setup) {
try {
craftPlayer = getNMSClass("org.bukkit.craftbukkit.%s.entity.CraftPlayer");
entity = getNMSClass("net.minecraft.server.%s.Entity");
getPlayerHandle = craftPlayer.getDeclaredMethod("getHandle", new Class<?>[] {});
setInvisible = entity.getDeclaredMethod("setInvisible", boolean.class);
setup = true;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
private static Class<?> getNMSClass(String nmsClass) {
pullVersion();
if (version == null) {
return null;
}
try {
return Class.forName(String.format(nmsClass, version));
} catch (ClassNotFoundException e) {
return null;
}
}
private static void pullVersion() {
if (version == null) {
Pattern pat = Pattern.compile("net\\.minecraft\\.(?:server)?\\.(v(?:\\d_)+R\\d)");
for (Package p : Package.getPackages()) {
String name = p.getName();
Matcher m = pat.matcher(name);
if (m.matches()) {
version = m.group(1);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment