Skip to content

Commit

Permalink
GH-58 Add basic Parcel locker business logic
Browse files Browse the repository at this point in the history
* Start business logic development

* Continue writing business logic

* Add missing import

* ParcelLockerRepository -> ParcelLockerDatabaseService

* InventoryOpenEvent -> PlayerInteractEvent to fix StackOverflowError

* Add ParcelLockerBreakController

* Add more protection listeners and add timeout for parcel locker placement

* Add economy integration (Vault), create parcel sending GUI, add ItemUtil, fix ParcelLockerPlaceController

* Enhance GUIs

* Fix build

* fixup! Fix build

* Add RandomUtil, ParcelStatus enum

* fixup! Fix build

* Fix gui size and priority selector

* Debugging

* Small fixes

* Make Position class use Integers instead of Doubles

* Fix Parcel locker break using an explosion

* Integrate economy properly

* Fix economy integration, change confirm/cancel items

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/ParcelLockers.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelItemStorageGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelItemStorageGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Remove final, move guiSettings to local variable

* Update src/main/java/com/eternalcode/parcellockers/configuration/implementation/ConfigItem.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerInteractionController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerPlaceController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/ParcelLockers.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/ParcelLockers.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Fix build

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelLockerMainGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerPlaceController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/util/ItemUtil.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/ParcelLockers.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/notification/NotificationAnnouncer.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Shorten the code overall, apply review suggestions

* Change Set to List in repositories, use AbstractDatabaseService in database services

* Add cache modification methods

* Add cache modification methods

* Use parcel name instead of unreadable UUID while suggesting parcels

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/SentParcelsGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelLockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/database/ParcelDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Fix build and tests, apply PR suggestions

* Fix suggestions

* Update ItemUtil.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update ParcelDatabaseServiceIntegrationTest.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update ParcelSendingGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Apply PR suggestions, fix build

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerBreakController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/util/ItemUtil.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerInteractionController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/controller/ParcelLockerInteractionController.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/MainGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelItemStorageGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/gui/SentParcelsGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Apply PR suggestions

* ParcelLocker -> Locker

* Apply checkStyle fixes

* Simplify Gradle

* Update src/main/java/com/eternalcode/parcellockers/parcel/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Apply review changes

* Apply more review changes

* Fix build

* Refactor #findLocker method

* Update src/main/java/com/eternalcode/parcellockers/parcel/gui/ParcelListGUI.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

* Update src/main/java/com/eternalcode/parcellockers/locker/database/LockerDatabaseService.java

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>

---------

Co-authored-by: DMK <81445555+imDMK@users.noreply.github.com>
  • Loading branch information
Jakubk15 and imDMK authored Oct 14, 2023
1 parent 2cab27b commit 563d9f9
Show file tree
Hide file tree
Showing 46 changed files with 1,587 additions and 823 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,14 @@ more.
- [ ] Add translation system, more languages
- [ ] Add delivery codes, so any person knowing the code can pick up the parcel
- [ ] Add delivery time, so the parcel can be picked up only in a specific time
- [ ] Parcel permissions for user
- [ ] Parcel return logic
- [ ] Banned parcel items (configurable)
- [ ] Parcel fee
- [ ] Rewrite database to ORMLite (far in future)
- [ ] Add "business" logic
- [ ] Add more parcel types (fragile, etc...)
- [ ] Add option to config for parcel locker space (e.g. max parcels within a locker)
- [ ] Rewrite Position class to use Integers instead of Doubles
- [ ] Finish GUIs
- [ ] Add more GUIs (admin GUI, parcel create GUI, etc.)
Expand Down
75 changes: 35 additions & 40 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
`java-library`
checkstyle
id("net.minecrell.plugin-yml.bukkit") version "0.6.0"
id("xyz.jpenilla.run-paper") version "2.2.0"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("net.ltgt.errorprone") version "3.1.0"
}

group = "com.eternalcode"
Expand All @@ -29,7 +26,7 @@ repositories {

dependencies {
// minecraft development api
compileOnly("org.spigotmc:spigot-api:1.20.1-experimental-SNAPSHOT")
compileOnly("org.spigotmc:spigot-api:1.20.2-R0.1-SNAPSHOT")
implementation("net.kyori:adventure-platform-bukkit:4.3.0")
implementation("net.kyori:adventure-text-minimessage:4.14.0")
implementation("dev.rollczi.litecommands:bukkit-adventure:2.8.9")
Expand All @@ -40,6 +37,9 @@ dependencies {
// gui library
implementation("dev.triumphteam:triumph-gui:3.1.5")

// economy
compileOnly("com.github.MilkBowl:VaultAPI:1.7.1")

// CDN
implementation("net.dzikoysk:cdn:1.14.4")

Expand Down Expand Up @@ -69,9 +69,6 @@ dependencies {
// panda-utilities
implementation("org.panda-lang:panda-utilities:0.5.2-alpha")

// errorprone
errorprone("com.google.errorprone:error_prone_core:2.21.1")

testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
Expand Down Expand Up @@ -104,49 +101,47 @@ bukkit {
"Plugin that provides functionality of parcel lockers in Minecraft, allowing players to send and receive parcels safely."
website = "https://github.com/EternalCodeTeam/ParcelLockers"
version = "1.0.0-SNAPSHOT"
depend = listOf("Vault")
}

tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
options.setIncremental(true)
}

tasks.withType<ShadowJar> {
archiveFileName.set("ParcelLockers v${project.version} (MC 1.8.8-1.20.x).jar")

exclude(
"org/intellij/lang/annotations/**",
"org/jetbrains/annotations/**",
"META-INF/**",
"javax/**",
)

mergeServiceFiles()
minimize()

val prefix = "com.eternalcode.parcellockers.libs"
listOf(
"panda",
"org.panda_lang",
"net.dzikoysk",
"io.papermc.lib",
"org.bstats",
"dev.rollczi",
"net.kyori",
"okhttp3",
"org.json",
"com.fasterxml"
).forEach { pack ->
relocate(pack, "$prefix.$pack")
}
}

tasks {
runServer {
minecraftVersion("1.20.1")
}
}

tasks.getByName<Test>("test") {
useJUnitPlatform()
test {
useJUnitPlatform()
}

shadowJar {
archiveFileName.set("ParcelLockers v${project.version} (MC 1.8.8-1.20.x).jar")

exclude(
"org/intellij/lang/annotations/**",
"org/jetbrains/annotations/**",
"META-INF/**",
"javax/**",
)

mergeServiceFiles()
minimize()

val prefix = "com.eternalcode.parcellockers.libs"
listOf(
"panda",
"org.panda_lang",
"net.dzikoysk",
"io.papermc.lib",
"org.bstats",
"dev.rollczi",
"net.kyori",
"org.json",
"com.fasterxml"
).forEach { relocate(it, prefix) }
}
}
80 changes: 61 additions & 19 deletions src/main/java/com/eternalcode/parcellockers/ParcelLockers.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package com.eternalcode.parcellockers;

import com.eternalcode.parcellockers.command.ParcelCommand;
import com.eternalcode.parcellockers.command.argument.ParcelArgument;
import com.eternalcode.parcellockers.command.argument.PlayerArgument;
import com.eternalcode.parcellockers.command.handler.InvalidUsage;
import com.eternalcode.parcellockers.command.handler.PermissionMessage;
import com.eternalcode.parcellockers.configuration.ConfigurationManager;
import com.eternalcode.parcellockers.configuration.implementation.PluginConfiguration;
import com.eternalcode.parcellockers.database.DataSourceFactory;
import com.eternalcode.parcellockers.database.ParcelDatabaseService;
import com.eternalcode.parcellockers.database.ParcelLockerDatabaseService;
import com.eternalcode.parcellockers.gui.MainGUI;
import com.eternalcode.parcellockers.gui.ParcelListGUI;
import com.eternalcode.parcellockers.locker.LockerManager;
import com.eternalcode.parcellockers.locker.controller.LockerBreakController;
import com.eternalcode.parcellockers.locker.controller.LockerInteractionController;
import com.eternalcode.parcellockers.locker.controller.LockerPlaceController;
import com.eternalcode.parcellockers.locker.database.LockerDatabaseService;
import com.eternalcode.parcellockers.locker.gui.MainGUI;
import com.eternalcode.parcellockers.notification.NotificationAnnouncer;
import com.eternalcode.parcellockers.parcel.Parcel;
import com.eternalcode.parcellockers.parcel.ParcelManager;
import com.eternalcode.parcellockers.parcellocker.ParcelLockerManager;
import com.eternalcode.parcellockers.parcellocker.repository.ParcelLockerRepository;
import com.eternalcode.parcellockers.parcel.command.ParcelCommand;
import com.eternalcode.parcellockers.parcel.command.argument.ParcelArgument;
import com.eternalcode.parcellockers.parcel.database.ParcelDatabaseService;
import com.eternalcode.parcellockers.parcel.gui.ParcelListGUI;
import com.eternalcode.parcellockers.updater.UpdaterService;
import com.eternalcode.parcellockers.util.legacy.LegacyColorProcessor;
import com.google.common.base.Stopwatch;
Expand All @@ -29,22 +31,28 @@
import io.sentry.Sentry;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.milkbowl.vault.economy.Economy;
import org.bstats.bukkit.Metrics;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Stream;

public final class ParcelLockers extends JavaPlugin {

private LiteCommands<CommandSender> liteCommands;

private BukkitAudiences audiences;

private Economy economy;

@Override
public void onEnable() {
Stopwatch started = Stopwatch.createStarted();
Expand All @@ -59,6 +67,8 @@ public void onEnable() {

ConfigurationManager configManager = new ConfigurationManager(this.getDataFolder());
PluginConfiguration config = configManager.load(new PluginConfiguration());
Server server = this.getServer();

if (config.settings.enableSentry) {
Sentry.init(options -> {
this.getLogger().info("Initializing Sentry...");
Expand All @@ -67,34 +77,48 @@ public void onEnable() {
options.setRelease(this.getDescription().getVersion());
options.setTag("serverVersion", this.getServer().getVersion());
options.setTag("serverSoftware", PaperLib.getEnvironment().getName());
options.setTag("plugins", Arrays.stream(this.getServer().getPluginManager().getPlugins()).toList().toString());
options.setTag("plugins", Arrays.stream(server.getPluginManager().getPlugins()).toList().toString());
this.getLogger().info("Sentry initialized successfully!");
});
}

HikariDataSource dataSource = DataSourceFactory.buildHikariDataSource(config, this.getDataFolder());

ParcelLockerRepository parcelLockerRepository = new ParcelLockerDatabaseService(dataSource);
LockerDatabaseService parcelLockerDatabaseService = new LockerDatabaseService(dataSource);
parcelLockerDatabaseService.updatePositionCache();

ParcelDatabaseService parcelRepository = new ParcelDatabaseService(dataSource);

ParcelManager parcelManager = new ParcelManager(this, config, announcer, parcelRepository, parcelLockerRepository);
ParcelLockerManager parcelLockerManager = new ParcelLockerManager(parcelLockerRepository);
ParcelManager parcelManager = new ParcelManager(this, config, announcer, parcelRepository, parcelLockerDatabaseService);
LockerManager lockerManager = new LockerManager(parcelLockerDatabaseService);

MainGUI mainGUI = new MainGUI(this, this.getServer(), miniMessage, config, parcelRepository, parcelLockerRepository);
ParcelListGUI parcelListGUI = new ParcelListGUI(this, this.getServer(), miniMessage, config, parcelRepository, parcelLockerRepository, mainGUI);

this.liteCommands = LiteBukkitAdventurePlatformFactory.builder(this.getServer(), "parcellockers", false, this.audiences, true)
MainGUI mainGUI = new MainGUI(this, server, miniMessage, config, parcelRepository, parcelLockerDatabaseService);
ParcelListGUI parcelListGUI = new ParcelListGUI(this, server, miniMessage, config, parcelRepository, parcelLockerDatabaseService, mainGUI);
this.liteCommands = LiteBukkitAdventurePlatformFactory.builder(server, "parcellockers", false, this.audiences, true)
.argument(Parcel.class, new ParcelArgument(parcelRepository))
.argument(Player.class, new PlayerArgument(this.getServer(), config))
.argument(Player.class, new PlayerArgument(server, config))
.contextualBind(Player.class, new BukkitOnlyPlayerContextual<>(config.messages.onlyForPlayers))
.commandInstance(
new ParcelCommand(this.getServer(), parcelLockerRepository, announcer, config, mainGUI, parcelListGUI, parcelManager),
new ParcelLockerCommand(configManager, config, announcer)
new ParcelCommand(server, parcelLockerDatabaseService, announcer, config, mainGUI, parcelListGUI, parcelManager),
new ParcelLockersCommand(configManager, config, announcer, miniMessage)
)
.invalidUsageHandler(new InvalidUsage(announcer, config))
.permissionHandler(new PermissionMessage(announcer, config))
.register();

if (!this.setupEconomy()) {
this.getLogger().severe("Disabling due to no Vault dependency found!");
server.getPluginManager().disablePlugin(this);
return;
}

Stream.of(
new LockerInteractionController(parcelLockerDatabaseService, miniMessage, config),
new LockerPlaceController(config, miniMessage, this, parcelLockerDatabaseService, announcer),
new LockerBreakController(parcelLockerDatabaseService, announcer, config.messages)
).forEach(controller -> server.getPluginManager().registerEvents(controller, this));

new Metrics(this, 17677);
new UpdaterService(this.getDescription());

Expand Down Expand Up @@ -132,6 +156,24 @@ private void softwareCheck() {
logger.info("Your server is running on supported software, congratulations!");
logger.info("Server version: " + this.getServer().getVersion());
}

private boolean setupEconomy() {
if (this.getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}

RegisteredServiceProvider<Economy> rsp = this.getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}

this.economy = rsp.getProvider();
return true;
}

public Economy getEconomy() {
return this.economy;
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,25 @@
import dev.rollczi.litecommands.command.execute.Execute;
import dev.rollczi.litecommands.command.permission.Permission;
import dev.rollczi.litecommands.command.route.Route;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

@Route(name = "parcellockers", aliases = {"parcellocker"})
@Permission("parcellockers.admin")
public class ParcelLockerCommand {
public class ParcelLockersCommand {

private final ConfigurationManager configManager;
private final PluginConfiguration config;
private final NotificationAnnouncer announcer;
private final MiniMessage miniMessage;

public ParcelLockerCommand(ConfigurationManager configManager, PluginConfiguration config, NotificationAnnouncer announcer) {
public ParcelLockersCommand(ConfigurationManager configManager, PluginConfiguration config, NotificationAnnouncer announcer, MiniMessage miniMessage) {
this.configManager = configManager;
this.config = config;
this.announcer = announcer;
this.miniMessage = miniMessage;
}

@Async
Expand All @@ -30,4 +35,10 @@ void reload(CommandSender sender) {
this.announcer.sendMessage(sender, this.config.messages.reload);
}

@Execute(route = "give")
void give(Player player) {
ItemStack parcelItem = this.config.settings.parcelLockerItem.toGuiItem(this.miniMessage).getItemStack();
player.getInventory().addItem(parcelItem);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public GuiItem toGuiItem(MiniMessage miniMessage, GuiAction<InventoryClickEvent>
.lore(this.lore.stream().map(element -> RESET_ITEM.append(miniMessage.deserialize(element))).toList())
.flags(ItemFlag.HIDE_ATTRIBUTES)
.flags(ItemFlag.HIDE_ENCHANTS)
.glow(this.glow)
.asGuiItem(action);
}

Expand Down
Loading

0 comments on commit 563d9f9

Please sign in to comment.