diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/settings/SettingsGui.java b/duels-plugin/src/main/java/me/realized/duels/gui/settings/SettingsGui.java index 3661b19..fd31c79 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/settings/SettingsGui.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/settings/SettingsGui.java @@ -22,11 +22,13 @@ import org.bukkit.inventory.ItemStack; public class SettingsGui extends SinglePageGui { + // Option buttons are centered in the middle row (slots 9-16). Center is slot 13. + // The bottom row is reserved for SEND / CANCEL, so options never collide with them. private static final int[][] PATTERNS = { {13}, {12, 14}, {12, 13, 14}, - {12, 13, 14, 22}, + {11, 12, 14, 15}, {11, 12, 13, 14, 15}, {10, 11, 12, 14, 15, 16}, {10, 11, 12, 13, 14, 15, 16} @@ -36,9 +38,10 @@ public class SettingsGui extends SinglePageGui { super(plugin, plugin.getLang().getMessage("GUI.settings.title"), 3); final Config config = plugin.getConfiguration(); final ItemStack spacing = Items.from(config.getSettingsFillerType(), config.getSettingsFillerData()); - Slots.run(2, 7, slot -> inventory.setItem(slot, spacing)); - Slots.run(11, 16, slot -> inventory.setItem(slot, spacing)); - Slots.run(20, 25, slot -> inventory.setItem(slot, spacing)); + // Fill the whole window first, then paint buttons on top so nothing is left as a gap. + Slots.run(0, 27, slot -> inventory.setItem(slot, spacing)); + + // Top row: request details, centered. set(4, new RequestDetailsButton(plugin)); final List buttons = new ArrayList<>(); @@ -68,6 +71,7 @@ public class SettingsGui extends SinglePageGui { buttons.add(new ItemBettingButton(plugin)); } + // Middle row: option buttons, centered. PATTERNS supports up to 7 options (the max possible). if (!buttons.isEmpty()) { final int[] pattern = PATTERNS[buttons.size() - 1]; @@ -76,7 +80,8 @@ public class SettingsGui extends SinglePageGui { } } - set(0, 2, 3, new RequestSendButton(plugin)); - set(7, 9, 3, new CancelButton(plugin)); + // Bottom row: SEND on the left half, CANCEL on the right half, divider in the center. + set(18, 22, 1, new RequestSendButton(plugin)); + set(23, 27, 1, new CancelButton(plugin)); } } diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorMyInventoryButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorMyInventoryButton.java index 88944b7..ddedaf5 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorMyInventoryButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorMyInventoryButton.java @@ -4,14 +4,14 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.Permissions; import me.realized.duels.gui.BaseButton; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; import org.bukkit.entity.Player; public class MirrorMyInventoryButton extends BaseButton { public MirrorMyInventoryButton(final DuelsPlugin plugin) { - super(plugin, ItemBuilder.of(Material.ENDER_CHEST).name(plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-my-inventory.name")).build()); + super(plugin, ItemBuilder.of(Items.HEAD.clone()).name(plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-my-inventory.name")).build()); } @Override @@ -21,6 +21,9 @@ public class MirrorMyInventoryButton extends BaseButton { return; } + // Display the request sender's (challenger's) head so it is obvious whose inventory is cloned. + setOwner(player); + final Settings settings = settingManager.getSafely(player); final String value = settings.isMirrorMyInventory() ? lang.getMessage("GENERAL.enabled") : lang.getMessage("GENERAL.disabled"); final String lore = plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-my-inventory.lore", "mirror_my_inventory", value); diff --git a/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorTheirInventoryButton.java b/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorTheirInventoryButton.java index 8e646c6..5fe3b78 100644 --- a/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorTheirInventoryButton.java +++ b/duels-plugin/src/main/java/me/realized/duels/gui/settings/buttons/MirrorTheirInventoryButton.java @@ -4,14 +4,16 @@ import me.realized.duels.DuelsPlugin; import me.realized.duels.Permissions; import me.realized.duels.gui.BaseButton; import me.realized.duels.setting.Settings; +import me.realized.duels.util.compat.Items; import me.realized.duels.util.inventory.ItemBuilder; -import org.bukkit.Material; +import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class MirrorTheirInventoryButton extends BaseButton { public MirrorTheirInventoryButton(final DuelsPlugin plugin) { - super(plugin, ItemBuilder.of(Material.TRAPPED_CHEST).name(plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-their-inventory.name")).build()); + super(plugin, ItemBuilder.of(Items.HEAD.clone()).name(plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-their-inventory.name")).build()); } @Override @@ -22,6 +24,17 @@ public class MirrorTheirInventoryButton extends BaseButton { } final Settings settings = settingManager.getSafely(player); + + // Display the opponent's head so it is obvious whose inventory is cloned. + final UUID targetId = settings.getTarget(); + + if (targetId != null) { + final Player target = Bukkit.getPlayer(targetId); + + if (target != null) { + setOwner(target); + } + } final String value = settings.isMirrorTheirInventory() ? lang.getMessage("GENERAL.enabled") : lang.getMessage("GENERAL.disabled"); final String lore = plugin.getLang().getMessage("GUI.settings.buttons.use-mirror-their-inventory.lore", "mirror_their_inventory", value); setLore(lore.split("\n")); diff --git a/duels-plugin/src/main/resources/lang.yml b/duels-plugin/src/main/resources/lang.yml index ea8b8bb..a1941a0 100644 --- a/duels-plugin/src/main/resources/lang.yml +++ b/duels-plugin/src/main/resources/lang.yml @@ -22,9 +22,9 @@ GENERAL: arena-selector: 'Arena Selector' item-betting: 'Item Betting' betting: 'Betting' - own-inventory: 'Each Use Own Inventory' - mirror-my-inventory: 'Each Use My Inventory' - mirror-their-inventory: 'Each Use Their Inventory' + own-inventory: 'Each Uses Own Inventory' + mirror-my-inventory: 'Both Use My Inventory' + mirror-their-inventory: 'Both Use Their Inventory' ERROR: @@ -63,7 +63,7 @@ ERROR: target: '{PREFIX} &c%name% is already in a duel.' already-in-queue: '{PREFIX} &cYou cannot do this while in a queue.' prevent-teleportation: '{PREFIX} &cCannot teleport to a player in a duel.' - mode-unselected: '{PREFIX} &cChoose a kit or enable one of: Each Use Own Inventory, Each Use My Inventory, Each Use Their Inventory.' + mode-unselected: '{PREFIX} &cChoose a kit or enable one of: Each Uses Own Inventory, Both Use My Inventory, Both Use Their Inventory.' mode-fixed: '{PREFIX} &cYou are not allowed to change inventory mode here.' spectate: already-spectating: @@ -116,9 +116,9 @@ COMMAND: - '{LINE}' - '&7Duel request sent to &4%name%&7.' - '&6- &7Kit: &d%kit%' - - '&6- &7Each Use Own Inventory: &r%own_inventory%' - - '&6- &7Each Use My Inventory: &r%mirror_my_inventory%' - - '&6- &7Each Use Their Inventory: &r%mirror_their_inventory%' + - '&6- &7Each Uses Own Inventory: &r%own_inventory%' + - '&6- &7Both Use My Inventory: &r%mirror_my_inventory%' + - '&6- &7Both Use Their Inventory: &r%mirror_their_inventory%' - '&6- &7Arena: &e%arena%' - '&6- &7Bet: &B%bet_amount% Diamond(s)' - '{LINE}' @@ -126,9 +126,9 @@ COMMAND: - '{LINE}' - '&7Duel request received from &4%name%&7.' - '&6- &7Kit: &d%kit%' - - '&6- &7Each Use Own Inventory: &r%own_inventory%' - - '&6- &7Each Use My Inventory: &r%mirror_my_inventory%' - - '&6- &7Each Use Their Inventory: &r%mirror_their_inventory%' + - '&6- &7Each Uses Own Inventory: &r%own_inventory%' + - '&6- &7Both Use My Inventory: &r%mirror_my_inventory%' + - '&6- &7Both Use Their Inventory: &r%mirror_their_inventory%' - '&6- &7Arena: &e%arena%' - '&6- &7Bet: &B%bet_amount% Diamond(s)' clickable-text: @@ -293,7 +293,7 @@ COMMAND: DUEL: start-failure: - mode-unselected: '{FAIL_PREFIX} &cChoose a kit or enable one of: Each Use Own Inventory, Each Use My Inventory, Each Use Their Inventory.' + mode-unselected: '{FAIL_PREFIX} &cChoose a kit or enable one of: Each Uses Own Inventory, Both Use My Inventory, Both Use Their Inventory.' player-is-dead: '{FAIL_PREFIX} You or your opponent is not alive!' in-blacklisted-world: '{FAIL_PREFIX} You or your opponent is in a blacklisted world!' is-tagged: '{FAIL_PREFIX} You or your opponent is in combat!' @@ -359,53 +359,58 @@ GUI: lore: - '&7Opponent: &4%opponent%' - '&7Kit: &d%kit%' - - '&7Each Use Own Inventory: &r%own_inventory%' - - '&7Each Use My Inventory: &r%mirror_my_inventory%' - - '&7Each Use Their Inventory: &r%mirror_their_inventory%' + - '&7Each Uses Own Inventory: &r%own_inventory%' + - '&7Both Use My Inventory: &r%mirror_my_inventory%' + - '&7Both Use Their Inventory: &r%mirror_their_inventory%' - '&7Arena: &e%arena%' - '&7Bet: &B%bet_amount% Diamond(s)' kit-selector: - name: '&2Kit Selection' + name: '&2Use a Kit &7(Sword)' lore: - - '&7Selected Kit: &d%kit%' + - '&7Both duelists fight with the same' + - '&7preset kit chosen here.' - ' ' - - '&aClick to Change Kit!' + - '&7Selected Kit: &d%kit%' + - '&aClick to choose a kit.' lore-no-permission: - '&cYou do not have permission to' - '&cuse this option.' use-own-inventory: - name: '&9Each Use Own Inventory' + name: '&aEach Uses Own Inventory &7(Chest)' lore: - - '&7Each duelist fights with an identical CLONE of' + - '&7Both duelists fight with a CLONE of' - '&7their OWN inventory and armor.' + - '&7Each keeps their own gear.' - '&7Originals are restored after the match.' - - '&7Each Use Own Inventory: &r%own_inventory%' - ' ' - - '&aClick to Toggle Each Use Own Inventory!' + - '&7Currently: &r%own_inventory%' + - '&aClick to toggle.' lore-no-permission: - '&cYou do not have permission to' - '&cuse this option.' use-mirror-my-inventory: - name: '&9Each Use My Inventory' + name: '&bBoth Use My Inventory &7(Your Head)' lore: - - '&7Both duelists fight with an identical CLONE of' - - '&7YOUR inventory and armor (request sender).' + - '&7Both duelists fight with a CLONE of' + - '&7YOUR inventory and armor (the challenger).' + - '&7You both get the same gear: yours.' - '&7Originals are restored after the match.' - - '&7Each Use My Inventory: &r%mirror_my_inventory%' - ' ' - - '&aClick to Toggle Each Use My Inventory!' + - '&7Currently: &r%mirror_my_inventory%' + - '&aClick to toggle.' lore-no-permission: - '&cYou do not have permission to' - '&cuse this option.' use-mirror-their-inventory: - name: '&9Each Use Their Inventory' + name: '&eBoth Use Their Inventory &7(Opponent Head)' lore: - - '&7Both duelists fight with an identical CLONE of' + - '&7Both duelists fight with a CLONE of' - '&7the OPPONENT''s inventory and armor.' + - '&7You both get the same gear: theirs.' - '&7Originals are restored after the match.' - - '&7Each Use Their Inventory: &r%mirror_their_inventory%' - ' ' - - '&aClick to Toggle Each Use Their Inventory!' + - '&7Currently: &r%mirror_their_inventory%' + - '&aClick to toggle.' lore-no-permission: - '&cYou do not have permission to' - '&cuse this option.'