Skip to content

Commit

Permalink
Merge pull request #1 from mineserv-top/v1.1
Browse files Browse the repository at this point in the history
Add settings command & status placeholder. Optimize code.
  • Loading branch information
AlphaMSq authored Nov 12, 2023
2 parents dd80dd8 + 43b1d64 commit dd95ae7
Show file tree
Hide file tree
Showing 11 changed files with 288 additions and 172 deletions.
92 changes: 76 additions & 16 deletions src/main/java/io/greitan/mineserv/GeyserVoice.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,42 @@
package io.greitan.mineserv;

import lombok.Getter;
import lombok.Getter;

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

import io.greitan.mineserv.commands.VoiceCommand;
import io.greitan.mineserv.listeners.PlayerJoinListener;
import io.greitan.mineserv.network.Network;
import io.greitan.mineserv.network.Payloads.BindingPacket;
import io.greitan.mineserv.network.Payloads.LoginPacket;
import io.greitan.mineserv.network.Payloads.ServerSettings;
import io.greitan.mineserv.network.Payloads.UpdateSettingsPacket;
import io.greitan.mineserv.tasks.PositionsTask;
import io.greitan.mineserv.utils.Language;
import io.greitan.mineserv.utils.Logger;
import io.greitan.mineserv.utils.Placeholder;

import java.util.Objects;

import java.util.Map;
import java.util.HashMap;

public class GeyserVoice extends JavaPlugin {
private static @Getter GeyserVoice instance;
private @Getter boolean isConnected = false;
private @Getter String host = "";
private @Getter int port = 0;
private @Getter String serverKey = "";
private @Getter Map<String, Boolean> playerBinds = new HashMap<>();

private String lang;

@Override
public void onEnable() {
instance = this;

lang = getConfig().getString("config.lang");

Language.init(this);

VoiceCommand voiceCommand = new VoiceCommand(this, lang);
Expand All @@ -37,14 +45,14 @@ public void onEnable() {
new PositionsTask(this).runTaskTimer(this, 0, 1);
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this, lang), this);

if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new Placeholder(this).register();
}

this.reload("server");
this.reload();
}

