Created
August 6, 2015 17:04
-
-
Save SocraticPhoenix/589ce43c9369f73ba77d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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