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;
    } 

}
Другие вопросы по тегам