Improved Plugin Logic

This commit is contained in:
4drian3d 2022-12-17 15:33:31 -05:00
parent 19679e85f2
commit e912f64756
5 changed files with 248 additions and 165 deletions

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

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

View 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 !");
}
}

View File

@ -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();
}
}
}
}

View File

@ -4,19 +4,19 @@
#- "#prefix#" : return the player's luckperms prefix (don't place it if you don't have luckperms on your server) #- "#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 #- "#message#" : return the player's message
#- "#server#" : return the player's server name #- "#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 enabled = true
[Join] [Join]
#place holders: #place holders:
#- "#player#" : return the player name #- "#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) #- "#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 enabled = true
[Leave] [Leave]
#place holders: #place holders:
#- "#player#" : return the player name #- "#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) #- "#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 enabled = true
[Server-change] [Server-change]
#place holders: #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) #- "#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 #- "#oldserver#" : return the previous player's server name
#- "#server#" : return the new 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 enabled = true