Modify the GUI a bit to make it easier to move around in

This commit is contained in:
SeanOMik 2020-09-07 18:16:39 -05:00
parent 0c24e0bd31
commit 0241704cf6
No known key found for this signature in database
GPG Key ID: FA4D55AC05268A88
11 changed files with 94 additions and 289 deletions

View File

@ -4,7 +4,7 @@
<groupId>net.seanomik</groupId>
<artifactId>energeticstorage</artifactId>
<name>EnergeticStorage</name>
<version>0.1-SNAPSHOT</version>
<version>0.4-SNAPSHOT</version>
<build>
<defaultGoal>clean package</defaultGoal>
<resources>
@ -25,22 +25,6 @@
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.15.2_\plugins\EnergeticStorage-MC-v1.15.X-v${project.version}.jar</outputFile>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>shade</id>
@ -48,16 +32,16 @@
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>de.tr7zw.changeme.nbtapi</pattern>
<shadedPattern>de.tr7zw.nbtapi.energeticstorage</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
<configuration>
<relocations>
<relocation>
<pattern>de.tr7zw.changeme.nbtapi</pattern>
<shadedPattern>de.tr7zw.nbtapi</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
</plugins>
</build>
@ -75,38 +59,16 @@
<url>https://repo.codemc.org/repository/maven-public/</url>
</repository>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/maven-repository</url>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.15.2-R0.1-SNAPSHOT</version>
<artifactId>spigot</artifactId>
<version>1.14-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>gson</artifactId>
<groupId>com.google.code.gson</groupId>
</exclusion>
<exclusion>
<artifactId>bungeecord-chat</artifactId>
<groupId>net.md-5</groupId>
</exclusion>
<exclusion>
<artifactId>snakeyaml</artifactId>
<groupId>org.yaml</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<properties>
@ -114,3 +76,4 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -6,7 +6,7 @@
<groupId>net.seanomik</groupId>
<artifactId>energeticstorage</artifactId>
<version>0.4-SNAPSHOT</version>
<version>0.4.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>EnergeticStorage</name>
@ -47,10 +47,12 @@
</relocation>
</relocations>
<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.14.4_\plugins\EnergeticStorage-v${project.version}.jar</outputFile>
<!--<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.14.4_\plugins\EnergeticStorage-v${project.version}.jar</outputFile>-->
<!--<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.15.2_\plugins\EnergeticStorage-v${project.version}.jar</outputFile>-->
<!--<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.16.1_\plugins\EnergeticStorage-MC-v${project.version}.jar</outputFile>-->
<!--<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_1.16.2_\plugins\EnergeticStorage-MC-v${project.version}.jar</outputFile>-->
<!--<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_PAPER_1.16.1_\plugins\EnergeticStorage-v${project.version}.jar</outputFile>-->
<outputFile>D:\Code\java\spigotPlugins\_TEST_SERVER_PAPER_1.16.2_\plugins\EnergeticStorage-v${project.version}.jar</outputFile>
</configuration>
</execution>
</executions>
@ -99,7 +101,7 @@
<dependency>
<groupId>com.github.WesJD.AnvilGUI</groupId>
<artifactId>anvilgui</artifactId>
<version>ef71db62ec</version>
<version>master-cee0befbaf-1</version>
</dependency>
</dependencies>
</project>

View File

