Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sponge platform #59

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion minecraft/bukkit/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ repositories {
}

dependencies {
api(project(":triumph-cmd-core"))
api(project(":triumph-cmd-mc-common"))
compileOnly(libs.spigot)
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
*/
package dev.triumphteam.cmd.bukkit;

import dev.triumphteam.cmd.bukkit.message.BukkitMessageKey;
import dev.triumphteam.cmd.bukkit.message.NoPermissionMessageContext;
import dev.triumphteam.cmd.core.Command;
import dev.triumphteam.cmd.core.SubCommand;
import dev.triumphteam.cmd.core.annotation.Default;
Expand All @@ -33,6 +31,8 @@
import dev.triumphteam.cmd.core.message.context.DefaultMessageContext;
import dev.triumphteam.cmd.core.registry.RegistryContainer;
import dev.triumphteam.cmd.core.sender.SenderMapper;
import dev.triumphteam.cmd.minecraft.message.MinecraftMessageKey;
import dev.triumphteam.cmd.minecraft.message.NoPermissionMessageContext;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -98,7 +98,7 @@ public boolean execute(@NotNull final CommandSender sender, @NotNull final Strin

final String permission = subCommand.getPermission();
if (!permission.isEmpty() && !sender.hasPermission(permission)) {
messageRegistry.sendMessage(BukkitMessageKey.NO_PERMISSION, mappedSender, new NoPermissionMessageContext(getName(), subCommand.getName(), permission));
messageRegistry.sendMessage(MinecraftMessageKey.NO_PERMISSION, mappedSender, new NoPermissionMessageContext(getName(), subCommand.getName(), permission));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
*/
package dev.triumphteam.cmd.bukkit;

import dev.triumphteam.cmd.bukkit.message.BukkitMessageKey;
import dev.triumphteam.cmd.core.BaseCommand;
import dev.triumphteam.cmd.core.CommandManager;
import dev.triumphteam.cmd.core.exceptions.CommandRegistrationException;
Expand All @@ -33,6 +32,7 @@
import dev.triumphteam.cmd.core.registry.RegistryContainer;
import dev.triumphteam.cmd.core.sender.SenderMapper;
import dev.triumphteam.cmd.core.sender.SenderValidator;
import dev.triumphteam.cmd.minecraft.message.MinecraftMessageKey;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Server;
Expand Down Expand Up @@ -174,9 +174,9 @@ private static void setUpDefaults(@NotNull final BukkitCommandManager<CommandSen
manager.registerMessage(MessageKey.NOT_ENOUGH_ARGUMENTS, (sender, context) -> sender.sendMessage("Invalid usage."));
manager.registerMessage(MessageKey.INVALID_ARGUMENT, (sender, context) -> sender.sendMessage("Invalid argument `" + context.getTypedArgument() + "` for type `" + context.getArgumentType().getSimpleName() + "`."));

manager.registerMessage(BukkitMessageKey.NO_PERMISSION, (sender, context) -> sender.sendMessage("You do not have permission to perform this command. Permission needed: `" + context.getPermission() + "`."));
manager.registerMessage(BukkitMessageKey.PLAYER_ONLY, (sender, context) -> sender.sendMessage("This command can only be used by players."));
manager.registerMessage(BukkitMessageKey.CONSOLE_ONLY, (sender, context) -> sender.sendMessage("This command can only be used by the console."));
manager.registerMessage(MinecraftMessageKey.NO_PERMISSION, (sender, context) -> sender.sendMessage("You do not have permission to perform this command. Permission needed: `" + context.getPermission() + "`."));
manager.registerMessage(MinecraftMessageKey.PLAYER_ONLY, (sender, context) -> sender.sendMessage("This command can only be used by players."));
manager.registerMessage(MinecraftMessageKey.CONSOLE_ONLY, (sender, context) -> sender.sendMessage("This command can only be used by the console."));

manager.registerArgument(Material.class, (sender, arg) -> Material.matchMaterial(arg));
manager.registerArgument(Player.class, (sender, arg) -> Bukkit.getPlayer(arg));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@
package dev.triumphteam.cmd.bukkit;

import com.google.common.collect.ImmutableSet;
import dev.triumphteam.cmd.bukkit.message.BukkitMessageKey;
import dev.triumphteam.cmd.core.SubCommand;
import dev.triumphteam.cmd.core.message.MessageRegistry;
import dev.triumphteam.cmd.core.message.context.DefaultMessageContext;
import dev.triumphteam.cmd.core.sender.SenderValidator;
import dev.triumphteam.cmd.minecraft.message.MinecraftMessageKey;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -60,7 +60,7 @@ public boolean validate(

if (Player.class.isAssignableFrom(senderClass) && !(sender instanceof Player)) {
messageRegistry.sendMessage(
BukkitMessageKey.PLAYER_ONLY,
MinecraftMessageKey.PLAYER_ONLY,
sender,
new DefaultMessageContext(subCommand.getParentName(), subCommand.getName())
);
Expand All @@ -69,7 +69,7 @@ public boolean validate(

if (ConsoleCommandSender.class.isAssignableFrom(senderClass) && !(sender instanceof ConsoleCommandSender)) {
messageRegistry.sendMessage(
BukkitMessageKey.CONSOLE_ONLY,
MinecraftMessageKey.CONSOLE_ONLY,
sender,
new DefaultMessageContext(subCommand.getParentName(), subCommand.getName())
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@
*/
package dev.triumphteam.cmd.bukkit;

import dev.triumphteam.cmd.bukkit.annotation.Permission;
import dev.triumphteam.cmd.core.BaseCommand;
import dev.triumphteam.cmd.core.exceptions.SubCommandRegistrationException;
import dev.triumphteam.cmd.core.processor.AbstractSubCommandProcessor;
import dev.triumphteam.cmd.core.registry.RegistryContainer;
import dev.triumphteam.cmd.core.sender.SenderValidator;
import dev.triumphteam.cmd.minecraft.annotation.Permission;
import org.jetbrains.annotations.NotNull;

import java.lang.reflect.Method;
Expand Down
7 changes: 7 additions & 0 deletions minecraft/mc-common/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
plugins {
id("cmds.base-conventions")
}

dependencies {
api(project(":triumph-cmd-core"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package dev.triumphteam.cmd.bukkit.annotation;
package dev.triumphteam.cmd.minecraft.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
Expand All @@ -34,5 +34,8 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Permission {
/**
* @return Permission with nodes separated by periods "."
*/
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,45 +21,45 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package dev.triumphteam.cmd.bukkit.message;
package dev.triumphteam.cmd.minecraft.message;

import dev.triumphteam.cmd.core.message.ContextualKey;
import dev.triumphteam.cmd.core.message.context.MessageContext;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

/**
* {@link BukkitMessageKey} is used for easier registering of messages with different {@link MessageContext}.
* {@link MinecraftMessageKey} is used for easier registering of messages with different {@link MessageContext}.
*
* @param <C> A {@link MessageContext} type, this allows for better customization of the messages.
*/
public final class BukkitMessageKey<C extends MessageContext> extends ContextualKey<C> {
public final class MinecraftMessageKey<C extends MessageContext> extends ContextualKey<C> {

// Default keys
public static final BukkitMessageKey<NoPermissionMessageContext> NO_PERMISSION = of("no.permission", NoPermissionMessageContext.class);
public static final BukkitMessageKey<MessageContext> PLAYER_ONLY = of("player.only", MessageContext.class);
public static final BukkitMessageKey<MessageContext> CONSOLE_ONLY = of("console.only", MessageContext.class);
public static final MinecraftMessageKey<NoPermissionMessageContext> NO_PERMISSION = of("no.permission", NoPermissionMessageContext.class);
public static final MinecraftMessageKey<MessageContext> PLAYER_ONLY = of("player.only", MessageContext.class);
public static final MinecraftMessageKey<MessageContext> CONSOLE_ONLY = of("console.only", MessageContext.class);

private BukkitMessageKey(@NotNull final String key, @NotNull final Class<C> type) {
private MinecraftMessageKey(@NotNull final String key, @NotNull final Class<C> type) {
super(key, type);
}

/**
* Factory method for creating a {@link BukkitMessageKey}.
* Factory method for creating a {@link MinecraftMessageKey}.
*
* @param key The value of the key, normally separated by <code>.</code>.
* @param type The {@link MessageContext} type.
* @param <C> Generic {@link MessageContext} type.
* @return A new {@link BukkitMessageKey} for a specific {@link MessageContext}.
* @return A new {@link MinecraftMessageKey} for a specific {@link MessageContext}.
*/
@NotNull
@Contract("_, _ -> new")
private static <C extends MessageContext> BukkitMessageKey<C> of(@NotNull final String key, @NotNull final Class<C> type) {
return new BukkitMessageKey<>(key, type);
private static <C extends MessageContext> MinecraftMessageKey<C> of(@NotNull final String key, @NotNull final Class<C> type) {
return new MinecraftMessageKey<>(key, type);
}

@Override
public String toString() {
return "BukkitMessageKey{super=" + super.toString() + "}";
return "MinecraftMessageKey{super=" + super.toString() + "}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,21 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package dev.triumphteam.cmd.bukkit.message;
package dev.triumphteam.cmd.minecraft.message;

import dev.triumphteam.cmd.core.message.context.AbstractMessageContext;
import org.jetbrains.annotations.NotNull;

/**
* {@inheritDoc}
*/
public final class NoPermissionMessageContext extends AbstractMessageContext {

private final String permission;

/**
* {@inheritDoc}
*/
public NoPermissionMessageContext(
@NotNull final String command,
@NotNull final String subCommand,
Expand All @@ -39,6 +45,9 @@ public NoPermissionMessageContext(
this.permission = permission;
}

/**
* {@inheritDoc}
*/
public String getPermission() {
return permission;
}
Expand Down
13 changes: 13 additions & 0 deletions minecraft/sponge/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
id("cmds.base-conventions")
id("cmds.library-conventions")
}

repositories {
maven("https://repo.spongepowered.org/maven")
}

dependencies {
api(project(":triumph-cmd-mc-common"))
compileOnly("org.spongepowered:spongeapi:8.0.0")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* MIT License
*
* Copyright (c) 2019-2021 Matt
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package dev.triumphteam.cmd.sponge;

import dev.triumphteam.cmd.core.execution.ExecutionProvider;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.api.Sponge;
import org.spongepowered.plugin.PluginContainer;

/**
* {@inheritDoc}
*/
public final class SpongeAsyncExecutionProvider implements ExecutionProvider {

private final PluginContainer plugin;

/**
* {@inheritDoc}
*/
public SpongeAsyncExecutionProvider(@NotNull final PluginContainer plugin) { this.plugin = plugin; }

/**
* {@inheritDoc}
*/
@Override
public void execute(@NotNull final Runnable command) {
Sponge.asyncScheduler().executor(plugin).submit(command);
}
}
Loading