public void reload(String player) {
if (!player.equals("server")) {
Logger.info(Language.getMessage(lang, "plugin-reload-pl").replace("$player", player));
}
public void reload() {
saveDefaultConfig();
reloadConfig();
Logger.info(Language.getMessage(lang, "plugin-config-loaded"));
Expand All @@ -54,29 +62,81 @@ public void reload(String player) {
port = getConfig().getInt("config.port");
serverKey = getConfig().getString("config.server-key");

isConnected = connect(host, port, serverKey, true);
isConnected = connect(true);

int proximityDistance = getConfig().getInt("config.voice.proximity-distance");
Boolean proximityToggle = getConfig().getBoolean("proximity-toggle");
Boolean voiceEffects = getConfig().getBoolean("voice-effects");

updateSettings(proximityDistance, proximityToggle, voiceEffects);
}

public Boolean connect(String host, int port, String serverKey, Boolean force) {
public Boolean connect(Boolean force) {
if (isConnected && !force) return true;

if (Objects.nonNull(host) && Objects.nonNull(serverKey)) {
if (Objects.nonNull(host) && Objects.nonNull(serverKey))
{
String link = "http://" + host + ":" + port;
// Create request data object.
LoginPacket loginPacket = new LoginPacket();
loginPacket.loginKey = serverKey;

isConnected = Network.sendPostRequest(link, loginPacket);
if (isConnected) {
if (isConnected)
{
Logger.info(Language.getMessage(lang, "plugin-connect-connect"));
return true;
} else {
}
else
{
Logger.warn(Language.getMessage(lang, "plugin-connect-disconnect"));
return false;
}
} else {
}
else
{
Logger.warn(Language.getMessage(lang, "plugin-connect-invalid-data"));
return false;
}
}


public Boolean bind(String playerKey, Player player)
{
if(!isConnected || Objects.isNull(host) || Objects.isNull(serverKey) ) return false;
String link = "http://" + host + ":" + port;

getConfig().set("config.players."+player.getName(), playerKey);
saveConfig();

// Create request data object.
BindingPacket bindingPacket = new BindingPacket();
bindingPacket.playerId = player.getEntityId();
bindingPacket.gamertag = player.getName();
bindingPacket.playerKey = playerKey;
bindingPacket.loginKey = serverKey;

boolean bindStatus = Network.sendPostRequest(link, bindingPacket);

playerBinds.put(player.getName(), bindStatus);

return bindStatus;
}

public Boolean updateSettings(int proximityDistance, Boolean proximityToggle, Boolean voiceEffects){
if(!isConnected || Objects.isNull(host) || Objects.isNull(serverKey) ) return false;
String link = "http://" + host + ":" + port;

// Create server settings data object.
ServerSettings serverSettings = new ServerSettings();
serverSettings.proximityDistance = proximityDistance;
serverSettings.proximityToggle = proximityToggle;
serverSettings.voiceEffects = voiceEffects;

// Create request data object.
UpdateSettingsPacket updateSettingsPacket = new UpdateSettingsPacket();
updateSettingsPacket.loginKey = serverKey;
updateSettingsPacket.settings = serverSettings;

return Network.sendPostRequest(link, updateSettingsPacket);
}
}
164 changes: 89 additions & 75 deletions src/main/java/io/greitan/mineserv/commands/VoiceCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
Expand All @@ -12,140 +13,153 @@
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;

import io.greitan.mineserv.GeyserVoice;
import io.greitan.mineserv.network.Network;
import io.greitan.mineserv.network.Payloads.BindingPacket;
import io.greitan.mineserv.utils.Language;
import io.greitan.mineserv.utils.Logger;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;

public class VoiceCommand implements CommandExecutor, TabCompleter {

private final GeyserVoice plugin;
private final String lang;
private boolean isConnected = false;

public VoiceCommand(GeyserVoice plugin, String lang) {
// Get the plugin and lang interfaces.
public VoiceCommand(GeyserVoice plugin, String lang)
{
this.plugin = plugin;
this.lang = lang;
}

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
isConnected = plugin.isConnected();

String host = plugin.getConfig().getString("config.host");
int port = plugin.getConfig().getInt("config.port");
String link = "http://" + host + ":" + port;
String serverKey = plugin.getConfig().getString("config.server-key");

if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length >= 1) {
if (args[0].equalsIgnoreCase("bind") && player.hasPermission("voice.bind") && isConnected) {
String key = args[1];
if(key == null){return false;}

String nick = player.getName();
int id = player.getEntityId();

plugin.getConfig().set("config.players."+player.getName(), key);
plugin.saveConfig();

BindingPacket bindingPacket = new BindingPacket();
bindingPacket.playerId = id;
bindingPacket.gamertag = nick;
bindingPacket.playerKey = key;
bindingPacket.loginKey = serverKey;

Boolean isBinded = Network.sendPostRequest(link, bindingPacket);
if(isBinded){
String msg = Language.getMessage(lang, "cmd-bind-connect");
player.sendMessage(Component.text(msg).color(NamedTextColor.AQUA));
} else {
String msg = Language.getMessage(lang, "cmd-bind-disconnect");
player.sendMessage(Component.text(msg).color(NamedTextColor.YELLOW));
if (args.length >= 1)
{
// Bind command - bind player.
if (args[0].equalsIgnoreCase("bind") && player.hasPermission("voice.bind") && isConnected)
{
if(Objects.nonNull(args[1])){
Boolean isBinded = plugin.bind(args[1], player);
if(isBinded){
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-bind-connect")).color(NamedTextColor.AQUA));
} else {
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-bind-disconnect")).color(NamedTextColor.RED));
}
}
else
{
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-invalid-args")).color(NamedTextColor.RED));
}
return true;
} else if (args[0].equalsIgnoreCase("setup") && player.hasPermission("voice.setup")) {
}
// Setup command - setup the configuration.
else if (args[0].equalsIgnoreCase("setup") && player.hasPermission("voice.setup"))
{
String newHost = args[1];
String newPort = args[2];
String newKey = args[3];

if(newHost != null && newPort != null && newKey != null){
if(Objects.nonNull(newHost) && Objects.nonNull(newPort) && Objects.nonNull(newKey)){
plugin.getConfig().set("config.host", newHost);
plugin.getConfig().set("config.port", newPort);
plugin.getConfig().set("config.server-key", newKey);
plugin.saveConfig();
plugin.reloadConfig();
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-connect")).color(NamedTextColor.AQUA));
plugin.reload();

plugin.reload(player.getName());
return true;
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-setup-success")).color(NamedTextColor.AQUA));
} else {
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-connect")).color(NamedTextColor.AQUA));
return true;
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-setup-invalid-data")).color(NamedTextColor.RED));
}
} else if (args[0].equalsIgnoreCase("connect") && player.hasPermission("voice.connect")) {
if (host != null && serverKey != null) {
Boolean force = Boolean.valueOf(args[1]);
Boolean connected = plugin.connect(host, port, serverKey, force);
if(connected){
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-connect")).color(NamedTextColor.AQUA));
} else {
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-disconnect")).color(NamedTextColor.YELLOW));
}
return true;
}
// Connect command - connect to the VoiceCraft server.
else if (args[0].equalsIgnoreCase("connect") && player.hasPermission("voice.connect"))
{
Boolean force = Boolean.valueOf(args[1]);

Boolean connected = plugin.connect(force);
if(connected){
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-connect")).color(NamedTextColor.AQUA));
} else {
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-invalid-data")).color(NamedTextColor.RED));
return true;
player.sendMessage(Component.text(Language.getMessage(lang, "plugin-connect-disconnect")).color(NamedTextColor.RED));
}
} else if (args[0].equalsIgnoreCase("reload") && player.hasPermission("voice.reload")) {
plugin.reload(player.getName());
}
// Reload command - reload the configs.
else if (args[0].equalsIgnoreCase("reload") && player.hasPermission("voice.reload"))
{
plugin.reload();
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-reload")).color(NamedTextColor.GREEN));
return true;
} else {
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-not-exists")).color(NamedTextColor.GREEN));
return true;
}
else if (args[0].equalsIgnoreCase("settings") && player.hasPermission("voice.settings"))
{
int proximityDistance = 1;
Boolean proximityToggle = true;
Boolean voiceEffects = true;

plugin.updateSettings(proximityDistance, proximityToggle, voiceEffects);
}
// Command select invalid.
else
{
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-invalid-args")).color(NamedTextColor.RED));
}
}
player.sendMessage(Component.text(Language.getMessage(lang, "cmd-invalid-args")).color(NamedTextColor.RED));
return true;
} else if(args.length >= 1) {
if (args[0].equalsIgnoreCase("reload")) {
plugin.reload("server");
}
// Commands runned by console.
else if(args.length >= 1)
{
// Reload command - reload the configs.
if (args[0].equalsIgnoreCase("reload"))
{
plugin.reload();
Logger.log(Component.text(Language.getMessage(lang, "cmd-reload")).color(NamedTextColor.GREEN));
return true;
} else {
}
// Command not for console.
else
{
sender.sendMessage(Component.text(Language.getMessage(lang, "cmd-not-player")).color(NamedTextColor.RED));
return true;
}
} else {
}
// Invalid command arguments.
else
{
sender.sendMessage(Component.text(Language.getMessage(lang, "cmd-invalid-args")).color(NamedTextColor.RED));
return true;
}
return true;
}

@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
if (args.length == 0) {
if (args.length == 0)
{
return Collections.emptyList();
}

List<String> completions = new ArrayList<>();

if (args.length == 1) {
// Main command arguments.
if (args.length == 1)
{
List<String> options = Arrays.asList("bind", "setup", "connect", "reload");
StringUtil.copyPartialMatches(args[0], options, completions);
}

if (args.length == 2 && args[0].equalsIgnoreCase("setup")) {
// Setup command arguments.
if (args.length == 2 && args[0].equalsIgnoreCase("setup"))
{
List<String> options = Arrays.asList("host port key");
StringUtil.copyPartialMatches(args[1], options, completions);
}

if (args.length == 2 && args[0].equalsIgnoreCase("connect")) {
// Connect command arguments.
if (args.length == 2 && args[0].equalsIgnoreCase("connect"))
{
List<String> options = Arrays.asList("true", "false");
StringUtil.copyPartialMatches(args[1], options, completions);
}
Expand Down
Loading

0 comments on commit dd95ae7

Please sign in to comment.