89 lines
2.8 KiB
Java
89 lines
2.8 KiB
Java
package eu.mikroskeem.utils.bukkit;
|
|
|
|
import com.google.common.io.ByteArrayDataOutput;
|
|
import com.google.common.io.ByteStreams;
|
|
import lombok.Getter;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
/**
|
|
* PluginMessage class
|
|
*
|
|
* Checks if plugin message channel is registered and sends message if try-resource block ends.
|
|
* You can use this like you would write normal plugin messages.
|
|
*/
|
|
public class PluginMessage implements AutoCloseable,ByteArrayDataOutput {
|
|
@Getter
|
|
private ByteArrayDataOutput pluginMessage = ByteStreams.newDataOutput();
|
|
private String channel;
|
|
private Player player;
|
|
private Plugin plugin;
|
|
private boolean wasChannelRegistered = false;
|
|
|
|
|
|
public PluginMessage(Plugin plugin, Player player, String channel){
|
|
this.channel = channel;
|
|
this.player = player;
|
|
this.plugin = plugin;
|
|
|
|
/* Check if channel is registered */
|
|
if(plugin.getServer().getMessenger().isOutgoingChannelRegistered(plugin, channel)){
|
|
wasChannelRegistered = true;
|
|
} else {
|
|
plugin.getServer().getMessenger().registerOutgoingPluginChannel(plugin, channel);
|
|
}
|
|
}
|
|
@Override public void write(int b) {
|
|
pluginMessage.write(b);
|
|
}
|
|
@Override public void write(byte[] b) {
|
|
pluginMessage.write(b);
|
|
}
|
|
@Override public void write(byte[] b, int off, int len) {
|
|
pluginMessage.write(b, off, len);
|
|
}
|
|
@Override public void writeBoolean(boolean v) {
|
|
pluginMessage.writeBoolean(v);
|
|
}
|
|
@Override public void writeByte(int v) {
|
|
pluginMessage.writeByte(v);
|
|
}
|
|
@Override public void writeShort(int v) {
|
|
pluginMessage.writeShort(v);
|
|
}
|
|
@Override public void writeChar(int v) {
|
|
pluginMessage.writeChar(v);
|
|
}
|
|
@Override public void writeInt(int v) {
|
|
pluginMessage.writeInt(v);
|
|
}
|
|
@Override public void writeLong(long v) {
|
|
pluginMessage.writeLong(v);
|
|
}
|
|
@Override public void writeFloat(float v) {
|
|
pluginMessage.writeFloat(v);
|
|
}
|
|
@Override public void writeDouble(double v) {
|
|
pluginMessage.writeDouble(v);
|
|
}
|
|
@Override public void writeChars(String s) {
|
|
pluginMessage.writeChars(s);
|
|
}
|
|
@Override public void writeUTF(String s) {
|
|
pluginMessage.writeUTF(s);
|
|
}
|
|
@Override @SuppressWarnings("deprecation")
|
|
public void writeBytes(String s) {
|
|
pluginMessage.writeBytes(s);
|
|
}
|
|
@Override public byte[] toByteArray() {
|
|
return pluginMessage.toByteArray();
|
|
}
|
|
@Override public void close() {
|
|
player.sendPluginMessage(plugin, channel, pluginMessage.toByteArray());
|
|
if(!wasChannelRegistered){
|
|
plugin.getServer().getMessenger().unregisterOutgoingPluginChannel(plugin, channel);
|
|
}
|
|
}
|
|
}
|