@ -39,7 +39,6 @@ public final class EnergeticStorage extends JavaPlugin implements Listener {
private void registerListener() {
getServer().getPluginManager().registerEvents(Reference.ES_TERMINAL_GUI, this);
getServer().getPluginManager().registerEvents(Reference.ES_SYSTEM_GUI, this);
getServer().getPluginManager().registerEvents(Reference.ES_DRIVE_GUI, this);
getServer().getPluginManager().registerEvents(Reference.ES_SYSTEM_SECURITY_GUI, this);
getServer().getPluginManager().registerEvents(new PlayerInteractListener(), this);

View File

@ -180,7 +180,7 @@ public class ESDriveGUI implements InventoryHolder, Listener {
case SWAP:
break;
case SHIFT_IN:
if (Utils.isItemValid(clickedItem)) {
if (Utils.isItemValid(clickedItem) && Utils.isItemADrive(clickedItem)) {
event.setCancelled(true);
// Add the item into the player's inventory
@ -199,7 +199,7 @@ public class ESDriveGUI implements InventoryHolder, Listener {
break;
case INTO_HALF:
case INTO:
if (Utils.isItemValid(cursor)) {
if (Utils.isItemValid(cursor) && Utils.isItemADrive(cursor)) {
NBTItem clickedNBT = new NBTItem(cursor);
if (clickedNBT.hasKey("ES_Drive") && clickedNBT.getBoolean("ES_Drive")) {
@ -214,17 +214,18 @@ public class ESDriveGUI implements InventoryHolder, Listener {
case SHIFT_OUT:
case OUT_HALF:
case OUT:
if (slot == 0) {
if (slot == 0) { // Back button.
player.closeInventory();
Reference.ES_SYSTEM_GUI.initializeItems(player, esSystem);
Reference.ES_SYSTEM_GUI.openInventory(player, esSystem);
Reference.ES_TERMINAL_GUI.openInventory(player, esSystem);
} else if (slot != 1 && slot != 7 && slot != 8) {
event.setCancelled(false);
if (Utils.isItemADrive(cursor)) {
event.setCancelled(false);
List<ESDrive> drives = esSystem.getESDrives();
drives.remove(slot - 2);
esSystem.setESDrives(drives);
List<ESDrive> drives = esSystem.getESDrives();
drives.remove(slot - 2);
esSystem.setESDrives(drives);
}
}
break;
case INVENTORY_CLICK:

View File

@ -1,218 +0,0 @@
package net.seanomik.energeticstorage.gui;
import net.seanomik.energeticstorage.files.PlayersFile;
import net.seanomik.energeticstorage.objects.ESDrive;
import net.seanomik.energeticstorage.objects.ESSystem;
import net.seanomik.energeticstorage.utils.Reference;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.*;
public class ESSystemGUI implements InventoryHolder, Listener {
private final Inventory inv;
private final String title = "ES System";
private Map<Player, ESSystem> openSystems = new HashMap<>();
public ESSystemGUI() {
inv = Bukkit.createInventory(this, 9, title);
}
@Override
public Inventory getInventory() {
return inv;
}
// You can call this whenever you want to put the items in
public void initializeItems(Player player, ESSystem openSystem) {
for (int i = 0; i < inv.getSize(); i++) {
inv.setItem(i, createGuiItem(Material.BLACK_STAINED_GLASS_PANE, ""));
}
// Store the players open system
if (openSystems.containsKey(player)) {
openSystems.replace(player, openSystem);
} else {
openSystems.put(player, openSystem);
}
int maxSpace = 0;
int filledSpace = 0;
int filledTypes = 0;
for (ESDrive drive : openSystem.getESDrives()) {
maxSpace += drive.getSize();
filledSpace += drive.getFilledSpace();
filledTypes += drive.getFilledTypes();
}
// Get color of items text
ChatColor spaceColor = ChatColor.GREEN;
if (filledSpace >= maxSpace * 0.8) {
spaceColor = ChatColor.RED;
} else if (filledSpace >= maxSpace * 0.5) {
spaceColor = ChatColor.YELLOW;
}
// Get color of types text
ChatColor itemsColor = ChatColor.GREEN;
if (filledTypes >= Reference.MAX_DRIVE_TYPES * 0.8) {
itemsColor = ChatColor.RED;
} else if (filledTypes >= Reference.MAX_DRIVE_TYPES * 0.5) {
itemsColor = ChatColor.YELLOW;
}
List<String> lore = new ArrayList<>();
lore.add(ChatColor.BLUE + "Filled Items: " + spaceColor + filledSpace + ChatColor.BLUE + "/" + ChatColor.GREEN + maxSpace);
lore.add(ChatColor.BLUE + "Filled Types: " + itemsColor + filledTypes + ChatColor.BLUE + "/" + ChatColor.GREEN + Reference.MAX_DRIVE_TYPES);
inv.setItem(5, createGuiItem(Material.GLASS_PANE, "Drives", lore));
inv.setItem(4, createGuiItem(Material.IRON_BARS, "Security"));
inv.setItem(3, createGuiItem(Material.CHEST, "Terminal"));
}
private ItemStack createGuiItem(Material material, String name, List<String> description) {
ItemStack item = new ItemStack(material, 1);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
meta.setLore(description);
item.setItemMeta(meta);
return item;
}
private ItemStack createGuiItem(Material material, List<String> description) {
ItemStack item = new ItemStack(material, 1);
ItemMeta meta = item.getItemMeta();
meta.setLore(description);
item.setItemMeta(meta);
return item;
}
private ItemStack createGuiItem(Material material, String name) {
ItemStack item = new ItemStack(material, 1);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
// You can open the inventory with this
public void openInventory(Player p, ESSystem esSystem) {
if (openSystems.containsKey(p)) {
openSystems.replace(p, esSystem);
} else {
openSystems.put(p, esSystem);
}
p.openInventory(inv);
}
private enum ClickType {
NONE,
SWAP,
SWAP_RIGHT_CLICK,
INTO,
INTO_HALF,
OUT,
OUT_HALF,
SHIFT_OUT,
SHIFT_IN,
INVENTORY_CLICK
}
private ClickType findClickType(InventoryClickEvent event) {
Inventory inventory = event.getClickedInventory();
if (inventory == null || inventory.getHolder() == null || inventory.getHolder() != this) {
// Check for a shift click or bottom inventory click.
if (event.getView().getTitle().equals(title)) {
return (event.isShiftClick()) ? ClickType.SHIFT_IN : ClickType.INVENTORY_CLICK;
}
return ClickType.NONE;
}
ItemStack clickedItem = event.getCurrentItem();
ItemStack cursor = event.getCursor();
if ((clickedItem == null || clickedItem.getType() == Material.AIR) && (cursor == null || cursor.getType() == Material.AIR)) {
return ClickType.NONE;
} else if ( (clickedItem == null || clickedItem.getType() == Material.AIR) && (cursor != null || cursor.getType() != Material.AIR) ) {
return (event.isLeftClick()) ? ClickType.INTO : ClickType.INTO_HALF;
} else if (cursor == null || cursor.getType() == Material.AIR) {
return (event.isShiftClick()) ? ClickType.SHIFT_OUT : (event.isLeftClick()) ? ClickType.OUT : ClickType.OUT_HALF;
}
return (event.isLeftClick()) ? ClickType.SWAP : ClickType.SWAP_RIGHT_CLICK;
}
// Remove cached player data
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
Inventory inventory = event.getInventory();
if (inventory == null || inventory.getHolder() == null || inventory.getHolder() != this) {
return;
} else {
Player player = (Player) event.getPlayer();
openSystems.remove(player);
}
}
// Check for clicks on items
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
ClickType clickType = findClickType(event);
if (clickType != ClickType.NONE) {
event.setCancelled(true);
Player player = (Player) event.getWhoClicked();
ItemStack clickedItem = event.getCurrentItem(); // Will be valid if clicks an item (i.e. taking an item from the inventory)
ItemStack cursor = event.getCursor(); // Will be valid if an item is put into the inventory
int slot = event.getSlot();
ESSystem esSystem = openSystems.get(player);
switch (clickType) {
case SHIFT_IN:
break;
case SWAP_RIGHT_CLICK:
break;
case SWAP:
break;
case INTO_HALF:
break;
case INTO:
break;
case OUT_HALF:
break;
case OUT:
if (slot == 3) {
Reference.ES_TERMINAL_GUI.openInventory(player, esSystem);
} else if (slot == 4) {
Reference.ES_SYSTEM_SECURITY_GUI.openInventory(player, esSystem);
} else if (slot == 5) {
Reference.ES_DRIVE_GUI.openInventory(player, esSystem);
}
break;
case SHIFT_OUT:
break;
case INVENTORY_CLICK:
event.setCancelled(false);
break;
}
}
}
}

View File

@ -48,6 +48,7 @@ public class ESSystemSecurityGUI implements InventoryHolder, Listener {
inv.setItem(i, createGuiItem(Material.BLACK_STAINED_GLASS_PANE, ""));
}
inv.setItem(0, createGuiItem(Material.PAPER, "Back"));
inv.setItem(3, createGuiItem(Material.LIME_CONCRETE, "Trust player"));
inv.setItem(4, createGuiItem(Material.RED_CONCRETE, "Un-Trust player"));
if (openSystem.isPublic()) {
@ -281,7 +282,9 @@ public class ESSystemSecurityGUI implements InventoryHolder, Listener {
}
} else {
// At main menu
if (slot == 3) { // Add player
if (slot == 0) {
Reference.ES_TERMINAL_GUI.openInventory(player, openSystem);
} else if (slot == 3) { // Add player
new AnvilGUI.Builder()
.onComplete((plr, text) -> {
if (text != null && !text.isEmpty()) {

View File

@ -2,6 +2,7 @@ package net.seanomik.energeticstorage.gui;
import net.seanomik.energeticstorage.EnergeticStorage;
import net.seanomik.energeticstorage.files.PlayersFile;
import net.seanomik.energeticstorage.objects.ESDrive;
import net.seanomik.energeticstorage.objects.ESSystem;
import net.seanomik.energeticstorage.utils.Reference;
import net.seanomik.energeticstorage.utils.Utils;
@ -131,6 +132,43 @@ public class ESTerminalGUI implements InventoryHolder, Listener {
} else {
inv.clear(i);
}
inv.setItem(45, createGuiItem(Material.IRON_BARS, "Security"));
// Create the lore for the drives
int maxSpace = 0;
int filledSpace = 0;
int filledTypes = 0;
for (ESDrive drive : openSystem.getESDrives()) {
maxSpace += drive.getSize();
filledSpace += drive.getFilledSpace();
filledTypes += drive.getFilledTypes();
}
// Get color of items text
ChatColor spaceColor = ChatColor.GREEN;
if (filledSpace >= maxSpace * 0.8) {
spaceColor = ChatColor.RED;
} else if (filledSpace >= maxSpace * 0.5) {
spaceColor = ChatColor.YELLOW;
}
// Max drive type count for each drive
int maxTypes = openSystem.getESDrives().size() * Reference.MAX_DRIVE_TYPES;
// Get color of types text
ChatColor itemsColor = ChatColor.GREEN;
if (filledTypes >= maxTypes * 0.8) {
itemsColor = ChatColor.RED;
} else if (filledTypes >= maxTypes * 0.5) {
itemsColor = ChatColor.YELLOW;
}
List<String> lore = new ArrayList<>();
lore.add(ChatColor.BLUE + "Filled Items: " + spaceColor + filledSpace + ChatColor.BLUE + "/" + ChatColor.GREEN + maxSpace);
lore.add(ChatColor.BLUE + "Filled Types: " + itemsColor + filledTypes + ChatColor.BLUE + "/" + ChatColor.GREEN + maxTypes);
inv.setItem(46, createGuiItem(Material.CHEST, "Drives", lore));
}
}
@ -143,6 +181,16 @@ public class ESTerminalGUI implements InventoryHolder, Listener {
return item;
}
private ItemStack createGuiItem(Material material, String name, List<String> lore) {
ItemStack item = new ItemStack(material, 1);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
private enum ClickType {
NONE,
SWAP,
@ -278,7 +326,7 @@ public class ESTerminalGUI implements InventoryHolder, Listener {
.title("Search Terminal.")
.plugin(EnergeticStorage.getPlugin())
.open(player);
} else if (slot == 50) {
} else if (slot == 50) { // Next page
Map<ItemStack, Integer> items = openSystem.getAllItems();
if (items.size() > (pageIndex + 1) * 28 ) {
@ -286,6 +334,10 @@ public class ESTerminalGUI implements InventoryHolder, Listener {
openPages.replace(player.getUniqueId(), pageIndex);
initializeItems(player, openSystem);
}
} else if (slot == 45) { // Security
Reference.ES_SYSTEM_SECURITY_GUI.openInventory(player, openSystem);
} else if (slot == 46) { // Drives
Reference.ES_DRIVE_GUI.openInventory(player, openSystem);
} else {
switch (clickType) {
case SHIFT_IN:

View File

@ -28,8 +28,7 @@ public class PlayerInteractListener implements Listener {
ESSystem esSystem = Utils.findSystemAtLocation(block.getLocation());
if (esSystem != null) {
if (esSystem.isPlayerTrusted(player) || esSystem.isPublic() || esSystem.getOwner().equals(player.getUniqueId()) || PermissionChecks.canOpenUntrustedSystem(player)) {
Reference.ES_SYSTEM_GUI.initializeItems(player, esSystem);
Reference.ES_SYSTEM_GUI.openInventory(player, esSystem);
Reference.ES_TERMINAL_GUI.openInventory(player, esSystem);
} else {
player.sendMessage(Reference.PREFIX + ChatColor.RED + "You are not trusted to this system!");
}

View File

@ -2,7 +2,6 @@ package net.seanomik.energeticstorage.utils;
import net.seanomik.energeticstorage.files.ConfigFile;
import net.seanomik.energeticstorage.gui.ESDriveGUI;
import net.seanomik.energeticstorage.gui.ESSystemGUI;
import net.seanomik.energeticstorage.gui.ESSystemSecurityGUI;
import net.seanomik.energeticstorage.gui.ESTerminalGUI;
import net.seanomik.energeticstorage.objects.ESSystem;
@ -15,7 +14,6 @@ public class Reference {
public static String PREFIX = ChatColor.AQUA + "" + ChatColor.ITALIC + "[Energetic Storage] " + ChatColor.RESET;
public static ESTerminalGUI ES_TERMINAL_GUI = new ESTerminalGUI();
public static ESSystemGUI ES_SYSTEM_GUI = new ESSystemGUI();
public static ESDriveGUI ES_DRIVE_GUI = new ESDriveGUI();
public static ESSystemSecurityGUI ES_SYSTEM_SECURITY_GUI = new ESSystemSecurityGUI();

View File

@ -1,5 +1,6 @@
package net.seanomik.energeticstorage.utils;
import de.tr7zw.changeme.nbtapi.NBTItem;
import de.tr7zw.changeme.nbtapi.NBTTileEntity;
import net.seanomik.energeticstorage.Skulls;
import net.seanomik.energeticstorage.objects.ESSystem;
@ -139,4 +140,9 @@ public class Utils {
return false;
}
public static boolean isItemADrive(ItemStack item) {
NBTItem nbtItem = new NBTItem(item);
return nbtItem.hasKey("ES_Drive");
}
}

View File

@ -40,7 +40,7 @@ permissions:
default: op
energeticstorage.system.create:
description: Permission for creating new Energetic Storage.
default: op
default: true
energeticstorage.system.destroy.untrusted:
description: Permission for destroying an ES System that the player is not trusted in.
default: op