This commit is contained in:
Benkralex
2023-08-26 20:39:29 +02:00
parent 7babcad82a
commit 54177410a1
30 changed files with 158 additions and 113 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>benkralex</groupId> <groupId>benkralex</groupId>
<artifactId>Pvptoggle</artifactId> <artifactId>Pvptoggle</artifactId>
<version>1.4-FINAL</version> <version>1.6-FINAL</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Pvptoggle</name> <name>Pvptoggle</name>
@@ -2,12 +2,9 @@ package benkralex.pvptoggle;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import java.io.File;
import java.time.Instant;
public class Config { public class Config {
private static FileConfiguration config = Pvptoggle.pvptoggle.getConfig(); private static final FileConfiguration config = Pvptoggle.pvptoggle.getConfig();
public static void createConfig() { public static void createConfig() {
config.options().copyDefaults(true); config.options().copyDefaults(true);
@@ -19,103 +19,115 @@ public class InventoryListener implements Listener{
PersistentDataContainer pdc = p.getPersistentDataContainer(); PersistentDataContainer pdc = p.getPersistentDataContainer();
NamespacedKey pvptoggle = new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle"); NamespacedKey pvptoggle = new NamespacedKey(Pvptoggle.pvptoggle, "pvptoggle");
NamespacedKey ultra = new NamespacedKey(Pvptoggle.pvptoggle, "ultra"); NamespacedKey ultra = new NamespacedKey(Pvptoggle.pvptoggle, "ultra");
if (invtitle.equals("PvP-Menu")) { if (invtitle == "PvP-Menu") {
e.setCancelled(true); e.setCancelled(true);
if (e.getCurrentItem() != null) { if (e.getCurrentItem() != null) {
switch (e.getCurrentItem().getItemMeta().getDisplayName()) { String iname = e.getCurrentItem().getItemMeta().getDisplayName();
case "Inventar schließen": if (iname.equals("Inventar schließen")) {
p.closeInventory(); p.closeInventory();
break; return;
case "Ultra an/aus schalten": } else if (iname.equals("Ultra an/aus schalten")) {
if (pdc.has(ultra, PersistentDataType.BOOLEAN)) { if (pdc.has(ultra, PersistentDataType.BOOLEAN)) {
pdc.set(ultra, PersistentDataType.BOOLEAN, !pdc.get(ultra, PersistentDataType.BOOLEAN)); pdc.set(ultra, PersistentDataType.BOOLEAN, !pdc.get(ultra, PersistentDataType.BOOLEAN));
p.sendMessage("PvP-Ultra ist für dich jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus")); p.sendMessage("PvP-Ultra ist für dich jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus"));
inv.setItem(12, InventoryMenu.getMenuItem(1, p)); inv.setItem(12, InventoryMenu.getMenuItem(1, p));
} else { } else {
pdc.set(ultra, PersistentDataType.BOOLEAN, true); pdc.set(ultra, PersistentDataType.BOOLEAN, true);
p.sendMessage("PvP-Ultra ist für dich jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus")); p.sendMessage("PvP-Ultra ist für dich jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus"));
inv.setItem(12, InventoryMenu.getMenuItem(1, p)); inv.setItem(12, InventoryMenu.getMenuItem(1, p));
} }
break; return;
case "PvP-Schutz an/aus schalten": } else if(iname.equals("PvP-Schutz an/aus schalten")) {
if (pdc.has(pvptoggle, PersistentDataType.BOOLEAN)) { if (pdc.has(pvptoggle, PersistentDataType.BOOLEAN)) {
pdc.set(pvptoggle, PersistentDataType.BOOLEAN, !pdc.get(pvptoggle, PersistentDataType.BOOLEAN)); pdc.set(pvptoggle, PersistentDataType.BOOLEAN, !pdc.get(pvptoggle, PersistentDataType.BOOLEAN));
p.sendMessage("Dein PvP-Schutz ist jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus")); p.sendMessage("Dein PvP-Schutz ist jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus"));
inv.setItem(10, InventoryMenu.getMenuItem(0, p)); inv.setItem(10, InventoryMenu.getMenuItem(0, p));
} else { } else {
pdc.set(pvptoggle, PersistentDataType.BOOLEAN, Config.getPvpProt()); pdc.set(pvptoggle, PersistentDataType.BOOLEAN, Config.getPvpProt());
p.sendMessage("Dein PvP-Schutz ist jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus")); p.sendMessage("Dein PvP-Schutz ist jetzt " + (pdc.get(pvptoggle, PersistentDataType.BOOLEAN)?"an":"aus"));
inv.setItem(10, InventoryMenu.getMenuItem(0, p)); inv.setItem(10, InventoryMenu.getMenuItem(0, p));
} }
break; return;
case "Whitelist": } else if (iname.equals("Whitelist")) {
p.openInventory(InventoryMenu.pvpWhitelistMenu(p)); p.closeInventory();
break; p.openInventory(InventoryMenu.pvpWhitelistMenu(p));
case "Blacklist": return;
p.openInventory(InventoryMenu.pvpBlacklistMenu(p)); } else if (iname.equals("Blacklist")) {
break; p.closeInventory();
case "Menu für Operators": p.openInventory(InventoryMenu.pvpBlacklistMenu(p));
p.openInventory(InventoryMenu.pvpOpSettingsMenu(p)); return;
break; } else if (iname.equals("Menu für Operators")) {
default: p.closeInventory();
break; p.openInventory(InventoryMenu.pvpOpSettingsMenu(p));
return;
} else {
return;
} }
} }
} else if (invtitle.equals("Whitelist-Menu")) { } else if (invtitle.equals("Whitelist-Menu")) {
if (e.getCurrentItem() != null) { if (e.getCurrentItem() != null) {
switch (e.getCurrentItem().getItemMeta().getDisplayName()) { e.setCancelled(true);
case "Inventar schließen": String iname = e.getCurrentItem().getItemMeta().getDisplayName();
p.closeInventory(); if (iname.equals("Inventar schließen")) {
break; p.closeInventory();
case "Zurück": return;
p.closeInventory(); } else if (iname.equals("Zurück")) {
p.openInventory(InventoryMenu.pvpMenu(p)); p.closeInventory();
break; p.openInventory(InventoryMenu.pvpMenu(p));
return;
} else {
return;
} }
} }
} else if (invtitle.equals("Blacklist-Menu")) { } else if (invtitle.equals("Blacklist-Menu")) {
if (e.getCurrentItem() != null) { if (e.getCurrentItem() != null) {
switch (e.getCurrentItem().getItemMeta().getDisplayName()) { e.setCancelled(true);
case "Inventar schließen": String iname = e.getCurrentItem().getItemMeta().getDisplayName();
p.closeInventory(); if (iname.equals("Inventar schließen")) {
break; p.closeInventory();
case "Zurück": return;
p.closeInventory(); } else if (iname.equals("Zurück")) {
p.openInventory(InventoryMenu.pvpMenu(p)); p.closeInventory();
break; p.openInventory(InventoryMenu.pvpMenu(p));
return;
} else {
return;
} }
} }
} else if (invtitle.equals("Operator-Menu")) { } else if (invtitle.equals("Operator-Menu")) {
if (e.getCurrentItem() != null) { if (e.getCurrentItem() != null) {
switch (e.getCurrentItem().getItemMeta().getDisplayName()) { e.setCancelled(true);
case "Inventar schließen": String iname = e.getCurrentItem().getItemMeta().getDisplayName();
if (iname.equals("Inventar schließen")) {
p.closeInventory(); p.closeInventory();
break; return;
case "Zurück": } else if (iname.equals("Zurück")) {
p.closeInventory(); p.closeInventory();
p.openInventory(InventoryMenu.pvpMenu(p)); p.openInventory(InventoryMenu.pvpMenu(p));
break; return;
case "Standard PvP-Schutz an/aus schalten": } else if (iname.equals("Standard PvP-Schutz an/aus schalten")){
Config.setPvpProt(!Config.getPvpProt()); Config.setPvpProt(!Config.getPvpProt());
inv.setItem(11, InventoryMenu.getMenuItem(8, p)); inv.setItem(11, InventoryMenu.getMenuItem(8, p));
break; return;
case "Zeit um zurückzuschlagen erhöhen": } else if (iname.equals("Zeit um zurückzuschlagen erhöhen")) {
if (e.isRightClick()) { if (e.isRightClick()) {
Config.setPvpTime(Config.getPvpTime() + 1); Config.setPvpTime(Config.getPvpTime() + 1);
} else if (e.isLeftClick()) { } else if (e.isLeftClick()) {
Config.setPvpTime(Config.getPvpTime() + 10); Config.setPvpTime(Config.getPvpTime() + 10);
} }
inv.setItem(15, InventoryMenu.getMenuItem(9, p)); inv.setItem(15, InventoryMenu.getMenuItem(9, p));
break; return;
case "Zeit um zurückzuschlagen erniedrigen": } else if (iname.equals("Zeit um zurückzuschlagen verringern")) {
if (e.isRightClick()) { if (e.isRightClick()) {
Config.setPvpTime(Config.getPvpTime() - 1); Config.setPvpTime(Config.getPvpTime() - 1);
} else if (e.isLeftClick()) { } else if (e.isLeftClick()) {
Config.setPvpTime(Config.getPvpTime() - 10); Config.setPvpTime(Config.getPvpTime() - 10);
} }
inv.setItem(15, InventoryMenu.getMenuItem(9, p)); inv.setItem(15, InventoryMenu.getMenuItem(9, p));
break; return;
} } else {
return;
}
} }
} }
} }
@@ -31,7 +31,7 @@ public class InventoryMenu {
public static final int PVP_TIME_MINUS=11; public static final int PVP_TIME_MINUS=11;
public static ItemStack getMenuItem(int i, Player p) { public static ItemStack getMenuItem(int i, Player p) {
List<String> lore = new ArrayList<String >(); List<String> lore = new ArrayList<>();
switch (i) { switch (i) {
case 0: case 0:
ItemStack itoggle = new ItemStack(Material.IRON_SWORD); ItemStack itoggle = new ItemStack(Material.IRON_SWORD);
@@ -43,17 +43,15 @@ public class InventoryMenu {
mtoggle.setLore(lore); mtoggle.setLore(lore);
itoggle.setItemMeta(mtoggle); itoggle.setItemMeta(mtoggle);
return itoggle; return itoggle;
break;
case 1: case 1:
ItemStack iultra = new ItemStack(Material.DIAMOND_SWORD); ItemStack iultra = new ItemStack(Material.DIAMOND_SWORD);
ItemMeta multra = iultra.getItemMeta(); ItemMeta multra = iultra.getItemMeta();
multra.setDisplayName("Ultra an/aus schalten"); multra.setDisplayName("Ultra an/aus schalten");
multra.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); multra.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
lore.add(ChatColor.BLUE + (p.getPersistentDataContainer().get(new NamespacedKey(Pvptoggle.pvptoggle, "pvpultra"), PersistentDataType.BOOLEAN)?"Aus":"An") + " schalten"); lore.add(ChatColor.BLUE + (p.getPersistentDataContainer().get(new NamespacedKey(Pvptoggle.pvptoggle, "ultra"), PersistentDataType.BOOLEAN)?"Aus":"An") + " schalten");
multra.setLore(lore); multra.setLore(lore);
iultra.setItemMeta(multra); iultra.setItemMeta(multra);
return iultra; return iultra;
break;
case 2: case 2:
ItemStack iwhitelist = new ItemStack(Material.WHITE_CONCRETE); ItemStack iwhitelist = new ItemStack(Material.WHITE_CONCRETE);
ItemMeta mwhitelist = iwhitelist.getItemMeta(); ItemMeta mwhitelist = iwhitelist.getItemMeta();
@@ -61,7 +59,6 @@ public class InventoryMenu {
mwhitelist.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mwhitelist.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
iwhitelist.setItemMeta(mwhitelist); iwhitelist.setItemMeta(mwhitelist);
return iwhitelist; return iwhitelist;
break;
case 3: case 3:
ItemStack iblacklist = new ItemStack(Material.BLACK_CONCRETE); ItemStack iblacklist = new ItemStack(Material.BLACK_CONCRETE);
ItemMeta mblacklist = iblacklist.getItemMeta(); ItemMeta mblacklist = iblacklist.getItemMeta();
@@ -69,7 +66,6 @@ public class InventoryMenu {
mblacklist.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mblacklist.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
iblacklist.setItemMeta(mblacklist); iblacklist.setItemMeta(mblacklist);
return iblacklist; return iblacklist;
break;
case 4: case 4:
ItemStack iop = new ItemStack(Material.BEDROCK); ItemStack iop = new ItemStack(Material.BEDROCK);
ItemMeta mop = iop.getItemMeta(); ItemMeta mop = iop.getItemMeta();
@@ -80,7 +76,6 @@ public class InventoryMenu {
inv.setItem(22, getMenuItem(4)); inv.setItem(22, getMenuItem(4));
}*/ }*/
return iop; return iop;
break;
case 5: case 5:
ItemStack iclose = new ItemStack(Material.BARRIER); ItemStack iclose = new ItemStack(Material.BARRIER);
ItemMeta mclose = iclose.getItemMeta(); ItemMeta mclose = iclose.getItemMeta();
@@ -89,7 +84,6 @@ public class InventoryMenu {
iclose.setItemMeta(mclose); iclose.setItemMeta(mclose);
//inv.setItem(8, getMenuItem(5)); //inv.setItem(8, getMenuItem(5));
return iclose; return iclose;
break;
case 6: case 6:
ItemStack iback = new ItemStack(Material.HOPPER); ItemStack iback = new ItemStack(Material.HOPPER);
ItemMeta mback = iback.getItemMeta(); ItemMeta mback = iback.getItemMeta();
@@ -98,11 +92,10 @@ public class InventoryMenu {
iback.setItemMeta(mback); iback.setItemMeta(mback);
//inv.setItem(26, getMenuItem(6)); //inv.setItem(26, getMenuItem(6));
return iback; return iback;
break;
case 7: case 7:
ItemStack ivoid = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE); ItemStack ivoid = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE);
ItemMeta mvoid = ivoid.getItemMeta(); ItemMeta mvoid = ivoid.getItemMeta();
mvoid.setDisplayName(""); mvoid.setDisplayName("X");
mvoid.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mvoid.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ivoid.setItemMeta(mvoid); ivoid.setItemMeta(mvoid);
/*for (int i = 0, i <= 26, i++) { /*for (int i = 0, i <= 26, i++) {
@@ -111,7 +104,6 @@ public class InventoryMenu {
} }
}*/ }*/
return ivoid; return ivoid;
break;
case 8: case 8:
ItemStack idefaultprot = new ItemStack(Material.GOLDEN_SWORD); ItemStack idefaultprot = new ItemStack(Material.GOLDEN_SWORD);
ItemMeta mdefaultprot = idefaultprot.getItemMeta(); ItemMeta mdefaultprot = idefaultprot.getItemMeta();
@@ -121,7 +113,6 @@ public class InventoryMenu {
mdefaultprot.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mdefaultprot.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
idefaultprot.setItemMeta(mdefaultprot); idefaultprot.setItemMeta(mdefaultprot);
return idefaultprot; return idefaultprot;
break;
case 9: case 9:
ItemStack ipvptime = new ItemStack(Material.CLOCK); ItemStack ipvptime = new ItemStack(Material.CLOCK);
ItemMeta mpvptime = ipvptime.getItemMeta(); ItemMeta mpvptime = ipvptime.getItemMeta();
@@ -131,7 +122,6 @@ public class InventoryMenu {
mpvptime.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mpvptime.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ipvptime.setItemMeta(mpvptime); ipvptime.setItemMeta(mpvptime);
return ipvptime; return ipvptime;
break;
case 10: case 10:
ItemStack ipvptimeplus = new ItemStack(Material.GREEN_WOOL); ItemStack ipvptimeplus = new ItemStack(Material.GREEN_WOOL);
ItemMeta mpvptimeplus = ipvptimeplus.getItemMeta(); ItemMeta mpvptimeplus = ipvptimeplus.getItemMeta();
@@ -142,7 +132,6 @@ public class InventoryMenu {
mpvptimeplus.setLore(lore); mpvptimeplus.setLore(lore);
ipvptimeplus.setItemMeta(mpvptimeplus); ipvptimeplus.setItemMeta(mpvptimeplus);
return ipvptimeplus; return ipvptimeplus;
break;
case 11: case 11:
ItemStack ipvptimeminus = new ItemStack(Material.RED_WOOL); ItemStack ipvptimeminus = new ItemStack(Material.RED_WOOL);
ItemMeta mpvptimeminus = ipvptimeminus.getItemMeta(); ItemMeta mpvptimeminus = ipvptimeminus.getItemMeta();
@@ -153,24 +142,27 @@ public class InventoryMenu {
mpvptimeminus.setLore(lore); mpvptimeminus.setLore(lore);
ipvptimeminus.setItemMeta(mpvptimeminus); ipvptimeminus.setItemMeta(mpvptimeminus);
return ipvptimeminus; return ipvptimeminus;
break;
default: default:
break; return null;
} }
return null;
} }
public static Inventory pvpMenuFillEmpty(Inventory inv, Player p) { public static Inventory pvpMenuFillEmpty(Inventory inv, Player p) {
for (int i = 0; i <= inv.getSize()-1; i++) { for (int i = 0; i <= inv.getSize()-1; i++) {
if (inv.getItem(i).equals(Material.AIR)) { try {
inv.setItem(i, getMenuItem(7, p)); if (inv.getItem(i) == null || inv.getItem(i).equals(Material.AIR)) {
} inv.setItem(i, getMenuItem(VOID, p));
}
} catch (Exception e) {
Pvptoggle.pvptoggle.getLogger().warning(ChatColor.RED + "ERROR IN pvpMenuFillEmpty(): " + e.toString());
}
} }
return inv; return inv;
} }
public static Inventory pvpMenu(Player p) { public static Inventory pvpMenu(Player p) {
Inventory inv = Bukkit.createInventory(null, 3 * 9, "PvP-Menu"); Inventory inv = Bukkit.createInventory(null, 3 * 9, "PvP-Menu");
Inventory inv2;
inv.setItem(10, getMenuItem(0, p)); inv.setItem(10, getMenuItem(0, p));
inv.setItem(12, getMenuItem(1, p)); inv.setItem(12, getMenuItem(1, p));
@@ -180,8 +172,9 @@ public class InventoryMenu {
inv.setItem(22, getMenuItem(4, p)); inv.setItem(22, getMenuItem(4, p));
} }
inv.setItem(8, getMenuItem(5, p)); inv.setItem(8, getMenuItem(5, p));
return pvpMenuFillEmpty(inv, p); inv2 = pvpMenuFillEmpty(inv, p);
return inv2;
} }
@@ -1,6 +1,5 @@
package benkralex.pvptoggle; package benkralex.pvptoggle;
import dev.jorel.commandapi.CommandAPI;
import dev.jorel.commandapi.CommandAPICommand; import dev.jorel.commandapi.CommandAPICommand;
import dev.jorel.commandapi.arguments.PlayerArgument; import dev.jorel.commandapi.arguments.PlayerArgument;
import dev.jorel.commandapi.executors.CommandArguments; import dev.jorel.commandapi.executors.CommandArguments;
@@ -1,10 +1,6 @@
package benkralex.pvptoggle; package benkralex.pvptoggle;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public final class Pvptoggle extends JavaPlugin { public final class Pvptoggle extends JavaPlugin {
@@ -14,6 +10,7 @@ public final class Pvptoggle extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
Bukkit.getPluginManager().registerEvents(new PvpEvent(), this); Bukkit.getPluginManager().registerEvents(new PvpEvent(), this);
Bukkit.getPluginManager().registerEvents(new InventoryListener(), this);
Config.createConfig(); Config.createConfig();
} }
@@ -1,7 +1,9 @@
name: Pvptoggle name: Pvptoggle
version: '${project.version}' version: '${project.version}'
main: benkralex.pvptoggle.Pvptoggle main: benkralex.pvptoggle.Pvptoggle
author: [Benkralex, skippyall] author:
-Benkralex
-skippyall
api-version: 1.20 api-version: 1.20
depend: depend:
- CommandAPI - CommandAPI
@@ -18,3 +20,5 @@ permissions:
default: true default: true
pvp.inv.op: pvp.inv.op:
default: op default: op
pvp.fight:
default: true
@@ -0,0 +1,24 @@
name: Pvptoggle
version: '1.6-FINAL'
main: benkralex.pvptoggle.Pvptoggle
author:
-Benkralex
-skippyall
api-version: 1.20
depend:
- CommandAPI
permissions:
pvp.toggle:
default: true
pvp.ultra:
default: true
pvp.whitelist:
default: true
pvp.blacklist:
default: true
pvp.inv.normal:
default: true
pvp.inv.op:
default: op
pvp.fight:
default: true
@@ -0,0 +1,5 @@
#Generated by Maven
#Sat Aug 26 20:15:48 CEST 2023
artifactId=Pvptoggle
groupId=benkralex
version=1.6-FINAL
@@ -0,0 +1,7 @@
benkralex\pvptoggle\Pvptoggle.class
benkralex\pvptoggle\PvpEvent.class
benkralex\pvptoggle\Config.class
benkralex\pvptoggle\Util.class
benkralex\pvptoggle\PvpCommand.class
benkralex\pvptoggle\InventoryListener.class
benkralex\pvptoggle\InventoryMenu.class
@@ -0,0 +1,7 @@
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\InventoryListener.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\InventoryMenu.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\Config.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\Pvptoggle.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\PvpEvent.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\PvpCommand.java
C:\Users\Admin\Documents\GitHub\PvpTogglePlugin\pvptogglepluginworkspace\src\main\java\benkralex\pvptoggle\Util.java