Add Actionbar functionality.
This commit is contained in:
parent
3ab7abc9ca
commit
a0685d0b5b
19
src/com/massivecraft/massivecore/mixin/ActionbarMixin.java
Normal file
19
src/com/massivecraft/massivecore/mixin/ActionbarMixin.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.massivecraft.massivecore.mixin;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.mson.Mson;
|
||||||
|
|
||||||
|
public interface ActionbarMixin
|
||||||
|
{
|
||||||
|
// Abstract
|
||||||
|
public boolean sendActionbarMessage(Object watcherObject, String message);
|
||||||
|
|
||||||
|
// Parsed
|
||||||
|
public boolean sendActionbarMsg(Object watcherObject, String message);
|
||||||
|
|
||||||
|
// Mson
|
||||||
|
public boolean sendActionbarMson(Object watcherObject, Mson mson);
|
||||||
|
|
||||||
|
// Available
|
||||||
|
public boolean isActionbarAvailable();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.massivecraft.massivecore.mixin;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.util.Txt;
|
||||||
|
|
||||||
|
public abstract class ActionbarMixinAbstract implements ActionbarMixin
|
||||||
|
{
|
||||||
|
// Parsed
|
||||||
|
@Override
|
||||||
|
public boolean sendActionbarMsg(Object watcherObject, String message)
|
||||||
|
{
|
||||||
|
return this.sendActionbarMessage(watcherObject, Txt.parse(message));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.massivecraft.massivecore.mixin;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.mson.Mson;
|
||||||
|
import com.massivecraft.massivecore.nms.NmsPacket;
|
||||||
|
import com.massivecraft.massivecore.util.IdUtil;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class ActionbarMixinDefault extends ActionbarMixinAbstract
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static ActionbarMixinDefault i = new ActionbarMixinDefault();
|
||||||
|
public static ActionbarMixinDefault get() { return i; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendActionbarMessage(Object watcherObject, String message)
|
||||||
|
{
|
||||||
|
// Get the player
|
||||||
|
Player player = IdUtil.getPlayer(watcherObject);
|
||||||
|
if(player == null) return false;
|
||||||
|
|
||||||
|
message = NmsPacket.toJson(message);
|
||||||
|
|
||||||
|
return NmsPacket.sendActionbar(player, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendActionbarMson(Object watcherObject, Mson mson)
|
||||||
|
{
|
||||||
|
// Get the player
|
||||||
|
Player player = IdUtil.getPlayer(watcherObject);
|
||||||
|
if(player == null) return false;
|
||||||
|
|
||||||
|
// Convert to raw
|
||||||
|
String message = mson.toRaw();
|
||||||
|
|
||||||
|
return NmsPacket.sendActionbar(player, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isActionbarAvailable()
|
||||||
|
{
|
||||||
|
return NmsPacket.get().isAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -57,6 +57,10 @@ public class Mixin
|
|||||||
private static MessageMixin messageMixin = MessageMixinDefault.get();
|
private static MessageMixin messageMixin = MessageMixinDefault.get();
|
||||||
public static MessageMixin getMessageMixin() { return messageMixin; }
|
public static MessageMixin getMessageMixin() { return messageMixin; }
|
||||||
public static void setMessageMixin(MessageMixin val) { messageMixin = val; }
|
public static void setMessageMixin(MessageMixin val) { messageMixin = val; }
|
||||||
|
|
||||||
|
private static ActionbarMixin actionbarMixin = ActionbarMixinDefault.get();
|
||||||
|
public static ActionbarMixin getActionbarMixin() { return actionbarMixin; }
|
||||||
|
public static void setActionbarMixin(ActionbarMixin val) { actionbarMixin = val; }
|
||||||
|
|
||||||
private static TitleMixin titleMixin = TitleMixinDefault.get();
|
private static TitleMixin titleMixin = TitleMixinDefault.get();
|
||||||
public static TitleMixin getTitleMixin() { return titleMixin; }
|
public static TitleMixin getTitleMixin() { return titleMixin; }
|
||||||
@ -339,6 +343,34 @@ public class Mixin
|
|||||||
{
|
{
|
||||||
return getMessageMixin().messageOne(sendeeObject, messages);
|
return getMessageMixin().messageOne(sendeeObject, messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STATIC EXPOSE: ACTIONBAR
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
// Default
|
||||||
|
public static boolean sendActionbarMessage(Object sendeeObject, String message)
|
||||||
|
{
|
||||||
|
return getActionbarMixin().sendActionbarMessage(sendeeObject, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parsed
|
||||||
|
public static boolean sendActionbarMsg(Object sendeeObject, String message)
|
||||||
|
{
|
||||||
|
return getActionbarMixin().sendActionbarMsg(sendeeObject, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mson
|
||||||
|
public static boolean sendActionbarMson(Object sendeeObject, Mson mson)
|
||||||
|
{
|
||||||
|
return getActionbarMixin().sendActionbarMson(sendeeObject, mson);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Available
|
||||||
|
public static boolean isActionbarAvailable()
|
||||||
|
{
|
||||||
|
return getActionbarMixin().isActionbarAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// STATIC EXPOSE: TITLE
|
// STATIC EXPOSE: TITLE
|
||||||
|
@ -28,6 +28,9 @@ public class TitleMixinDefault extends TitleMixinAbstract
|
|||||||
// If we don't send any message (empty is ok) we might end up displaying old messages.
|
// If we don't send any message (empty is ok) we might end up displaying old messages.
|
||||||
if (titleSub == null) titleSub = "";
|
if (titleSub == null) titleSub = "";
|
||||||
if (titleMain == null) titleMain = "";
|
if (titleMain == null) titleMain = "";
|
||||||
|
|
||||||
|
titleSub = NmsPacket.toJson(titleSub);
|
||||||
|
titleMain = NmsPacket.toJson(titleMain);
|
||||||
|
|
||||||
return NmsPacket.sendTitle(player, ticksIn, ticksStay, ticksOut, titleMain, titleSub);
|
return NmsPacket.sendTitle(player, ticksIn, ticksStay, ticksOut, titleMain, titleSub);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import java.lang.reflect.Constructor;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.util.Txt;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
@ -45,8 +46,9 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
private static Constructor<?> titlePacketConstructor;
|
private static Constructor<?> titlePacketConstructor;
|
||||||
private static Constructor<?> titlePacketConstructorTimes;
|
private static Constructor<?> titlePacketConstructorTimes;
|
||||||
|
|
||||||
// The chat packet and its constructor
|
// The chat packet and its constructors
|
||||||
private static Constructor<?> chatPacketConstructor;
|
private static Constructor<?> chatPacketConstructor;
|
||||||
|
private static Constructor<?> chatPacketActionbarConstructor;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE
|
// OVERRIDE
|
||||||
@ -86,6 +88,7 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
// Get Chat packet and it's constructor
|
// Get Chat packet and it's constructor
|
||||||
Class<?> chatPacketClass = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutChat");
|
Class<?> chatPacketClass = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutChat");
|
||||||
chatPacketConstructor = ReflectionUtils.getConstructor(chatPacketClass, iChatBaseComponent);
|
chatPacketConstructor = ReflectionUtils.getConstructor(chatPacketClass, iChatBaseComponent);
|
||||||
|
chatPacketActionbarConstructor = ReflectionUtils.getConstructor(chatPacketClass, iChatBaseComponent, Byte.TYPE);
|
||||||
|
|
||||||
// Player connection
|
// Player connection
|
||||||
getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle");
|
getHandle = ReflectionUtils.getMethod("CraftPlayer", PackageType.CRAFTBUKKIT_ENTITY, "getHandle");
|
||||||
@ -155,8 +158,6 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
|
|
||||||
if (titleMain != null)
|
if (titleMain != null)
|
||||||
{
|
{
|
||||||
titleMain = toJson(titleMain);
|
|
||||||
|
|
||||||
// Title
|
// Title
|
||||||
Object titleMainChat = toChatBaseComponent(titleMain);
|
Object titleMainChat = toChatBaseComponent(titleMain);
|
||||||
Object titleMainPacket = titlePacketConstructor.newInstance(titleMainEnum, titleMainChat);
|
Object titleMainPacket = titlePacketConstructor.newInstance(titleMainEnum, titleMainChat);
|
||||||
@ -166,7 +167,6 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
|
|
||||||
if (titleSub != null)
|
if (titleSub != null)
|
||||||
{
|
{
|
||||||
titleSub = toJson(titleSub);
|
|
||||||
// SubTitle
|
// SubTitle
|
||||||
Object titleSubChat = toChatBaseComponent(titleSub);
|
Object titleSubChat = toChatBaseComponent(titleSub);
|
||||||
Object titleSubPacket = titlePacketConstructor.newInstance(titleSubEnum, titleSubChat);
|
Object titleSubPacket = titlePacketConstructor.newInstance(titleSubEnum, titleSubChat);
|
||||||
@ -176,7 +176,7 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MassiveCore.get().log("<b>Sending title failed!");
|
MassiveCore.get().log(Txt.parse("<b>Sending title failed!"));
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
// So we failed, didn't work.
|
// So we failed, didn't work.
|
||||||
return false;
|
return false;
|
||||||
@ -203,7 +203,33 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MassiveCore.get().log("<b>Sending raw chat failed!");
|
MassiveCore.get().log(Txt.parse("<b>Sending raw chat failed!"));
|
||||||
|
ex.printStackTrace();
|
||||||
|
// So we failed and it didn't work.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// SEND ACTIONBAR
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean sendActionbar(Player player, String string)
|
||||||
|
{
|
||||||
|
if ( ! get().isAvailable()) return false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Object actionbar = toChatBaseComponent(string);
|
||||||
|
Object chatPacket = chatPacketActionbarConstructor.newInstance(actionbar, (byte) 2);
|
||||||
|
|
||||||
|
sendPacket(player, chatPacket);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
MassiveCore.get().log(Txt.parse("<b>Sending actionbar failed!"));
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
// So we failed and it didn't work.
|
// So we failed and it didn't work.
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user