Skip to content

Commit

Permalink
feat: centralize command & more use of api instead of common
Browse files Browse the repository at this point in the history
Start process to centralize command - Not implemented yet
Use more of api to remove class in common especially for ServerPlayer
  • Loading branch information
Yann151924 committed May 10, 2024
1 parent a2a08d2 commit aeb2404
Show file tree
Hide file tree
Showing 66 changed files with 2,062 additions and 776 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,17 @@

import net.kyori.adventure.text.Component;

import java.util.UUID;

public interface ServerPlayer extends Player {

UUID CONSOLE_UUID = new UUID(0,0);

String CONSOLE_NAME = "Console";

void sendMessage(Component message);

boolean hasPermission(String permission);

boolean isConsole();
}
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ subprojects {

repositories {
mavenCentral()
maven {
url "https://libraries.minecraft.net"
}
}

java {
Expand Down
4 changes: 3 additions & 1 deletion bukkit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ repositories {
name = 'sonatype'
url = 'https://oss.sonatype.org/content/groups/public/'
}
maven { url 'https://repo.papermc.io/repository/maven-public/' }

}

dependencies {
implementation project(':common')

compileOnly 'org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT'
compileOnly 'com.destroystokyo.paper:paper-api:1.15.2-R0.1-SNAPSHOT'
api 'net.kyori:adventure-platform-bukkit:4.3.0'
//compile files('libs/spigot-1.7.10-SNAPSHOT-b1657.jar')
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,86 +1,88 @@
package com.mineaurion.aurionchat.bukkit;

import com.mineaurion.aurionchat.bukkit.command.ChatCommand;
import com.mineaurion.aurionchat.bukkit.listeners.ChatListener;
import com.mineaurion.aurionchat.bukkit.listeners.CommandListener;
import com.mineaurion.aurionchat.bukkit.listeners.LoginListener;
import com.mineaurion.aurionchat.common.AbstractAurionChat;
import com.mineaurion.aurionchat.common.config.ConfigurationAdapter;
import com.mineaurion.aurionchat.common.logger.JavaPluginLogger;
import com.mineaurion.aurionchat.common.logger.PluginLogger;
import com.mineaurion.aurionchat.common.plugin.AbstractAurionChat;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import java.nio.file.Path;

public class AurionChat extends AbstractAurionChat {

public final JavaPlugin plugin;
public final Bootstrap bootstrap;

public BukkitAudiences audiences;

private PlayerFactory playerFactory;
public SenderFactory senderFactory;

public AurionChat(JavaPlugin plugin){
this.plugin = plugin;
}
private CommandExecutor commandManager;

public void onEnable(){
getlogger().info("AurionChat Initializing");
audiences = BukkitAudiences.create(plugin);
this.enable();
public AurionChat(Bootstrap bootstrap){
super(new JavaPluginLogger(Bukkit.getLogger()));
this.bootstrap = bootstrap;
}

public void onDisable() {
this.disable();
@Override
protected void registerPlatformListeners() {
PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new LoginListener(this), getBootstrap());
pluginManager.registerEvents(new CommandListener(this), getBootstrap());
pluginManager.registerEvents(new ChatListener(this), getBootstrap());
}

@Override
protected void registerPlatformListeners() {
PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvents(new LoginListener(this), plugin);
pluginManager.registerEvents(new CommandListener(this), plugin);
pluginManager.registerEvents(new ChatListener(this), plugin);
protected void setupSenderFactory() {
this.audiences = BukkitAudiences.create(getBootstrap());
this.senderFactory = new SenderFactory(this);
}

@Override
public ConfigurationAdapter getConfigurationAdapter() {
return new BukkitConfigurationAdapter(this, resolveConfig("config.yml").toFile());
return new BukkitConfigurationAdapter(resolveConfig("config.yml").toFile());
}

public SenderFactory getSenderFactory(){
return this.senderFactory;
}

@Override
protected Path getConfigDirectory() {
return this.plugin.getDataFolder().toPath().toAbsolutePath();
public Bootstrap getBootstrap(){
return this.bootstrap;
}

public Server getServer(){
return bootstrap.getServer();
}

@Override
protected void registerCommands() {
plugin.getCommand("chat").setExecutor(new ChatCommand(this));
PluginCommand command = bootstrap.getCommand("chat");
if(command == null){
getLogger().severe("Unable to register /chat command with the server");
return;
}

this.commandManager = new CommandExecutor(this, command);
this.commandManager.register();
}

@Override
protected void disablePlugin() {
plugin.getServer().getPluginManager().disablePlugin(plugin);
getServer().getPluginManager().disablePlugin(getBootstrap());
}

@Override
public PluginLogger getlogger() {
public PluginLogger getLogger() {
return new JavaPluginLogger(Bukkit.getLogger());
}

public BukkitAudiences getAudiences(){
return audiences;
}

@Override
protected void setupPlayerFactory() {
this.playerFactory = new PlayerFactory(this);
}

@Override
public PlayerFactory getPlayerFactory() {
return playerFactory;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.mineaurion.aurionchat.bukkit;

import com.mineaurion.aurionchat.common.plugin.AurionChatBootstrap;
import org.bukkit.plugin.java.JavaPlugin;

import java.nio.file.Path;

public class Bootstrap extends JavaPlugin implements AurionChatBootstrap {
private final AurionChat plugin;


public Bootstrap(){
this.plugin = new AurionChat(this);
}

@Override
public void onEnable(){
plugin.enable();
}

@Override
public void onDisable() {
plugin.disable();
}

@Override
public Path getConfigDirectory() {
return getDataFolder().toPath().toAbsolutePath();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@

public class BukkitConfigurationAdapter implements ConfigurationAdapter {

private final AurionChat plugin;
private final File file;
private YamlConfiguration configuration;

public BukkitConfigurationAdapter(AurionChat plugin, File file){
this.plugin = plugin;
public BukkitConfigurationAdapter(File file){
this.file = file;
reload();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.mineaurion.aurionchat.bukkit;

import com.mineaurion.aurionchat.common.command.CommandManager;
import org.bukkit.Server;
import org.bukkit.command.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.server.ServerCommandEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.List;


public class CommandExecutor extends CommandManager implements TabExecutor, Listener {

private static final boolean SELECT_ENTITIES_SUPPORTED;

static {
boolean selectEntitesSupported = false;
try {
Server.class.getMethod("selectEntities", CommandSender.class, String.class);
selectEntitesSupported = true;
} catch (NoSuchMethodException e){
// ignore
}
SELECT_ENTITIES_SUPPORTED = selectEntitesSupported;
}

protected final AurionChat plugin;
protected final PluginCommand command;

public CommandExecutor(AurionChat plugin, PluginCommand command){
super(plugin);
this.plugin = plugin;
this.command = command;
}

public void register(){
this.command.setExecutor(this);
this.plugin.getServer().getPluginManager().registerEvents(this, this.plugin.bootstrap);
}

@Override
public boolean onCommand(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, @NonNull String[] args) {
executeCommand(
this.plugin.getSenderFactory().wrap(sender),
label,
Arrays.asList(args)
);
return true;
}

@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
return tabCompleteCommand(plugin.getSenderFactory().wrap(sender), Arrays.asList(args));
}

// Support AurionChat command prefixed with a '/' from the console
@EventHandler(ignoreCancelled = true)
public void onConsoleCommand(ServerCommandEvent e){
if(!(e.getSender() instanceof ConsoleCommandSender)){
return;
}

String buffer = e.getCommand();
if(buffer.isEmpty() || buffer.charAt(0) != '/'){
return;
}

buffer = buffer.substring(1);

String commandLabel;
int firstSpace = buffer.indexOf(' ');
commandLabel = firstSpace == -1 ? buffer : buffer.substring(0, firstSpace);
Command command = this.plugin.getBootstrap().getServer().getCommandMap().getCommand(commandLabel);
if(command != this.command){
return;
}

e.setCommand(buffer);
}

}

This file was deleted.

This file was deleted.

Loading

0 comments on commit aeb2404

Please sign in to comment.