Improved Plugin Logic
This commit is contained in:
parent
19679e85f2
commit
e912f64756
90
src/main/java/me/feusalamander/vmessage/Configuration.java
Normal file
90
src/main/java/me/feusalamander/vmessage/Configuration.java
Normal file
@ -0,0 +1,90 @@
|
||||
package me.feusalamander.vmessage;
|
||||
|
||||
import com.moandjiezana.toml.Toml;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class Configuration {
|
||||
private final String messageFormat;
|
||||
private final String joinFormat;
|
||||
private final String leaveFormat;
|
||||
private final String changeFormat;
|
||||
private final boolean messageEnabled;
|
||||
private final boolean joinEnabled;
|
||||
private final boolean leaveEnabled;
|
||||
private final boolean changeEnabled;
|
||||
|
||||
Configuration(Toml config) {
|
||||
messageFormat = config.getString("Message.format", "");
|
||||
joinFormat = config.getString("Join.format", "");
|
||||
leaveFormat = config.getString("Leave.format", "");
|
||||
changeFormat = config.getString("Server-change.format", "");
|
||||
|
||||
messageEnabled = config.getBoolean("Message.enabled", false);
|
||||
joinEnabled = config.getBoolean("Join.enabled", false);
|
||||
leaveEnabled = config.getBoolean("Leave.enabled", false);
|
||||
changeEnabled = config.getBoolean("Server-change.enabled", false);
|
||||
}
|
||||
|
||||
static Configuration load(Path dataDirectory) {
|
||||
Path f = createConfig(dataDirectory);
|
||||
if (f != null) {
|
||||
Toml config = new Toml().read(f.toFile());
|
||||
return new Configuration(config);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Path createConfig(Path dataDirectory){
|
||||
try {
|
||||
if (Files.notExists(dataDirectory)){
|
||||
Files.createDirectory(dataDirectory);
|
||||
}
|
||||
Path f = dataDirectory.resolve("config.toml");
|
||||
if (Files.notExists(f)){
|
||||
try (InputStream stream = Configuration.class.getResourceAsStream("/config.toml")) {
|
||||
Files.copy(Objects.requireNonNull(stream), f);
|
||||
}
|
||||
}
|
||||
return f;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getMessageFormat() {
|
||||
return this.messageFormat;
|
||||
}
|
||||
|
||||
public String getJoinFormat() {
|
||||
return this.joinFormat;
|
||||
}
|
||||
|
||||
public String getLeaveFormat() {
|
||||
return this.leaveFormat;
|
||||
}
|
||||
|
||||
public String getChangeFormat() {
|
||||
return this.changeFormat;
|
||||
}
|
||||
|
||||
public boolean isMessageEnabled() {
|
||||
return this.messageEnabled;
|
||||
}
|
||||
|
||||
public boolean isJoinEnabled() {
|
||||
return this.joinEnabled;
|
||||
}
|
||||
|
||||
public boolean isLeaveEnabled() {
|
||||
return this.leaveEnabled;
|
||||
}
|
||||
|
||||
public boolean isChangeEnabled() {
|
||||
return this.changeEnabled;
|
||||
}
|
||||
}
|
107
src/main/java/me/feusalamander/vmessage/Listeners.java
Normal file
107
src/main/java/me/feusalamander/vmessage/Listeners.java
Normal file
@ -0,0 +1,107 @@
|
||||
package me.feusalamander.vmessage;
|
||||
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||
import com.velocitypowered.api.event.connection.PostLoginEvent;
|
||||
import com.velocitypowered.api.event.player.PlayerChatEvent;
|
||||
import com.velocitypowered.api.event.player.ServerConnectedEvent;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.ServerConnection;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public final class Listeners {
|
||||
private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder()
|
||||
.character('&')
|
||||
.hexColors()
|
||||
.build();
|
||||
private LuckPerms luckPermsAPI;
|
||||
private final Configuration configuration;
|
||||
private final ProxyServer proxyServer;
|
||||
|
||||
Listeners(ProxyServer proxyServer, Configuration configuration) {
|
||||
if (proxyServer.getPluginManager().getPlugin("luckperms").isPresent()){
|
||||
this.luckPermsAPI = LuckPermsProvider.get();
|
||||
}
|
||||
this.configuration = configuration;
|
||||
this.proxyServer = proxyServer;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onMessage(PlayerChatEvent e){
|
||||
if (!configuration.isMessageEnabled()) {
|
||||
return;
|
||||
}
|
||||
Player p = e.getPlayer();
|
||||
String m = e.getMessage();
|
||||
String message = configuration.getMessageFormat()
|
||||
.replace("#player#", p.getUsername())
|
||||
.replace("#message#", m)
|
||||
.replace("#server#", p.getCurrentServer().orElseThrow().getServerInfo().getName());
|
||||
if (luckPermsAPI != null){
|
||||
User user = luckPermsAPI.getPlayerAdapter(Player.class).getUser(p);
|
||||
message = message.replace("#prefix#", Objects.requireNonNull(user.getCachedData().getMetaData().getPrefix()));
|
||||
}
|
||||
final String finalMessage = message;
|
||||
proxyServer.getAllServers().forEach(server -> {
|
||||
if (!Objects.equals(p.getCurrentServer().map(ServerConnection::getServerInfo).orElse(null), server.getServerInfo())){
|
||||
server.sendMessage(SERIALIZER.deserialize(finalMessage));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onJoin(PostLoginEvent e){
|
||||
if (!configuration.isJoinEnabled()) {
|
||||
return;
|
||||
}
|
||||
Player p = e.getPlayer();
|
||||
String message = configuration.getJoinFormat().replace("#player#", p.getUsername());
|
||||
if (luckPermsAPI != null){
|
||||
User user = luckPermsAPI.getPlayerAdapter(Player.class).getUser(p);
|
||||
message = message.replace("#prefix#", Objects.requireNonNull(user.getCachedData().getMetaData().getPrefix()));
|
||||
}
|
||||
proxyServer.sendMessage(SERIALIZER.deserialize(message));
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onLeave(DisconnectEvent e){
|
||||
if (!configuration.isLeaveEnabled()) {
|
||||
return;
|
||||
}
|
||||
Player p = e.getPlayer();
|
||||
String message = configuration.getLeaveFormat()
|
||||
.replace("#player#", p.getUsername());
|
||||
if (luckPermsAPI != null){
|
||||
User user = luckPermsAPI.getPlayerAdapter(Player.class).getUser(p);
|
||||
message = message.replace("#prefix#", Objects.requireNonNull(user.getCachedData().getMetaData().getPrefix()));
|
||||
}
|
||||
proxyServer.sendMessage(SERIALIZER.deserialize(message));
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onChange(ServerConnectedEvent e){
|
||||
if (!configuration.isChangeEnabled()) {
|
||||
return;
|
||||
}
|
||||
e.getPreviousServer().ifPresent(server -> {
|
||||
RegisteredServer actual = e.getServer();
|
||||
Player p = e.getPlayer();
|
||||
String message = configuration.getChangeFormat()
|
||||
.replace("#player#", p.getUsername())
|
||||
.replace("#oldserver#", server.getServerInfo().getName())
|
||||
.replace("#server#", actual.getServerInfo().getName());
|
||||
if (luckPermsAPI != null){
|
||||
User user = luckPermsAPI.getPlayerAdapter(Player.class).getUser(p);
|
||||
message = message.replace("#prefix#", Objects.requireNonNull(user.getCachedData().getMetaData().getPrefix()));
|
||||
}
|
||||
proxyServer.sendMessage(SERIALIZER.deserialize(message));
|
||||
});
|
||||
}
|
||||
}
|
47
src/main/java/me/feusalamander/vmessage/VMessage.java
Normal file
47
src/main/java/me/feusalamander/vmessage/VMessage.java
Normal file
@ -0,0 +1,47 @@
|
||||
package me.feusalamander.vmessage;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.plugin.Dependency;
|
||||
import com.velocitypowered.api.plugin.Plugin;
|
||||
import com.velocitypowered.api.plugin.annotation.DataDirectory;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import org.slf4j.Logger;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@Plugin(
|
||||
id = "vmessage",
|
||||
name = "Vmessage",
|
||||
version = "1.2",
|
||||
description = "A velocity plugin that creates a multi server chat for the network",
|
||||
authors = {"FeuSalamander"},
|
||||
dependencies = { @Dependency(id = "luckperms", optional = true) }
|
||||
)
|
||||
public class VMessage {
|
||||
private final ProxyServer proxy;
|
||||
private final Logger logger;
|
||||
private final Metrics.Factory metricsFactory;
|
||||
private final Path dataDirectory;
|
||||
|
||||
@Inject
|
||||
public VMessage(ProxyServer proxy, Logger logger, Metrics.Factory metricsFactory, @DataDirectory Path dataDirectory) {
|
||||
this.proxy = proxy;
|
||||
this.logger = logger;
|
||||
this.metricsFactory = metricsFactory;
|
||||
this.dataDirectory = dataDirectory;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onProxyInitialization(ProxyInitializeEvent event) {
|
||||
Configuration configuration = Configuration.load(dataDirectory);
|
||||
|
||||
if (configuration == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
metricsFactory.make(this, 16527);
|
||||
proxy.getEventManager().register(this, new Listeners(proxy, configuration));
|
||||
logger.info("Vmessage by FeuSalamander is working !");
|
||||
}
|
||||
}
|
@ -1,161 +0,0 @@
|
||||
package me.feusalamander.vmessage;
|
||||
import com.google.inject.Inject;
|
||||
import com.moandjiezana.toml.Toml;
|
||||
import com.velocitypowered.api.event.connection.DisconnectEvent;
|
||||
import com.velocitypowered.api.event.connection.LoginEvent;
|
||||
import com.velocitypowered.api.event.player.*;
|
||||
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.plugin.Plugin;
|
||||
import com.velocitypowered.api.plugin.annotation.DataDirectory;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
import net.luckperms.api.model.user.User;
|
||||
import org.slf4j.Logger;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Plugin(
|
||||
id = "vmessage",
|
||||
name = "Vmessage",
|
||||
version = "1.2",
|
||||
description = "A velocity plugin that creates a multi server chat for the network",
|
||||
authors = {"FeuSalamander"}
|
||||
)
|
||||
public class vmessage {
|
||||
@Inject
|
||||
private final ProxyServer proxy;
|
||||
@Inject
|
||||
private final Logger logger;
|
||||
@Inject
|
||||
private final Metrics.Factory metricsFactory;
|
||||
@Inject
|
||||
private final @DataDirectory Path dataDirectory;
|
||||
@Inject
|
||||
public vmessage(ProxyServer proxy, Logger logger, Metrics.Factory metricsFactory, @DataDirectory Path dataDirectory) {
|
||||
this.proxy = proxy;
|
||||
this.logger = logger;
|
||||
this.metricsFactory = metricsFactory;
|
||||
this.dataDirectory = dataDirectory;
|
||||
}
|
||||
private String messageraw = "";
|
||||
private String joinraw = "";
|
||||
private String leaveraw = "";
|
||||
private String changeraw = "";
|
||||
private String message = "";
|
||||
private String join = "";
|
||||
private String leave = "";
|
||||
private String change = "";
|
||||
private boolean messageb = false;
|
||||
private boolean joinb = false;
|
||||
private boolean leaveb = false;
|
||||
private boolean changeb = false;
|
||||
@Subscribe
|
||||
private void onProxyInitialization(ProxyInitializeEvent event) {
|
||||
logger.info("Vmessage by FeuSalamander is working !");
|
||||
Metrics metrics = metricsFactory.make(this, 16527);
|
||||
File directory = dataDirectory.toFile();
|
||||
File f = new File(directory, "config.toml");
|
||||
Toml config = new Toml().read(f);
|
||||
createconfig();
|
||||
if(config.getBoolean("Message.enabled"))messageb = true;
|
||||
if(config.getBoolean("Join.enabled"))joinb = true;
|
||||
if(config.getBoolean("Leave.enabled"))leaveb = true;
|
||||
if(config.getBoolean("Server-change.enabled"))changeb = true;
|
||||
messageraw = config.getString("Message.format");
|
||||
joinraw = config.getString("Join.format");
|
||||
leaveraw = config.getString("Leave.format");
|
||||
changeraw = config.getString("Server-change.format");
|
||||
}
|
||||
@Subscribe
|
||||
private void onMessage(PlayerChatEvent e){
|
||||
if(messageb){
|
||||
Player p = e.getPlayer();
|
||||
String m = e.getMessage();
|
||||
message = messageraw.replaceAll("#player#", p.getUsername()).replaceAll("#message#",m).replaceAll("#server#",p.getCurrentServer().get().getServerInfo().getName()).replaceAll("&", "§");
|
||||
if(proxy.getPluginManager().getPlugin("luckperms").isPresent()){
|
||||
LuckPerms api = LuckPermsProvider.get();
|
||||
User user = api.getPlayerAdapter(Player.class).getUser(p);
|
||||
message = message.replaceAll("#prefix#", user.getCachedData().getMetaData().getPrefix().replaceAll("&", "§"));
|
||||
}
|
||||
proxy.getAllServers().forEach(registeredServer -> sendMessage(registeredServer, p));
|
||||
message = "";
|
||||
}
|
||||
}
|
||||
@Subscribe
|
||||
private void onJoin(LoginEvent e){
|
||||
if(joinb){
|
||||
Player p = e.getPlayer();
|
||||
join = joinraw.replaceAll("#player#", p.getUsername());
|
||||
if(proxy.getPluginManager().getPlugin("luckperms").isPresent()){
|
||||
LuckPerms api = LuckPermsProvider.get();
|
||||
User user = api.getPlayerAdapter(Player.class).getUser(p);
|
||||
join = join.replaceAll("#prefix#", user.getCachedData().getMetaData().getPrefix().replaceAll("&", "§"));
|
||||
}
|
||||
proxy.getAllServers().forEach(registeredServer -> registeredServer.sendMessage(Component.text(join)));
|
||||
join = "";
|
||||
}
|
||||
}
|
||||
@Subscribe
|
||||
private void onLeave(DisconnectEvent e){
|
||||
if(leaveb){
|
||||
Player p = e.getPlayer();
|
||||
leave = leaveraw.replaceAll("#player#", p.getUsername());
|
||||
if(proxy.getPluginManager().getPlugin("luckperms").isPresent()){
|
||||
LuckPerms api = LuckPermsProvider.get();
|
||||
User user = api.getPlayerAdapter(Player.class).getUser(p);
|
||||
leave = leave.replaceAll("#prefix#", user.getCachedData().getMetaData().getPrefix().replaceAll("&", "§"));
|
||||
}
|
||||
proxy.getAllServers().forEach(registeredServer -> registeredServer.sendMessage(Component.text(leave)));
|
||||
leave = "";
|
||||
}
|
||||
}
|
||||
@Subscribe
|
||||
private void onChange(ServerConnectedEvent e){
|
||||
if(changeb){
|
||||
Optional<RegisteredServer> old = e.getPreviousServer();
|
||||
RegisteredServer New = e.getServer();
|
||||
Player p = e.getPlayer();
|
||||
if(old.isPresent()){
|
||||
change = changeraw.replaceAll("#player#", p.getUsername()).replaceAll("#oldserver#", old.get().getServerInfo().getName()).replaceAll("#server#", New.getServerInfo().getName());
|
||||
if(proxy.getPluginManager().getPlugin("luckperms").isPresent()){
|
||||
LuckPerms api = LuckPermsProvider.get();
|
||||
User user = api.getPlayerAdapter(Player.class).getUser(p);
|
||||
change = change.replaceAll("#prefix#", user.getCachedData().getMetaData().getPrefix().replaceAll("&", "§"));
|
||||
}
|
||||
proxy.getAllServers().forEach(registeredServer -> registeredServer.sendMessage(Component.text(change)));
|
||||
change = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
private void sendMessage(RegisteredServer s, Player p){
|
||||
if(!(Objects.equals(p.getCurrentServer().get().getServerInfo().getName(), s.getServerInfo().getName()))){
|
||||
s.sendMessage(Component.text(message));
|
||||
}
|
||||
}
|
||||
private void createconfig(){
|
||||
File dataDirectoryFile = this.dataDirectory.toFile();
|
||||
if (!dataDirectoryFile.exists()){
|
||||
dataDirectoryFile.mkdir();
|
||||
}
|
||||
File f = new File(dataDirectoryFile, "config.toml");
|
||||
if(!(f.exists())){
|
||||
try{
|
||||
InputStream file = this.getClass().getResourceAsStream("/config.toml");
|
||||
Files.copy(file, f.toPath());
|
||||
}catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -4,19 +4,19 @@
|
||||
#- "#prefix#" : return the player's luckperms prefix (don't place it if you don't have luckperms on your server)
|
||||
#- "#message#" : return the player's message
|
||||
#- "#server#" : return the player's server name
|
||||
format = "§a(#server#) #prefix# #player# §8§l> §r#message#"
|
||||
format = "&a(#server#) #prefix# #player# &8&l> &r#message#"
|
||||
enabled = true
|
||||
[Join]
|
||||
#place holders:
|
||||
#- "#player#" : return the player name
|
||||
#- "#prefix#" : return the player's luckperms prefix (don't place it if you don't have luckperms on your server)
|
||||
format = "§7#prefix# #player# §ejoined the network"
|
||||
format = "&7#prefix# #player# &ejoined the network"
|
||||
enabled = true
|
||||
[Leave]
|
||||
#place holders:
|
||||
#- "#player#" : return the player name
|
||||
#- "#prefix#" : return the player's luckperms prefix (don't place it if you don't have luckperms on your server)
|
||||
format = "#§7prefix# #player# §eleft the network"
|
||||
format = "#&7prefix# #player# &eleft the network"
|
||||
enabled = true
|
||||
[Server-change]
|
||||
#place holders:
|
||||
@ -24,5 +24,5 @@ enabled = true
|
||||
#- "#prefix#" : return the player's luckperms prefix (don't place it if you don't have luckperms on your server)
|
||||
#- "#oldserver#" : return the previous player's server name
|
||||
#- "#server#" : return the new player's server name
|
||||
format = "§7#prefix# #player# §eleft §c#oldserver# §eto join §a#server#"
|
||||
format = "&7#prefix# #player# &eleft &c#oldserver# &eto join &a#server#"
|
||||
enabled = true
|
Loading…
Reference in New Issue
Block a user