4 Commits
Author SHA1 Message Date
redtea af920884aa Fix ItemsAdder give, new capacity key
- fix '/nodrop give' command for giving itemsadder's items
now in capacity you may use itemsadder tag for key:
"namespace:id": [ 27, 28, 29]
2025-12-11 01:06:45 +03:00
redtea 48b3955add Fix for IA and 1.21.X
Fix gettings itemsadder items
Fix minimessages parser for 1.21.X
Replace NBT provider to FastNBT
2025-12-08 18:14:33 +03:00
redtea 50bb40d701 v1.1.0 - 1.21 support, itemsadder fix
1.21.X support, update messages.yml, replace kotlin libs to java libs, itemsadder material search fix, documented (no) ignoreConfirm command, onDrag handle in singlepage gui, colorful name fix in singlepage
2025-11-06 02:05:22 +03:00
redtea 5cd86f3850 1.0.5 HOTFIX 2024-05-23 12:34:19 +03:00
18 changed files with 332 additions and 120 deletions

No files matched your search

+16 -18
View File
@@ -2,11 +2,10 @@ plugins {
id 'java' id 'java'
id("com.github.johnrengelman.shadow") version "7.0.0" id("com.github.johnrengelman.shadow") version "7.0.0"
id("xyz.jpenilla.run-paper") version "2.1.0" id("xyz.jpenilla.run-paper") version "2.1.0"
id 'org.jetbrains.kotlin.jvm' version '1.9.23'
} }
group = 'me.redtea' group = 'me.redtea'
version = '1.0.4-HOTFIX' version = '1.1.2-STABLE'
repositories { repositories {
mavenCentral() mavenCentral()
@@ -33,22 +32,26 @@ repositories {
maven { maven {
url 'https://jitpack.io' url 'https://jitpack.io'
} }
maven {
url = "https://repo.triumphteam.dev/snapshots/"
}
} }
dependencies { dependencies {
runtimeOnly("org.jetbrains.kotlin:kotlin-reflect:1.9.23")
implementation "org.jetbrains:annotations:24.0.0" implementation "org.jetbrains:annotations:24.0.0"
compileOnly "org.projectlombok:lombok:1.18.26" compileOnly "org.projectlombok:lombok:1.18.26"
annotationProcessor 'org.projectlombok:lombok:1.18.26' annotationProcessor 'org.projectlombok:lombok:1.18.26'
compileOnly "com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT" compileOnly "com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT"
// implementation "me.mattstudios.utils:matt-framework:1.4" // implementation "tech.carcadex:kotlinbukkitkit-commands:1.0.0.4b-SNAPSHOT"
implementation "tech.carcadex:kotlinbukkitkit-commands:1.0.0.4b-SNAPSHOT" implementation "de.tr7zw:item-nbt-api:2.15.3"
implementation "de.tr7zw:item-nbt-api:2.12.3" implementation "net.kyori:adventure-api:4.25.0"
implementation "net.kyori:adventure-api:4.14.0"
implementation "net.kyori:adventure-platform-bukkit:4.3.0" implementation "net.kyori:adventure-platform-bukkit:4.3.0"
implementation files("libs/MiniMessages.jar") compileOnly("net.kyori:adventure-text-minimessage:4.25.0")
implementation "dev.triumphteam:triumph-gui:3.1.2" implementation "dev.triumphteam:triumph-gui:3.1.13"
compileOnly "com.github.LoneDev6:API-ItemsAdder:3.5.0b" implementation "dev.triumphteam:triumph-cmd-bukkit:2.0.0-BETA-4"
implementation("beer.devs:FastNbt-jar:1.4.15")
compileOnly "com.github.LoneDev6:API-ItemsAdder:3.6.1"
compileOnly files("libs/nodropxforgebridge-1.4.jar") compileOnly files("libs/nodropxforgebridge-1.4.jar")
} }
@@ -68,11 +71,7 @@ tasks.withType(JavaCompile).configureEach {
} }
} }
compileKotlin {
kotlinOptions {
jvmTarget=1.8
}
}
processResources { processResources {
def props = [version: version] def props = [version: version]
@@ -85,9 +84,8 @@ processResources {
shadowJar { shadowJar {
relocate 'de.tr7zw.changeme.nbtapi', 'me.redtea.nodropx.libs.tr7zw.nbt' relocate 'de.tr7zw', 'me.redtea.nodropx.libs.tr7zw'
relocate 'de.tr7zw.annotations', 'me.redtea.nodropx.libs.tr7zw.annotations' relocate 'dev.triumphteam', 'me.redtea.nodropx.libs.triumphteam'
relocate 'dev.triumphteam', 'me.redtea.nodropx.libs.gui'
relocate 'org.checkerframework', 'me.redtea.nodropx.libs.message.oskarsmc.libs.checker' relocate 'org.checkerframework', 'me.redtea.nodropx.libs.message.oskarsmc.libs.checker'
relocate 'org.intellij', 'me.redtea.nodropx.libs.intellij' relocate 'org.intellij', 'me.redtea.nodropx.libs.intellij'
relocate 'org.jetbrains', 'me.redtea.nodropx.libs.jetbrains'} relocate 'org.jetbrains', 'me.redtea.nodropx.libs.jetbrains'}
+90 -36
View File
@@ -1,7 +1,12 @@
package me.redtea.nodropx; package me.redtea.nodropx;
import kotlin.Unit; import dev.triumphteam.cmd.bukkit.BukkitCommandManager;
import kotlin.jvm.functions.Function1; import dev.triumphteam.cmd.core.argument.keyed.Argument;
import dev.triumphteam.cmd.core.argument.keyed.ArgumentKey;
import dev.triumphteam.cmd.core.message.MessageKey;
import dev.triumphteam.cmd.core.suggestion.SuggestionContext;
import dev.triumphteam.cmd.core.suggestion.SuggestionKey;
import dev.triumphteam.cmd.core.suggestion.SuggestionResolver;
import lombok.Getter; import lombok.Getter;
import me.redtea.nodropx.api.facade.NoDropAPI; import me.redtea.nodropx.api.facade.NoDropAPI;
import me.redtea.nodropx.api.facade.impl.NoDropXFacade; import me.redtea.nodropx.api.facade.impl.NoDropXFacade;
@@ -26,6 +31,7 @@ import me.redtea.nodropx.menu.Menu;
import me.redtea.nodropx.menu.dropconfirm.DropConfirmMFGui; import me.redtea.nodropx.menu.dropconfirm.DropConfirmMFGui;
import me.redtea.nodropx.menu.facade.MenuFacade; import me.redtea.nodropx.menu.facade.MenuFacade;
import me.redtea.nodropx.menu.facade.impl.MenuFacadeImpl; import me.redtea.nodropx.menu.facade.impl.MenuFacadeImpl;
import me.redtea.nodropx.menu.facade.impl.NullMenuFacadeImpl;
import me.redtea.nodropx.menu.storage.pages.MFPageGui; import me.redtea.nodropx.menu.storage.pages.MFPageGui;
import me.redtea.nodropx.menu.storage.singlepage.SinglePageController; import me.redtea.nodropx.menu.storage.singlepage.SinglePageController;
import me.redtea.nodropx.menu.storage.singlepage.SinglePageGui; import me.redtea.nodropx.menu.storage.singlepage.SinglePageGui;
@@ -47,7 +53,7 @@ import me.redtea.nodropx.service.event.impl.EventServiceImpl;
import me.redtea.nodropx.service.material.ItemStackService; import me.redtea.nodropx.service.material.ItemStackService;
import me.redtea.nodropx.service.material.impl.ItemStackServiceImpl; import me.redtea.nodropx.service.material.impl.ItemStackServiceImpl;
import me.redtea.nodropx.service.nbt.NBTService; import me.redtea.nodropx.service.nbt.NBTService;
import me.redtea.nodropx.service.nbt.impl.Tr7zwNBTServiceImpl; import me.redtea.nodropx.service.nbt.impl.FastNBTServiceImpl;
import me.redtea.nodropx.service.nodrop.NoDropService; import me.redtea.nodropx.service.nodrop.NoDropService;
import me.redtea.nodropx.service.nodrop.impl.NoDropServiceImpl; import me.redtea.nodropx.service.nodrop.impl.NoDropServiceImpl;
import me.redtea.nodropx.service.respawn.RespawnService; import me.redtea.nodropx.service.respawn.RespawnService;
@@ -59,14 +65,17 @@ import me.redtea.nodropx.util.FoliaSupportedUtils;
import me.redtea.nodropx.util.UpdateChecker; import me.redtea.nodropx.util.UpdateChecker;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import tech.carcadex.kotlinbukkitkit.commands.manager.CommandManager; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
@@ -112,7 +121,7 @@ public final class NoDropX extends JavaPlugin {
noDropCosmeticService.load(YamlConfiguration.loadConfiguration(textContext.getCosmetics())); noDropCosmeticService.load(YamlConfiguration.loadConfiguration(textContext.getCosmetics()));
dropConfirmService = getConfig().getBoolean("confirmThrowNoDropItem") ? new DropConfirmServiceImpl() : new DropConfirmNull(); dropConfirmService = getConfig().getBoolean("confirmThrowNoDropItem") ? new DropConfirmServiceImpl() : new DropConfirmNull();
NBTService nbtService = new Tr7zwNBTServiceImpl(); NBTService nbtService = new FastNBTServiceImpl();
noDropService = new NoDropServiceImpl(nbtService, noDropCosmeticService); noDropService = new NoDropServiceImpl(nbtService, noDropCosmeticService);
NoDropItemFactory noDropItemFactory = new NoDropItemFactoryImpl(noDropService); NoDropItemFactory noDropItemFactory = new NoDropItemFactoryImpl(noDropService);
EventService eventService = new EventServiceImpl(noDropService); EventService eventService = new EventServiceImpl(noDropService);
@@ -149,25 +158,57 @@ public final class NoDropX extends JavaPlugin {
Bukkit.getServicesManager().register(NoDropAPI.class, Bukkit.getServicesManager().register(NoDropAPI.class,
noDropAPI, this, ServicePriority.Normal); noDropAPI, this, ServicePriority.Normal);
CommandManager commandManager = CommandManager.get(this); // CommandManager commandManager = CommandManager.get(this);
commandManager.message("#no-perm", sender -> { // commandManager.message("#no-perm", sender -> {
messages.get("noPerms").send(sender); // messages.get("noPerms").send(sender);
return Unit.INSTANCE; // return Unit.INSTANCE;
// });
// commandManager.message("#for-players-only", sender -> {
// messages.get("noConsole").send(sender);
// return Unit.INSTANCE;
// });
// commandManager.message("#no-such-player", sender -> {
// messages.get("noExists").send(sender);
// return Unit.INSTANCE;
// });
// commandManager.message("#no-such-player", sender -> {
// messages.get("usage").send(sender);
// return Unit.INSTANCE;
// });
// commandManager.tabComplete("#materials", input -> itemStackService.allMaterials());
// commandManager.register(new NoDropCommand(messages, noDropAPI, menuFacade, this,
// itemStackService, dropConfirmService, eventService, allNoDropService));
final BukkitCommandManager<CommandSender> commandManager = BukkitCommandManager.create(this, builder -> {
}); });
commandManager.message("#for-players-only", sender -> {
messages.get("noConsole").send(sender);
return Unit.INSTANCE;
}); commandManager.registerSuggestion(SuggestionKey.of("allmaterials"),
commandManager.message("#no-such-player", sender -> { new SuggestionResolver.Simple<CommandSender>() {
messages.get("noExists").send(sender); @Override
return Unit.INSTANCE; public @NotNull List<String> resolve(@NotNull SuggestionContext<CommandSender> context) {
}); return itemStackService.allMaterials();
commandManager.message("#no-such-player", sender -> { }
});
commandManager.registerMessage(MessageKey.TOO_MANY_ARGUMENTS, (sender, context) -> {
messages.get("usage").send(sender); messages.get("usage").send(sender);
return Unit.INSTANCE;
}); });
commandManager.tabComplete("#materials", input -> itemStackService.allMaterials()); commandManager.registerMessage(MessageKey.UNKNOWN_COMMAND, (sender, context) -> {
commandManager.register(new NoDropCommand(messages, noDropAPI, menuFacade, this, messages.get("usage").send(sender);
});
commandManager.registerMessage(MessageKey.NOT_ENOUGH_ARGUMENTS, (sender, context) -> {
messages.get("usage").send(sender);
});
commandManager.registerMessage(MessageKey.INVALID_ARGUMENT, (sender, context) -> {
messages.get("error").send(sender);
});
commandManager.registerCommand(new NoDropCommand(messages, noDropAPI, menuFacade, this,
itemStackService, dropConfirmService, eventService, allNoDropService)); itemStackService, dropConfirmService, eventService, allNoDropService));
bStatsInit(); bStatsInit();
printCredits(); printCredits();
@@ -175,24 +216,32 @@ public final class NoDropX extends JavaPlugin {
} }
private MenuFacade initMenus() { private MenuFacade initMenus() {
CachedMenu personalStorageCachedMenu; try {
if (Objects.requireNonNull(getConfig().getString("personalStorageType")).equalsIgnoreCase("SINGLE_PAGE")) { CachedMenu personalStorageCachedMenu;
SinglePageGui singlePageGui = new SinglePageGui(messages, personalStorageRepo); if (Objects.requireNonNull(getConfig().getString("personalStorageType")).equalsIgnoreCase("SINGLE_PAGE")) {
personalStorageCachedMenu = singlePageGui; SinglePageGui singlePageGui = new SinglePageGui(messages, personalStorageRepo);
Bukkit.getPluginManager().registerEvents(new SinglePageGuiHandler(new SinglePageController(noDropService, personalStorageCachedMenu = singlePageGui;
singlePageGui, personalStorageRepo, foliaSupportedUtils), singlePageGui), this); Bukkit.getPluginManager().registerEvents(new SinglePageGuiHandler(new SinglePageController(noDropService,
} else singlePageGui, personalStorageRepo, foliaSupportedUtils), singlePageGui), this);
personalStorageCachedMenu = new MFPageGui(messages, personalStorageRepo, noDropService, itemStackService, this); } else
personalStorageCachedMenu = new MFPageGui(messages, personalStorageRepo, noDropService, itemStackService, this);
Menu confirmMenu = new DropConfirmMFGui(messages, dropConfirmService, this); Menu confirmMenu = new DropConfirmMFGui(messages, dropConfirmService, this);
return new MenuFacadeImpl(personalStorageCachedMenu, confirmMenu); return new MenuFacadeImpl(personalStorageCachedMenu, confirmMenu);
} catch (Exception e) {
Bukkit.getLogger().severe(e.getMessage());
e.printStackTrace();
printConsoleLine("&4Can not use menus on this server!");
}
return new NullMenuFacadeImpl();
} }
private ItemStackService initItemStackService() { private ItemStackService initItemStackService() {
ItemStackService result = new ItemStackServiceImpl(); ItemStackService result = new ItemStackServiceImpl();
if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) { if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) {
supportItemsAdder = true; supportItemsAdder = true;
getLogger().info(ChatColor.GREEN + "ItemsAdder found! Registering a CustomStack provider for it."); printConsoleLine("ItemsAdder found! Registering a CustomStack provider for it.");
result.registerProvider(new ItemsAdderProvider()); result.registerProvider(new ItemsAdderProvider());
} }
result.registerProvider(new ItemStackProviderDefault()); result.registerProvider(new ItemStackProviderDefault());
@@ -205,10 +254,10 @@ public final class NoDropX extends JavaPlugin {
} }
new UpdateChecker(this, 111485, foliaSupportedUtils).getVersion(version -> { new UpdateChecker(this, 111485, foliaSupportedUtils).getVersion(version -> {
if (this.getDescription().getVersion().equals(version)) { if (this.getDescription().getVersion().equals(version)) {
getLogger().info(ChatColor.GREEN + "There is not a new update available."); printConsoleLine("There is not a new update available.");
} else { } else {
getLogger().info(ChatColor.YELLOW + "There is a new update available: " + ChatColor.GOLD + version); printConsoleLine("&eThere is a new update available: " + ChatColor.GOLD + version);
getLogger().info(ChatColor.YELLOW + "Download it from " + ChatColor.GOLD + "https://www.spigotmc.org/resources/nodropx.111485/"); printConsoleLine("&eDownload it from " + ChatColor.GOLD + "https://www.spigotmc.org/resources/nodropx.111485/");
} }
}); });
} }
@@ -222,7 +271,7 @@ public final class NoDropX extends JavaPlugin {
private void printCredits() { private void printCredits() {
printCreditLine("&a************************************************************"); printCreditLine("&a************************************************************");
printCreditLine("&a* &2&lNoDrop&a&lX&e version &6" + getDescription().getVersion() + "&7 (uses KotlinBukkitKIT v. 1.0.4)"); printCreditLine("&a* &2&lNoDrop&a&lX&e version &6" + getDescription().getVersion());
printCreditLine("&a* &eBy &citzRedTea"); printCreditLine("&a* &eBy &citzRedTea");
printCreditLine("&a* &eDetected bukkit version &6" + Bukkit.getBukkitVersion()); printCreditLine("&a* &eDetected bukkit version &6" + Bukkit.getBukkitVersion());
printCreditLine("&a* &esupport HEX colors " + (supportHEX ? "&2YES" : "&4NO")); printCreditLine("&a* &esupport HEX colors " + (supportHEX ? "&2YES" : "&4NO"));
@@ -230,6 +279,11 @@ public final class NoDropX extends JavaPlugin {
printCreditLine("&a************************************************************"); printCreditLine("&a************************************************************");
} }
private void printConsoleLine(String s) {
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&',
"&e[&2&lNoDrop&a&lX&e] &f" + s));
}
private void printCreditLine(String s) { private void printCreditLine(String s) {
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', s)); Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', s));
} }
@@ -1,5 +1,11 @@
package me.redtea.nodropx.command; package me.redtea.nodropx.command;
import dev.triumphteam.cmd.bukkit.annotation.Permission;
import dev.triumphteam.cmd.core.annotations.Command;
import dev.triumphteam.cmd.core.annotations.NamedArguments;
import dev.triumphteam.cmd.core.annotations.Optional;
import dev.triumphteam.cmd.core.annotations.Suggestion;
import dev.triumphteam.cmd.core.suggestion.SuggestionContext;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.val; import lombok.val;
import me.redtea.nodropx.NoDropX; import me.redtea.nodropx.NoDropX;
@@ -12,20 +18,23 @@ import me.redtea.nodropx.service.event.EventService;
import me.redtea.nodropx.service.material.ItemStackService; import me.redtea.nodropx.service.material.ItemStackService;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.*;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* Main command of plugin * Main command of plugin
* <p>/nodrop - usage</p> * <p>/nodrop - usage</p>
* <p>/nodrop give [Player] [Material] [Amount (optional)]</p> * <p>/nodrop give [Player] [Material] [Amount (optional)]</p>
*/ */
@Command(name = "nodrop") @Command("nodrop")
@RequiredArgsConstructor @RequiredArgsConstructor
public class NoDropCommand { public class NoDropCommand {
private final Messages messages; private final Messages messages;
@@ -37,42 +46,50 @@ public class NoDropCommand {
private final EventService eventService; private final EventService eventService;
private final AllNoDropService allNoDropService; private final AllNoDropService allNoDropService;
@Default @Command
public void onDefault(final CommandSender sender) { public void onDefault(final CommandSender sender) {
messages.get("usage").send(sender); messages.get("usage").send(sender);
} }
@SubCommand(name = "give")
@Permission(perm = "nodropx.give")
@TabComplete(complete = {"#players", "#materials", "#range:1-64"}) @Command("give")
@Permission("nodropx.give")
@NamedArguments("query-parameters")
//@TabComplete(complete = {"#players", "#materials", "#range:1-64"})
public void onGive(final CommandSender sender, public void onGive(final CommandSender sender,
final Player player, final Player player,
final String material, @Suggestion("allmaterials") final String material,
@Optional final Integer amount) { @Optional final Integer amount) {
try { try {
noDropAPI.giveNoDrop(player, material, amount == null || amount == 0 ? 1 : amount); ItemStack item = noDropAPI.getNoDrop(material, amount == null || amount == 0 ? 1 : amount);
player.getInventory().addItem(item);
messages.get("give.success") messages.get("give.success")
.replaceAll("%item%", material) .replaceAll("%item%", material)
.replaceAll("%player%", player.getName()) .replaceAll("%player%", player.getName())
.replaceAll("%amount%", amount == null ? "1" : amount.toString()) .replaceAll("%amount%", amount == null ? "1" : amount.toString())
.send(sender); .send(sender);
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace();
messages.get("give.fail").send(sender); messages.get("give.fail").send(sender);
} }
} }
@SubCommand(name = "reload") @Command("reload")
@Permission(perm = "nodropx.reload") @Permission("nodropx.reload")
public void onReload(final CommandSender sender) { public void onReload(final CommandSender sender) {
long time = new Date().getTime(); long time = new Date().getTime();
plugin.onReload(); plugin.onReload();
messages.get("reload").replaceAll("%time%", String.valueOf(new Date().getTime() - time)).send(sender); messages.get("reload").replaceAll("%time%", String.valueOf(new Date().getTime() - time)).send(sender);
} }
@SubCommand(name = "giveStorage") @Command("givestorage")
@Permission(perm = "nodropx.giveStorage") @Permission("nodropx.giveStorage")
@TabComplete(complete = {"#players", "#materials", "#range:1-64"}) @NamedArguments("query-parameters")
//@TabComplete(complete = {"#players", "#materials", "#range:1-64"})
public void onGiveStorage(final CommandSender sender, public void onGiveStorage(final CommandSender sender,
final String playerName, final String playerName,
final String material, final String material,
@@ -96,14 +113,14 @@ public class NoDropCommand {
} }
@SubCommand(name = "ignoreConfirm") @Command("ignoreconfirm")
@Permission(perm = "nodropx.ignoreConfirm") @Permission("nodropx.ignoreConfirm")
public void onIgnoreConfirm(final CommandSender sender, @Optional Player target) { public void onIgnoreConfirm(final CommandSender sender, @Optional Player target) {
if(target == null) { if(target == null) {
if(!(sender instanceof Player)) { if(!(sender instanceof Player)) {
sender.sendMessage("player only"); messages.get("error").send(sender);
return;
} else { } else {
messages.get("ignoreConfirm.on").send(sender);
confirmService.forceConfirm((Player) sender); confirmService.forceConfirm((Player) sender);
} }
} else { } else {
@@ -111,17 +128,17 @@ public class NoDropCommand {
} }
} }
@SubCommand(name = "ignoreConfirmTimed") @Command("ignoreconfirmtimed")
@Permission(perm = "nodropx.ignoreConfirm.timed") @Permission("nodropx.ignoreConfirm.timed")
public void onIgnoreConfirmTimed(final CommandSender sender, Integer sec, @Optional Player target) { public void onIgnoreConfirmTimed(final CommandSender sender, Integer sec, @Optional Player target) {
if(target == null) { if(target == null) {
if(!(sender instanceof Player)) { if(!(sender instanceof Player)) {
sender.sendMessage("player only"); messages.get("error").send(sender);
return;
} else { } else {
confirmService.forceConfirm((Player) sender); confirmService.forceConfirm((Player) sender);
try { try {
Bukkit.getScheduler().runTaskLater(plugin,() -> confirmService.removeForceConfirm((Player) sender),20L*sec); Bukkit.getScheduler().runTaskLater(plugin,() -> confirmService.removeForceConfirm((Player) sender),20L*sec);
messages.get("ignoreConfirm.on").send(sender);
} catch (UnsupportedOperationException e) { } catch (UnsupportedOperationException e) {
sender.sendMessage(ChatColor.RED + "This operation didn't supports on your environment"); sender.sendMessage(ChatColor.RED + "This operation didn't supports on your environment");
} }
@@ -136,22 +153,22 @@ public class NoDropCommand {
} }
} }
@SubCommand(name = "noIgnoreConfirm") @Command("noignoreconfirm")
@Permission(perm = "nodropx.noIgnoreConfirm") @Permission("nodropx.noIgnoreConfirm")
public void onNoIgnoreConfirm(final CommandSender sender, @Optional Player target) { public void onNoIgnoreConfirm(final CommandSender sender, @Optional Player target) {
if(target == null) { if(target == null) {
if(!(sender instanceof Player)) { if(!(sender instanceof Player)) {
sender.sendMessage("player only"); messages.get("error").send(sender);
return;
} else { } else {
confirmService.removeForceConfirm((Player) sender); confirmService.removeForceConfirm((Player) sender);
messages.get("ignoreConfirm.off").send(sender);
} }
} else { } else {
confirmService.removeForceConfirm(target); confirmService.removeForceConfirm(target);
} }
} }
@SubCommand(name = "applyHand") @Command("applyhand")
@Permission(perm = "nodropx.applyhand") @Permission("nodropx.applyhand")
public void onApplyHand(final Player sender) { public void onApplyHand(final Player sender) {
try { try {
val event = eventService.callPlayerChangeNoDropEvent(sender, sender.getInventory().getItemInMainHand(), true); val event = eventService.callPlayerChangeNoDropEvent(sender, sender.getInventory().getItemInMainHand(), true);
@@ -162,9 +179,8 @@ public class NoDropCommand {
} }
} }
@SubCommand(name = "gui") @Command(value = "gui", alias = "storage")
@Aliases(aliases = "storage") @Permission("nodropx.gui")
@Permission(perm = "nodropx.gui")
public void onGui(final Player sender) { public void onGui(final Player sender) {
menuFacade.openPersonalStorage(sender); menuFacade.openPersonalStorage(sender);
} }
@@ -177,9 +193,10 @@ public class NoDropCommand {
return null; return null;
} }
@SubCommand(name = "giveallnodrop") @Command("giveallnodrop")
@Permission(perm = "nodropx.giveallnodrop") @Permission("nodropx.giveallnodrop")
@TabComplete(complete = {"#players", "#materials", "#range:1-64"}) @NamedArguments("query-parameters")
// @TabComplete(complete = {"#players", "#materials", "#range:1-64"})
public void onGiveAllNoDrop(final CommandSender sender, public void onGiveAllNoDrop(final CommandSender sender,
final Player player, final Player player,
final String material, final String material,
@@ -26,8 +26,14 @@ public class FoliaSupporter {
@SneakyThrows @SneakyThrows
public void run(RespawnService respawnService, Plugin plugin) { public void run(RespawnService respawnService, Plugin plugin) {
try { try {
boolean isFolia = false;
try {
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
isFolia = true;
} catch (ClassNotFoundException ignored) {}
String version = ((JsonObject) new JsonParser().parse(new FileReader("version_history.json"))).get("currentVersion").getAsString(); String version = ((JsonObject) new JsonParser().parse(new FileReader("version_history.json"))).get("currentVersion").getAsString();
if(!version.toLowerCase().contains("folia") && !plugin.getConfig().getBoolean("forceUseFoliaPatches")) { if(!isFolia && !version.toLowerCase().contains("folia") && !plugin.getConfig().getBoolean("forceUseFoliaPatches")
&& !(Bukkit.getName().toLowerCase().contains("folia"))) {
return; return;
} }
runningOnFolia = true; runningOnFolia = true;
@@ -56,7 +62,7 @@ public class FoliaSupporter {
} }
} }
try { try {
Thread.sleep(1000); Thread.sleep(500);
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
@@ -46,6 +47,11 @@ public class PlayerHandler implements Listener {
respawnService.giveSavedItems(event.getPlayer()); respawnService.giveSavedItems(event.getPlayer());
} }
@EventHandler
public void onJoin(PlayerJoinEvent event) {
respawnService.giveSavedItems(event.getPlayer());
}
@EventHandler @EventHandler
public void onQuit(PlayerQuitEvent event) { public void onQuit(PlayerQuitEvent event) {
menuFacade.clearCache(event.getPlayer()); menuFacade.clearCache(event.getPlayer());
@@ -8,6 +8,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
public class SinglePageGuiHandler implements Listener { public class SinglePageGuiHandler implements Listener {
private final SinglePageController controller; private final SinglePageController controller;
@@ -19,6 +20,13 @@ public class SinglePageGuiHandler implements Listener {
} }
@EventHandler
public void onDrag(InventoryDragEvent event) {
if(gui.isStorageGui(event.getInventory())) {
controller.onDrag(event);
}
}
@EventHandler @EventHandler
public void onClick(InventoryClickEvent event) { public void onClick(InventoryClickEvent event) {
@@ -0,0 +1,47 @@
package me.redtea.nodropx.menu.facade.impl;
import me.redtea.nodropx.menu.CachedMenu;
import me.redtea.nodropx.menu.facade.MenuFacade;
import org.bukkit.entity.Player;
public class NullMenuFacadeImpl implements MenuFacade {
@Override
public CachedMenu noDropStorage() {
return new CachedMenu() {
@Override
public void clearCache(Player player) {
}
@Override
public void clearAllCache() {
}
@Override
public void open(Player player) {
}
};
}
@Override
public void openPersonalStorage(Player player) {
}
@Override
public void openConfirmDrop(Player player) {
}
@Override
public void clearCache(Player player) {
}
@Override
public void clearAllCache() {
}
}
@@ -5,10 +5,10 @@ import lombok.RequiredArgsConstructor;
import me.redtea.nodropx.libs.carcadex.repo.MutableRepo; import me.redtea.nodropx.libs.carcadex.repo.MutableRepo;
import me.redtea.nodropx.service.nodrop.NoDropService; import me.redtea.nodropx.service.nodrop.NoDropService;
import me.redtea.nodropx.util.FoliaSupportedUtils; import me.redtea.nodropx.util.FoliaSupportedUtils;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.*;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.Arrays; import java.util.Arrays;
@@ -30,16 +30,28 @@ public class SinglePageController {
if(clickActions.contains(event.getAction()) && !(noDropService.isNoDrop(event.getCurrentItem()))) { if(clickActions.contains(event.getAction()) && !(noDropService.isNoDrop(event.getCurrentItem()))) {
event.setCancelled(true); event.setCancelled(true);
} }
foliaCheck(event.getInventory(), event.getWhoClicked(), event);
}
public void onDrag(InventoryDragEvent event) {
if((event.getNewItems().entrySet().stream().anyMatch(it -> !noDropService.isNoDrop(it.getValue())))) {
event.setCancelled(true);
}
foliaCheck(event.getInventory(), event.getWhoClicked(), event);
}
private void foliaCheck(Inventory inventory, HumanEntity whoClicked, InventoryEvent event) {
foliaSupportedUtils.runTask(() -> { foliaSupportedUtils.runTask(() -> {
for(ItemStack itemStack : event.getInventory()) { for(ItemStack itemStack : inventory) {
if (itemStack != null && !noDropService.isNoDrop(itemStack)) { if (itemStack != null && !noDropService.isNoDrop(itemStack)) {
event.getWhoClicked().getInventory().addItem(itemStack); whoClicked.getInventory().addItem(itemStack);
event.getInventory().remove(itemStack); inventory.remove(itemStack);
((Player) event.getWhoClicked()).updateInventory(); ((Player) whoClicked).updateInventory();
} }
} }
}); });
} }
public void onClose(InventoryCloseEvent event) { public void onClose(InventoryCloseEvent event) {
@@ -26,7 +26,13 @@ public class SinglePageGui implements CachedMenu {
player.openInventory(cache.get(player.getUniqueId())); player.openInventory(cache.get(player.getUniqueId()));
return; return;
} }
Inventory gui = Bukkit.createInventory(null, 54, MD5ColorUtils.translateHexColorCodes(messages.get("gui.personalStorage.title").asUnparsedString())); Inventory gui;
try {
gui = Bukkit.createInventory(null, 54, messages.get("gui.personalStorage.title").asComponent());
}
catch (Throwable e) {
gui = Bukkit.createInventory(null, 54, MD5ColorUtils.translateHexColorCodes(messages.get("gui.personalStorage.title").asUnparsedString()));
}
for(ItemStack item : personalStorageRepo.get(player.getUniqueId()).orElse(new ArrayList<>())) if(item != null) gui.addItem(item); for(ItemStack item : personalStorageRepo.get(player.getUniqueId()).orElse(new ArrayList<>())) if(item != null) gui.addItem(item);
cache.put(player.getUniqueId(), gui); cache.put(player.getUniqueId(), gui);
@@ -5,17 +5,21 @@ import dev.lone.itemsadder.api.ItemsAdder;
import me.redtea.nodropx.model.materialprovider.ItemStackProvider; import me.redtea.nodropx.model.materialprovider.ItemStackProvider;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class ItemsAdderProvider implements ItemStackProvider { public class ItemsAdderProvider implements ItemStackProvider {
@Override @Override
public ItemStack get(String s) { public ItemStack get(String s) {
return CustomStack.getInstance(s).getItemStack(); CustomStack stack = CustomStack.getInstance(s);
return (stack != null) ? stack.getItemStack().clone() : null;
} }
@Override @Override
public List<String> allMaterials() { public List<String> allMaterials() {
return ItemsAdder.getAllItems().stream().map(CustomStack::getNamespacedID).collect(Collectors.toList()); if((ItemsAdder.getAllItems() == null) || ItemsAdder.getAllItems().isEmpty()) return Collections.emptyList();
return ItemsAdder.getAllItems().stream().map(CustomStack::getNamespacedID).filter(s -> !s.startsWith("_iainternal")).collect(Collectors.toList());
} }
} }
@@ -1,5 +1,6 @@
package me.redtea.nodropx.service.capasity.impl; package me.redtea.nodropx.service.capasity.impl;
import beer.devs.fastnbt.nms.nbt.NItem;
import me.redtea.nodropx.libs.carcadex.repo.Repo; import me.redtea.nodropx.libs.carcadex.repo.Repo;
import me.redtea.nodropx.libs.carcadex.repo.impl.yaml.YamlRepo; import me.redtea.nodropx.libs.carcadex.repo.impl.yaml.YamlRepo;
import me.redtea.nodropx.service.capasity.CapacityService; import me.redtea.nodropx.service.capasity.CapacityService;
@@ -7,24 +8,19 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import java.io.File; import java.io.File;
import java.util.*; import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class CapacityServiceImpl implements CapacityService { public class CapacityServiceImpl implements CapacityService {
private final Repo<String, List<Integer>> capacityRepo; private final Repo<String, List<Integer>> capacityRepo;
private final Map<String, Integer> customModelDataRequired = new HashMap<>();
public CapacityServiceImpl(Plugin plugin) { public CapacityServiceImpl(Plugin plugin) {
capacityRepo = new YamlRepo<>( capacityRepo = new YamlRepo<>(
new File(plugin.getDataFolder(), "capacity.yml").toPath(), new File(plugin.getDataFolder(), "capacity.yml").toPath(),
plugin, plugin,
conf -> conf.getKeys(false).stream().collect(Collectors.toMap( conf -> conf.getKeys(false).stream().collect(Collectors.toMap(
value -> { value -> value,
if(value.contains("->")) {
String[] args = value.split("->");
customModelDataRequired.put(args[0], Integer.parseInt(args[1]));
return args[0];
} else return value;
},
conf::getIntegerList)) conf::getIntegerList))
); );
} }
@@ -32,17 +28,18 @@ public class CapacityServiceImpl implements CapacityService {
@Override @Override
public List<Integer> get(ItemStack item) { public List<Integer> get(ItemStack item) {
String key = item.getType().name(); String key = item.getType().name();
Optional<List<Integer>> result = capacityRepo.get(key);
if(!result.isPresent()) { if(NItem.hasNBT(item)) {
return Collections.emptyList(); NItem nItem = NItem.of(item);
} if(nItem.hasKey("itemsadder")) {
if(customModelDataRequired.containsKey(key)) { key = nItem.getCompound("itemsadder").getString("namespace") + ":" + nItem.getCompound("itemsadder").getString("id");
int cmi = customModelDataRequired.get(key); } else if(item.hasItemMeta() && item.getItemMeta().hasCustomModelData()) {
if(!item.getItemMeta().hasCustomModelData() || item.getItemMeta().getCustomModelData() != cmi) { key += "->" + item.getItemMeta().getCustomModelData();
return Collections.emptyList();
} }
} }
return result.get();
Optional<List<Integer>> result = capacityRepo.get(key);
return result.orElse(Collections.emptyList());
} }
@Override @Override
@@ -0,0 +1,25 @@
package me.redtea.nodropx.service.nbt.impl;
import beer.devs.fastnbt.nms.nbt.NItem;
import de.tr7zw.changeme.nbtapi.NBTItem;
import me.redtea.nodropx.service.nbt.NBTService;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
public class FastNBTServiceImpl implements NBTService {
@Override
public void setBoolTag(ItemStack item, String tag, boolean value) {
NItem nbtItem = new NItem(item);
nbtItem.setBoolean(tag, value);
nbtItem.merge(item);
}
@Override
public boolean getBoolTag(ItemStack item, String tag) {
if(item == null || item.getType() == Material.AIR) return false;
NItem nbtItem = new NItem(item);
return nbtItem.hasKey(tag) && nbtItem.getBoolean(tag);
}
}
@@ -13,8 +13,8 @@ public class NoDropServiceImpl implements NoDropService {
@Override @Override
public void setNoDrop(ItemStack item, boolean isNoDrop) { public void setNoDrop(ItemStack item, boolean isNoDrop) {
nbtService.setBoolTag(item, "isNoDrop", true);
cosmeticService.applyAll(item); cosmeticService.applyAll(item);
nbtService.setBoolTag(item, "isNoDrop", true);
} }
@Override @Override
@@ -34,6 +34,7 @@ public class RespawnServiceImpl implements RespawnService {
Pair[] pairs = toRespawn.get(player.getName()); Pair[] pairs = toRespawn.get(player.getName());
for(Pair pair : pairs) player.getInventory().setItem(pair.slot, pair.item); for(Pair pair : pairs) player.getInventory().setItem(pair.slot, pair.item);
toRespawn.remove(player.getName()); toRespawn.remove(player.getName());
} }
} }
+2 -1
View File
@@ -1,3 +1,5 @@
# Dev's discord tag - itzredtea
forceUseLegacy: false forceUseLegacy: false
forceUseMD5Colors: false forceUseMD5Colors: false
forceUseFoliaPatches: false forceUseFoliaPatches: false
@@ -8,6 +10,5 @@ checkForUpdates: true
# Use it on your own risk # Use it on your own risk
confirmThrowNoDropItem: false confirmThrowNoDropItem: false
#Single did not supports minimessages!
#Can be SINGLE_PAGE or MULTI_PAGES (Use MULTI_PAGES on your own risk) #Can be SINGLE_PAGE or MULTI_PAGES (Use MULTI_PAGES on your own risk)
personalStorageType: SINGLE_PAGE personalStorageType: SINGLE_PAGE
@@ -1,6 +1,12 @@
usage: usage:
- "&7[ &aUsage of command &e/nodrop &7]" - "&7[ &aUsage of command &e/nodrop &7]"
- "&7| &a/nodrop give [player] [item] (amount) &e- give no drop item" - "&7| &a/nodrop give [player] [item] (amount) &e- give no drop item"
- "&7| &a/nodrop storage &e- open no drop items storage"
- "&7| &a/nodrop giveStorage [player] [material] (amount) &e- Gives nodrop item to the player's personal storage"
- "&7| &a/nodrop giveallnodrop [player] [material] (amount) &e- Gives allnodrop item to player"
- "&7| &a/nodrop ignoreconfirm &e- Ignore confirm gui (only if confirm enabled)"
- "&7| &a/nodrop ignoreconfirmtimed [seconds] &e- Timed ignore confirm gui (only if confirm enabled)"
- "&7| &a/nodrop noIgnoreConfirm &e- Drop ignore confirm setting (only if confirm enabled)"
give: give:
fail: "&4[!] &cFail! Check item type for valid." fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!" success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage: giveToStorage:
fail: "&4[!] &cFail! Check item type for valid." fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a to storage!" success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a to storage!"
ignoreConfirm:
on: "&2&l[!] &aNow you are ignore confirm menu!"
off: "&2&l[!] &aNow you are not ignore confirm menu!"
noPerms: "&4&l[!] &cNo perms for this!" noPerms: "&4&l[!] &cNo perms for this!"
noConsole: "&4&l[!] &cOnly players can use it!" noConsole: "&4&l[!] &cOnly players can use it!"
noExists: "&4&l[!] &cThis player doesnt exists!" noExists: "&4&l[!] &cThis player doesnt exists!"
error: "&4&l[!] &cAn error occurred during the execution of the command!"
gui: gui:
confirm: confirm:
+10
View File
@@ -1,6 +1,12 @@
usage: usage:
- "&7[ &aUsage of command &e/nodrop &7]" - "&7[ &aUsage of command &e/nodrop &7]"
- "&7| &a/nodrop give [player] [item] (amount) &e- give no drop item" - "&7| &a/nodrop give [player] [item] (amount) &e- give no drop item"
- "&7| &a/nodrop storage &e- open no drop items storage"
- "&7| &a/nodrop giveStorage [player] [material] (amount) &e- Gives nodrop item to the player's personal storage"
- "&7| &a/nodrop giveAllNoDrop [player] [material] (amount) &e- Gives allnodrop item to player"
- "&7| &a/nodrop ignoreConfirm &e- Ignore confirm gui (only if confirm enabled)"
- "&7| &a/nodrop ignoreConfirmTimed [seconds] &e- Timed ignore confirm gui (only if confirm enabled)"
- "&7| &a/nodrop noIgnoreConfirm &e- Drop ignore confirm setting (only if confirm enabled)"
give: give:
fail: "&4[!] &cFail! Check item type for valid." fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!" success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage: giveToStorage:
fail: "&4[!] &cFail! Check item type for valid." fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a to storage!" success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a to storage!"
ignoreConfirm:
on: "&2&l[!] &aNow you are ignore confirm menu!"
off: "&2&l[!] &aNow you are not ignore confirm menu!"
noPerms: "&4&l[!] &cNo perms for this!" noPerms: "&4&l[!] &cNo perms for this!"
noConsole: "&4&l[!] &cOnly players can use it!" noConsole: "&4&l[!] &cOnly players can use it!"
noExists: "&4&l[!] &cThis player doesnt exists!" noExists: "&4&l[!] &cThis player doesnt exists!"
error: "&4&l[!] &cAn error occurred during the execution of the command!"
gui: gui:
confirm: confirm:
+10
View File
@@ -1,6 +1,12 @@
usage: usage:
- "<gray>[ <green>Usage of command <yellow>/nodrop <gray>]" - "<gray>[ <green>Usage of command <yellow>/nodrop <gray>]"
- "<gray>| <green>/nodrop give [player] [item] (amount) <yellow>- give no drop item" - "<gray>| <green>/nodrop give [player] [item] (amount) <yellow>- give no drop item"
- "<gray>| <green>/nodrop storage <yellow>- open no drop items storage"
- "<gray>| <green>/nodrop giveStorage [player] [material] (amount) <yellow>- Gives nodrop item to the player's personal storage"
- "<gray>| <green>/nodrop giveallnodrop [player] [material] (amount) <yellow>- Gives allnodrop item to player"
- "<gray>| <green>/nodrop ignoreConfirm <yellow>- Ignore confirm gui (only if confirm enabled)"
- "<gray>| <green>/nodrop ignoreConfirmTimed [seconds] <yellow>- Timed ignore confirm gui (only if confirm enabled)"
- "<gray>| <green>/nodrop noIgnoreConfirm <yellow>- Drop ignore confirm setting (only if confirm enabled)"
give: give:
fail: "<dark_red><bold>[!] <red>Fail! Check item type for valid." fail: "<dark_red><bold>[!] <red>Fail! Check item type for valid."
success: "<green><bold>[!] <reset><green>Gived <yellow>%item%<green> to <yellow>%player%<green> amount <yellow>%amount%<green>!" success: "<green><bold>[!] <reset><green>Gived <yellow>%item%<green> to <yellow>%player%<green> amount <yellow>%amount%<green>!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage: giveToStorage:
fail: "<dark_red><bold>[!] <red>Fail! Check item type for valid." fail: "<dark_red><bold>[!] <red>Fail! Check item type for valid."
success: "<green><bold>[!] <reset><green>Gived <yellow>%item%<green> to <yellow>%player%<green> amount <yellow>%amount%<green> to storage!" success: "<green><bold>[!] <reset><green>Gived <yellow>%item%<green> to <yellow>%player%<green> amount <yellow>%amount%<green> to storage!"
ignoreConfirm:
on: "<green><bold>[!] <reset><green>Now you are ignore confirm menu!"
off: "<green><bold>[!] <reset><green>Now you are not ignore confirm menu!"
noPerms: "<dark_red><bold>[!] <red>No perms for this!" noPerms: "<dark_red><bold>[!] <red>No perms for this!"
noConsole: "<dark_red><bold>[!] <red>Only players can use it!" noConsole: "<dark_red><bold>[!] <red>Only players can use it!"
noExists: "<dark_red><bold>[!] <red>This player doesnt exists!" noExists: "<dark_red><bold>[!] <red>This player doesnt exists!"
error: "<dark_red><bold>[!] <red>An error occurred during the execution of the command!"
gui: gui:
confirm: confirm: