1616
1717package com .google .youtube .gaming .chat ;
1818
19- import com .google .api .services .youtube .model .LiveChatMessageAuthorDetails ;
20- import com .google .api .services .youtube .model .LiveChatSuperChatDetails ;
19+ import com .google .api .services .youtube .model .*;
2120import com .google .youtube .gaming .chat .YouTubeChatService .YouTubeChatMessageListener ;
2221import net .minecraft .client .Minecraft ;
2322import net .minecraft .command .CommandBase ;
2423import net .minecraft .command .ICommandSender ;
24+ import net .minecraft .event .ClickEvent ;
25+ import net .minecraft .event .HoverEvent ;
2526import net .minecraft .util .ChatComponentText ;
27+ import net .minecraft .util .ChatStyle ;
2628import net .minecraft .util .EnumChatFormatting ;
2729
2830import java .io .IOException ;
2931import java .util .ArrayList ;
3032import java .util .List ;
33+ import java .util .function .Consumer ;
3134
3235/**
3336 * An in-game command for managing the YouTube Chat service. Usage:
@@ -49,7 +52,7 @@ public String getCommandName() {
4952
5053 @ Override
5154 public String getCommandUsage (ICommandSender sender ) {
52- return getCommandName () + " [start|stop|logout|echoStart|echoStop] " ;
55+ return getCommandName () + " [start|stop|logout|echoStart|echoStop|post " ;
5356 }
5457
5558 @ Override
@@ -84,22 +87,32 @@ public void processCommand(ICommandSender sender, String[] args) {
8487 } catch (IOException e ) {
8588 showMessage (e .getMessage (), sender );
8689 }
87- } else {
88- if ( args [ 0 ]. equalsIgnoreCase ( "echoStart" )) {
90+ } else if ( args [ 0 ]. equalsIgnoreCase ( "echoStart" ))
91+ {
8992 if (!service .isInitialized ()) {
9093 showMessage ("Service is not initialized" , sender );
9194 showUsage (sender );
9295 } else {
9396 service .subscribe (this );
9497 }
95- } else if (args [0 ].equalsIgnoreCase ("echoStop" )) {
98+ } else if (args [0 ].equalsIgnoreCase ("echoStop" )) {
9699 service .unsubscribe (this );
97- } else {
100+ } else if (args [0 ].equalsIgnoreCase ("post" )) {
101+ StringBuilder message = new StringBuilder ();
102+ for (String arg : args ) {
103+ if (!arg .equalsIgnoreCase ("post" )) {
104+ message .append (arg ).append (" " );
105+ }
106+ }
107+ Consumer <String > id = i -> showMessage (EnumChatFormatting .RED + "[YTChat] "
108+ + EnumChatFormatting .GREEN + "Message Posted." , sender );
109+ service .postMessage (message .toString (), id );
110+ } else {
98111 showUsage (sender );
99- }
100112 }
101113 }
102114
115+
103116 private void showUsage (ICommandSender sender ) {
104117 showMessage ("Usage: " + getCommandUsage (sender ), sender );
105118 }
@@ -108,9 +121,13 @@ private void showMessage(String message, ICommandSender sender) {
108121 sender .addChatMessage (new ChatComponentText (message ));
109122 }
110123
111- private void showStreamMessage (LiveChatMessageAuthorDetails author , String message , ICommandSender sender ) {
112- sender .addChatMessage (new ChatComponentText (EnumChatFormatting .RED + "[YTChat] " + (author .getIsChatModerator () ? EnumChatFormatting .BLUE : EnumChatFormatting .WHITE ) +
113- (author .getIsChatOwner () ? EnumChatFormatting .GOLD : EnumChatFormatting .WHITE ) + author .getDisplayName () + EnumChatFormatting .WHITE + ": " + message ));
124+ private void showStreamMessage (LiveChatMessageAuthorDetails author , String message , String id , ICommandSender sender ) {
125+ ChatStyle chatStyle = new ChatStyle ();
126+ sender .addChatMessage (new ChatComponentText (EnumChatFormatting .RED + "[YTChat] " + (author .getIsChatModerator () ? EnumChatFormatting .BLUE : EnumChatFormatting .WHITE ) +
127+ (author .getIsChatOwner () ? EnumChatFormatting .GOLD : EnumChatFormatting .WHITE ) + author .getDisplayName () + EnumChatFormatting .WHITE + ": " + message )
128+ .setChatStyle (chatStyle .setChatClickEvent (new ClickEvent (ClickEvent .Action .RUN_COMMAND , "del " + id )))
129+ .setChatStyle (chatStyle .setChatHoverEvent (new HoverEvent (HoverEvent .Action .SHOW_TEXT , new ChatComponentText (EnumChatFormatting .RED + "Click to delete this message!" ))))
130+ );
114131 }
115132
116133 @ Override
@@ -129,10 +146,11 @@ public boolean isUsernameIndex(String[] args, int index) {
129146 public void onMessageReceived (
130147 LiveChatMessageAuthorDetails author ,
131148 LiveChatSuperChatDetails superChatDetails ,
149+ String id ,
132150 String message ) {
133151
134152 if (!YouTubeConfiguration .getInstance ().getSuperOnly ()) {
135- showStreamMessage (author , message , Minecraft .getMinecraft ().thePlayer );
153+ showStreamMessage (author , message , id , Minecraft .getMinecraft ().thePlayer );
136154 }
137155
138156 if (superChatDetails != null
0 commit comments