2015-12-06 11:04:47 +01:00
|
|
|
package eu.univento.core.api;
|
2015-12-05 12:26:39 +01:00
|
|
|
|
2016-02-27 09:08:17 +01:00
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
|
2015-12-05 12:26:39 +01:00
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2016-02-27 09:08:17 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author janhektor
|
|
|
|
*
|
|
|
|
*/
|
2015-12-05 12:26:39 +01:00
|
|
|
public class Blackscreen
|
|
|
|
{
|
|
|
|
private static Object packetObject;
|
|
|
|
private static Class<?> packetClass;
|
|
|
|
private static String VERSION;
|
|
|
|
private static Map<UUID, Integer> ticksLeft = new HashMap<UUID, Integer>();
|
|
|
|
|
|
|
|
static { String path = Bukkit.getServer().getClass().getPackage().getName();
|
|
|
|
VERSION = path.substring(path.lastIndexOf(".") + 1, path.length());
|
|
|
|
try {
|
|
|
|
packetClass = Class.forName("net.minecraft.server." + VERSION + ".Packet");
|
|
|
|
Class<?> packetGameStateClass = Class.forName("net.minecraft.server." + VERSION + ".PacketPlayOutGameStateChange");
|
|
|
|
packetObject = packetGameStateClass.getConstructor(new Class[] { Integer.TYPE, Float.TYPE }).newInstance(new Object[] { Integer.valueOf(4), Integer.valueOf(0) });
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setupUtil(Plugin instance)
|
|
|
|
{
|
|
|
|
setupUtil(instance, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setupUtil(Plugin instance, int repeatingTicks)
|
|
|
|
{
|
|
|
|
Bukkit.getScheduler().runTaskTimer(instance, new Runnable()
|
|
|
|
{
|
|
|
|
public void run()
|
|
|
|
{
|
|
|
|
for (UUID uuid : Blackscreen.ticksLeft.keySet()) {
|
|
|
|
Player p = Bukkit.getPlayer(uuid);
|
|
|
|
if (p == null) {
|
|
|
|
Blackscreen.ticksLeft.remove(uuid);
|
|
|
|
}
|
|
|
|
else if (((Integer)Blackscreen.ticksLeft.get(uuid)).intValue() > 0) {
|
|
|
|
Blackscreen.ticksLeft.put(uuid, Integer.valueOf(((Integer)Blackscreen.ticksLeft.get(uuid)).intValue() - 2));
|
|
|
|
Blackscreen.access(p);
|
|
|
|
} else {
|
|
|
|
Blackscreen.ticksLeft.remove(uuid);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
, 0L, repeatingTicks);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected static void access(Player p) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void sendPacket(Player p) {
|
|
|
|
try {
|
|
|
|
Object nmsPlayer = p.getClass().getMethod("getHandle", new Class[0]).invoke(p, new Object[0]);
|
|
|
|
Field playerConnectionField = nmsPlayer.getClass().getField("playerConnection");
|
|
|
|
Object pConnection = playerConnectionField.get(nmsPlayer);
|
|
|
|
Method sendPacket = pConnection.getClass().getMethod("sendPacket", new Class[] { packetClass });
|
|
|
|
sendPacket.invoke(pConnection, new Object[] { packetObject });
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setBlack(Player p, int seconds)
|
|
|
|
{
|
|
|
|
ticksLeft.put(p.getUniqueId(), Integer.valueOf(seconds * 20));
|
|
|
|
sendPacket(p);
|
|
|
|
}
|
|
|
|
}
|