mirror of
https://github.com/trainerlord/WorldSystem.git
synced 2024-12-02 13:23:21 +01:00
Delete gui.java
This commit is contained in:
parent
ecaf605f76
commit
16fbdc3f1b
@ -1,461 +0,0 @@
|
||||
package com.samjakob.spiguitest;
|
||||
|
||||
import com.samjakob.spigui.menu.SGMenu;
|
||||
import com.samjakob.spigui.SpiGUI;
|
||||
import com.samjakob.spigui.buttons.SGButton;
|
||||
import com.samjakob.spigui.item.ItemBuilder;
|
||||
import de.butzlabben.world.config.MessageConfig;
|
||||
import de.butzlabben.world.wrapper.WorldPlayer;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
//import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
/**
|
||||
* @author SamJakob
|
||||
* @version 1.3.0
|
||||
*/
|
||||
public class WorldSystem extends JavaPlugin {
|
||||
|
||||
private static SpiGUI spiGUI;
|
||||
|
||||
// Start: variables for demonstration purposes.
|
||||
//private final Map<Player, Integer> gems = new HashMap<>();
|
||||
// End: variables for demonstration purposes.
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
spiGUI = new SpiGUI(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
|
||||
}
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage("You are not a player");
|
||||
return true;
|
||||
}
|
||||
WorldPlayer wp = new WorldPlayer((Player) sender);
|
||||
if (!wp.isOnSystemWorld()) {
|
||||
sender.sendMessage(MessageConfig.getNotOnWorld());
|
||||
return true;
|
||||
}
|
||||
if (!wp.isOwnerofWorld()) {
|
||||
sender.sendMessage(MessageConfig.getNoPermission());
|
||||
return true;
|
||||
}
|
||||
Player player = (Player) sender;
|
||||
//((Player) sender).openInventory(new WorldSystemGUI().getInventory((Player) sender));
|
||||
return true;
|
||||
}
|
||||
|
||||
// START DEFAULT INVENTORY
|
||||
|
||||
// This is a menu intended to showcase general functionality.
|
||||
|
||||
if (args.length == 0) {
|
||||
// Open a test SpiGUI menu.
|
||||
SGMenu myAwesomeMenu = SpiGUITest.getSpiGUI().create("&c&lSpiGUI &c(Page {currentPage}/{maxPage})", 3);
|
||||
|
||||
myAwesomeMenu.setToolbarBuilder((slot, page, defaultType, menu) -> {
|
||||
if (slot == 8) {
|
||||
return new SGButton(
|
||||
new ItemBuilder(Material.EMERALD)
|
||||
.name(String.format("&a&l%d gems", gems.getOrDefault(player, 5)))
|
||||
.lore(
|
||||
"&aUse gems to buy cosmetics",
|
||||
"&aand other items in the store!",
|
||||
"",
|
||||
"&7&o(Click to add more)"
|
||||
)
|
||||
.build()
|
||||
).withListener((event) -> {
|
||||
gems.put(player, gems.getOrDefault(player, 5) + 5);
|
||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a&l&oSUCCESS! &aYou have been given &25 &agems!"));
|
||||
menu.refreshInventory(event.getWhoClicked());
|
||||
});
|
||||
}
|
||||
|
||||
// Fallback to rendering the default button for a slot.
|
||||
return spiGUI.getDefaultToolbarBuilder().buildToolbarButton(slot, page, defaultType, menu);
|
||||
|
||||
// Or, alternatively, to render a button when NEITHER a custom per-inventory button OR a fallback
|
||||
// button has been defined:
|
||||
// (Comment above line and uncomment below to enable this)
|
||||
|
||||
/*
|
||||
|
||||
// Ensure fallbackButton is not null before rendering. If it is, render an alternative button
|
||||
// instead.
|
||||
SGButton fallbackButton = spiGUI.getDefaultToolbarBuilder().buildToolbarButton(slot, page, defaultType, menu);
|
||||
if (fallbackButton != null) return fallbackButton;
|
||||
|
||||
return new SGButton(new ItemBuilder(Material.BARRIER).name(" ").build());
|
||||
|
||||
// You could check if defaultType is UNASSIGNED, however this won't deal with the cases when the
|
||||
// previous or next button is not shown (there will be an empty space).
|
||||
|
||||
*/
|
||||
});
|
||||
|
||||
myAwesomeMenu.setButton(0, 10, new SGButton(
|
||||
new ItemBuilder(Material.SKULL_ITEM)
|
||||
.skullOwner(player.getName())
|
||||
.name("&e&l" + player.getDisplayName())
|
||||
.lore(
|
||||
"&eGame Mode: &6" + player.getGameMode().toString(),
|
||||
"&eLocation: &6" + String.format(
|
||||
"%.0f, %.0f, %.0f",
|
||||
player.getLocation().getX(),
|
||||
player.getLocation().getY(),
|
||||
player.getLocation().getZ()
|
||||
),
|
||||
"&eExperience: &6" + player.getTotalExperience()
|
||||
)
|
||||
.build()
|
||||
));
|
||||
|
||||
myAwesomeMenu.setButton(1, 0, new SGButton(
|
||||
new ItemBuilder(Material.GOLD_ORE)
|
||||
.name("&6Get rich quick!")
|
||||
.build()
|
||||
).withListener(event -> {
|
||||
Inventory playerInventory = event.getWhoClicked().getInventory();
|
||||
|
||||
IntStream.range(0, 9).forEach(hotBarSlot -> playerInventory.setItem(
|
||||
hotBarSlot, new ItemBuilder(
|
||||
event.getCurrentItem().getType() == Material.GOLD_ORE
|
||||
? Material.GOLD_BLOCK
|
||||
: event.getCurrentItem().getType()
|
||||
).amount(64).build()
|
||||
));
|
||||
|
||||
event.getWhoClicked().sendMessage(
|
||||
ChatColor.translateAlternateColorCodes('&',
|
||||
event.getCurrentItem().getType() == Material.GOLD_ORE
|
||||
? "&e&lYou are now rich!"
|
||||
: "&7&lYou are now poor."
|
||||
)
|
||||
);
|
||||
|
||||
Material newMaterial = event.getCurrentItem().getType() == Material.GOLD_ORE
|
||||
? Material.DIRT
|
||||
: Material.GOLD_ORE;
|
||||
|
||||
myAwesomeMenu.getButton(1, 0).setIcon(
|
||||
new ItemBuilder(newMaterial).name(
|
||||
newMaterial == Material.GOLD_ORE ? "&6Get rich quick!" : "&7Get poor quick!"
|
||||
).amount(1).build()
|
||||
);
|
||||
|
||||
myAwesomeMenu.refreshInventory(event.getWhoClicked());
|
||||
((Player) event.getWhoClicked()).updateInventory();
|
||||
}));
|
||||
|
||||
AtomicReference<BukkitTask> borderRunnable = new AtomicReference<>();
|
||||
|
||||
myAwesomeMenu.setOnPageChange(inventory -> {
|
||||
if (inventory.getCurrentPage() != 0) {
|
||||
if (borderRunnable.get() != null) borderRunnable.get().cancel();
|
||||
} else borderRunnable.set(
|
||||
inventory.getCurrentPage() != 0
|
||||
? null
|
||||
: new BukkitRunnable(){
|
||||
|
||||
private final int[] TILES_TO_UPDATE = {
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8,
|
||||
9, 17,
|
||||
18, 19, 20, 21, 22, 23, 24, 25, 26
|
||||
};
|
||||
|
||||
private short currentColor = 1;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
IntStream.range(0, TILES_TO_UPDATE.length).map(i -> TILES_TO_UPDATE.length - i + -1).forEach(
|
||||
index -> myAwesomeMenu.setButton(TILES_TO_UPDATE[index], nextColorButton())
|
||||
);
|
||||
|
||||
currentColor++;
|
||||
if (currentColor >= 15) currentColor = 0;
|
||||
|
||||
myAwesomeMenu.refreshInventory(player);
|
||||
|
||||
}
|
||||
|
||||
private SGButton nextColorButton() {
|
||||
return new SGButton(
|
||||
new ItemBuilder(Material.STAINED_GLASS_PANE)
|
||||
.name("&" + Integer.toHexString(currentColor) + "&lSpiGUI!!!")
|
||||
.data(currentColor)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
}.runTaskTimer(this, 0L, 20L)
|
||||
);
|
||||
});
|
||||
|
||||
myAwesomeMenu.setOnClose(inventory -> {
|
||||
if (borderRunnable.get() != null) borderRunnable.get().cancel();
|
||||
});
|
||||
|
||||
myAwesomeMenu.getOnPageChange().accept(myAwesomeMenu);
|
||||
player.openInventory(myAwesomeMenu.getInventory());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// END DEFAULT INVENTORY
|
||||
|
||||
// The following are additional menus intended to test specific functionality:
|
||||
|
||||
switch (args[0]) {
|
||||
case "inventorySizeTest": {
|
||||
int size;
|
||||
|
||||
if (args.length == 1) {
|
||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&l&oERROR &cYou must specify an item count as an integer."));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
size = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException ex) {
|
||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&l&oERROR &cThe item count must be a valid integer."));
|
||||
return true;
|
||||
}
|
||||
|
||||
// Create a menu with one row, so that pagination values are easy to calculate (each page is a
|
||||
// multiple of 9, then the remainder can just be added to ensure the number of items match up).
|
||||
SGMenu inventorySizeTest = SpiGUITest.getSpiGUI().create("Test Menu", 1);
|
||||
|
||||
IntStream.range(0, size).forEach(i -> inventorySizeTest.addButton(new SGButton(
|
||||
new ItemBuilder(Material.GOLD_ORE).name(String.format("&6Item %d", i + 1))
|
||||
.build()
|
||||
)));
|
||||
|
||||
player.openInventory(inventorySizeTest.getInventory());
|
||||
return true;
|
||||
}
|
||||
|
||||
case "refreshTest": {
|
||||
|
||||
SGMenu refreshTestMenu = SpiGUITest.getSpiGUI().create("&bMatches", 1);
|
||||
|
||||
// Generate 3 to 8 random matches.
|
||||
List<Match> matches = IntStream.range(0, ThreadLocalRandom.current().nextInt(5) + 3)
|
||||
.mapToObj((i) -> Match.generateFakeMatch(true))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (int i = 0; i < matches.size(); i++) {
|
||||
Match match = matches.get(i);
|
||||
|
||||
refreshTestMenu.setButton(i, new SGButton(new ItemBuilder(match.getKit().getIcon())
|
||||
.name(match.getKit().getName())
|
||||
.lore(
|
||||
String.format("&a%s &evs. &a%s", match.getPlayerNames()[0], match.getPlayerNames()[1]),
|
||||
String.format("&fTime: &b%s", match.getTime()),
|
||||
"",
|
||||
String.format("&fKit: &b%s", match.getKit().getName()),
|
||||
String.format("&fArena: &b%s &7(%s)", match.getArena(), match.getKit().getName())
|
||||
)
|
||||
.build()));
|
||||
}
|
||||
|
||||
// Start a refresh task for the menu.
|
||||
AtomicReference<BukkitTask> refreshMatchesTask = new AtomicReference<>(new BukkitRunnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
for (int i = 0; i < matches.size(); i++) {
|
||||
Match match = matches.get(i);
|
||||
|
||||
refreshTestMenu.setButton(i, new SGButton(new ItemBuilder(match.getKit().getIcon())
|
||||
.flag(ItemFlag.HIDE_ATTRIBUTES)
|
||||
.flag(ItemFlag.HIDE_DESTROYS)
|
||||
.flag(ItemFlag.HIDE_PLACED_ON)
|
||||
.flag(ItemFlag.HIDE_POTION_EFFECTS)
|
||||
.name(match.getKit().getName())
|
||||
.lore(
|
||||
String.format("&a%s &evs. &a%s", match.getPlayerNames()[0], match.getPlayerNames()[1]),
|
||||
String.format("&fTime: &b%s", match.getTime()),
|
||||
"",
|
||||
String.format("&fKit: &b%s", match.getKit().getName()),
|
||||
String.format("&fArena: &b%s &7(%s)", match.getArena(), match.getKit().getName())
|
||||
)
|
||||
.build()));
|
||||
}
|
||||
|
||||
refreshTestMenu.refreshInventory(player);
|
||||
}
|
||||
}.runTaskTimer(this, 0L, 20L));
|
||||
|
||||
// Cancel the refresh task when the inventory is closed.
|
||||
refreshTestMenu.setOnClose(menu -> {
|
||||
if (refreshMatchesTask.get() != null) refreshMatchesTask.get().cancel();
|
||||
});
|
||||
|
||||
player.openInventory(refreshTestMenu.getInventory());
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
player.sendMessage("Unrecognized command.");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static SpiGUI getSpiGUI() {
|
||||
return spiGUI;
|
||||
}
|
||||
|
||||
// The following is mock classes/data for the above test GUIs.
|
||||
|
||||
private static class Kit {
|
||||
private final String name;
|
||||
private final ItemStack icon;
|
||||
|
||||
public Kit(String name, ItemStack icon) {
|
||||
this.name = name;
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public ItemStack getIcon() {
|
||||
return this.icon;
|
||||
}
|
||||
}
|
||||
|
||||
private static class Match {
|
||||
|
||||
private enum MatchState {
|
||||
/** Waiting to start. */
|
||||
WAITING,
|
||||
/** Currently ongoing. */
|
||||
ONGOING,
|
||||
/** Ended. */
|
||||
ENDED
|
||||
}
|
||||
|
||||
// Begin mock data.
|
||||
private static final String[] fakePlayerNames = {"MoreHaro", "Pixelle", "SpyPlenty", "Winlink", "Herobrine", "Notch", "Dinnerbone", "CinnamonTown", "TreeMushrooms"};
|
||||
private static final Kit[] fakeKits = {
|
||||
new Kit("Classic Battle", new ItemBuilder(Material.STONE_SWORD).name("&7Classic Battle").build()),
|
||||
new Kit("OP Battle", new ItemBuilder(Material.DIAMOND_SWORD).name("&bOP Battle").build()),
|
||||
new Kit("Classic UHC", new ItemBuilder(Material.GOLDEN_APPLE).name("&eClassic UHC").build()),
|
||||
new Kit("OP UHC", new ItemBuilder(Material.GOLDEN_APPLE).data((short) 1).name("&6OP UHC").build()),
|
||||
};
|
||||
private static final String[] fakeArenas = {"King's Road", "Ilios", "Fort Starr", "The Hopper"};
|
||||
|
||||
/** Generates a Match with fake data. */
|
||||
public static Match generateFakeMatch() { return generateFakeMatch(false); }
|
||||
|
||||
public static Match generateFakeMatch(boolean alreadyStarted) {
|
||||
// Ensure unique values are generated for player1 and player2.
|
||||
int player1 = ThreadLocalRandom.current().nextInt(fakePlayerNames.length);
|
||||
int player2;
|
||||
do {
|
||||
player2 = ThreadLocalRandom.current().nextInt(fakePlayerNames.length);
|
||||
} while (player2 == player1);
|
||||
|
||||
Match fakeMatch = new Match(
|
||||
new String[]{fakePlayerNames[player1], fakePlayerNames[player2]},
|
||||
fakeKits[ThreadLocalRandom.current().nextInt(fakeKits.length)],
|
||||
fakeArenas[ThreadLocalRandom.current().nextInt(fakeArenas.length)]
|
||||
);
|
||||
|
||||
if (alreadyStarted) {
|
||||
// If alreadyStarted specified to true, then generate a match with current time minus up to 5 minutes.
|
||||
fakeMatch.matchStartTime = System.currentTimeMillis()
|
||||
- ThreadLocalRandom.current().nextLong(5 * 60000);
|
||||
}
|
||||
|
||||
return fakeMatch;
|
||||
}
|
||||
// End mock data.
|
||||
|
||||
/** List of players in match. Two players implies a duel. */
|
||||
private final String[] playerNames;
|
||||
|
||||
public String[] getPlayerNames() { return playerNames; }
|
||||
|
||||
/** Match start time in UNIX milliseconds. */
|
||||
private Long matchStartTime;
|
||||
|
||||
/** Match end time in UNIX milliseconds. */
|
||||
private Long matchEndTime;
|
||||
|
||||
/** Name of the kit used for the duel. */
|
||||
private final Kit kit;
|
||||
|
||||
public Kit getKit() { return kit; }
|
||||
|
||||
/** Name of the arena used for the duel. */
|
||||
private final String arena;
|
||||
|
||||
public String getArena() { return arena; }
|
||||
|
||||
public String getTime() {
|
||||
switch (getState()) {
|
||||
case WAITING: return "Waiting...";
|
||||
case ONGOING:
|
||||
case ENDED: {
|
||||
long duration = (matchEndTime != null ? matchEndTime : System.currentTimeMillis()) - matchStartTime;
|
||||
|
||||
long minutes = TimeUnit.MILLISECONDS.toMinutes(duration);
|
||||
long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(minutes);
|
||||
return String.format("%02d:%02d", minutes, seconds);
|
||||
}
|
||||
}
|
||||
|
||||
return "ERROR";
|
||||
}
|
||||
|
||||
public Match(String[] playerNames, Kit kit, String arena) {
|
||||
this.playerNames = playerNames;
|
||||
this.kit = kit;
|
||||
this.arena = arena;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (this.matchStartTime != null) throw new IllegalStateException("Match already started!");
|
||||
this.matchStartTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if (this.matchEndTime != null) throw new IllegalStateException("Match already finished!");
|
||||
this.matchEndTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public MatchState getState() {
|
||||
if (this.matchStartTime == null) return MatchState.WAITING;
|
||||
else if (this.matchEndTime == null) return MatchState.ONGOING;
|
||||
return MatchState.ENDED;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user