Utils/BukkitUtils/src/main/java/eu/mikroskeem/utils/bukkit/PluginMessage.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);
}
}
}