Java-кодирование в Minecraft-Forge: Как соединить команды сервера с клиентской стороной, чтобы мгновенно показать изменения в мире?
Я пишу команду, которая будет показывать фейерверк при запуске команды /fireworks
в командной строке Minecraft. Что я должен сделать, в частности, чтобы соединить эту серверную команду с клиентской стороной, чтобы показать фейерверк внутри игры? Я использую world.makefireworks(x,y,z,motionX,motionY,motionZ,compound)
в команде. Заранее спасибо.
1 ответ
Сначала создайте команду. Вот одна из моих команд (выделена для некоторых полезных реализаций, которые вы можете изменить в соответствии с вашими пожеланиями.
Вы должны зарегистрировать его в соответствующей шине событий
/*@EventHandler
public void stop(FMLServerStoppingEvent event) {
WhoTookMyCookies.mainThread.interrupt();
}*/
@EventHandler
public void start(FMLServerStartingEvent event) {
startDatabase();
WhoTookMyCookies.log.warn("Setting up commands");
event.registerServerCommand(new InspectCommand());
}
И сама команда
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import akka.actor.FSM.Event;
import tschallacka.whotookmycookies.WhoTookMyCookies;
import tschallacka.whotookmycookies.player.ExtendedPlayer;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.event.ClickEvent;
import net.minecraft.event.HoverEvent;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.FMLCommonHandler;
public class InspectCommand implements ICommand
{
private final List aliases;
protected String fullEntityName;
protected Entity conjuredEntity;
public InspectCommand()
{
aliases = new ArrayList();
aliases.add("whotookmycookies");
aliases.add("wtmc");
aliases.add("co");
}
@Override
public int compareTo(Object o)
{
return 0;
}
@Override
public String getName()
{
return "whotookmycookies";
}
@Override
public String getCommandUsage(ICommandSender var1)
{
return "whotookmycookies <text>";
}
@Override
public boolean isUsernameIndex(String[] var1, int var2)
{
return true;
}
@Override
public List getAliases() {
return this.aliases;
}
@Override
public void execute(ICommandSender sender, String[] args)
throws CommandException {
World world = sender.getEntityWorld();
if (world.isRemote)
{
}
else
{
if(args.length == 0)
{
sender.addChatMessage(new ChatComponentText("WHO TOOK MY COOKIES! Seriously though. type an argument. type /wtmc help to see available commands"));
return;
}
if(sender instanceof EntityPlayer) {
ExtendedPlayer thedude = ExtendedPlayer.get((EntityPlayer) sender);
if(thedude != null) {
if(args[0].equalsIgnoreCase("help")) {
handleHelpCommand(sender,args);
} }
}
}
// TODO Auto-generated method stub
}
private void handleHelpCommand(ICommandSender sender, String[] args) {
String argument = "default";
if(args.length >= 2) {
argument = args[1];
}
ChatComponentText messageTitle,messageSecond;
argument = argument.toLowerCase().trim();
messageTitle = new ChatComponentText("===================//=========\\\\===================");
messageTitle.getChatStyle().setColor(EnumChatFormatting.DARK_AQUA);
sender.addChatMessage(messageTitle);
switch(argument) {
case "help" :
messageTitle = new ChatComponentText("I NEED HELP WITH MY HELP");
messageTitle.getChatStyle().setColor(EnumChatFormatting.GOLD);
messageSecond = new ChatComponentText(" Srsly halp me!");
messageSecond.getChatStyle().setColor(EnumChatFormatting.GRAY).setItalic(Boolean.valueOf(true));
messageTitle.appendSibling(messageSecond);
sender.addChatMessage(messageTitle);
messageTitle = new ChatComponentText("/wtmc help");
messageTitle.getChatStyle().setColor(EnumChatFormatting.GOLD);
messageSecond = new ChatComponentText(" shows the help file listing all the commands of this blocklogging mod");
messageSecond.getChatStyle().setColor(EnumChatFormatting.WHITE);
messageTitle.appendSibling(messageSecond);
sender.addChatMessage(messageTitle);
messageTitle = new ChatComponentText("/wtmc help help");
messageTitle.getChatStyle().setColor(EnumChatFormatting.GOLD);
messageSecond = new ChatComponentText(" Explains to you that the help command shows the help... really... it does.");
messageSecond.getChatStyle().setColor(EnumChatFormatting.WHITE);
messageTitle.appendSibling(messageSecond);
sender.addChatMessage(messageTitle);
break;
}
}
@Override
public boolean canCommandSenderUse(ICommandSender sender) {
if(sender.getCommandSenderEntity() instanceof EntityPlayer) {
return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().canSendCommands(((EntityPlayer)(sender.getCommandSenderEntity())).getGameProfile());
}
if(sender.getCommandSenderEntity() instanceof EntityPlayerMP) {
return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().canSendCommands(((EntityPlayer)(sender.getCommandSenderEntity())).getGameProfile());
}
return false;
}
@Override
public List addTabCompletionOptions(ICommandSender sender, String[] args,
BlockPos pos) {
// TODO Auto-generated method stub
return null;
}
}