-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b8e5f7b
commit 444fc3f
Showing
8 changed files
with
265 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
src/main/java/com/slampvp/factory/command/generic/gamemode/Menu.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.slampvp.factory.command.generic.gamemode; | ||
|
||
import com.slampvp.factory.command.Command; | ||
import com.slampvp.factory.command.FactoryCommand; | ||
import com.slampvp.factory.common.menu.TestMenu; | ||
import com.slampvp.factory.player.Rank; | ||
import net.minestom.server.entity.GameMode; | ||
import net.minestom.server.entity.Player; | ||
|
||
@Command(description = "Open menu.", usage = "/menu", minimumRank = Rank.ADMIN, playerOnly = true) | ||
public class Menu extends FactoryCommand { | ||
public Menu() { | ||
super("menu"); | ||
} | ||
|
||
@Override | ||
public void init() { | ||
addSyntax((sender, context) -> { | ||
Player player = (Player) sender; | ||
|
||
new TestMenu().open(player); | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package com.slampvp.factory.common.menu; | ||
|
||
import net.kyori.adventure.text.TextComponent; | ||
import net.minestom.server.entity.Player; | ||
import net.minestom.server.event.inventory.InventoryCloseEvent; | ||
import net.minestom.server.event.inventory.InventoryOpenEvent; | ||
import net.minestom.server.inventory.Inventory; | ||
import net.minestom.server.inventory.InventoryType; | ||
import org.jetbrains.annotations.NotNull; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public interface Menu { | ||
@NotNull | ||
TextComponent name(); | ||
|
||
@NotNull | ||
InventoryType type(); | ||
|
||
@NotNull | ||
List<MenuItem> items(); | ||
|
||
default Optional<MenuItem> itemBySlot(int slot) { | ||
return items().stream() | ||
.filter(menuItem -> menuItem.slots().contains(slot)) | ||
.findFirst(); | ||
} | ||
|
||
default void open(Player player) { | ||
MenuManager.getInstance().setOpenMenu(player, this); | ||
|
||
Inventory inventory = new Inventory(type(), name()); | ||
|
||
items().forEach(menuItem -> menuItem.slots().forEach(slot -> inventory.setItemStack(slot, menuItem.itemStack()))); | ||
|
||
player.openInventory(inventory); | ||
} | ||
|
||
default void onOpen(InventoryOpenEvent event) { | ||
} | ||
|
||
default void onClose(InventoryCloseEvent event) { | ||
} | ||
|
||
} |
27 changes: 27 additions & 0 deletions
27
src/main/java/com/slampvp/factory/common/menu/MenuItem.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.slampvp.factory.common.menu; | ||
|
||
import net.minestom.server.event.inventory.InventoryPreClickEvent; | ||
import net.minestom.server.item.ItemStack; | ||
|
||
import java.util.List; | ||
|
||
public interface MenuItem { | ||
|
||
List<Integer> slots(); | ||
|
||
ItemStack itemStack(); | ||
|
||
default ClickAction action() { | ||
return new ClickAction() { | ||
}; | ||
} | ||
|
||
interface ClickAction { | ||
default boolean canEquip() { | ||
return false; | ||
} | ||
|
||
default void onClick(InventoryPreClickEvent event) { | ||
} | ||
} | ||
} |
66 changes: 66 additions & 0 deletions
66
src/main/java/com/slampvp/factory/common/menu/MenuListener.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
package com.slampvp.factory.common.menu; | ||
|
||
import net.minestom.server.MinecraftServer; | ||
import net.minestom.server.entity.Player; | ||
import net.minestom.server.event.GlobalEventHandler; | ||
import net.minestom.server.event.inventory.InventoryCloseEvent; | ||
import net.minestom.server.event.inventory.InventoryOpenEvent; | ||
import net.minestom.server.event.inventory.InventoryPreClickEvent; | ||
|
||
import java.util.Optional; | ||
|
||
public class MenuListener { | ||
public MenuListener() { | ||
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler(); | ||
|
||
globalEventHandler.addListener(InventoryPreClickEvent.class, event -> { | ||
Player player = event.getPlayer(); | ||
Optional<Menu> optionalMenu = MenuManager.getInstance().getOpenMenu(player); | ||
|
||
if (optionalMenu.isEmpty()) { | ||
return; | ||
} | ||
|
||
Menu menu = optionalMenu.get(); | ||
int slot = event.getSlot(); | ||
|
||
Optional<MenuItem> optionalMenuItem = menu.itemBySlot(slot); | ||
|
||
if (optionalMenuItem.isEmpty()) { | ||
return; | ||
} | ||
|
||
MenuItem item = optionalMenuItem.get(); | ||
|
||
if (!item.action().canEquip()) { | ||
event.setCancelled(true); | ||
} | ||
|
||
item.action().onClick(event); | ||
}); | ||
|
||
globalEventHandler.addListener(InventoryOpenEvent.class, event -> { | ||
Player player = event.getPlayer(); | ||
Optional<Menu> optionalMenu = MenuManager.getInstance().getOpenMenu(player); | ||
|
||
if (optionalMenu.isEmpty()) { | ||
return; | ||
} | ||
|
||
Menu menu = optionalMenu.get(); | ||
menu.onOpen(event); | ||
}); | ||
|
||
globalEventHandler.addListener(InventoryCloseEvent.class, event -> { | ||
Player player = event.getPlayer(); | ||
Optional<Menu> optionalMenu = MenuManager.getInstance().getOpenMenu(player); | ||
|
||
if (optionalMenu.isEmpty()) { | ||
return; | ||
} | ||
|
||
Menu menu = optionalMenu.get(); | ||
menu.onClose(event); | ||
}); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
src/main/java/com/slampvp/factory/common/menu/MenuManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.slampvp.factory.common.menu; | ||
|
||
import net.minestom.server.entity.Player; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.UUID; | ||
|
||
public final class MenuManager { | ||
private static MenuManager instance; | ||
private final Map<UUID, Menu> openMenus; | ||
|
||
private MenuManager() { | ||
this.openMenus = new HashMap<>(); | ||
} | ||
|
||
public static synchronized MenuManager getInstance() { | ||
if (instance == null) { | ||
instance = new MenuManager(); | ||
} | ||
return instance; | ||
} | ||
|
||
public Optional<Menu> getOpenMenu(Player player) { | ||
return Optional.ofNullable(openMenus.get(player.getUuid())); | ||
} | ||
|
||
public void setOpenMenu(Player player, Menu menu) { | ||
openMenus.put(player.getUuid(), menu); | ||
} | ||
|
||
public void clearOpenMenu(Player player) { | ||
openMenus.remove(player.getUuid()); | ||
} | ||
} |
64 changes: 64 additions & 0 deletions
64
src/main/java/com/slampvp/factory/common/menu/TestMenu.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package com.slampvp.factory.common.menu; | ||
|
||
import net.kyori.adventure.text.Component; | ||
import net.kyori.adventure.text.TextComponent; | ||
import net.minestom.server.event.inventory.InventoryCloseEvent; | ||
import net.minestom.server.event.inventory.InventoryOpenEvent; | ||
import net.minestom.server.event.inventory.InventoryPreClickEvent; | ||
import net.minestom.server.inventory.InventoryType; | ||
import net.minestom.server.item.ItemStack; | ||
import net.minestom.server.item.Material; | ||
import org.jetbrains.annotations.NotNull; | ||
|
||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
import java.util.stream.IntStream; | ||
|
||
public class TestMenu implements Menu { | ||
@Override | ||
public @NotNull TextComponent name() { | ||
return Component.text("test"); | ||
} | ||
|
||
@Override | ||
public @NotNull InventoryType type() { | ||
return InventoryType.CHEST_4_ROW; | ||
} | ||
|
||
@Override | ||
public void onOpen(InventoryOpenEvent event) { | ||
event.getPlayer().sendMessage("open"); | ||
} | ||
|
||
@Override | ||
public void onClose(InventoryCloseEvent event) { | ||
event.getPlayer().sendMessage("close"); | ||
} | ||
|
||
@Override | ||
public @NotNull List<MenuItem> items() { | ||
return List.of( | ||
new MenuItem() { | ||
@Override | ||
public List<Integer> slots() { | ||
return IntStream.range(0,9).boxed().toList(); | ||
} | ||
|
||
@Override | ||
public ItemStack itemStack() { | ||
return ItemStack.of(Material.ACACIA_BOAT); | ||
} | ||
|
||
@Override | ||
public ClickAction action() { | ||
return new ClickAction() { | ||
@Override | ||
public void onClick(InventoryPreClickEvent event) { | ||
System.out.println("click"); | ||
} | ||
}; | ||
} | ||
} | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters