72 lines
2.4 KiB
Java
72 lines
2.4 KiB
Java
/*
|
|
* Copyright (c) 2017 univento.eu - All rights reserved
|
|
* You are not allowed to use, distribute or modify this code
|
|
*/
|
|
|
|
package eu.univento.core.api.gui.sign;
|
|
|
|
import io.netty.channel.Channel;
|
|
import io.netty.channel.ChannelHandlerContext;
|
|
import io.netty.handler.codec.MessageToMessageDecoder;
|
|
import net.minecraft.server.v1_12_R1.NetworkManager;
|
|
import net.minecraft.server.v1_12_R1.Packet;
|
|
import net.minecraft.server.v1_12_R1.PacketPlayInUpdateSign;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author joethei
|
|
* @version 0.1
|
|
*/
|
|
class SignInputHandler {
|
|
|
|
private static Field channelField = null;
|
|
|
|
static{
|
|
for(Field field : NetworkManager.class.getDeclaredFields()) {
|
|
if(channelField.getType().isAssignableFrom(Channel.class)) {
|
|
channelField = field;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void injectNetty(final Player player) {
|
|
try {
|
|
Channel channel = (Channel) channelField.get(((CraftPlayer) player).getHandle().playerConnection.networkManager);
|
|
if (channel != null) {
|
|
channel.pipeline().addAfter("decoder", "update_sign", new MessageToMessageDecoder<Packet>() {
|
|
|
|
@Override
|
|
protected void decode(ChannelHandlerContext chc, Packet packet, List<Object> out) throws Exception {
|
|
if (packet instanceof PacketPlayInUpdateSign) {
|
|
|
|
PacketPlayInUpdateSign usePacket = (PacketPlayInUpdateSign) packet;
|
|
Bukkit.getPluginManager().callEvent(new PlayerSignInputEvent(player, usePacket.b()));
|
|
}
|
|
out.add(packet);
|
|
}
|
|
});
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
static void ejectNetty(Player player) {
|
|
try {
|
|
Channel channel = (Channel) channelField.get(((CraftPlayer) player).getHandle().playerConnection.networkManager);
|
|
if (channel != null) {
|
|
if (channel.pipeline().get("update_sign") != null) {
|
|
channel.pipeline().remove("update_sign");
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
} |