mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-22 14:13:44 +02:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			fix/plotMu
			...
			feat/v7/gu
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 803b53f020 | ||
|   | dca9ec385f | ||
|   | 7cb5df6253 | 
| @@ -28,6 +28,7 @@ package com.plotsquared.bukkit.inject; | ||||
| import com.google.inject.AbstractModule; | ||||
| import com.google.inject.Provides; | ||||
| import com.google.inject.Singleton; | ||||
| import com.google.inject.TypeLiteral; | ||||
| import com.google.inject.assistedinject.FactoryModuleBuilder; | ||||
| import com.plotsquared.bukkit.BukkitPlatform; | ||||
| import com.plotsquared.bukkit.listener.SingleWorldListener; | ||||
| @@ -43,6 +44,8 @@ import com.plotsquared.bukkit.util.BukkitSetupUtils; | ||||
| import com.plotsquared.bukkit.util.BukkitUtil; | ||||
| import com.plotsquared.bukkit.util.fawe.FaweRegionManager; | ||||
| import com.plotsquared.bukkit.util.fawe.FaweSchematicHandler; | ||||
| import com.plotsquared.bukkit.util.gui.BukkitPlotInventory; | ||||
| import com.plotsquared.bukkit.util.gui.BukkitPlotInventoryProvider; | ||||
| import com.plotsquared.core.PlotPlatform; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| @@ -70,6 +73,7 @@ import com.plotsquared.core.util.RegionManager; | ||||
| import com.plotsquared.core.util.SchematicHandler; | ||||
| import com.plotsquared.core.util.SetupUtils; | ||||
| import com.plotsquared.core.util.WorldUtil; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryProvider; | ||||
| import com.sk89q.worldedit.bukkit.WorldEditPlugin; | ||||
| import com.sk89q.worldedit.extension.platform.Actor; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| @@ -103,6 +107,7 @@ public class BukkitModule extends AbstractModule { | ||||
|         bind(InventoryUtil.class).to(BukkitInventoryUtil.class); | ||||
|         bind(SetupUtils.class).to(BukkitSetupUtils.class); | ||||
|         bind(WorldUtil.class).to(BukkitUtil.class); | ||||
|         bind(new TypeLiteral<PlotInventoryProvider<?, ?>>(){}).to(BukkitPlotInventoryProvider.class); | ||||
|         install(new FactoryModuleBuilder() | ||||
|                 .implement(ProgressSubscriber.class, DefaultProgressSubscriber.class) | ||||
|                 .build(ProgressSubscriberFactory.class)); | ||||
|   | ||||
| @@ -364,6 +364,11 @@ public class BukkitPlayer extends PlotPlayer<Player> { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void closeInventory() { | ||||
|         this.player.closeInventory(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Convert from PlotSquared's {@link TeleportCause} to Bukkit's {@link PlayerTeleportEvent.TeleportCause} | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1,170 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.bukkit.util.gui; | ||||
|  | ||||
| import com.google.common.base.Preconditions; | ||||
| import com.plotsquared.bukkit.BukkitPlatform; | ||||
| import com.plotsquared.bukkit.util.BukkitUtil; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import com.plotsquared.core.util.gui.PlotInventory; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryClickHandler; | ||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.bukkit.Bukkit; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.Listener; | ||||
| import org.bukkit.inventory.Inventory; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
| import org.bukkit.inventory.meta.ItemMeta; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
| import java.util.UUID; | ||||
| import java.util.WeakHashMap; | ||||
|  | ||||
| /** | ||||
|  * Implementation of the {@link PlotInventory} for the bukkit platform. | ||||
|  */ | ||||
| public class BukkitPlotInventory extends PlotInventory<Player, ItemStack> { | ||||
|  | ||||
|     private static Listener INVENTORY_LISTENER; | ||||
|     private static final Map<UUID, BukkitPlotInventory> INVENTORIES = new WeakHashMap<>(); | ||||
|  | ||||
|     private final ItemStack[] items; | ||||
|     final PlotInventoryClickHandler[] clickHandlers; | ||||
|     Inventory nativeInventory; | ||||
|  | ||||
|     /** | ||||
|      * {@inheritDoc} | ||||
|      */ | ||||
|     protected BukkitPlotInventory( | ||||
|             PlotPlayer<Player> player, final int size, final Caption titleCaption, | ||||
|             final TagResolver... titleResolvers | ||||
|     ) { | ||||
|         super(player, size, titleCaption, titleResolvers); | ||||
|         this.items = new ItemStack[size]; | ||||
|         this.clickHandlers = new PlotInventoryClickHandler[size]; | ||||
|         this.nativeInventory = Bukkit.createInventory(player.getPlatformPlayer(), size(), | ||||
|                 BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.miniMessage().deserialize( | ||||
|                         titleCaption().getComponent(player), titleResolvers() | ||||
|                 )) | ||||
|         ); | ||||
|  | ||||
|         if (INVENTORY_LISTENER == null) { | ||||
|             INVENTORY_LISTENER = new BukkitPlotInventoryListener(INVENTORIES); | ||||
|             BukkitPlatform bukkitPlatform = ((BukkitPlatform) PlotSquared.platform()); | ||||
|             bukkitPlatform.getServer().getPluginManager().registerEvents(INVENTORY_LISTENER, bukkitPlatform); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setItem(final int slot, final PlotItemStack item, final PlotInventoryClickHandler onClick) { | ||||
|         Preconditions.checkElementIndex(slot, size(), "Slot must be in range (0, " + size() + ")"); | ||||
|         this.items[slot] = toPlatformItem(item); | ||||
|         this.clickHandlers[slot] = onClick; | ||||
|         this.nativeInventory.setItem(slot, this.items[slot]); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void addItem(final PlotItemStack item, final PlotInventoryClickHandler onClick) { | ||||
|         // TODO: probably needs more love (who doesn't) | ||||
|         int slot = -1; | ||||
|         // try to fill stacks | ||||
|         for (int i = 0; i < items.length; i++) { | ||||
|             if (Objects.equals(items[i], toPlatformItem(item))) { | ||||
|                 slot = i; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         // search for empty slots | ||||
|         if (slot == -1) { | ||||
|             for (int i = 0; i < items.length; i++) { | ||||
|                 if (items[i] == null || items[i].getType() == Material.AIR) { | ||||
|                     slot = i; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         Preconditions.checkElementIndex(slot, size()); | ||||
|         this.items[slot] = toPlatformItem(item); | ||||
|         this.clickHandlers[slot] = onClick; | ||||
|         this.nativeInventory.setItem(slot, this.items[slot]); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void open() { | ||||
|         INVENTORIES.put(player().getUUID(), this); | ||||
|         player().getPlatformPlayer().openInventory(this.nativeInventory); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void close() { | ||||
|         if (Objects.equals(player().getPlatformPlayer().getOpenInventory().getTopInventory(), this.nativeInventory)) { | ||||
|             player().getPlatformPlayer().closeInventory(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ItemStack toPlatformItem(final PlotItemStack item) { | ||||
|         if (item == null) { | ||||
|             return null; | ||||
|         } | ||||
|         Material material = BukkitAdapter.adapt(item.getType()); | ||||
|         if (material == null) { | ||||
|             return null; | ||||
|         } | ||||
|         ItemStack stack = new ItemStack(material, item.getAmount()); | ||||
|         ItemMeta meta = null; | ||||
|         if (item.getName() != null) { | ||||
|             meta = stack.getItemMeta(); | ||||
|             Component nameComponent = BukkitUtil.MINI_MESSAGE.deserialize(item.getName()); | ||||
|             meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent)); | ||||
|         } | ||||
|         if (item.getLore() != null) { | ||||
|             if (meta == null) { | ||||
|                 meta = stack.getItemMeta(); | ||||
|             } | ||||
|             List<String> lore = new ArrayList<>(); | ||||
|             for (String entry : item.getLore()) { | ||||
|                 lore.add(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(BukkitUtil.MINI_MESSAGE.deserialize(entry))); | ||||
|             } | ||||
|             meta.setLore(lore); | ||||
|         } | ||||
|         if (meta != null) { | ||||
|             stack.setItemMeta(meta); | ||||
|         } | ||||
|         return stack; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,112 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.bukkit.util.gui; | ||||
|  | ||||
| import com.plotsquared.bukkit.util.BukkitUtil; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryClickHandler; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryClickType; | ||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.event.EventHandler; | ||||
| import org.bukkit.event.Listener; | ||||
| import org.bukkit.event.inventory.ClickType; | ||||
| import org.bukkit.event.inventory.InventoryCloseEvent; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| import java.util.EnumMap; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
| import java.util.UUID; | ||||
|  | ||||
| public class BukkitPlotInventoryListener implements Listener { | ||||
|  | ||||
|     private static final EnumMap<ClickType, PlotInventoryClickType> CLICK_MAPPING = new EnumMap<>(ClickType.class); | ||||
|  | ||||
|     static { | ||||
|         CLICK_MAPPING.put(ClickType.LEFT, PlotInventoryClickType.LEFT); | ||||
|         CLICK_MAPPING.put(ClickType.RIGHT, PlotInventoryClickType.RIGHT); | ||||
|         CLICK_MAPPING.put(ClickType.SHIFT_LEFT, PlotInventoryClickType.SHIFT_LEFT); | ||||
|         CLICK_MAPPING.put(ClickType.SHIFT_RIGHT, PlotInventoryClickType.SHIFT_RIGHT); | ||||
|         CLICK_MAPPING.put(ClickType.MIDDLE, PlotInventoryClickType.MIDDLE); | ||||
|     } | ||||
|  | ||||
|     private final Map<UUID, BukkitPlotInventory> inventories; | ||||
|  | ||||
|     public BukkitPlotInventoryListener(final Map<UUID, BukkitPlotInventory> inventories) { | ||||
|         this.inventories = inventories; | ||||
|     } | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onInventoryClick(final org.bukkit.event.inventory.InventoryClickEvent event) { | ||||
|         final PlotPlayer<Player> player = BukkitUtil.adapt((Player) event.getWhoClicked()); | ||||
|  | ||||
|         BukkitPlotInventory currentInventory = inventories.get(player.getUUID()); | ||||
|         if (currentInventory == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (!Objects.equals(event.getClickedInventory(), currentInventory.nativeInventory)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         final int slot = event.getRawSlot(); | ||||
|         if (slot < 0 || slot >= currentInventory.size()) { | ||||
|             return; | ||||
|         } | ||||
|         PlotInventoryClickType clickType = CLICK_MAPPING.getOrDefault(event.getClick(), PlotInventoryClickType.OTHER); | ||||
|         event.setCancelled(true); | ||||
|  | ||||
|         final PlotInventoryClickHandler clickHandler = currentInventory.clickHandlers[slot]; | ||||
|         if (clickHandler == null) { | ||||
|             return; | ||||
|         } | ||||
|         final ItemStack item = event.getCurrentItem(); | ||||
|         if (item == null) { | ||||
|             clickHandler.handle(null, clickType); | ||||
|             return; | ||||
|         } | ||||
|         clickHandler.handle(new PlotItemStack( | ||||
|                 BukkitAdapter.asItemType(item.getType()), | ||||
|                 item.getAmount(), | ||||
|                 item.getItemMeta().getDisplayName(), | ||||
|                 item.getItemMeta().hasLore() ? item.getItemMeta().getLore().toArray(String[]::new) : new String[0] | ||||
|         ), clickType); | ||||
|     } | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onInventoryClose(InventoryCloseEvent event) { | ||||
|         final PlotPlayer<Player> player = BukkitUtil.adapt((Player) event.getPlayer()); | ||||
|         BukkitPlotInventory currentInventory = inventories.get(player.getUUID()); | ||||
|         if (currentInventory == null) { | ||||
|             return; | ||||
|         } | ||||
|         currentInventory.nativeInventory = null; | ||||
|         inventories.remove(player.getUUID()); | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.bukkit.util.gui; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.util.gui.PlotInventory; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryProvider; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.bukkit.inventory.ItemStack; | ||||
|  | ||||
| public class BukkitPlotInventoryProvider implements PlotInventoryProvider<Player, ItemStack> { | ||||
|  | ||||
|     @Override | ||||
|     public PlotInventory<Player, ItemStack> createInventory( | ||||
|             PlotPlayer<?> player, | ||||
|             final int size, | ||||
|             final Caption titleCaption, | ||||
|             final TagResolver... titleResolvers | ||||
|     ) { | ||||
|         return new BukkitPlotInventory((PlotPlayer<Player>) player, size, titleCaption, titleResolvers); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -27,32 +27,18 @@ package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.events.PlotFlagAddEvent; | ||||
| import com.plotsquared.core.events.PlotFlagRemoveEvent; | ||||
| import com.plotsquared.core.events.Result; | ||||
| import com.plotsquared.core.gui.PlotMusicInventory; | ||||
| import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.permissions.Permission; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotInventory; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.MusicFlag; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.InventoryUtil; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.sk89q.worldedit.world.item.ItemType; | ||||
| import com.sk89q.worldedit.world.item.ItemTypes; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryProvider; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| import javax.annotation.Nullable; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.Locale; | ||||
|  | ||||
| @CommandDeclaration(command = "music", | ||||
|         permission = "plots.music", | ||||
|         usage = "/plot music", | ||||
| @@ -60,20 +46,16 @@ import java.util.Locale; | ||||
|         requiredType = RequiredType.PLAYER) | ||||
| public class Music extends SubCommand { | ||||
|  | ||||
|     private static final Collection<String> DISCS = Arrays | ||||
|             .asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp", | ||||
|                     "music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal", | ||||
|                     "music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside", | ||||
|                     "music_disc_pigstep" | ||||
|             ); | ||||
|  | ||||
|     private final InventoryUtil inventoryUtil; | ||||
|     private final EventDispatcher eventDispatcher; | ||||
|     private final PlotInventoryProvider<?, ?> inventoryProvider; | ||||
|  | ||||
|     @Inject | ||||
|     public Music(final @Nullable InventoryUtil inventoryUtil, final @NonNull EventDispatcher eventDispatcher) { | ||||
|         this.inventoryUtil = inventoryUtil; | ||||
|     public Music( | ||||
|             final @NonNull EventDispatcher eventDispatcher, | ||||
|             final PlotInventoryProvider<?, ?> inventoryProvider | ||||
|     ) { | ||||
|         this.eventDispatcher = eventDispatcher; | ||||
|         this.inventoryProvider = inventoryProvider; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -99,85 +81,8 @@ public class Music extends SubCommand { | ||||
|             ); | ||||
|             return true; | ||||
|         } | ||||
|         PlotInventory inv = new PlotInventory( | ||||
|                 this.inventoryUtil, | ||||
|                 player, | ||||
|                 2, | ||||
|                 TranslatableCaption.of("plotjukebox.jukebox_header").getComponent(player) | ||||
|         ) { | ||||
|             @Override | ||||
|             public boolean onClick(int index) { | ||||
|                 PlotItemStack item = getItem(index); | ||||
|                 if (item == null) { | ||||
|                     return true; | ||||
|                 } | ||||
|                 if (item.getType() == ItemTypes.BEDROCK) { | ||||
|                     PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class) | ||||
|                             .createFlagInstance(item.getType()); | ||||
|                     PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(plotFlag, plot); | ||||
|                     if (event.getEventResult() == Result.DENY) { | ||||
|                         getPlayer().sendMessage( | ||||
|                                 TranslatableCaption.of("events.event_denied"), | ||||
|                                 TagResolver.resolver("value", Tag.inserting(Component.text("Music removal"))) | ||||
|                         ); | ||||
|                         return true; | ||||
|                     } | ||||
|                     plot.removeFlag(event.getFlag()); | ||||
|                     getPlayer().sendMessage( | ||||
|                             TranslatableCaption.of("flag.flag_removed"), | ||||
|                             TagResolver.builder() | ||||
|                                     .tag("flag", Tag.inserting(Component.text("music"))) | ||||
|                                     .tag("value", Tag.inserting(Component.text("music_disc"))) | ||||
|                                     .build() | ||||
|                     ); | ||||
|                 } else if (item.getName().toLowerCase(Locale.ENGLISH).contains("disc")) { | ||||
|                     PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class) | ||||
|                             .createFlagInstance(item.getType()); | ||||
|                     PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot); | ||||
|                     if (event.getEventResult() == Result.DENY) { | ||||
|                         getPlayer().sendMessage( | ||||
|                                 TranslatableCaption.of("events.event_denied"), | ||||
|                                 TagResolver.resolver("value", Tag.inserting(Component.text("Music addition"))) | ||||
|                         ); | ||||
|                         return true; | ||||
|                     } | ||||
|                     plot.setFlag(event.getFlag()); | ||||
|                     getPlayer().sendMessage( | ||||
|                             TranslatableCaption.of("flag.flag_added"), | ||||
|                             TagResolver.builder() | ||||
|                                     .tag("flag", Tag.inserting(Component.text("music"))) | ||||
|                                     .tag("value", Tag.inserting(Component.text(event.getFlag().getValue().toString()))) | ||||
|                                     .build() | ||||
|                     ); | ||||
|                 } else { | ||||
|                     getPlayer().sendMessage(TranslatableCaption.of("flag.flag_not_added")); | ||||
|                 } | ||||
|                 return false; | ||||
|             } | ||||
|         }; | ||||
|         int index = 0; | ||||
|  | ||||
|         for (final String disc : DISCS) { | ||||
|             final String name = String.format("<gold>%s</gold>", disc); | ||||
|             final String[] lore = {TranslatableCaption.of("plotjukebox.click_to_play").getComponent(player)}; | ||||
|             ItemType type = ItemTypes.get(disc); | ||||
|             if (type == null) { | ||||
|                 continue; | ||||
|             } | ||||
|             final PlotItemStack item = new PlotItemStack(type, 1, name, lore); | ||||
|             if (inv.setItemChecked(index, item)) { | ||||
|                 index++; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Always add the cancel button | ||||
|         // if (player.getMeta("music") != null) { | ||||
|         String name = TranslatableCaption.of("plotjukebox.cancel_music").getComponent(player); | ||||
|         String[] lore = {TranslatableCaption.of("plotjukebox.reset_music").getComponent(player)}; | ||||
|         inv.setItem(index, new PlotItemStack("bedrock", 1, name, lore)); | ||||
|         // } | ||||
|  | ||||
|         inv.openInventory(); | ||||
|         new PlotMusicInventory<>(inventoryProvider, player, plot, eventDispatcher).open(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,145 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.gui; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.events.PlotFlagAddEvent; | ||||
| import com.plotsquared.core.events.PlotFlagRemoveEvent; | ||||
| import com.plotsquared.core.events.Result; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.MusicFlag; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.gui.ExtendablePlotInventory; | ||||
| import com.plotsquared.core.util.gui.PlotInventoryProvider; | ||||
| import com.sk89q.worldedit.world.item.ItemTypes; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.minimessage.tag.Tag; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.stream.Stream; | ||||
|  | ||||
| public class PlotMusicInventory<P, I> extends ExtendablePlotInventory<P, I> { | ||||
|  | ||||
|     private static final List<String> DISCS = Stream.of( | ||||
|             "music_disc_13", | ||||
|             "music_disc_cat", | ||||
|             "music_disc_blocks", | ||||
|             "music_disc_chirp", | ||||
|             "music_disc_far", | ||||
|             "music_disc_mall", | ||||
|             "music_disc_mellohi", | ||||
|             "music_disc_stal", | ||||
|             "music_disc_strad", | ||||
|             "music_disc_ward", | ||||
|             "music_disc_11", | ||||
|             "music_disc_wait", | ||||
|             "music_disc_otherside", | ||||
|             "music_disc_pigstep" | ||||
|     ).filter(s -> ItemTypes.get(s) != null).toList(); | ||||
|     private final Plot plot; | ||||
|     private final EventDispatcher eventDispatcher; | ||||
|  | ||||
|     public PlotMusicInventory( | ||||
|             final PlotInventoryProvider<P, I> provider, | ||||
|             PlotPlayer<?> player, | ||||
|             Plot plot, | ||||
|             EventDispatcher eventDispatcher | ||||
|     ) { | ||||
|         super( | ||||
|                 provider, player, 2 * 9, | ||||
|                 TranslatableCaption.of("plotjukebox.jukebox_header") | ||||
|         ); | ||||
|         this.plot = plot; | ||||
|         this.eventDispatcher = eventDispatcher; | ||||
|         setDiscs(); | ||||
|         setCancelButton(); | ||||
|     } | ||||
|  | ||||
|     private void setDiscs() { | ||||
|         for (final String disc : DISCS) { | ||||
|             PlotItemStack itemStack = new PlotItemStack( | ||||
|                     disc, 1, String.format("<gold>%s</gold>", disc), | ||||
|                     TranslatableCaption.of("plotjukebox.click_to_play").getComponent(player()) | ||||
|             ); | ||||
|             addItem(itemStack, (item, type) -> { | ||||
|                 close(); | ||||
|                 PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class) | ||||
|                         .createFlagInstance(item.getType()); | ||||
|                 PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot); | ||||
|                 if (event.getEventResult() == Result.DENY) { | ||||
|                     player().sendMessage( | ||||
|                             TranslatableCaption.of("events.event_denied"), | ||||
|                             TagResolver.resolver("value", Tag.inserting(Component.text("Music addition"))) | ||||
|                     ); | ||||
|                     return; | ||||
|                 } | ||||
|                 plot.setFlag(event.getFlag()); | ||||
|                 player().sendMessage( | ||||
|                         TranslatableCaption.of("flag.flag_added"), | ||||
|                         TagResolver.builder() | ||||
|                                 .tag("flag", Tag.inserting(Component.text("music"))) | ||||
|                                 .tag("value", Tag.inserting(Component.text(event.getFlag().getValue().toString()))) | ||||
|                                 .build() | ||||
|                 ); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private void setCancelButton() { | ||||
|         PlotItemStack cancelItem = new PlotItemStack( | ||||
|                 ItemTypes.BEDROCK, 1, | ||||
|                 TranslatableCaption.of("plotjukebox.cancel_music").getComponent(player()), | ||||
|                 TranslatableCaption.of("plotjukebox.reset_music").getComponent(player()) | ||||
|         ); | ||||
|         setItem(size() - 1, cancelItem, (item, type) -> { | ||||
|             close(); | ||||
|             PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class) | ||||
|                     .createFlagInstance(item.getType()); | ||||
|             PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(plotFlag, plot); | ||||
|             if (event.getEventResult() == Result.DENY) { | ||||
|                 player().sendMessage( | ||||
|                         TranslatableCaption.of("events.event_denied"), | ||||
|                         TagResolver.resolver("value", Tag.inserting(Component.text("Music removal"))) | ||||
|                 ); | ||||
|                 return; | ||||
|             } | ||||
|             plot.removeFlag(event.getFlag()); | ||||
|             player().sendMessage( | ||||
|                     TranslatableCaption.of("flag.flag_removed"), | ||||
|                     TagResolver.builder() | ||||
|                             .tag("flag", Tag.inserting(Component.text("music"))) | ||||
|                             .tag("value", Tag.inserting(Component.text("music_disc"))) | ||||
|                             .build() | ||||
|             ); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -258,4 +258,8 @@ public class ConsolePlayer extends PlotPlayer<Actor> { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void closeInventory() { | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1015,6 +1015,12 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|     public @NonNull | ||||
|     abstract Audience getAudience(); | ||||
|  | ||||
|     /** | ||||
|      * Closes the current open inventory, if present | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public abstract void closeInventory(); | ||||
|  | ||||
|     /** | ||||
|      * Get this player's {@link LockRepository} | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1,74 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.util.gui; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
|  | ||||
| public class ExtendablePlotInventory<P, I> extends PlotInventory<P, I> { | ||||
|  | ||||
|     private final PlotInventory<P, I> delegate; | ||||
|  | ||||
|     public ExtendablePlotInventory(PlotInventory<P, I> delegate) { | ||||
|         super(delegate.player(), delegate.size(), delegate.titleCaption(), delegate.titleResolvers()); | ||||
|         this.delegate = delegate; | ||||
|     } | ||||
|  | ||||
|     public ExtendablePlotInventory( | ||||
|             PlotInventoryProvider<P, I> provider, PlotPlayer<?> player, int size, Caption title, | ||||
|             TagResolver... titleResolver | ||||
|     ) { | ||||
|         this(provider.createInventory(player, size, title, titleResolver)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setItem(final int slot, final PlotItemStack item, final PlotInventoryClickHandler onClick) { | ||||
|         delegate.setItem(slot, item, onClick); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void addItem(final PlotItemStack item, final PlotInventoryClickHandler onClick) { | ||||
|         delegate.addItem(item, onClick); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void open() { | ||||
|         delegate.open(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void close() { | ||||
|         delegate.close(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public I toPlatformItem(final PlotItemStack item) { | ||||
|         return delegate.toPlatformItem(item); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,145 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.util.gui; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
|  | ||||
| /** | ||||
|  * @param <P> The platform player | ||||
|  * @param <I> The platform item object | ||||
|  * @since TODO | ||||
|  */ | ||||
| public abstract class PlotInventory<P, I> { | ||||
|  | ||||
|     private final PlotInventoryClickHandler NOOP_CLICK_HANDLER = (x, y) -> { | ||||
|     }; | ||||
|  | ||||
|     private final PlotPlayer<P> player; | ||||
|     private final int size; | ||||
|     private final Caption titleCaption; | ||||
|     private final TagResolver[] titleResolvers; | ||||
|  | ||||
|     /** | ||||
|      * Instantiates a new Plot inventory. | ||||
|      * | ||||
|      * @param size           The size of the inventory - must be a multiple of 9 | ||||
|      * @param titleCaption   The caption to use for the title | ||||
|      * @param titleResolvers The tag resolvers to use for the title | ||||
|      * @since 7.0.0 | ||||
|      */ | ||||
|     protected PlotInventory(PlotPlayer<P> player, int size, Caption titleCaption, TagResolver... titleResolvers) { | ||||
|         this.player = player; | ||||
|         this.size = size; | ||||
|         this.titleCaption = titleCaption; | ||||
|         this.titleResolvers = titleResolvers; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set an item in this inventory at a specific slot / index. | ||||
|      * Overrides existing items and click handler. | ||||
|      * | ||||
|      * @param slot    The slot / index where to place the item | ||||
|      * @param item    The item to add to this inventory | ||||
|      * @param onClick The handler to call when clicking this item | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public abstract void setItem(int slot, PlotItemStack item, PlotInventoryClickHandler onClick); | ||||
|  | ||||
|     /** | ||||
|      * Set an item in this inventory at a specific slot / index. | ||||
|      * Overrides existing items and click handler. | ||||
|      * | ||||
|      * @param slot The slot / index where to place the item | ||||
|      * @param item The item to add to this inventory | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public void setItem(int slot, PlotItemStack item) { | ||||
|         setItem(slot, item, NOOP_CLICK_HANDLER); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Add an item to this inventory, at the first slot possible (first empty slot, or first slot with the exact same item) | ||||
|      * | ||||
|      * @param item    The item to add to this inventory | ||||
|      * @param onClick The handler to call when clicking this item | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public abstract void addItem(PlotItemStack item, PlotInventoryClickHandler onClick); | ||||
|  | ||||
|     /** | ||||
|      * Add an item to this inventory, at the first slot possible (first empty slot, or first slot with the exact same item) | ||||
|      * | ||||
|      * @param item The item to add to this inventory | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public void addItem(PlotItemStack item) { | ||||
|         addItem(item, NOOP_CLICK_HANDLER); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Opens this inventory | ||||
|      * | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public abstract void open(); | ||||
|  | ||||
|     /** | ||||
|      * Close this inventory | ||||
|      * | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public abstract void close(); | ||||
|  | ||||
|     public abstract I toPlatformItem(PlotItemStack item); | ||||
|  | ||||
|     /** | ||||
|      * @return the size of this inventory (must be a multiple of 9) | ||||
|      * @since TODO | ||||
|      */ | ||||
|     public int size() { | ||||
|         return size; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the associated player of this inventory | ||||
|      * @return {@link PlotPlayer} | ||||
|      */ | ||||
|     public PlotPlayer<P> player() { | ||||
|         return player; | ||||
|     } | ||||
|  | ||||
|     protected Caption titleCaption() { | ||||
|         return titleCaption; | ||||
|     } | ||||
|  | ||||
|     protected TagResolver[] titleResolvers() { | ||||
|         return titleResolvers; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.util.gui; | ||||
|  | ||||
| import com.plotsquared.core.plot.PlotItemStack; | ||||
|  | ||||
| public interface PlotInventoryClickHandler { | ||||
|  | ||||
|     void handle(PlotItemStack itemStack, PlotInventoryClickType clickType); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,37 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.util.gui; | ||||
|  | ||||
| public enum PlotInventoryClickType { | ||||
|  | ||||
|     LEFT, | ||||
|     SHIFT_LEFT, | ||||
|     RIGHT, | ||||
|     SHIFT_RIGHT, | ||||
|     MIDDLE, | ||||
|     OTHER | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,50 @@ | ||||
| /* | ||||
|  *       _____  _       _    _____                                _ | ||||
|  *      |  __ \| |     | |  / ____|                              | | | ||||
|  *      | |__) | | ___ | |_| (___   __ _ _   _  __ _ _ __ ___  __| | | ||||
|  *      |  ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | | ||||
|  *      | |    | | (_) | |_ ____) | (_| | |_| | (_| | | |  __/ (_| | | ||||
|  *      |_|    |_|\___/ \__|_____/ \__, |\__,_|\__,_|_|  \___|\__,_| | ||||
|  *                                    | | | ||||
|  *                                    |_| | ||||
|  *            PlotSquared plot management system for Minecraft | ||||
|  *               Copyright (C) 2014 - 2022 IntellectualSites | ||||
|  * | ||||
|  *     This program is free software: you can redistribute it and/or modify | ||||
|  *     it under the terms of the GNU General Public License as published by | ||||
|  *     the Free Software Foundation, either version 3 of the License, or | ||||
|  *     (at your option) any later version. | ||||
|  * | ||||
|  *     This program is distributed in the hope that it will be useful, | ||||
|  *     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *     GNU General Public License for more details. | ||||
|  * | ||||
|  *     You should have received a copy of the GNU General Public License | ||||
|  *     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package com.plotsquared.core.util.gui; | ||||
|  | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; | ||||
|  | ||||
| /** | ||||
|  * Provider for creating a {@link PlotInventory} | ||||
|  * | ||||
|  * @param <P> The platform player | ||||
|  * @param <I> The platform item | ||||
|  */ | ||||
| public interface PlotInventoryProvider<P, I> { | ||||
|  | ||||
|     /** | ||||
|      * Creates a new {@link PlotInventory} based on the passed data for the current platform. | ||||
|      * | ||||
|      * @param size           The size of the inventory (must be a multiple of 9) | ||||
|      * @param titleCaption   The title for the inventory | ||||
|      * @param titleResolvers The (optional) placeholder resolvers for the inventory | ||||
|      * @return The platform inventory | ||||
|      */ | ||||
|     PlotInventory<P, I> createInventory(PlotPlayer<?> player, int size, Caption titleCaption, TagResolver... titleResolvers); | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user