Skip to content

Commit b8fdd28

Browse files
authored
GH-99 Add gui sound click feature
2 parents 219a01b + 2e4c141 commit b8fdd28

8 files changed

Lines changed: 78 additions & 1 deletion

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.github.imdmk.spenttime.configuration.serializer;
2+
3+
import eu.okaeri.configs.schema.GenericsDeclaration;
4+
import eu.okaeri.configs.serdes.DeserializationData;
5+
import eu.okaeri.configs.serdes.ObjectSerializer;
6+
import eu.okaeri.configs.serdes.SerializationData;
7+
import org.bukkit.NamespacedKey;
8+
import org.bukkit.Registry;
9+
import org.bukkit.Sound;
10+
import org.jetbrains.annotations.NotNull;
11+
12+
public class SoundSerializer implements ObjectSerializer<Sound> {
13+
14+
@Override
15+
public boolean supports(@NotNull Class<? super Sound> type) {
16+
return Sound.class.isAssignableFrom(type);
17+
}
18+
19+
@Override
20+
public void serialize(@NotNull Sound sound, @NotNull SerializationData data, @NotNull GenericsDeclaration generics) {
21+
data.setValue(sound.getKeyOrThrow().getKey(), String.class);
22+
}
23+
24+
@Override
25+
public Sound deserialize(@NotNull DeserializationData data, @NotNull GenericsDeclaration generics) {
26+
return Registry.SOUNDS.get(NamespacedKey.minecraft(data.getValue(String.class)));
27+
}
28+
}

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/AbstractGui.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.imdmk.spenttime.feature.gui;
22

3+
import com.github.imdmk.spenttime.feature.gui.configuration.GuiConfiguration;
34
import com.github.imdmk.spenttime.feature.gui.configuration.item.ItemGuiConfiguration;
45
import com.github.imdmk.spenttime.gui.GuiType;
56
import com.github.imdmk.spenttime.task.TaskScheduler;
@@ -9,6 +10,7 @@
910
import dev.triumphteam.gui.guis.Gui;
1011
import dev.triumphteam.gui.guis.GuiItem;
1112
import dev.triumphteam.gui.guis.PaginatedGui;
13+
import org.bukkit.entity.Player;
1214
import org.bukkit.event.inventory.InventoryClickEvent;
1315
import org.jetbrains.annotations.NotNull;
1416

@@ -30,6 +32,20 @@ public AbstractGui(
3032
this.taskScheduler = Objects.requireNonNull(taskScheduler, "task scheduler cannot be null");
3133
}
3234

