1. I'm not entirely sure how the whole override thing works, could I have more detail? I'm assuming it is as simple as this:
package com.testmod;
import java.util.ArrayList;
import java.util.List;
import eu.copybara.barra.util.*;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.BlockPos;
public class SampleCommand extends CommandBase {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
public List addTabCompletionOptions(ICommandSender arg0, String[] arg1, BlockPos arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean canCommandSenderUse(ICommandSender arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public void execute(ICommandSender arg0, String[] arg1) throws CommandException {
// TODO Auto-generated method stub
new Messages("Hello").send();
}
public List getAliases() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getCommandUsage(ICommandSender arg0) {
// TODO Auto-generated method stub
return "coal";
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "coal";
}
public boolean isUsernameIndex(String[] arg0, int arg1) {
// TODO Auto-generated method stub
return false;
}}
2. Messages class:
package eu.copybara.barra.util;
import net.minecraft.event.ClickEvent;
import net.minecraft.event.HoverEvent;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.fml.client.FMLClientHandler;
import java.util.ArrayList;
public class Messages {
private static IChatComponent CHAT_PREFIX;
public static String SEPARATION_MESSAGE = "\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC\u25AC";
private IChatComponent chatComponent;
private ArrayList<Messages> appendedMessages;
public Messages(String text) {
this.chatComponent = new ChatComponentText(text);
}
public Messages(String text, EnumChatFormatting color) {
this(text);
this.addFormatting(color);
}
public Messages addFormatting(EnumChatFormatting formatting) {
ChatStyle style = this.chatComponent.getChatStyle();
switch (formatting) {
case ITALIC:
style.setItalic(true);
break;
case BOLD:
style.setBold(true);
break;
case UNDERLINE:
style.setUnderlined(true);
break;
case OBFUSCATED:
style.setObfuscated(true);
break;
case STRIKETHROUGH:
style.setStrikethrough(true);
break;
default:
style.setColor(formatting);
break;
}
this.chatComponent.setChatStyle(style);
return this;
}
public Messages appendMessage(Messages message) {
if (this.appendedMessages == null) {
this.appendedMessages = new ArrayList<Messages>();
}
this.appendedMessages.add(message);
if (message.appendedMessages != null) {
this.appendedMessages.addAll(message.appendedMessages);
}
return this;
}
public Messages makeClickable(ClickEvent.Action action, String execute, Messages description) {
ChatStyle style = this.chatComponent.getChatStyle();
style.setChatClickEvent(new ClickEvent(action, execute));
style.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, description.assembleMessage(false)));
this.chatComponent.setChatStyle(style);
return this;
}
public Messages makeLink(String url) {
Messages description = new Messages("Click to visit ", EnumChatFormatting.GRAY);
description
.appendMessage(new Messages(url, EnumChatFormatting.AQUA).addFormatting(EnumChatFormatting.UNDERLINE));
this.makeClickable(ClickEvent.Action.OPEN_URL, url, description);
return this;
}
public Messages makeHover(Messages text) {
ChatStyle style = this.chatComponent.getChatStyle();
style.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, text.assembleMessage(false)));
this.chatComponent.setChatStyle(style);
return this;
}
public void send() {
this.send(false);
}
public void send(boolean prefix) {
try {
FMLClientHandler.instance().getClientPlayerEntity().addChatMessage(this.assembleMessage(prefix));
} catch (Exception e) {
e.printStackTrace();
}
}
protected IChatComponent assembleMessage(boolean prefix) {
IChatComponent result;
if (prefix) {
result = CHAT_PREFIX.createCopy();
} else if (this.appendedMessages == null) {
return this.chatComponent;
} else {
result = new ChatComponentText("");
}
result.appendSibling(this.chatComponent);
if (this.appendedMessages != null) {
for (Messages m : this.appendedMessages) {
result.appendSibling(m.chatComponent);
}
}
return result;
}
public static void printSeparationMessage(EnumChatFormatting color) {
new Messages(SEPARATION_MESSAGE, color).addFormatting(EnumChatFormatting.BOLD).send(false);
}
}
3. I'm more familiar with 1.8 and my goal is to create a special mod which is based around Hypixel, which supports 1.8. 1.9 and 1.10 is new territory for me.