Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Plugin BungeeCord


Czaromirus

Rekomendowane odpowiedzi

Opublikowano

Witam, chcę napisać plugin, który po wykonaniu komendy na np. Lobby, będzie wykonywał daną czynność na jednym z serwerów połączonych przez BC. 

Nie mam zielonego pojęcia jak się do tego zabrać. Jedyne co potrafię, to przenieść gracza z serwera na serwer.

Opublikowano

Znalezione na necie, autor kodu https://github.com/AyushDev03/
Plugin na bungee:

Main

package me.ayush_03.globalexecute;

import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.plugin.Plugin;

public class Main extends Plugin {
	
	public void onEnable() {
		BungeeCord.getInstance().getPluginManager().registerCommand(this, new CommandClass());
		BungeeCord.getInstance().registerChannel("Return");
	}
}

CommandClass:
 

package me.ayush_03.globalexecute;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.plugin.Command;

public class CommandClass extends Command{

	public CommandClass() {
		super("gexecute", "gexecute.admin", "ge");
	}

	@Override
	public void execute(CommandSender sender, String[] args) {
		if (args.length == 0) {
			sender.sendMessage(new TextComponent(ChatColor.RED + "Usage: /gexecute <command>"));
			return;
		}
		
		StringBuilder cmd = new StringBuilder();
		
		for (int i = 0; i < args.length; i++) {
			cmd = cmd.append(args[i] + " ");
		}
		
		Map<String, ServerInfo> servers = BungeeCord.getInstance().getServers();
		
		for (Entry<String, ServerInfo> en : servers.entrySet()) {
			String name = en.getKey();
			ServerInfo all = BungeeCord.getInstance().getServerInfo(name);
			sendToBukkit("command", cmd.toString(), all);
		}
		
		sender.sendMessage(new TextComponent(ChatColor.GREEN + "Command: '/" + cmd + "' has been executed on all servers."));
	}
	
	 private void sendToBukkit(String channel, String message, ServerInfo server) {
	        ByteArrayOutputStream stream = new ByteArrayOutputStream();
	        DataOutputStream out = new DataOutputStream(stream);
	        try {
	            out.writeUTF(channel);
	            out.writeUTF(message);
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        server.sendData("Return", stream.toByteArray());

	    }
}


Plugin na spigot:
Main:
 

package me.ayush_03.globalexecute;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

public class Main extends JavaPlugin implements PluginMessageListener {
	
	public void onEnable() {
		 Bukkit.getMessenger().registerIncomingPluginChannel(this, "Return", this);
	}

	@Override
	public void onPluginMessageReceived(String channel, Player p, byte[] message) {
		
		DataInputStream in = new DataInputStream(new ByteArrayInputStream(message));
		
		try {
			String sub = in.readUTF();
			if (sub.equals("command")) {
				String cmd = in.readUTF();
				System.out.println("[GlobalExecute] Received a command message from BungeeCord, executing it.");
				getServer().dispatchCommand(getServer().getConsoleSender(), cmd);
				
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

Mam nadzieję, że pomogłem ;) jbc. licze na like 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...