35+
protected void playSoundIfEnabled(BaseGui gui, Player player, GuiConfiguration.GuiSoundConfiguration soundConfiguration) {
36+
if (!soundConfiguration.enabled) {
37+
return;
38+
}
39+
40+
gui.setDefaultClickAction(event -> {
41+
if (event.getCurrentItem() == null) {
42+
return;
43+
}
44+
45+
player.playSound(player, soundConfiguration.sound, soundConfiguration.volume, soundConfiguration.pitch);
46+
});
47+
}
48+
3349
protected BaseGuiBuilder<?, ?> createGuiBuilder(@NotNull GuiType type) {
3450
return switch (type) {
3551
case STANDARD -> Gui.gui();

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/ParameterizedGui.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ default void prepareBorderItems(@NotNull BaseGui gui) {}
1313

1414
default void prepareNavigationItems(@NotNull BaseGui gui, @NotNull Player viewer, @NotNull T parameter) {}
1515

16+
default void defaultClickAction(@NotNull BaseGui gui, @NotNull Player viewer) {}
17+
1618
void prepareItems(@NotNull BaseGui gui, @NotNull Player viewer, @NotNull T parameter);
1719

1820
default void open(@NotNull Player viewer, @NotNull T parameter) {
@@ -21,6 +23,7 @@ default void open(@NotNull Player viewer, @NotNull T parameter) {
2123
this.prepareBorderItems(gui);
2224
this.prepareItems(gui, viewer, parameter);
2325
this.prepareNavigationItems(gui, viewer, parameter);
26+
this.defaultClickAction(gui, viewer);
2427

2528
gui.open(viewer);
2629
}

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/SimpleGui.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ default void prepareBorderItems(@NotNull BaseGui gui) {}
1313

1414
default void prepareNavigationItems(@NotNull BaseGui gui, @NotNull Player viewer) {}
1515

16+
default void defaultClickAction(@NotNull BaseGui gui, @NotNull Player viewer) {}
17+
1618
void prepareItems(@NotNull BaseGui gui, @NotNull Player viewer);
1719

1820
default void open(@NotNull Player viewer) {
@@ -21,6 +23,7 @@ default void open(@NotNull Player viewer) {
2123
this.prepareBorderItems(gui);
2224
this.prepareItems(gui, viewer);
2325
this.prepareNavigationItems(gui, viewer);
26+
this.defaultClickAction(gui, viewer);
2427

2528
gui.open(viewer);
2629
}

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/configuration/GuiConfiguration.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.github.imdmk.spenttime.configuration.serializer.ComponentSerializer;
55
import com.github.imdmk.spenttime.configuration.serializer.ItemMetaSerializer;
66
import com.github.imdmk.spenttime.configuration.serializer.ItemStackSerializer;
7+
import com.github.imdmk.spenttime.configuration.serializer.SoundSerializer;
78
import com.github.imdmk.spenttime.feature.gui.configuration.item.ItemGui;
89
import com.github.imdmk.spenttime.feature.gui.configuration.item.ItemGuiConfiguration;
910
import com.github.imdmk.spenttime.feature.gui.configuration.item.ItemGuiSerializer;
@@ -14,6 +15,7 @@
1415
import eu.okaeri.configs.serdes.OkaeriSerdesPack;
1516
import net.kyori.adventure.text.Component;
1617
import org.bukkit.Material;
18+
import org.bukkit.Sound;
1719
import org.bukkit.event.inventory.ClickType;
1820
import org.jetbrains.annotations.NotNull;
1921

@@ -97,13 +99,28 @@ public static class ConfirmationGuiConfiguration extends OkaeriConfig {
9799

98100
public ItemGuiConfiguration items = new ItemGuiConfiguration();
99101

102+
public GuiSoundConfiguration sound = new GuiSoundConfiguration();
103+
104+
public static class GuiSoundConfiguration extends OkaeriConfig {
105+
106+
public boolean enabled = true;
107+
108+
@Comment("# List of available sounds: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html")
109+
public Sound sound = Sound.ENTITY_EXPERIENCE_ORB_PICKUP;
110+
111+
public float volume = 1.1F;
112+
113+
public float pitch = 1F;
114+
}
115+
100116
@Override
101117
public @NotNull OkaeriSerdesPack getSerdesPack() {
102118
return registry -> {
103119
registry.register(new ComponentSerializer());
104120
registry.register(new ItemMetaSerializer());
105121
registry.register(new ItemStackSerializer());
106122
registry.register(new ItemGuiSerializer());
123+
registry.register(new SoundSerializer());
107124
};
108125
}
109126

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/configuration/item/ItemGuiConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class ItemGuiConfiguration extends OkaeriConfig {
1818

1919
@Comment({"# Exit item", "# Set to -1 to disable"})
2020
public ItemGui exitItem = ItemGui.builder()
21-
.material(Material.ARROW)
21+
.material(Material.ACACIA_BUTTON)
2222
.name("<red>Quit")
2323
.lore(" ")
2424
.slot(49)

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/feature/gui/implementation/ConfirmationGui.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ public void prepareItems(@NotNull BaseGui gui, @NotNull Player viewer, @NotNull
6464
gui.setItem(cancelItem.slot(), cancelGuiItem);
6565
}
6666

67+
@Override
68+
public void defaultClickAction(@NotNull BaseGui gui, @NotNull Player viewer) {
69+
this.playSoundIfEnabled(gui, viewer, this.guiConfiguration.sound);
70+
}
71+
6772
@Override
6873
public @NotNull String getIdentifier() {
6974
return GUI_IDENTIFIER;

spenttime-plugin/src/main/java/com/github/imdmk/spenttime/user/gui/SpentTimeTopGui.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public void prepareItems(@NotNull BaseGui gui, @NotNull Player viewer, @NotNull
103103
}
104104
}
105105

106+
@Override
107+
public void defaultClickAction(@NotNull BaseGui gui, @NotNull Player viewer) {
108+
this.playSoundIfEnabled(gui, viewer, this.guiConfiguration.sound);
109+
}
110+
106111
private Formatter createFormatter(User user, int position) {
107112
return new Formatter()
108113
.placeholder("{PLAYER}", user.getName())

0 commit comments

Comments
 (0)