测试版
This commit is contained in:
commit
888fa18418
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea/modules.xml
|
||||||
|
.idea/jarRepositories.xml
|
||||||
|
.idea/compiler.xml
|
||||||
|
.idea/libraries/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
||||||
|
/.idea/
|
||||||
|
/out/
|
37
pom.xml
Normal file
37
pom.xml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>BungeeWarpPro</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>public-rpg</id>
|
||||||
|
<url>https://repo.aurora-pixels.com/repository/public-rpg/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot-api</artifactId>
|
||||||
|
<version>1.12.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.server.bungeecord</groupId>
|
||||||
|
<artifactId>BungeeCord</artifactId>
|
||||||
|
<version>1.12.2</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
46
src/main/java/me/Demon/BungeeWarpPro/Main.java
Normal file
46
src/main/java/me/Demon/BungeeWarpPro/Main.java
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package me.Demon.BungeeWarpPro;
|
||||||
|
|
||||||
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
|
import me.Demon.BungeeWarpPro.atp.AtpCommand;
|
||||||
|
import me.Demon.BungeeWarpPro.libs.YamlConfig;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
|
import net.md_5.bungee.config.Configuration;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Main extends Plugin implements Listener {
|
||||||
|
|
||||||
|
public static YamlConfig yamlConfig;
|
||||||
|
public static Main plugin;
|
||||||
|
private static Main instance;
|
||||||
|
public static List<String> Bungee_Warp_List = new ArrayList<>();
|
||||||
|
public HashMap<String, ByteArrayDataOutput> outputHashMap = new HashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
plugin = this;
|
||||||
|
instance = this;
|
||||||
|
yamlConfig = new YamlConfig("config.yml", plugin);
|
||||||
|
yamlConfig.saveDefaultConfig();
|
||||||
|
Configuration section = yamlConfig.getConfig().getSection("bungeewarp");
|
||||||
|
if(section != null){
|
||||||
|
Bungee_Warp_List.addAll(section.getKeys());
|
||||||
|
for (String warp_name : Bungee_Warp_List) {
|
||||||
|
System.out.print("# "+warp_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getProxy().registerChannel("bungee:warp");
|
||||||
|
getProxy().getPluginManager().registerListener(this,this);
|
||||||
|
// 关于BC跨服Tpa
|
||||||
|
getProxy().getPluginManager().registerCommand(this, new AtpCommand());
|
||||||
|
ProxyServer.getInstance().registerChannel("bungee:atp");
|
||||||
|
|
||||||
|
}
|
||||||
|
public static Main getInstance(){
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
120
src/main/java/me/Demon/BungeeWarpPro/atp/AtpCommand.java
Normal file
120
src/main/java/me/Demon/BungeeWarpPro/atp/AtpCommand.java
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
package me.Demon.BungeeWarpPro.atp;
|
||||||
|
|
||||||
|
|
||||||
|
import me.Demon.BungeeWarpPro.Main;
|
||||||
|
import net.md_5.bungee.api.CommandSender;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import net.md_5.bungee.api.plugin.Command;
|
||||||
|
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class AtpCommand extends Command implements TabExecutor {
|
||||||
|
|
||||||
|
public static Map<ProxiedPlayer, ProxiedPlayer> tpaMap = new HashMap<>();
|
||||||
|
public static Map<ProxiedPlayer, ProxiedPlayer> playerMap = new HashMap<>();
|
||||||
|
|
||||||
|
public AtpCommand() {
|
||||||
|
super("atp");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender commandSender, String[] args) {
|
||||||
|
if (!(commandSender instanceof ProxiedPlayer)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ProxiedPlayer player = (ProxiedPlayer) commandSender;
|
||||||
|
if (args.length == 0) {
|
||||||
|
TpaUtil.sendHelpMessage(player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String target = args[0];
|
||||||
|
if (target.equalsIgnoreCase("accept")) {
|
||||||
|
accept(player);
|
||||||
|
} else if (target.equalsIgnoreCase("deny")) {
|
||||||
|
deny(player);
|
||||||
|
} else {
|
||||||
|
ProxiedPlayer player1 = ProxyServer.getInstance().getPlayer(target);
|
||||||
|
if (player1 == null) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§c§l!§8§l] §7在战争领域大区中未找到 §a" + target));
|
||||||
|
} else if (player.getUniqueId().equals(player1.getUniqueId())) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§c§l!§8§l] §7目标玩家不能是自己喔"));
|
||||||
|
} else {
|
||||||
|
String server_name = player1.getServer().getInfo().getName();
|
||||||
|
System.out.print("目标所在区服: " + server_name);
|
||||||
|
if (server_name.contains("chkdsc")) {
|
||||||
|
tpa(player, player1, player1.getServer().getInfo());
|
||||||
|
} else {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§c§l!§8§l] §7未在战争领域服务器中找到 §a" + target));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void tpa(ProxiedPlayer player, ProxiedPlayer target, ServerInfo serverInfo) {
|
||||||
|
tpaMap.put(player, target);
|
||||||
|
playerMap.put(target, player);
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§a§l!§8§l] §7传送请求已发送至 §6" + target.getName()));
|
||||||
|
TpaUtil.sendTargetMessage(player, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void accept(ProxiedPlayer player) {
|
||||||
|
ProxiedPlayer player1 = playerMap.get(player);
|
||||||
|
if (player1 == null || !player1.isConnected()) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§e§l!§8§l] §7没有待处理的传送请求"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§e§l!§8§l] §7你接受了 §6" + player1.getName() + " §7的传送请求"));
|
||||||
|
TpaUtil.sendAcceptMessage(player1, player1);
|
||||||
|
tpaMap.remove(player1);
|
||||||
|
playerMap.remove(player);
|
||||||
|
ServerInfo serverInfo = player.getServer().getInfo();
|
||||||
|
boolean flag = false;
|
||||||
|
if (player1.getServer().getInfo().equals(serverInfo)) {
|
||||||
|
flag = true;
|
||||||
|
} else {
|
||||||
|
player1.connect(serverInfo);
|
||||||
|
}
|
||||||
|
boolean finalFlag = flag;
|
||||||
|
TpaUtil.sendMessageToServer("accept", serverInfo, (dataOutputStream -> {
|
||||||
|
try {
|
||||||
|
dataOutputStream.writeUTF(player.getUniqueId().toString());
|
||||||
|
dataOutputStream.writeUTF(player1.getUniqueId().toString());
|
||||||
|
dataOutputStream.writeBoolean(finalFlag);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void deny(ProxiedPlayer player) {
|
||||||
|
ProxiedPlayer player1 = playerMap.get(player);
|
||||||
|
if (player1 == null || !player1.isConnected()) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§e§l!§8§l] §7没有待处理的传送请求"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§c§l!§8§l] §7你拒绝 §6" + player1.getName() + " §7的传送请求"));
|
||||||
|
TpaUtil.sendDenyMessage(player1, player);
|
||||||
|
tpaMap.remove(player1);
|
||||||
|
playerMap.remove(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<String> onTabComplete(CommandSender commandSender, String[] strings) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
Map<String, ServerInfo> hashMap = Main.getInstance().getProxy().getServers();
|
||||||
|
for (String key : hashMap.keySet()) {
|
||||||
|
String serverInfo = hashMap.get(key).getName();
|
||||||
|
if (serverInfo.contains("chkdsc")) {
|
||||||
|
hashMap.get(key).getPlayers().forEach(player -> list.add(player.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
49
src/main/java/me/Demon/BungeeWarpPro/atp/TpaUtil.java
Normal file
49
src/main/java/me/Demon/BungeeWarpPro/atp/TpaUtil.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package me.Demon.BungeeWarpPro.atp;
|
||||||
|
|
||||||
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
|
import com.google.common.io.ByteStreams;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.chat.ClickEvent.Action;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
public class TpaUtil {
|
||||||
|
|
||||||
|
public static void sendHelpMessage(ProxiedPlayer player) {
|
||||||
|
player.sendMessage(new TextComponent("§7[§6战争领域§7] §f正确用法: §a/atp [玩家名]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendTargetMessage(ProxiedPlayer player, ProxiedPlayer target) {
|
||||||
|
target.sendMessage(new TextComponent("§8§l[§e§l!§8§l] §7玩家 §6" + player.getName() + " §7正在向你发起传送请求."));
|
||||||
|
TextComponent air = new TextComponent(" ");
|
||||||
|
TextComponent acceptComponent = new TextComponent("§7[§a同意传送§7]");
|
||||||
|
acceptComponent.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/atp accept"));
|
||||||
|
acceptComponent.setHoverEvent(new HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{new TextComponent("§e确认操作")}));
|
||||||
|
TextComponent denyComponent = new TextComponent("§7[§c拒绝传送§7]");
|
||||||
|
denyComponent.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/atp deny"));
|
||||||
|
denyComponent.setHoverEvent(new HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{new TextComponent("§e确认操作")}));
|
||||||
|
air.addExtra(acceptComponent);
|
||||||
|
air.addExtra(" ");
|
||||||
|
air.addExtra(denyComponent);
|
||||||
|
target.sendMessage(air);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendAcceptMessage(ProxiedPlayer player, ProxiedPlayer target) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§a§l!§8§l] §7玩家 §6" + target + " §7接受了你的传送请求"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendDenyMessage(ProxiedPlayer player, ProxiedPlayer target) {
|
||||||
|
player.sendMessage(new TextComponent("§8§l[§c§l!§8§l] §7玩家 §6" + target + " §7拒绝了你的传送请求"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendMessageToServer(String channel, ServerInfo server, Consumer<ByteArrayDataOutput> consumer) {
|
||||||
|
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
|
||||||
|
dataOutput.writeUTF(channel);
|
||||||
|
consumer.accept(dataOutput);
|
||||||
|
server.sendData("bungee:atp", dataOutput.toByteArray());
|
||||||
|
}
|
||||||
|
}
|
55
src/main/java/me/Demon/BungeeWarpPro/libs/YamlConfig.java
Normal file
55
src/main/java/me/Demon/BungeeWarpPro/libs/YamlConfig.java
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package me.Demon.BungeeWarpPro.libs;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
|
import net.md_5.bungee.config.Configuration;
|
||||||
|
import net.md_5.bungee.config.ConfigurationProvider;
|
||||||
|
import net.md_5.bungee.config.YamlConfiguration;
|
||||||
|
|
||||||
|
public class YamlConfig {
|
||||||
|
|
||||||
|
private final File configFile;
|
||||||
|
|
||||||
|
private final String fileName;
|
||||||
|
|
||||||
|
private final Plugin plugin;
|
||||||
|
|
||||||
|
private final File folder;
|
||||||
|
|
||||||
|
private static Configuration config;
|
||||||
|
|
||||||
|
public YamlConfig(String fileName, Plugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.fileName = fileName;
|
||||||
|
this.folder = plugin.getDataFolder();
|
||||||
|
this.configFile = new File(this.folder, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveDefaultConfig() {
|
||||||
|
if (!this.folder.exists())
|
||||||
|
this.folder.mkdirs();
|
||||||
|
try {
|
||||||
|
if (!this.configFile.exists())
|
||||||
|
Files.copy(this.plugin.getResourceAsStream(this.fileName), this.configFile.toPath());
|
||||||
|
loadConfig();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadConfig() throws IOException {
|
||||||
|
config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(this.configFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveConfig() throws IOException {
|
||||||
|
ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, this.configFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Configuration getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
1
src/main/resources/config.yml
Normal file
1
src/main/resources/config.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
BungeeWarp: {}
|
3
src/main/resources/plugin.yml
Normal file
3
src/main/resources/plugin.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
name: BungeeWarpPro
|
||||||
|
main: me.Demon.BungeeWarpPro.Main
|
||||||
|
version: 1.0.1
|
Loading…
Reference in New Issue
Block a user