Skip to content

Commit

Permalink
feature: intial work on gui
Browse files Browse the repository at this point in the history
  • Loading branch information
broccolai committed Oct 18, 2023
1 parent 87d6060 commit e8474fc
Show file tree
Hide file tree
Showing 11 changed files with 189 additions and 11 deletions.
1 change: 0 additions & 1 deletion buildSrc/src/main/kotlin/Configurations.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ fun Project.setupShadowJar() {
"net.kyori.event",
"net.kyori.coffee",
"org.objectweb.asm",
"org.flyway",
"broccolai.corn"
)

Expand Down
5 changes: 4 additions & 1 deletion bukkit/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ dependencies {

api(libs.cloud.paper)
api(libs.cloud.extras)
api(libs.corn.minecraft.paper)

api(libs.interfaces.paper)

implementation(libs.h2)
}

tasks {
runServer {
minecraftVersion("1.20")
minecraftVersion("1.20.2")
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package broccolai.tags.bukkit;

import broccolai.tags.api.service.MessageService;
import broccolai.tags.bukkit.commands.BukkitTagsCommand;
import broccolai.tags.bukkit.commands.context.BukkitCommandUser;
import broccolai.tags.bukkit.commands.context.BukkitConsoleCommandUser;
import broccolai.tags.bukkit.commands.context.BukkitPlayerCommandUser;
Expand All @@ -10,6 +11,7 @@
import broccolai.tags.bukkit.integrations.PapiIntegration;
import broccolai.tags.bukkit.listeners.PlayerListener;
import broccolai.tags.core.TagsPlugin;
import broccolai.tags.core.commands.PluginCommand;
import broccolai.tags.core.commands.arguments.TagArgument;
import broccolai.tags.core.commands.arguments.UserArgument;
import broccolai.tags.core.commands.context.CommandUser;
Expand All @@ -31,13 +33,20 @@
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import org.checkerframework.checker.nullness.qual.NonNull;

import java.util.Collection;

public final class BukkitTagsPlatform extends JavaPlugin implements TagsPlatform {

private static final @NonNull Class<? extends Listener>[] BUKKIT_LISTENERS = ArrayUtilities.create(
PlayerListener.class,
BasicIntegration.class
);

private static final @NonNull Collection<Class<? extends PluginCommand>> BUKKIT_COMMANDS = ArrayUtilities.merge(
COMMANDS,
BukkitTagsCommand.class
);

private @MonotonicNonNull TagsPlugin plugin;

@Override
Expand Down Expand Up @@ -69,7 +78,7 @@ public void onEnable() {
}


this.plugin.commands(commandManager, COMMANDS);
this.plugin.commands(commandManager, BUKKIT_COMMANDS);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package broccolai.tags.bukkit.commands;

import broccolai.corn.paper.item.PaperItemBuilder;
import broccolai.tags.api.model.tag.ConstructedTag;
import broccolai.tags.api.model.tag.TagDisplayInformation;
import broccolai.tags.api.model.user.TagsUser;
import broccolai.tags.api.service.UserService;
import broccolai.tags.bukkit.commands.context.BukkitPlayerCommandUser;
import broccolai.tags.bukkit.menu.TagsMenuFactory;
import broccolai.tags.core.commands.PluginCommand;
import broccolai.tags.core.commands.arguments.modes.TagParserMode;
import broccolai.tags.core.commands.context.CommandUser;
import broccolai.tags.core.factory.CloudArgumentFactory;
import cloud.commandframework.Command;
import cloud.commandframework.CommandManager;
import cloud.commandframework.context.CommandContext;
import com.google.inject.Inject;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.incendo.interfaces.paper.PlayerViewer;

public final class BukkitTagsCommand implements PluginCommand {

private final UserService userService;
private final CloudArgumentFactory argumentFactory;
private final TagsMenuFactory tagsMenuFactory;

@Inject
public BukkitTagsCommand(
final @NonNull UserService userService,
final @NonNull CloudArgumentFactory argumentFactory,
final @NonNull TagsMenuFactory tagsMenuFactory
) {
this.userService = userService;
this.argumentFactory = argumentFactory;
this.tagsMenuFactory = tagsMenuFactory;
}

@Override
public void register(@NonNull final CommandManager<@NonNull CommandUser> commandManager) {
Command.Builder<CommandUser> tagsCommand = commandManager.commandBuilder("tags");

commandManager.command(tagsCommand
.literal("test-item")
.permission("tags.command.admin.test-item")
.argument(this.argumentFactory.tag("tag", TagParserMode.SELF))
.handler(this::handleTestItem)
);

commandManager.command(tagsCommand
.literal("menu")
.permission("tags.command.user.menu")
.handler(this::handleMenu)
);
}

private void handleTestItem(final @NonNull CommandContext<CommandUser> context) {
ConstructedTag tag = context.get("tag");
TagDisplayInformation displayInformation = tag.displayInformation();

Material material = Material.matchMaterial(displayInformation.material());

ItemStack item = PaperItemBuilder
.ofType(material)
.customModelData(displayInformation.customModelData())
.build();

BukkitPlayerCommandUser user = context.getSender().cast();
user.player().getInventory().addItem(item);
}

private void handleMenu(final @NonNull CommandContext<CommandUser> context) {
BukkitPlayerCommandUser sender = context.getSender().cast();
TagsUser user = this.userService.get(sender.uuid());

this.tagsMenuFactory.create(user).open(PlayerViewer.of(sender.player()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,8 @@ public UUID uuid() {
return this.player.getUniqueId();
}

public @NonNull Player player() {
return this.player;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package broccolai.tags.bukkit.menu;

import broccolai.corn.paper.item.PaperItemBuilder;
import broccolai.tags.api.model.tag.ConstructedTag;
import broccolai.tags.api.model.user.TagsUser;
import broccolai.tags.api.service.TagsService;
import com.google.inject.Inject;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.incendo.interfaces.core.transform.types.PaginatedTransform;
import org.incendo.interfaces.core.util.Vector2;
import org.incendo.interfaces.paper.PlayerViewer;
import org.incendo.interfaces.paper.element.ItemStackElement;
import org.incendo.interfaces.paper.pane.ChestPane;
import org.incendo.interfaces.paper.type.ChestInterface;

import java.util.List;

public final class TagsMenuFactory {

private final TagsService tagsService;

@Inject
public TagsMenuFactory(final @NonNull TagsService tagsService) {
this.tagsService = tagsService;
}

public ChestInterface create(final @NonNull TagsUser user) {
return ChestInterface.builder()
.addReactiveTransform(this.createTagTransform(user))
.build();
}

private PaginatedTransform<ItemStackElement<ChestPane>, ChestPane, PlayerViewer> createTagTransform(final @NonNull TagsUser user) {
return new PaginatedTransform<>(
Vector2.at(0, 0),
Vector2.at(3, 8),
() -> this.createTagElements(user)
);
}

private List<ItemStackElement<ChestPane>> createTagElements(final @NonNull TagsUser user) {
return this.tagsService.allTags(user)
.stream()
.map(this::createTagElement)
.toList();
}

private ItemStackElement<ChestPane> createTagElement(final @NonNull ConstructedTag tag) {
Material material = Material.matchMaterial(tag.displayInformation().material());
ItemStack item = PaperItemBuilder.ofType(material)
.name(tag.component())
.build();

return ItemStackElement.of(item);
}

}
4 changes: 3 additions & 1 deletion core/src/main/java/broccolai/tags/core/TagsPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.zaxxer.hikari.HikariDataSource;
import org.checkerframework.checker.nullness.qual.NonNull;

import java.util.Collection;

@Singleton
public final class TagsPlugin {

Expand All @@ -43,7 +45,7 @@ public void start() {

public void commands(
final @NonNull CommandManager<@NonNull CommandUser> commandManager,
final @NonNull Class<? extends PluginCommand>[] commands
final @NonNull Collection<Class<? extends PluginCommand>> commands
) {
for (final @NonNull Class<? extends PluginCommand> commandClass : commands) {
this.injector.getInstance(commandClass).register(commandManager);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package broccolai.tags.core.config;

import broccolai.tags.api.model.tag.TagDisplayInformation;
import com.google.inject.Singleton;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.spongepowered.configurate.ConfigurationNode;
Expand Down Expand Up @@ -32,8 +33,18 @@ public final class MainConfiguration implements Configuration {
+ "Permissions will use this id as it's reference. \n"
+ "The name attribute should be a simple one word phrase for selecting tags through commands."
)
public List<TagConfiguration> tags = new ArrayList<TagConfiguration>() {{
this.add(new TagConfiguration(1, "example", false, "<red><bold>example", "Acquired by playing for an hour"));
public List<TagConfiguration> tags = new ArrayList<>() {{
this.add(new TagConfiguration(
1,
"example",
false,
"<red><bold>example",
"Acquired by playing for an hour",
new TagDisplayInformation(
"stick",
5
)
));
}};

//region Configurate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,20 @@ public final class TagConfiguration {
public TagConfiguration() {
}

public TagConfiguration(final int id, final String name, final boolean secret, final String component, final String reason) {
public TagConfiguration(
final int id,
final String name,
final boolean secret,
final String component,
final String reason,
final TagDisplayInformation displayInformation
) {
this.id = id;
this.name = name;
this.secret = secret;
this.component = component;
this.reason = reason;
this.displayInformation = displayInformation;
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package broccolai.tags.core.util;

import com.google.inject.Module;
import org.checkerframework.checker.nullness.qual.NonNull;

import java.util.ArrayDeque;
Expand All @@ -19,10 +18,11 @@ private ArrayUtilities() {
return entries;
}

public static Collection<Module> merge(final @NonNull Module[] initial, final @NonNull Module... extra) {
Deque<Module> modules = new ArrayDeque<>(Arrays.asList(initial));
@SafeVarargs
public static <T> Collection<T> merge(final @NonNull T[] initial, final @NonNull T... extra) {
Deque<T> modules = new ArrayDeque<>(Arrays.asList(initial));

for (final Module module : extra) {
for (final T module : extra) {
modules.addFirst(module);
}

Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.conf
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ versions = {
# Incendo
http4j = "1.3"
cloud = "1.8.4"
interfaces = "1.0.0-SNAPSHOT"

# Kyori
adventure = "4.14.0"
Expand Down Expand Up @@ -82,6 +83,7 @@ dependencies = {
cloud-paper = {group = "cloud.commandframework", name = "cloud-paper", version.ref = "cloud"}
cloud-velocity = {group = "cloud.commandframework", name = "cloud-velocity", version.ref = "cloud"}
cloud-extras = {group = "cloud.commandframework", name = "cloud-minecraft-extras", version.ref = "cloud"}
interfaces-paper = {group = "org.incendo.interfaces", name = "interfaces-paper", version.ref = "interfaces"}

# Kyori
adventure-api = {group = "net.kyori", name = "adventure-api", version.ref = "adventure"}
Expand All @@ -104,6 +106,7 @@ dependencies = {
# Misc
corn-misc = {group = "broccolai.corn", name = "corn-misc", version.ref = "corn"}
corn-context = {group = "broccolai.corn", name = "corn-context", version.ref = "corn"}
corn-minecraft-paper = {group = "broccolai.corn", name = "corn-minecraft-paper", version.ref = "corn"}
slf4j = {group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j"}
caffeine = {group = "com.github.ben-manes.caffeine", name = "caffeine", version.ref = "caffeine"}

Expand Down

0 comments on commit e8474fc

Please sign in to comment.