Author SHA1 Message Date
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
17 changed files with 305 additions and 106 deletions

No files matched your search

+16 -18
View File
@@ -2,11 +2,10 @@ plugins {
id 'java'
id("com.github.johnrengelman.shadow") version "7.0.0"
id("xyz.jpenilla.run-paper") version "2.1.0"
id 'org.jetbrains.kotlin.jvm' version '1.9.23'
}
group = 'me.redtea'
version = '1.0.4-HOTFIX'
version = '1.1.1-STABLE'
repositories {
mavenCentral()
@@ -33,22 +32,26 @@ repositories {
maven {
url 'https://jitpack.io'
}
maven {
url = "https://repo.triumphteam.dev/snapshots/"
}
}
dependencies {
runtimeOnly("org.jetbrains.kotlin:kotlin-reflect:1.9.23")
implementation "org.jetbrains:annotations:24.0.0"
compileOnly "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"
// implementation "me.mattstudios.utils:matt-framework:1.4"
implementation "tech.carcadex:kotlinbukkitkit-commands:1.0.0.4b-SNAPSHOT"
implementation "de.tr7zw:item-nbt-api:2.12.3"
implementation "net.kyori:adventure-api:4.14.0"
// implementation "tech.carcadex:kotlinbukkitkit-commands:1.0.0.4b-SNAPSHOT"
implementation "de.tr7zw:item-nbt-api:2.15.3"
implementation "net.kyori:adventure-api:4.25.0"
implementation "net.kyori:adventure-platform-bukkit:4.3.0"
implementation files("libs/MiniMessages.jar")
implementation "dev.triumphteam:triumph-gui:3.1.2"
compileOnly "com.github.LoneDev6:API-ItemsAdder:3.5.0b"
compileOnly("net.kyori:adventure-text-minimessage:4.25.0")
implementation "dev.triumphteam:triumph-gui:3.1.13"
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")
}
@@ -68,11 +71,7 @@ tasks.withType(JavaCompile).configureEach {
}
}
compileKotlin {
kotlinOptions {
jvmTarget=1.8
}
}
processResources {
def props = [version: version]
@@ -85,9 +84,8 @@ processResources {
shadowJar {
relocate 'de.tr7zw.changeme.nbtapi', 'me.redtea.nodropx.libs.tr7zw.nbt'
relocate 'de.tr7zw.annotations', 'me.redtea.nodropx.libs.tr7zw.annotations'
relocate 'dev.triumphteam', 'me.redtea.nodropx.libs.gui'
relocate 'de.tr7zw', 'me.redtea.nodropx.libs.tr7zw'
relocate 'dev.triumphteam', 'me.redtea.nodropx.libs.triumphteam'
relocate 'org.checkerframework', 'me.redtea.nodropx.libs.message.oskarsmc.libs.checker'
relocate 'org.intellij', 'me.redtea.nodropx.libs.intellij'
relocate 'org.jetbrains', 'me.redtea.nodropx.libs.jetbrains'}
+79 -24
View File
@@ -1,7 +1,12 @@
package me.redtea.nodropx;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import dev.triumphteam.cmd.bukkit.BukkitCommandManager;
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 me.redtea.nodropx.api.facade.NoDropAPI;
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.facade.MenuFacade;
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.singlepage.SinglePageController;
import me.redtea.nodropx.menu.storage.singlepage.SinglePageGui;
@@ -47,6 +53,7 @@ import me.redtea.nodropx.service.event.impl.EventServiceImpl;
import me.redtea.nodropx.service.material.ItemStackService;
import me.redtea.nodropx.service.material.impl.ItemStackServiceImpl;
import me.redtea.nodropx.service.nbt.NBTService;
import me.redtea.nodropx.service.nbt.impl.FastNBTServiceImpl;
import me.redtea.nodropx.service.nbt.impl.Tr7zwNBTServiceImpl;
import me.redtea.nodropx.service.nodrop.NoDropService;
import me.redtea.nodropx.service.nodrop.impl.NoDropServiceImpl;
@@ -59,14 +66,17 @@ import me.redtea.nodropx.util.FoliaSupportedUtils;
import me.redtea.nodropx.util.UpdateChecker;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
import tech.carcadex.kotlinbukkitkit.commands.manager.CommandManager;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@@ -112,7 +122,7 @@ public final class NoDropX extends JavaPlugin {
noDropCosmeticService.load(YamlConfiguration.loadConfiguration(textContext.getCosmetics()));
dropConfirmService = getConfig().getBoolean("confirmThrowNoDropItem") ? new DropConfirmServiceImpl() : new DropConfirmNull();
NBTService nbtService = new Tr7zwNBTServiceImpl();
NBTService nbtService = new FastNBTServiceImpl();
noDropService = new NoDropServiceImpl(nbtService, noDropCosmeticService);
NoDropItemFactory noDropItemFactory = new NoDropItemFactoryImpl(noDropService);
EventService eventService = new EventServiceImpl(noDropService);
@@ -149,25 +159,57 @@ public final class NoDropX extends JavaPlugin {
Bukkit.getServicesManager().register(NoDropAPI.class,
noDropAPI, this, ServicePriority.Normal);
CommandManager commandManager = CommandManager.get(this);
commandManager.message("#no-perm", sender -> {
messages.get("noPerms").send(sender);
return Unit.INSTANCE;
// CommandManager commandManager = CommandManager.get(this);
// commandManager.message("#no-perm", sender -> {
// messages.get("noPerms").send(sender);
// 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"),
new SuggestionResolver.Simple<CommandSender>() {
@Override
public @NotNull List<String> resolve(@NotNull SuggestionContext<CommandSender> context) {
return itemStackService.allMaterials();
}
});
commandManager.message("#no-such-player", sender -> {
messages.get("noExists").send(sender);
return Unit.INSTANCE;
});
commandManager.message("#no-such-player", sender -> {
commandManager.registerMessage(MessageKey.TOO_MANY_ARGUMENTS, (sender, context) -> {
messages.get("usage").send(sender);
return Unit.INSTANCE;
});
commandManager.tabComplete("#materials", input -> itemStackService.allMaterials());
commandManager.register(new NoDropCommand(messages, noDropAPI, menuFacade, this,
commandManager.registerMessage(MessageKey.UNKNOWN_COMMAND, (sender, context) -> {
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));
bStatsInit();
printCredits();
@@ -175,6 +217,7 @@ public final class NoDropX extends JavaPlugin {
}
private MenuFacade initMenus() {
try {
CachedMenu personalStorageCachedMenu;
if (Objects.requireNonNull(getConfig().getString("personalStorageType")).equalsIgnoreCase("SINGLE_PAGE")) {
SinglePageGui singlePageGui = new SinglePageGui(messages, personalStorageRepo);
@@ -186,13 +229,20 @@ public final class NoDropX extends JavaPlugin {
Menu confirmMenu = new DropConfirmMFGui(messages, dropConfirmService, this);
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() {
ItemStackService result = new ItemStackServiceImpl();
if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) {
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 ItemStackProviderDefault());
@@ -205,10 +255,10 @@ public final class NoDropX extends JavaPlugin {
}
new UpdateChecker(this, 111485, foliaSupportedUtils).getVersion(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 {
getLogger().info(ChatColor.YELLOW + "There 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("&eThere is a new update available: " + ChatColor.GOLD + version);
printConsoleLine("&eDownload it from " + ChatColor.GOLD + "https://www.spigotmc.org/resources/nodropx.111485/");
}
});
}
@@ -222,7 +272,7 @@ public final class NoDropX extends JavaPlugin {
private void printCredits() {
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* &eDetected bukkit version &6" + Bukkit.getBukkitVersion());
printCreditLine("&a* &esupport HEX colors " + (supportHEX ? "&2YES" : "&4NO"));
@@ -230,6 +280,11 @@ public final class NoDropX extends JavaPlugin {
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) {
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', s));
}
@@ -1,5 +1,11 @@
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.val;
import me.redtea.nodropx.NoDropX;
@@ -12,20 +18,22 @@ import me.redtea.nodropx.service.event.EventService;
import me.redtea.nodropx.service.material.ItemStackService;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.*;
import java.util.Date;
import java.util.List;
/**
* Main command of plugin
* <p>/nodrop - usage</p>
* <p>/nodrop give [Player] [Material] [Amount (optional)]</p>
*/
@Command(name = "nodrop")
@Command("nodrop")
@RequiredArgsConstructor
public class NoDropCommand {
private final Messages messages;
@@ -37,17 +45,20 @@ public class NoDropCommand {
private final EventService eventService;
private final AllNoDropService allNoDropService;
@Default
@Command
public void onDefault(final CommandSender 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,
final Player player,
final String material,
@Suggestion("allmaterials") final String material,
@Optional final Integer amount) {
try {
noDropAPI.giveNoDrop(player, material, amount == null || amount == 0 ? 1 : amount);
@@ -57,22 +68,24 @@ public class NoDropCommand {
.replaceAll("%amount%", amount == null ? "1" : amount.toString())
.send(sender);
} catch (Throwable e) {
e.printStackTrace();
messages.get("give.fail").send(sender);
}
}
@SubCommand(name = "reload")
@Permission(perm = "nodropx.reload")
@Command("reload")
@Permission("nodropx.reload")
public void onReload(final CommandSender sender) {
long time = new Date().getTime();
plugin.onReload();
messages.get("reload").replaceAll("%time%", String.valueOf(new Date().getTime() - time)).send(sender);
}
@SubCommand(name = "giveStorage")
@Permission(perm = "nodropx.giveStorage")
@TabComplete(complete = {"#players", "#materials", "#range:1-64"})
@Command("givestorage")
@Permission("nodropx.giveStorage")
@NamedArguments("query-parameters")
//@TabComplete(complete = {"#players", "#materials", "#range:1-64"})
public void onGiveStorage(final CommandSender sender,
final String playerName,
final String material,
@@ -96,14 +109,14 @@ public class NoDropCommand {
}
@SubCommand(name = "ignoreConfirm")
@Permission(perm = "nodropx.ignoreConfirm")
@Command("ignoreconfirm")
@Permission("nodropx.ignoreConfirm")
public void onIgnoreConfirm(final CommandSender sender, @Optional Player target) {
if(target == null) {
if(!(sender instanceof Player)) {
sender.sendMessage("player only");
return;
messages.get("error").send(sender);
} else {
messages.get("ignoreConfirm.on").send(sender);
confirmService.forceConfirm((Player) sender);
}
} else {
@@ -111,17 +124,17 @@ public class NoDropCommand {
}
}
@SubCommand(name = "ignoreConfirmTimed")
@Permission(perm = "nodropx.ignoreConfirm.timed")
@Command("ignoreconfirmtimed")
@Permission("nodropx.ignoreConfirm.timed")
public void onIgnoreConfirmTimed(final CommandSender sender, Integer sec, @Optional Player target) {
if(target == null) {
if(!(sender instanceof Player)) {
sender.sendMessage("player only");
return;
messages.get("error").send(sender);
} else {
confirmService.forceConfirm((Player) sender);
try {
Bukkit.getScheduler().runTaskLater(plugin,() -> confirmService.removeForceConfirm((Player) sender),20L*sec);
messages.get("ignoreConfirm.on").send(sender);
} catch (UnsupportedOperationException e) {
sender.sendMessage(ChatColor.RED + "This operation didn't supports on your environment");
}
@@ -136,22 +149,22 @@ public class NoDropCommand {
}
}
@SubCommand(name = "noIgnoreConfirm")
@Permission(perm = "nodropx.noIgnoreConfirm")
@Command("noignoreconfirm")
@Permission("nodropx.noIgnoreConfirm")
public void onNoIgnoreConfirm(final CommandSender sender, @Optional Player target) {
if(target == null) {
if(!(sender instanceof Player)) {
sender.sendMessage("player only");
return;
messages.get("error").send(sender);
} else {
confirmService.removeForceConfirm((Player) sender);
messages.get("ignoreConfirm.off").send(sender);
}
} else {
confirmService.removeForceConfirm(target);
}
}
@SubCommand(name = "applyHand")
@Permission(perm = "nodropx.applyhand")
@Command("applyhand")
@Permission("nodropx.applyhand")
public void onApplyHand(final Player sender) {
try {
val event = eventService.callPlayerChangeNoDropEvent(sender, sender.getInventory().getItemInMainHand(), true);
@@ -162,9 +175,8 @@ public class NoDropCommand {
}
}
@SubCommand(name = "gui")
@Aliases(aliases = "storage")
@Permission(perm = "nodropx.gui")
@Command(value = "gui", alias = "storage")
@Permission("nodropx.gui")
public void onGui(final Player sender) {
menuFacade.openPersonalStorage(sender);
}
@@ -177,9 +189,10 @@ public class NoDropCommand {
return null;
}
@SubCommand(name = "giveallnodrop")
@Permission(perm = "nodropx.giveallnodrop")
@TabComplete(complete = {"#players", "#materials", "#range:1-64"})
@Command("giveallnodrop")
@Permission("nodropx.giveallnodrop")
@NamedArguments("query-parameters")
// @TabComplete(complete = {"#players", "#materials", "#range:1-64"})
public void onGiveAllNoDrop(final CommandSender sender,
final Player player,
final String material,
@@ -26,8 +26,14 @@ public class FoliaSupporter {
@SneakyThrows
public void run(RespawnService respawnService, Plugin plugin) {
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();
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;
}
runningOnFolia = true;
@@ -56,7 +62,7 @@ public class FoliaSupporter {
}
}
try {
Thread.sleep(1000);
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
@@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
@@ -46,6 +47,11 @@ public class PlayerHandler implements Listener {
respawnService.giveSavedItems(event.getPlayer());
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
respawnService.giveSavedItems(event.getPlayer());
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
menuFacade.clearCache(event.getPlayer());
@@ -8,6 +8,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
public class SinglePageGuiHandler implements Listener {
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
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.service.nodrop.NoDropService;
import me.redtea.nodropx.util.FoliaSupportedUtils;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.*;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
@@ -30,16 +30,28 @@ public class SinglePageController {
if(clickActions.contains(event.getAction()) && !(noDropService.isNoDrop(event.getCurrentItem()))) {
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(() -> {
for(ItemStack itemStack : event.getInventory()) {
for(ItemStack itemStack : inventory) {
if (itemStack != null && !noDropService.isNoDrop(itemStack)) {
event.getWhoClicked().getInventory().addItem(itemStack);
event.getInventory().remove(itemStack);
((Player) event.getWhoClicked()).updateInventory();
whoClicked.getInventory().addItem(itemStack);
inventory.remove(itemStack);
((Player) whoClicked).updateInventory();
}
}
});
}
public void onClose(InventoryCloseEvent event) {
@@ -26,7 +26,13 @@ public class SinglePageGui implements CachedMenu {
player.openInventory(cache.get(player.getUniqueId()));
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);
cache.put(player.getUniqueId(), gui);
@@ -5,17 +5,21 @@ import dev.lone.itemsadder.api.ItemsAdder;
import me.redtea.nodropx.model.materialprovider.ItemStackProvider;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class ItemsAdderProvider implements ItemStackProvider {
@Override
public ItemStack get(String s) {
return CustomStack.getInstance(s).getItemStack();
CustomStack stack = CustomStack.getInstance(s);
return (stack != null) ? stack.getItemStack() : null;
}
@Override
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());
}
}
@@ -12,19 +12,12 @@ import java.util.stream.Collectors;
public class CapacityServiceImpl implements CapacityService {
private final Repo<String, List<Integer>> capacityRepo;
private final Map<String, Integer> customModelDataRequired = new HashMap<>();
public CapacityServiceImpl(Plugin plugin) {
capacityRepo = new YamlRepo<>(
new File(plugin.getDataFolder(), "capacity.yml").toPath(),
plugin,
conf -> conf.getKeys(false).stream().collect(Collectors.toMap(
value -> {
if(value.contains("->")) {
String[] args = value.split("->");
customModelDataRequired.put(args[0], Integer.parseInt(args[1]));
return args[0];
} else return value;
},
value -> value,
conf::getIntegerList))
);
}
@@ -32,17 +25,11 @@ public class CapacityServiceImpl implements CapacityService {
@Override
public List<Integer> get(ItemStack item) {
String key = item.getType().name();
if(item.hasItemMeta() && item.getItemMeta().hasCustomModelData()) {
key += "->" + item.getItemMeta().getCustomModelData();
}
Optional<List<Integer>> result = capacityRepo.get(key);
if(!result.isPresent()) {
return Collections.emptyList();
}
if(customModelDataRequired.containsKey(key)) {
int cmi = customModelDataRequired.get(key);
if(!item.getItemMeta().hasCustomModelData() || item.getItemMeta().getCustomModelData() != cmi) {
return Collections.emptyList();
}
}
return result.get();
return result.orElse(Collections.emptyList());
}
@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);
}
}
@@ -34,6 +34,7 @@ public class RespawnServiceImpl implements RespawnService {
Pair[] pairs = toRespawn.get(player.getName());
for(Pair pair : pairs) player.getInventory().setItem(pair.slot, pair.item);
toRespawn.remove(player.getName());
}
}
+2 -1
View File
@@ -1,3 +1,5 @@
# Dev's discord tag - itzredtea
forceUseLegacy: false
forceUseMD5Colors: false
forceUseFoliaPatches: false
@@ -8,6 +10,5 @@ checkForUpdates: true
# Use it on your own risk
confirmThrowNoDropItem: false
#Single did not supports minimessages!
#Can be SINGLE_PAGE or MULTI_PAGES (Use MULTI_PAGES on your own risk)
personalStorageType: SINGLE_PAGE
@@ -1,6 +1,12 @@
usage:
- "&7[ &aUsage of command &e/nodrop &7]"
- "&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:
fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage:
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!"
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!"
noConsole: "&4&l[!] &cOnly players can use it!"
noExists: "&4&l[!] &cThis player doesnt exists!"
error: "&4&l[!] &cAn error occurred during the execution of the command!"
gui:
confirm:
+10
View File
@@ -1,6 +1,12 @@
usage:
- "&7[ &aUsage of command &e/nodrop &7]"
- "&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:
fail: "&4[!] &cFail! Check item type for valid."
success: "&2&l[!] &aGived &e%item%&a to &e%player%&a amount &e%amount%&a!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage:
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!"
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!"
noConsole: "&4&l[!] &cOnly players can use it!"
noExists: "&4&l[!] &cThis player doesnt exists!"
error: "&4&l[!] &cAn error occurred during the execution of the command!"
gui:
confirm:
+10
View File
@@ -1,6 +1,12 @@
usage:
- "<gray>[ <green>Usage of command <yellow>/nodrop <gray>]"
- "<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:
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>!"
@@ -11,10 +17,14 @@ applyHand:
giveToStorage:
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!"
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!"
noConsole: "<dark_red><bold>[!] <red>Only players can use it!"
noExists: "<dark_red><bold>[!] <red>This player doesnt exists!"
error: "<dark_red><bold>[!] <red>An error occurred during the execution of the command!"
gui:
confirm: