From fb9b464ad09d5cd7d25010f1c8df56f35f919886 Mon Sep 17 00:00:00 2001 From: gobotan Date: Mon, 28 Oct 2024 22:24:33 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E3=80=90=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=80=91=E7=8F=BE?= =?UTF-8?q?=E7=8A=B6=E3=81=AE=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E3=82=88=E3=82=8A=E3=82=8F=E3=81=8B=E3=82=8A?= =?UTF-8?q?=E3=82=84=E3=81=99=E3=81=84=E5=BD=A2=E3=81=AB=E3=83=A1=E3=82=BD?= =?UTF-8?q?=E3=83=83=E3=83=89=E5=88=86=E5=89=B2=E3=82=92=E5=AE=9F=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foofledrive.iml | 28 +- src/main/java/ga/ganma/ender/Endercloud.java | 51 --- .../java/ga/ganma/ender/Filerelation.java | 60 ---- .../ga/ganma/ender/Listener/GUIEvent.java | 11 - .../ga/ganma/ender/Listener/GetEvent.java | 106 ------ .../ga/ganma/ender/command/CommandMain.java | 59 ---- .../java/ga/ganma/ender/command/Subopen.java | 15 - .../java/ga/ganma/ender/command/Subplan.java | 23 -- .../ender/inventoryRelation/InventoryAPI.java | 83 ----- .../inventoryRelation/InventoryEncoder.java | 45 --- src/main/java/ga/ganma/ender/plan.java | 7 - .../ga/ganma/ender/playerdata/Playerdata.java | 44 --- .../ga/ganma/foofledrive/Filerelation.java | 158 +++++---- .../ga/ganma/foofledrive/Foofledrive.java | 88 ++--- .../ganma/foofledrive/Listener/GUIEvent.java | 251 +++++++------- .../ganma/foofledrive/Listener/GetEvent.java | 98 +++--- .../foofledrive/bukkitRunnable/Runnable.java | 69 ++-- .../foofledrive/command/CommandMain.java | 315 +++++++++++------- .../ga/ganma/foofledrive/command/Subopen.java | 13 +- .../ga/ganma/foofledrive/command/Subplan.java | 33 +- .../ga/ganma/foofledrive/economy/Economy.java | 203 +++-------- .../inventoryRelation/InventoryAPI.java | 209 ++++-------- .../inventoryRelation/InventoryEncoder.java | 60 ++-- src/main/java/ga/ganma/foofledrive/plan.java | 2 +- .../foofledrive/playerdata/Playerdata.java | 87 +++-- 25 files changed, 757 insertions(+), 1361 deletions(-) delete mode 100644 src/main/java/ga/ganma/ender/Endercloud.java delete mode 100644 src/main/java/ga/ganma/ender/Filerelation.java delete mode 100644 src/main/java/ga/ganma/ender/Listener/GUIEvent.java delete mode 100644 src/main/java/ga/ganma/ender/Listener/GetEvent.java delete mode 100644 src/main/java/ga/ganma/ender/command/CommandMain.java delete mode 100644 src/main/java/ga/ganma/ender/command/Subopen.java delete mode 100644 src/main/java/ga/ganma/ender/command/Subplan.java delete mode 100644 src/main/java/ga/ganma/ender/inventoryRelation/InventoryAPI.java delete mode 100644 src/main/java/ga/ganma/ender/inventoryRelation/InventoryEncoder.java delete mode 100644 src/main/java/ga/ganma/ender/plan.java delete mode 100644 src/main/java/ga/ganma/ender/playerdata/Playerdata.java diff --git a/foofledrive.iml b/foofledrive.iml index 2304e1f..a1c210c 100644 --- a/foofledrive.iml +++ b/foofledrive.iml @@ -1,36 +1,14 @@ - + SPIGOT + BUKKIT + 1 - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/ga/ganma/ender/Endercloud.java b/src/main/java/ga/ganma/ender/Endercloud.java deleted file mode 100644 index 821f689..0000000 --- a/src/main/java/ga/ganma/ender/Endercloud.java +++ /dev/null @@ -1,51 +0,0 @@ -package ga.ganma.ender; - -import ga.ganma.ender.Listener.GetEvent; -import ga.ganma.ender.command.CommandMain; -import net.milkbowl.vault.economy.Economy; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.logging.Logger; - -public final class Endercloud extends JavaPlugin { - - private static final Logger log = Logger.getLogger("Minecraft"); - public static Economy econ = null; - public static int[] configamout = new int[4]; - - public static Plugin ender; - - @Override - public void onEnable() { - getDataFolder().mkdir(); - ender = this; - new GetEvent(this); - this.getCommand("ec").setExecutor(new CommandMain(this)); - saveDefaultConfig(); - configamout[0] = this.getConfig().getInt("amout.FREE"); - configamout[1] = this.getConfig().getInt("amout.LIGHT"); - configamout[2] = this.getConfig().getInt("amout.MIDDLE"); - configamout[3] = this.getConfig().getInt("amout.LARGE"); - this.setupEconomy(); - } - - @Override - public void onDisable() { - // Plugin shutdown logic - } - - private boolean setupEconomy() { - if (getServer().getPluginManager().getPlugin("Vault") == null) { - return false; - } - RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class); - if (rsp == null) { - return false; - } - econ = rsp.getProvider(); - return econ != null; - } -} diff --git a/src/main/java/ga/ganma/ender/Filerelation.java b/src/main/java/ga/ganma/ender/Filerelation.java deleted file mode 100644 index f88aa10..0000000 --- a/src/main/java/ga/ganma/ender/Filerelation.java +++ /dev/null @@ -1,60 +0,0 @@ -package ga.ganma.ender; - -import ga.ganma.ender.playerdata.Playerdata; -import org.bukkit.entity.Player; - -import java.io.*; -import java.util.logging.Level; - -public class Filerelation { - - public static boolean namecheck(Player p){ - String FS = File.separator; - File file = new File(Endercloud.ender.getDataFolder() + FS + "playerdata" + FS + p.getUniqueId().toString() + ".dat"); - return file.exists(); - } - - public static void createFile(Playerdata e){ - try { - String FS = File.separator; - File folder = new File(Endercloud.ender.getDataFolder() + FS + "playerdata"); - folder.mkdir(); - File file = new File(Endercloud.ender.getDataFolder() + FS + "playerdata" + FS + e.getMcid().toString() + ".dat"); - - if(file.exists()) { - file.delete(); - } - FileOutputStream fos = new FileOutputStream(file); - ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(e); - oos.close(); - - } - catch (IOException io){ - Endercloud.ender.getLogger().log(Level.SEVERE, "ファイルの作成に失敗しました。"); - } - } - - public static Playerdata readFile(Player p) { - Playerdata pd = null; - if(!namecheck(p)){ - return null; - } - try { - String FS = File.separator; - File file = new File(Endercloud.ender.getDataFolder() + FS + "playerdata" + FS + p.getUniqueId().toString() + ".dat"); - FileInputStream fis = new FileInputStream(file); - ObjectInputStream ois = new ObjectInputStream(fis); - pd = (Playerdata) ois.readObject(); - ois.close(); - } - catch (IOException e){ - Endercloud.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); - } - catch (ClassNotFoundException e){ - Endercloud.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。製作者に次のエラーコードを伝えてください。"); - Endercloud.ender.getLogger().log(Level.SEVERE, "File error:01"); - } - return pd; - } -} diff --git a/src/main/java/ga/ganma/ender/Listener/GUIEvent.java b/src/main/java/ga/ganma/ender/Listener/GUIEvent.java deleted file mode 100644 index 4f7f9c4..0000000 --- a/src/main/java/ga/ganma/ender/Listener/GUIEvent.java +++ /dev/null @@ -1,11 +0,0 @@ -package ga.ganma.ender.Listener; - -import org.bukkit.Bukkit; -import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; - -public class GUIEvent implements Listener { - public GUIEvent(Plugin pl){ - Bukkit.getPluginManager().registerEvents(this,pl); - } -} diff --git a/src/main/java/ga/ganma/ender/Listener/GetEvent.java b/src/main/java/ga/ganma/ender/Listener/GetEvent.java deleted file mode 100644 index 0fbe8e7..0000000 --- a/src/main/java/ga/ganma/ender/Listener/GetEvent.java +++ /dev/null @@ -1,106 +0,0 @@ -package ga.ganma.ender.Listener; - -import ga.ganma.ender.Endercloud; -import ga.ganma.ender.Filerelation; -import ga.ganma.ender.inventoryRelation.InventoryAPI; -import ga.ganma.ender.plan; -import ga.ganma.ender.playerdata.Playerdata; -import jdk.internal.ref.Cleaner; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.plugin.Plugin; - -import java.io.File; -import java.util.Calendar; -import java.util.HashMap; - -public class GetEvent implements Listener { - - public static HashMap isinventoryopen = new HashMap<>(); - - public GetEvent(Plugin pl) { - Bukkit.getPluginManager().registerEvents(this, pl); - } - - @EventHandler - public void getplayerloginEvent(PlayerJoinEvent e) { - Player p = e.getPlayer(); - if (Filerelation.namecheck(p)) { - if (Filerelation.readFile(p).getPlan() == plan.FREE) { - p.sendMessage("[foofle drive]あなたは現在" + Filerelation.readFile(p).getPlan() + "プランに加入しています。"); - return; - } - else { - Playerdata pd = Filerelation.readFile(p); - double bal = Endercloud.econ.getBalance(p); - if (pd.getFinish() != null) { - if (pd.getFinish().before(Calendar.getInstance())) { - int[] amout = Endercloud.configamout; - switch (pd.getPlan()) { - case LIGHT: - if (bal >= amout[1]) { - Endercloud.econ.depositPlayer(p, -amout[1]); - p.sendMessage("[foofle drive]LIGHTプランの料金を支払いました。"); - } else { - InventoryAPI.planchange(p, plan.FREE); - p.sendMessage("[foofle drive]お金が足りないため自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - break; - case MIDDLE: - if (bal >= amout[2]) { - Endercloud.econ.depositPlayer(p, -amout[2]); - p.sendMessage("[foofle drive]MIDDLEプランの料金を支払いました。"); - } else { - InventoryAPI.planchange(p, plan.FREE); - p.sendMessage("[foofle drive]お金が足りないため自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - break; - case LARGE: - if (bal >= amout[3]) { - Endercloud.econ.depositPlayer(p, -amout[3]); - p.sendMessage("[foofle drive]LARGEプランの料金を支払いました。"); - } else { - InventoryAPI.planchange(p, plan.FREE); - p.sendMessage("[foofle drive]お金が足りないため自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - break; - } - return; - } - else { - long diffTime = pd.getFinish().getTimeInMillis() - Calendar.getInstance().getTimeInMillis();//[3] - int diffDayMillis = 1000 * 60 * 60 * 24;//[4] - int diffDays = (int) (diffTime / diffDayMillis); - p.sendMessage("[foofle drive]支払日まであと" + diffDays + "日です。");//[5] - } - } - else { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - p.sendMessage("デバッグ:1"); - } - } - } - else { - Playerdata pd = new Playerdata(p, Bukkit.getServer().createInventory(null, 9, "foofle Drive"), plan.FREE); - Filerelation.createFile(pd); - p.sendMessage("[foofle drive]あなたは自動的に" + Filerelation.readFile(p).getPlan() + "プランに加入しました。"); - } - } - - @EventHandler - public void getPlayerInventoryCloseEvent(InventoryCloseEvent e) { - Player pl = (Player) e.getPlayer(); - if(e.getView().getTitle().equals("foofle drive")){ - Playerdata pd = new Playerdata(pl,e.getView().getTopInventory(),Filerelation.readFile(pl).getPlan()); - Filerelation.createFile(pd); - } - } -} diff --git a/src/main/java/ga/ganma/ender/command/CommandMain.java b/src/main/java/ga/ganma/ender/command/CommandMain.java deleted file mode 100644 index 3eff878..0000000 --- a/src/main/java/ga/ganma/ender/command/CommandMain.java +++ /dev/null @@ -1,59 +0,0 @@ -package ga.ganma.ender.command; - -import ga.ganma.ender.Filerelation; -import ga.ganma.ender.plan; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import java.util.Calendar; -import java.util.TimeZone; -import java.util.logging.Level; - -public class CommandMain implements CommandExecutor { - private Plugin pl; - - public CommandMain(Plugin pl) { - this.pl = pl; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (sender instanceof Player) { - Player p = (Player) sender; - if (label.equalsIgnoreCase("ec")) { - if (args.length != 0) { - if (args[0].equalsIgnoreCase("open")) { - new Subopen(this.pl, (Player) sender); - } else if (args[0].equalsIgnoreCase("plan")) { - if (args.length > 1) { - if (args[1].equalsIgnoreCase("LIGHT")) { - new Subplan(this.pl, p, plan.LIGHT); - Filerelation.readFile(p).setFinish(Calendar.getInstance()); - } else if (args[1].equalsIgnoreCase("FREE")) { - new Subplan(this.pl, p, plan.FREE); - }else if (args[1].equalsIgnoreCase("MIDDLE")) { - new Subplan(this.pl, p, plan.MIDDLE); - }else if (args[1].equalsIgnoreCase("LARGE")) { - new Subplan(this.pl, p, plan.LARGE); - } - } else { - p.sendMessage("[foofle drive]プラン名を入力してください。"); - p.sendMessage("[foofle drive]FREE,LIGHT,MIDDLE,LARGE"); - } - } - } - else { - p.sendMessage("[free drive] /ec open でfoofle driveを開くことができます。"); - p.sendMessage("[free drive] /ec plan で好きなプランに加入することができます。"); - } - } - } - else { - pl.getLogger().log(Level.FINE, "このコマンドはコンソールからではなくプレイヤーが入力するものです。"); - } - return false; - } -} diff --git a/src/main/java/ga/ganma/ender/command/Subopen.java b/src/main/java/ga/ganma/ender/command/Subopen.java deleted file mode 100644 index 4323d49..0000000 --- a/src/main/java/ga/ganma/ender/command/Subopen.java +++ /dev/null @@ -1,15 +0,0 @@ -package ga.ganma.ender.command; - -import ga.ganma.ender.Filerelation; -import ga.ganma.ender.Listener.GetEvent; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -public class Subopen { - Plugin pl; - public Subopen(Plugin pl, Player p){ - this.pl = pl; - p.openInventory(Filerelation.readFile(p).getInv()); - GetEvent.isinventoryopen.put(p,true); - } -} diff --git a/src/main/java/ga/ganma/ender/command/Subplan.java b/src/main/java/ga/ganma/ender/command/Subplan.java deleted file mode 100644 index 26388ce..0000000 --- a/src/main/java/ga/ganma/ender/command/Subplan.java +++ /dev/null @@ -1,23 +0,0 @@ -package ga.ganma.ender.command; - -import ga.ganma.ender.Filerelation; -import ga.ganma.ender.inventoryRelation.InventoryAPI; -import ga.ganma.ender.playerdata.Playerdata; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import java.util.Calendar; - -public class Subplan { - Plugin pl; - Player p; - public Subplan(Plugin pl, Player player, ga.ganma.ender.plan plan){ - this.pl = pl; - p = player; - InventoryAPI.planchange(player,plan); - Playerdata pd = Filerelation.readFile(p); - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - p.sendMessage("[foorle drive]プランを" + plan + "プランに変更しました。"); - } -} diff --git a/src/main/java/ga/ganma/ender/inventoryRelation/InventoryAPI.java b/src/main/java/ga/ganma/ender/inventoryRelation/InventoryAPI.java deleted file mode 100644 index 2589f21..0000000 --- a/src/main/java/ga/ganma/ender/inventoryRelation/InventoryAPI.java +++ /dev/null @@ -1,83 +0,0 @@ -package ga.ganma.ender.inventoryRelation; - -import ga.ganma.ender.Filerelation; -import ga.ganma.ender.plan; -import ga.ganma.ender.playerdata.Playerdata; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.*; - -public class InventoryAPI { - public static Inventory Inventorysizechange(Inventory oldInv, int setsize){ - Inventory inv = Bukkit.createInventory(null,setsize,"foofle drive"); - inv.setStorageContents(oldInv.getStorageContents()); - return inv; - } - - public static void planchange(Player player, plan plan){ - Inventory inv = null; - ItemStack[] is = null; - switch (plan){ - case FREE: - inv = Bukkit.createInventory(null,9,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length > 9){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(9,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; - - case LIGHT: - inv = Bukkit.createInventory(null,18,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 19){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(18,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; - case MIDDLE: - inv = Bukkit.createInventory(null,27,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 28){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(27,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; - - case LARGE: - inv = Bukkit.createInventory(null,54,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - break; - } - inv.setStorageContents(is); - Playerdata pd = new Playerdata(player,inv,plan); - Filerelation.createFile(pd); - } -} diff --git a/src/main/java/ga/ganma/ender/inventoryRelation/InventoryEncoder.java b/src/main/java/ga/ganma/ender/inventoryRelation/InventoryEncoder.java deleted file mode 100644 index 581f077..0000000 --- a/src/main/java/ga/ganma/ender/inventoryRelation/InventoryEncoder.java +++ /dev/null @@ -1,45 +0,0 @@ -package ga.ganma.ender.inventoryRelation; - -import org.bukkit.Bukkit; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.io.BukkitObjectInputStream; -import org.bukkit.util.io.BukkitObjectOutputStream; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.util.Base64; - -public class InventoryEncoder { - public static String inventoryToString(Inventory inventory) { - try { - ByteArrayOutputStream str = new ByteArrayOutputStream(); - BukkitObjectOutputStream data = new BukkitObjectOutputStream(str); - data.writeInt(inventory.getSize()); - for (int i = 0; i < inventory.getSize(); i++) { - data.writeObject(inventory.getItem(i)); - } - data.close(); - return Base64.getEncoder().encodeToString(str.toByteArray()); - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } - - public static Inventory stringToInventory(String inventoryData) { - try { - ByteArrayInputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(inventoryData)); - BukkitObjectInputStream data = new BukkitObjectInputStream(stream); - Inventory inventory = Bukkit.createInventory(null, data.readInt(), "foofle drive"); - for (int i = 0; i < inventory.getSize(); i++) { - inventory.setItem(i, (ItemStack) data.readObject()); - } - data.close(); - return inventory; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/src/main/java/ga/ganma/ender/plan.java b/src/main/java/ga/ganma/ender/plan.java deleted file mode 100644 index 07b6c51..0000000 --- a/src/main/java/ga/ganma/ender/plan.java +++ /dev/null @@ -1,7 +0,0 @@ -package ga.ganma.ender; - -import java.io.Serializable; - -public enum plan implements Serializable { - FREE,LIGHT,MIDDLE,LARGE -} diff --git a/src/main/java/ga/ganma/ender/playerdata/Playerdata.java b/src/main/java/ga/ganma/ender/playerdata/Playerdata.java deleted file mode 100644 index 7990d4e..0000000 --- a/src/main/java/ga/ganma/ender/playerdata/Playerdata.java +++ /dev/null @@ -1,44 +0,0 @@ -package ga.ganma.ender.playerdata; - -import ga.ganma.ender.inventoryRelation.InventoryEncoder; -import ga.ganma.ender.plan; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; - -import java.io.Serializable; -import java.util.Calendar; -import java.util.UUID; - -public class Playerdata implements Serializable { - private UUID mcid; - private plan plan; - private String inventorySt; - private Calendar finish; - - public Playerdata(Player pl, Inventory inv, plan plan) { - this.mcid = pl.getUniqueId(); - this.plan = plan; - this.inventorySt = InventoryEncoder.inventoryToString(inv); - } - - public ga.ganma.ender.plan getPlan() { - return plan; - } - - public UUID getMcid() { - return mcid; - } - - public Inventory getInv() { - return InventoryEncoder.stringToInventory(inventorySt); - } - - public void setFinish(Calendar cl){ - cl.add(Calendar.DAY_OF_MONTH,+7); - finish = cl; - } - - public Calendar getFinish(){ - return finish; - } -} diff --git a/src/main/java/ga/ganma/foofledrive/Filerelation.java b/src/main/java/ga/ganma/foofledrive/Filerelation.java index c23368c..cb4bdfb 100644 --- a/src/main/java/ga/ganma/foofledrive/Filerelation.java +++ b/src/main/java/ga/ganma/foofledrive/Filerelation.java @@ -7,84 +7,96 @@ import java.io.*; import java.util.logging.Level; +/** + * Filerelationクラスは、プレイヤーデータのファイル操作を行うためのユーティリティクラスです。 + * プレイヤーデータの読み書きや存在確認を行います。 + */ public class Filerelation { - public static boolean namecheck(Player p){ - String FS = File.separator; - File file = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata" + FS + p.getUniqueId().toString() + ".dat"); - return file.exists(); - } + private static final String PLAYERDATA_FOLDER = Foofledrive.ender.getDataFolder() + File.separator + "playerdata" + File.separator; - public static boolean namecheck(OfflinePlayer offp){ - String FS = File.separator; - File file = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata" + FS + offp.getUniqueId().toString() + ".dat"); - return file.exists(); - } + /** + * 指定されたプレイヤーのデータファイルが存在するかを確認します。 + * + * @param p チェックするプレイヤー + * @return データファイルが存在する場合はtrue、存在しない場合はfalse + */ + public static boolean nameCheck(Player p) { + return new File(PLAYERDATA_FOLDER + p.getUniqueId() + ".dat").exists(); + } - public static void createFile(Playerdata e){ - try { - String FS = File.separator; - File folder = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata"); - folder.mkdir(); - File file = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata" + FS + e.getMcid().toString() + ".dat"); + /** + * 指定されたオフラインプレイヤーのデータファイルが存在するかを確認します。 + * + * @param offp チェックするオフラインプレイヤー + * @return データファイルが存在する場合はtrue、存在しない場合はfalse + */ + public static boolean nameCheck(OfflinePlayer offp) { + return new File(PLAYERDATA_FOLDER + offp.getUniqueId() + ".dat").exists(); + } - if(file.exists()) { - file.delete(); - } - FileOutputStream fos = new FileOutputStream(file); - ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(e); - oos.close(); + /** + * 指定されたプレイヤーデータをファイルに書き込みます。 + * + * @param e 書き込むプレイヤーデータ + */ + public static void createFile(Playerdata e) { + try { + File folder = new File(PLAYERDATA_FOLDER); + folder.mkdir(); + File file = new File(PLAYERDATA_FOLDER + e.getMcid().toString() + ".dat"); - } - catch (IOException io){ - Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの作成に失敗しました。"); - } - } + if (file.exists()) { + file.delete(); + } + try (FileOutputStream fos = new FileOutputStream(file); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(e); + } + } catch (IOException io) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの作成に失敗しました。"); + } + } - public static Playerdata readFile(Player p) { - Playerdata pd = null; - if(!namecheck(p)){ - return null; - } - try { - String FS = File.separator; - File file = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata" + FS + p.getUniqueId().toString() + ".dat"); - FileInputStream fis = new FileInputStream(file); - ObjectInputStream ois = new ObjectInputStream(fis); - pd = (Playerdata) ois.readObject(); - ois.close(); - } - catch (IOException e){ - Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); - } - catch (ClassNotFoundException e){ - Foofledrive.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。製作者に次のエラーコードを伝えてください。"); - Foofledrive.ender.getLogger().log(Level.SEVERE, "File error:01"); - } - return pd; - } + /** + * 指定されたプレイヤーのデータファイルを読み込みます。 + * + * @param p 読み込むプレイヤー + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + public static Playerdata readFile(Player p) { + return readFileInternal(p.getUniqueId().toString()); + } - public static Playerdata readFile(OfflinePlayer offp) { - Playerdata pd = null; - if(!namecheck(offp)){ - return null; - } - try { - String FS = File.separator; - File file = new File(Foofledrive.ender.getDataFolder() + FS + "playerdata" + FS + offp.getUniqueId().toString() + ".dat"); - FileInputStream fis = new FileInputStream(file); - ObjectInputStream ois = new ObjectInputStream(fis); - pd = (Playerdata) ois.readObject(); - ois.close(); - } - catch (IOException e){ - Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); - } - catch (ClassNotFoundException e){ - Foofledrive.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。製作者に次のエラーコードを伝えてください。"); - Foofledrive.ender.getLogger().log(Level.SEVERE, "File error:01"); - } - return pd; - } -} + /** + * 指定されたオフラインプレイヤーのデータファイルを読み込みます。 + * + * @param offp 読み込むオフラインプレイヤー + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + public static Playerdata readFile(OfflinePlayer offp) { + return readFileInternal(offp.getUniqueId().toString()); + } + + /** + * 内部的にプレイヤーデータファイルを読み込みます。 + * + * @param uniqueId 読み込むプレイヤーのUUID + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + private static Playerdata readFileInternal(String uniqueId) { + Playerdata pd = null; + if (!new File(PLAYERDATA_FOLDER + uniqueId + ".dat").exists()) { + return null; + } + try (FileInputStream fis = new FileInputStream(PLAYERDATA_FOLDER + uniqueId + ".dat"); + ObjectInputStream ois = new ObjectInputStream(fis)) { + pd = (Playerdata) ois.readObject(); + } catch (IOException e) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); + } catch (ClassNotFoundException e) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。"); + } + return pd; + } +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/Foofledrive.java b/src/main/java/ga/ganma/foofledrive/Foofledrive.java index f58ee9e..ef1ea9b 100644 --- a/src/main/java/ga/ganma/foofledrive/Foofledrive.java +++ b/src/main/java/ga/ganma/foofledrive/Foofledrive.java @@ -14,45 +14,49 @@ public final class Foofledrive extends JavaPlugin { - private static final Logger log = Logger.getLogger("Minecraft"); - public static Economy econ = null; - public static int[] configamout = new int[4]; - public static String unit; - public static Plugin ender; - public Foofledrive fl; - - @Override - public void onEnable() { - getDataFolder().mkdir(); - ender = this; - new GetEvent(this); - new GUIEvent(this); - this.getCommand("fl").setExecutor(new CommandMain(this)); - this.getCommand("foofledrive").setExecutor(new CommandMain(this)); - saveDefaultConfig(); - configamout[0] = this.getConfig().getInt("amout.FREE"); - configamout[1] = this.getConfig().getInt("amout.LIGHT"); - configamout[2] = this.getConfig().getInt("amout.MIDDLE"); - configamout[3] = this.getConfig().getInt("amout.LARGE"); - unit = this.getConfig().getString("unit"); - if(!this.setupEconomy()){ - Bukkit.getPluginManager().disablePlugin(this); - Bukkit.getLogger().warning("[foofle drive]Vaultが存在しません!"); - return; - } - new Runnable(this).runTaskTimer(this,0,20); - } - - @Override - public void onDisable() { - // Plugin shutdown logic - } - - private boolean setupEconomy() { - RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - econ = economyProvider.getProvider(); - } - return (econ != null); - } -} + private static final Logger log = Logger.getLogger("Minecraft"); + public static Economy econ = null; + public static int[] configamout = new int[4]; + public static String unit; + public static Plugin ender; + + @Override + public void onEnable() { + getDataFolder().mkdir(); + ender = this; + new GetEvent(this); + new GUIEvent(this); + CommandMain commandMain = new CommandMain(this); + this.getCommand("fl").setExecutor(commandMain); + this.getCommand("foofledrive").setExecutor(commandMain); + saveDefaultConfig(); + loadConfigValues(); + if (!setupEconomy()) { + Bukkit.getPluginManager().disablePlugin(this); + log.warning("[foofle drive]Vaultが存在しません!"); + return; + } + new Runnable(this).runTaskTimer(this, 0, 20); + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } + + private boolean setupEconomy() { + RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration(Economy.class); + if (economyProvider != null) { + econ = economyProvider.getProvider(); + } + return (econ != null); + } + + private void loadConfigValues() { + configamout[0] = getConfig().getInt("amout.FREE"); + configamout[1] = getConfig().getInt("amout.LIGHT"); + configamout[2] = getConfig().getInt("amout.MIDDLE"); + configamout[3] = getConfig().getInt("amout.LARGE"); + unit = getConfig().getString("unit"); + } +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java b/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java index ba74f82..6d393f9 100644 --- a/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java +++ b/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java @@ -22,137 +22,122 @@ public class GUIEvent implements Listener { - private static HashMap ProvisionalPlan = new HashMap<>(); - - public GUIEvent(Plugin pl) { - Bukkit.getPluginManager().registerEvents(this, pl); - } - - @EventHandler - public void getInventoryclickEvent(InventoryClickEvent e) { - if (e.getWhoClicked() != null) { - Player pl = (Player) e.getWhoClicked(); - if (CommandMain.isopenInventory.containsKey(pl)) { - if (CommandMain.isopenInventory.get(pl)) { - ItemStack clickedItem = e.getCurrentItem(); - Inventory clickedInventory = e.getClickedInventory(); - if (clickedItem == null || clickedInventory == null) { - return; - } - if (! clickedItem.hasItemMeta()) { - return; - } - if (e.getView().getType() != InventoryType.CREATIVE && e.getView().getTitle().contains("プラン選択画面")) { - if (e.getSlot() == 10) { - e.setCancelled(true); - pl.openInventory(yesornoInv()); - ProvisionalPlan.put(pl, plan.FREE); - } else if (e.getSlot() == 12) { - e.setCancelled(true); - pl.openInventory(yesornoInv()); - ProvisionalPlan.put(pl, plan.LIGHT); - } else if (e.getSlot() == 14) { - e.setCancelled(true); - pl.openInventory(yesornoInv()); - ProvisionalPlan.put(pl, plan.MIDDLE); - } else if (e.getSlot() == 16) { - e.setCancelled(true); - pl.openInventory(yesornoInv()); - ProvisionalPlan.put(pl, plan.LARGE); - } else if (clickedItem.getType() == Material.LIGHT_GRAY_STAINED_GLASS_PANE) { - e.setCancelled(true); - } - } else if (e.getView().getTitle().contains("契約してよろしいですか?")) { - if (e.getSlot() == 15) { - e.setCancelled(true); - Playerdata pd; - switch (ProvisionalPlan.get(pl)) { - case FREE: - InventoryAPI.planchange(pl, plan.FREE); - pd = Filerelation.readFile(pl); - if (pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - pl.sendMessage("[foofle drive]プランを" + plan.FREE + "プランに変更しました。"); - break; - - case LIGHT: - boolean is = InventoryAPI.planchange(pl, plan.LIGHT); - pd = Filerelation.readFile(pl); - if (pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - if (is) { - pl.sendMessage("[foofle drive]プランを" + plan.LIGHT + "プランに変更しました。"); - } - break; - - case MIDDLE: - boolean is1 = InventoryAPI.planchange(pl, plan.MIDDLE); - pd = Filerelation.readFile(pl); - if (pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - if (is1) { - pl.sendMessage("[foofle drive]プランを" + plan.MIDDLE + "プランに変更しました。"); - } - break; - - case LARGE: - boolean is2 = InventoryAPI.planchange(pl, plan.LARGE); - pd = Filerelation.readFile(pl); - if (pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - if (is2) { - pl.sendMessage("[foofle drive]プランを" + plan.LARGE + "プランに変更しました。"); - } - break; - } - pl.closeInventory(); - } else if (e.getSlot() == 11) { - e.setCancelled(true); - e.getWhoClicked().closeInventory(); - } else if (clickedItem.getType() == Material.LIGHT_GRAY_STAINED_GLASS_PANE) { - e.setCancelled(true); - } - } - } - } - } - } - - private Inventory yesornoInv(){ - Inventory inv = Bukkit.createInventory(null,27,"契約してよろしいですか?"); - ItemStack is = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE,1); - ItemMeta im0 = is.getItemMeta(); - im0.setDisplayName(" "); - ItemStack is1 = new ItemStack(Material.GREEN_STAINED_GLASS_PANE,1); - ItemMeta im1 = is1.getItemMeta(); - im1.setDisplayName("はい"); - ItemStack is2 = new ItemStack(Material.RED_STAINED_GLASS_PANE,1); - ItemMeta im2 = is1.getItemMeta(); - im2.setDisplayName("いいえ"); - - is.setItemMeta(im0); - is1.setItemMeta(im1); - is2.setItemMeta(im2); - - for(int a = 0 ; a<= 26 ; a++){ - if(a == 11){ - inv.setItem(a,is2); - } - else if(a == 15){ - inv.setItem(a,is1); - } - else { - inv.setItem(a,is); - } - } - return inv; - } + private static final HashMap provisionalPlan = new HashMap<>(); + + public GUIEvent(Plugin pl) { + Bukkit.getPluginManager().registerEvents(this, pl); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + if (e.getWhoClicked() == null) { + return; + } + + Player player = (Player) e.getWhoClicked(); + if (!CommandMain.isopenInventory.containsKey(player) || !CommandMain.isopenInventory.get(player)) { + return; + } + + ItemStack clickedItem = e.getCurrentItem(); + Inventory clickedInventory = e.getClickedInventory(); + if (clickedItem == null || clickedInventory == null || !clickedItem.hasItemMeta()) { + return; + } + + if (e.getView().getType() != InventoryType.CREATIVE && e.getView().getTitle().contains("プラン選択画面")) { + handlePlanSelection(e, player); + } else if (e.getView().getTitle().contains("契約してよろしいですか?")) { + handleContractConfirmation(e, player); + } + } + + private void handlePlanSelection(InventoryClickEvent e, Player player) { + switch (e.getSlot()) { + case 10: + openConfirmationInventory(e, player, plan.FREE); + break; + case 12: + openConfirmationInventory(e, player, plan.LIGHT); + break; + case 14: + openConfirmationInventory(e, player, plan.MIDDLE); + break; + case 16: + openConfirmationInventory(e, player, plan.LARGE); + break; + default: + if (e.getCurrentItem().getType() == Material.LIGHT_GRAY_STAINED_GLASS_PANE) { + e.setCancelled(true); + } + break; + } + } + + private void openConfirmationInventory(InventoryClickEvent e, Player player, plan selectedPlan) { + e.setCancelled(true); + player.openInventory(createConfirmationInventory()); + provisionalPlan.put(player, selectedPlan); + } + + private void handleContractConfirmation(InventoryClickEvent e, Player player) { + switch (e.getSlot()) { + case 15: + confirmPlanChange(e, player); + break; + case 11: + e.setCancelled(true); + player.closeInventory(); + break; + default: + if (e.getCurrentItem().getType() == Material.LIGHT_GRAY_STAINED_GLASS_PANE) { + e.setCancelled(true); + } + break; + } + } + + private void confirmPlanChange(InventoryClickEvent e, Player player) { + e.setCancelled(true); + plan selectedPlan = provisionalPlan.get(player); + boolean planChanged = InventoryAPI.planchange(player, selectedPlan); + Playerdata playerData = Filerelation.readFile(player); + + if (playerData.getFinish() == null) { + playerData.setFinish(Calendar.getInstance()); + Filerelation.createFile(playerData); + } + + if (planChanged) { + player.sendMessage("[foofle drive]プランを" + selectedPlan + "プランに変更しました。"); + } + + player.closeInventory(); + } + + private Inventory createConfirmationInventory() { + Inventory inv = Bukkit.createInventory(null, 27, "契約してよろしいですか?"); + ItemStack grayPane = createItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE, " "); + ItemStack greenPane = createItemStack(Material.GREEN_STAINED_GLASS_PANE, "はい"); + ItemStack redPane = createItemStack(Material.RED_STAINED_GLASS_PANE, "いいえ"); + + for (int i = 0; i <= 26; i++) { + if (i == 11) { + inv.setItem(i, redPane); + } else if (i == 15) { + inv.setItem(i, greenPane); + } else { + inv.setItem(i, grayPane); + } + } + return inv; + } + + private ItemStack createItemStack(Material material, String displayName) { + ItemStack itemStack = new ItemStack(material, 1); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(displayName); + itemStack.setItemMeta(itemMeta); + return itemStack; + } } diff --git a/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java b/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java index 48d1bee..5d868c4 100644 --- a/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java +++ b/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java @@ -1,7 +1,7 @@ package ga.ganma.foofledrive.Listener; -import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.plan; import ga.ganma.foofledrive.playerdata.Playerdata; import org.bukkit.Bukkit; @@ -17,58 +17,54 @@ import java.util.HashMap; public class GetEvent implements Listener { - private Player p; - private Plugin pl; + public static HashMap isInventoryOpen = new HashMap<>(); + private final Plugin pl; - public static HashMap isinventoryopen = new HashMap<>(); + public GetEvent(Plugin pl) { + Bukkit.getPluginManager().registerEvents(this, pl); + this.pl = pl; + } - public GetEvent(Plugin pl) { - Bukkit.getPluginManager().registerEvents(this, pl); - this.pl = pl; - } + @EventHandler + public void getplayerloginEvent(PlayerJoinEvent e) { + Player p = e.getPlayer(); + Playerdata pd = Filerelation.readFile(p); - @EventHandler - public void getplayerloginEvent(PlayerJoinEvent e) { - p = e.getPlayer(); - if (Filerelation.namecheck(p)) { - if (Filerelation.readFile(p).getPlan() == plan.FREE) { - p.sendMessage("[foofle drive]あなたは現在" + Filerelation.readFile(p).getPlan() + "プランに加入しています。"); - return; - } - else { - Playerdata pd = Filerelation.readFile(p); - double bal = Foofledrive.econ.getBalance(p); - if (pd.getFinish() != null) { - new BukkitRunnable() { - @Override - public void run() { - long diffTime = pd.getFinish().getTimeInMillis() - Calendar.getInstance().getTimeInMillis();//[3] - int diffDayMillis = 1000 * 60 * 60 * 24;//[4] - int diffDays = (int) (diffTime / diffDayMillis); - p.sendMessage("[foofle drive]あなたは現在"+Filerelation.readFile(p).getPlan() +"プランに加入しています。"); - p.sendMessage("[foofle drive]支払日まであと"+ diffDays +"日です。");//[5] - } - }.runTaskLater(pl,60); - } - else { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - } - } - else { - Playerdata pd = new Playerdata(p, Bukkit.getServer().createInventory(null, 9, "foofle Drive"), plan.FREE); - Filerelation.createFile(pd); - p.sendMessage("[foofle drive]あなたは自動的に" + Filerelation.readFile(p).getPlan() + "プランに加入しました。"); - } - } + if (Filerelation.nameCheck(p)) { + if (pd.getPlan() == plan.FREE) { + p.sendMessage("[foofle drive]あなたは現在" + pd.getPlan() + "プランに加入しています。"); + } else { + double bal = Foofledrive.econ.getBalance(p); + if (pd.getFinish() != null) { + Playerdata finalPd = pd; + new BukkitRunnable() { + @Override + public void run() { + long diffTime = finalPd.getFinish().getTimeInMillis() - Calendar.getInstance().getTimeInMillis(); + int diffDayMillis = 1000 * 60 * 60 * 24; + int diffDays = (int) (diffTime / diffDayMillis); + p.sendMessage("[foofle drive]あなたは現在" + finalPd.getPlan() + "プランに加入しています。"); + p.sendMessage("[foofle drive]支払日まであと" + diffDays + "日です。"); + } + }.runTaskLater(pl, 60); + } else { + pd.setFinish(Calendar.getInstance()); + Filerelation.createFile(pd); + } + } + } else { + pd = new Playerdata(p, Bukkit.getServer().createInventory(null, 9, "foofle Drive"), plan.FREE); + Filerelation.createFile(pd); + p.sendMessage("[foofle drive]あなたは自動的に" + pd.getPlan() + "プランに加入しました。"); + } + } - @EventHandler - public void getPlayerInventoryCloseEvent(InventoryCloseEvent e) { - Player pl = (Player) e.getPlayer(); - if(e.getView().getTitle().equals("foofle drive")){ - Playerdata pd = new Playerdata(pl,e.getView().getTopInventory(),Filerelation.readFile(pl).getPlan()); - Filerelation.createFile(pd); - } - } + @EventHandler + public void getPlayerInventoryCloseEvent(InventoryCloseEvent e) { + Player pl = (Player) e.getPlayer(); + if (e.getView().getTitle().equals("foofle drive")) { + Playerdata pd = new Playerdata(pl, e.getView().getTopInventory(), Filerelation.readFile(pl).getPlan()); + Filerelation.createFile(pd); + } + } } diff --git a/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java b/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java index 67254df..ab2d0a0 100644 --- a/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java +++ b/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java @@ -1,3 +1,6 @@ +/** + * このクラスはBukkitのRunnableを拡張し、定期的にプレイヤーデータを処理するタスクを実行します。 + */ package ga.ganma.foofledrive.bukkitRunnable; import ga.ganma.foofledrive.economy.Economy; @@ -9,29 +12,51 @@ import java.io.File; import java.util.UUID; +/** + * BukkitのRunnableを拡張したクラス。 + * プラグインのインスタンスとプレイヤーデータフォルダを保持し、定期的にプレイヤーデータを処理します。 + */ public class Runnable extends BukkitRunnable { - private Plugin plugin; + private final Plugin plugin; + private final File playerDataFolder; - public Runnable(Plugin pl) { - plugin = pl; - } + /** + * コンストラクタ。 + * + * @param plugin プラグインのインスタンス + */ + public Runnable(Plugin plugin) { + this.plugin = plugin; + this.playerDataFolder = new File(plugin.getDataFolder(), "playerdata"); + } - @Override - public void run() { - String FS = File.separator; - File folder = new File(plugin.getDataFolder() + FS + "playerdata"); - if (folder.exists()) { - File[] list = folder.listFiles(); - if (list != null) { - for (File f : list) { - String name = f.getName(); - name = name.substring(0, name.lastIndexOf('.')); - UUID id = UUID.fromString(name); - OfflinePlayer pl = Bukkit.getOfflinePlayer(id); - Economy.paymoney(pl); - } + /** + * 定期的に実行されるタスク。 + * プレイヤーデータフォルダが存在する場合、その中のファイルを処理します。 + */ + @Override + public void run() { + if (playerDataFolder.exists()) { + File[] playerDataFiles = playerDataFolder.listFiles(); + if (playerDataFiles != null) { + for (File playerDataFile : playerDataFiles) { + processPlayerDataFile(playerDataFile); + } + } + } + } - } - } - } -} + /** + * プレイヤーデータファイルを処理します。 + * ファイル名からUUIDを取得し、対応するオフラインプレイヤーに対して支払い処理を行います。 + * + * @param playerDataFile プレイヤーデータファイル + */ + private void processPlayerDataFile(File playerDataFile) { + String fileName = playerDataFile.getName(); + String uuidString = fileName.substring(0, fileName.lastIndexOf('.')); + UUID playerUUID = UUID.fromString(uuidString); + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerUUID); + Economy.paymoney(offlinePlayer); + } +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java index 40d09fa..c08a4bb 100644 --- a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java +++ b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java @@ -21,119 +21,204 @@ import java.util.List; import java.util.logging.Level; +/** + * CommandMainクラスは、/flまたは/foofledriveコマンドの実行を処理するクラスです。 + * このクラスは、プレイヤーがコマンドを入力した際に適切なアクションを実行します。 + */ public class CommandMain implements CommandExecutor { - public static HashMap isopenInventory = new HashMap<>(); - private Plugin pl; - - public CommandMain(Plugin pl) { - this.pl = pl; - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (sender instanceof Player) { - Player p = (Player) sender; - if (label.equalsIgnoreCase("fl") || label.equalsIgnoreCase("foofledrive")) { - if (args.length != 0) { - if (args[0].equalsIgnoreCase("open")) { - new Subopen(this.pl, (Player) sender); - } else if (args[0].equalsIgnoreCase("plan")) { - if (args.length > 1) { - if (args[1].equalsIgnoreCase("LIGHT")) { - new Subplan(this.pl, p, plan.LIGHT); - Filerelation.readFile(p).setFinish(Calendar.getInstance()); - } else if (args[1].equalsIgnoreCase("FREE")) { - new Subplan(this.pl, p, plan.FREE); - }else if (args[1].equalsIgnoreCase("MIDDLE")) { - new Subplan(this.pl, p, plan.MIDDLE); - }else if (args[1].equalsIgnoreCase("LARGE")) { - new Subplan(this.pl, p, plan.LARGE); - } - } else { - Inventory inv = Bukkit.createInventory(null,27,"プラン選択画面"); - ItemStack is = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE,1); - ItemMeta im0 = is.getItemMeta(); - im0.setDisplayName(" "); - ItemStack free = new ItemStack(Material.PAPER,1); - ItemMeta im1 = free.getItemMeta(); - im1.setDisplayName("FREEプラン"); - List freeprice = new ArrayList<>(); - freeprice.add(Economy.getplanmoney(plan.FREE) + Foofledrive.unit); - im1.setLore(freeprice); - ItemStack light = new ItemStack(Material.IRON_INGOT,1); - ItemMeta im2 = light.getItemMeta(); - im2.setDisplayName("LIGHTプラン"); - List lightprice = new ArrayList<>(); - lightprice.add(Economy.getplanmoney(plan.LIGHT) + Foofledrive.unit); - im2.setLore(lightprice); - ItemStack middle = new ItemStack(Material.GOLD_INGOT,1); - ItemMeta im3 = middle.getItemMeta(); - im3.setDisplayName("MIDDLEプラン"); - List middleprice = new ArrayList<>(); - middleprice.add(Economy.getplanmoney(plan.MIDDLE) + Foofledrive.unit); - im3.setLore(middleprice); - ItemStack large = new ItemStack(Material.DIAMOND,1); - ItemMeta im4 = middle.getItemMeta(); - im4.setDisplayName("LARGEプラン"); - List largeprice = new ArrayList<>(); - largeprice.add(Economy.getplanmoney(plan.LARGE) + Foofledrive.unit); - im4.setLore(largeprice); - - is.setItemMeta(im0); - free.setItemMeta(im1); - light.setItemMeta(im2); - middle.setItemMeta(im3); - large.setItemMeta(im4); - - for(int a = 0;a <= 26;a++) { - if(a == 10){ - inv.setItem(a,free); - } - else if (a == 12){ - inv.setItem(a,light); - } - else if(a == 14){ - inv.setItem(a,middle); - } - else if(a == 16){ - inv.setItem(a,large); - } - else { - inv.setItem(a,is); - } - } - isopenInventory.put(p,true); - p.openInventory(inv); - } - } - else if(args[0].equalsIgnoreCase("reload")) { - if (p.isOp()) { - pl.reloadConfig(); - Foofledrive.configamout[0] = pl.getConfig().getInt("amout.FREE"); - Foofledrive.configamout[1] = pl.getConfig().getInt("amout.LIGHT"); - Foofledrive.configamout[2] = pl.getConfig().getInt("amout.MIDDLE"); - Foofledrive.configamout[3] = pl.getConfig().getInt("amout.LARGE"); - Foofledrive.unit = pl.getConfig().getString("unit"); - p.sendMessage("[foofle drive]コンフィグをリロードしました。"); - } - else { - p.sendMessage("[foofle drive]このコマンドは管理者専用です。"); - } - } - else if(args[0].equalsIgnoreCase("help")){ - p.sendMessage("[free drive] /fl open でfoofle driveを開くことができます。"); - p.sendMessage("[free drive] /fl plan で好きなプランに加入することができます。"); - } - } - else { - p.sendMessage("[free drive] /fl open でfoofle driveを開くことができます。"); - p.sendMessage("[free drive] /fl plan で好きなプランに加入することができます。"); - } - } - } - else { - pl.getLogger().log(Level.INFO, "このコマンドはコンソールからではなくプレイヤーが入力するものです。"); - } - return false; - } -} + public static final HashMap isopenInventory = new HashMap<>(); + private final Plugin plugin; + + public CommandMain(Plugin plugin) { + this.plugin = plugin; + } + + /** + * コマンドが実行されたときに呼び出されるメソッドです。 + * + * @param sender コマンドを実行したエンティティ + * @param command 実行されたコマンド + * @param label コマンドのラベル + * @param args コマンドの引数 + * @return コマンドが正常に処理された場合はtrue、そうでない場合はfalse + */ + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (label.equalsIgnoreCase("fl") || label.equalsIgnoreCase("foofledrive")) { + handleCommand(player, args); + } + } else { + plugin.getLogger().log(Level.INFO, "このコマンドはコンソールからではなくプレイヤーが入力するものです。"); + } + return false; + } + + /** + * コマンドの引数に基づいて適切なアクションを実行します。 + * + * @param player コマンドを実行したプレイヤー + * @param args コマンドの引数 + */ + private void handleCommand(Player player, String[] args) { + if (args.length == 0) { + sendHelpMessage(player); + return; + } + + switch (args[0].toLowerCase()) { + case "open": + new Subopen(plugin, player); + break; + case "plan": + handlePlanCommand(player, args); + break; + case "reload": + handleReloadCommand(player); + break; + case "help": + sendHelpMessage(player); + break; + default: + sendHelpMessage(player); + break; + } + } + + /** + * /fl planコマンドの処理を行います。 + * + * @param player コマンドを実行したプレイヤー + * @param args コマンドの引数 + */ + private void handlePlanCommand(Player player, String[] args) { + if (args.length > 1) { + plan selectedPlan = getPlanFromString(args[1]); + if (selectedPlan != null) { + new Subplan(plugin, player, selectedPlan); + if (selectedPlan == plan.LIGHT) { + Filerelation.readFile(player).setFinish(Calendar.getInstance()); + } + } else { + sendPlanSelectionInventory(player); + } + } else { + sendPlanSelectionInventory(player); + } + } + + /** + * 文字列からplan列挙型を取得します。 + * + * @param planString プランを表す文字列 + * @return 対応するplan列挙型、無効な場合はnull + */ + private plan getPlanFromString(String planString) { + try { + return plan.valueOf(planString.toUpperCase()); + } catch (IllegalArgumentException e) { + return null; + } + } + + /** + * /fl reloadコマンドの処理を行います。 + * + * @param player コマンドを実行したプレイヤー + */ + private void handleReloadCommand(Player player) { + if (player.isOp()) { + plugin.reloadConfig(); + Foofledrive.configamout[0] = plugin.getConfig().getInt("amout.FREE"); + Foofledrive.configamout[1] = plugin.getConfig().getInt("amout.LIGHT"); + Foofledrive.configamout[2] = plugin.getConfig().getInt("amout.MIDDLE"); + Foofledrive.configamout[3] = plugin.getConfig().getInt("amout.LARGE"); + Foofledrive.unit = plugin.getConfig().getString("unit"); + player.sendMessage("[foofle drive]コンフィグをリロードしました。"); + } else { + player.sendMessage("[foofle drive]このコマンドは管理者専用です。"); + } + } + + /** + * プレイヤーにヘルプメッセージを送信します。 + * + * @param player メッセージを受け取るプレイヤー + */ + private void sendHelpMessage(Player player) { + player.sendMessage("[free drive] /fl open でfoofle driveを開くことができます。"); + player.sendMessage("[free drive] /fl plan で好きなプランに加入することができます。"); + } + + /** + * プレイヤーにプラン選択インベントリを表示します。 + * + * @param player インベントリを表示するプレイヤー + */ + private void sendPlanSelectionInventory(Player player) { + Inventory inventory = Bukkit.createInventory(null, 27, "プラン選択画面"); + ItemStack glassPane = createItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE, " "); + ItemStack freePlan = createPlanItemStack(Material.PAPER, "FREEプラン", plan.FREE); + ItemStack lightPlan = createPlanItemStack(Material.IRON_INGOT, "LIGHTプラン", plan.LIGHT); + ItemStack middlePlan = createPlanItemStack(Material.GOLD_INGOT, "MIDDLEプラン", plan.MIDDLE); + ItemStack largePlan = createPlanItemStack(Material.DIAMOND, "LARGEプラン", plan.LARGE); + + for (int i = 0; i <= 26; i++) { + switch (i) { + case 10: + inventory.setItem(i, freePlan); + break; + case 12: + inventory.setItem(i, lightPlan); + break; + case 14: + inventory.setItem(i, middlePlan); + break; + case 16: + inventory.setItem(i, largePlan); + break; + default: + inventory.setItem(i, glassPane); + break; + } + } + + isopenInventory.put(player, true); + player.openInventory(inventory); + } + + /** + * 指定された素材と表示名でItemStackを作成します。 + * + * @param material アイテムの素材 + * @param displayName アイテムの表示名 + * @return 作成されたItemStack + */ + private ItemStack createItemStack(Material material, String displayName) { + ItemStack itemStack = new ItemStack(material, 1); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(displayName); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + /** + * 指定されたプランの情報を含むItemStackを作成します。 + * + * @param material アイテムの素材 + * @param displayName アイテムの表示名 + * @param planType プランの種類 + * @return 作成されたItemStack + */ + private ItemStack createPlanItemStack(Material material, String displayName, plan planType) { + ItemStack itemStack = new ItemStack(material, 1); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(displayName); + List lore = new ArrayList<>(); + lore.add(Economy.getPlanCost(planType) + Foofledrive.unit); + itemMeta.setLore(lore); + itemStack.setItemMeta(itemMeta); + return itemStack; + } +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/command/Subopen.java b/src/main/java/ga/ganma/foofledrive/command/Subopen.java index 5cd48a5..96754a6 100644 --- a/src/main/java/ga/ganma/foofledrive/command/Subopen.java +++ b/src/main/java/ga/ganma/foofledrive/command/Subopen.java @@ -6,10 +6,11 @@ import org.bukkit.plugin.Plugin; public class Subopen { - Plugin pl; - public Subopen(Plugin pl, Player p){ - this.pl = pl; - p.openInventory(Filerelation.readFile(p).getInv()); - GetEvent.isinventoryopen.put(p,true); - } + Plugin pl; + + public Subopen(Plugin pl, Player p) { + this.pl = pl; + p.openInventory(Filerelation.readFile(p).getInv()); + GetEvent.isInventoryOpen.put(p, true); + } } diff --git a/src/main/java/ga/ganma/foofledrive/command/Subplan.java b/src/main/java/ga/ganma/foofledrive/command/Subplan.java index b4dc827..bd3a584 100644 --- a/src/main/java/ga/ganma/foofledrive/command/Subplan.java +++ b/src/main/java/ga/ganma/foofledrive/command/Subplan.java @@ -10,21 +10,22 @@ import java.util.Calendar; public class Subplan { - Plugin pl; - Player p; - public Subplan(Plugin pl, Player player, plan plan){ - this.pl = pl; - p = player; - boolean issuccess; - issuccess = InventoryAPI.planchange(player,plan); - Playerdata pd = Filerelation.readFile(p); - if(pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } + Plugin pl; + Player p; - if(issuccess) { - p.sendMessage("[foofle drive]プランを" + plan + "プランに変更しました。"); - } - } + public Subplan(Plugin pl, Player player, plan plan) { + this.pl = pl; + p = player; + boolean issuccess; + issuccess = InventoryAPI.planchange(player, plan); + Playerdata pd = Filerelation.readFile(p); + if (pd.getFinish() == null) { + pd.setFinish(Calendar.getInstance()); + Filerelation.createFile(pd); + } + + if (issuccess) { + p.sendMessage("[foofle drive]プランを" + plan + "プランに変更しました。"); + } + } } diff --git a/src/main/java/ga/ganma/foofledrive/economy/Economy.java b/src/main/java/ga/ganma/foofledrive/economy/Economy.java index ac15e4a..099cb76 100644 --- a/src/main/java/ga/ganma/foofledrive/economy/Economy.java +++ b/src/main/java/ga/ganma/foofledrive/economy/Economy.java @@ -1,7 +1,7 @@ package ga.ganma.foofledrive.economy; -import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.inventoryRelation.InventoryAPI; import ga.ganma.foofledrive.plan; import ga.ganma.foofledrive.playerdata.Playerdata; @@ -13,165 +13,50 @@ import java.util.logging.Level; public class Economy { - public static void paymoney(Player p) { - Playerdata pd = Filerelation.readFile(p); - if (Foofledrive.econ.hasAccount(p)) { - double bal = Foofledrive.econ.getBalance(p); - if (pd.getFinish() != null) { - if (pd.getFinish().before(Calendar.getInstance())) { - switch (pd.getPlan()) { - case LIGHT: - if (bal >= getplanmoney(plan.LIGHT)) { - Foofledrive.econ.withdrawPlayer(p, getplanmoney(plan.LIGHT)); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のLIGHTプランの料金を支払いました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - case MIDDLE: - if (bal >= getplanmoney(plan.MIDDLE)) { - Foofledrive.econ.withdrawPlayer(p, getplanmoney(plan.MIDDLE)); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のMIDDLEプランの料金を支払いました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - case LARGE: - if (bal >= getplanmoney(plan.LARGE)) { - Foofledrive.econ.withdrawPlayer(p, getplanmoney(plan.LARGE)); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のLARGEプランの料金を支払いました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - p.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - p.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - } - } - } - } - } - public static void paymoney(OfflinePlayer p) { - Playerdata pd = Filerelation.readFile(p); - if (p != null){ - double bal = Foofledrive.econ.getBalance(p); - if (pd.getFinish() != null) { - if (pd.getFinish().before(Calendar.getInstance())) { - int[] amout = Foofledrive.configamout; - switch (pd.getPlan()) { - case LIGHT: - if (bal >= amout[1]) { - Foofledrive.econ.withdrawPlayer(p, amout[1]); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のLIGHTプランの料金を支払いました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - pl.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - case MIDDLE: - if (bal >= amout[2]) { - Foofledrive.econ.withdrawPlayer(p, amout[2]); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のMIDDLEプランの料金を支払いました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - pl.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - case LARGE: - if (bal >= amout[3]) { - Foofledrive.econ.withdrawPlayer(p, amout[3]); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のLARGEプランの料金を支払いました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]料金の支払いをしました。"); - } - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } else { - InventoryAPI.planchange(p, plan.FREE); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + "のお金が足りないため、自動的にfreeプランへ移行しました。"); - Bukkit.getLogger().log(Level.INFO, "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - if (p.isOnline()) { - Player pl = (Player) p; - pl.sendMessage("[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); - pl.sendMessage("[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); - } - } - break; - } - } - } - } - } + public static void paymoney(Player p) { + processPayment(p, Filerelation.readFile(p), Foofledrive.econ.getBalance(p)); + } + + public static void paymoney(OfflinePlayer p) { + processPayment(p, Filerelation.readFile(p), Foofledrive.econ.getBalance(p)); + } + + private static void processPayment(OfflinePlayer p, Playerdata pd, double bal) { + if (pd.getFinish() != null && pd.getFinish().before(Calendar.getInstance())) { + int planCost = getPlanCost(pd.getPlan()); + if (bal >= planCost) { + Foofledrive.econ.withdrawPlayer(p, planCost); + logAndNotify(p, pd.getPlan() + "プランの料金を支払いました。", "[foofle drive]料金の支払いをしました。"); + pd.setFinish(Calendar.getInstance()); + Filerelation.createFile(pd); + } else { + InventoryAPI.planchange(p, plan.FREE); + logAndNotify(p, "お金が足りないため、自動的にfreeプランへ移行しました。", "[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); + logAndNotify(p, "その際、2段目以降にあるアイテムを全消去しました。", "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); + } + } + } - public static int getplanmoney(plan plan){ - switch (plan){ - case FREE: - return Foofledrive.configamout[0]; - case LIGHT: - return Foofledrive.configamout[1]; - case MIDDLE: - return Foofledrive.configamout[2]; - case LARGE: - return Foofledrive.configamout[3]; - } + private static void logAndNotify(OfflinePlayer p, String logMessage, String notifyMessage) { + Bukkit.getLogger().log(Level.INFO, "[foofle drive]" + p.getName() + logMessage); + if (p.isOnline()) { + ((Player) p).sendMessage(notifyMessage); + } + } - return 0; - } + public static int getPlanCost(plan plan) { + switch (plan) { + case FREE: + return Foofledrive.configamout[0]; + case LIGHT: + return Foofledrive.configamout[1]; + case MIDDLE: + return Foofledrive.configamout[2]; + case LARGE: + return Foofledrive.configamout[3]; + default: + return 0; + } + } } \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java index a30a484..554d915 100644 --- a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java +++ b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java @@ -17,149 +17,78 @@ import java.util.List; public class InventoryAPI { - public static Inventory Inventorysizechange(Inventory oldInv, int setsize){ - Inventory inv = Bukkit.createInventory(null,setsize,"foofle drive"); - inv.setStorageContents(oldInv.getStorageContents()); - return inv; - } + public static void planchange(OfflinePlayer player, plan plan) { + Inventory inv = createInventoryForPlan(plan); + ItemStack[] is = trimInventoryItems(Filerelation.readFile(player).getInv().getStorageContents(), plan); - public static boolean planchange(Player player, plan plan){ - Inventory inv = null; - ItemStack[] is = null; - switch (plan){ - case FREE: - inv = Bukkit.createInventory(null,9,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length > 9){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(9,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; + inv.setStorageContents(is); + Foofledrive.econ.withdrawPlayer(player, Economy.getPlanCost(Filerelation.readFile(player).getPlan())); + Playerdata pd = new Playerdata(player, inv, plan); + pd.setFinish(Calendar.getInstance()); + Filerelation.createFile(pd); + } - case LIGHT: - inv = Bukkit.createInventory(null,18,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 19){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(18,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; - case MIDDLE: - inv = Bukkit.createInventory(null,27,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 28){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(27,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; + public static boolean planchange(Player player, plan plan) { + Inventory inv = createInventoryForPlan(plan); + ItemStack[] is = trimInventoryItems(Filerelation.readFile(player).getInv().getStorageContents(), plan); - case LARGE: - inv = Bukkit.createInventory(null,54,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - break; - } - if(Foofledrive.econ.getBalance(player) >= Economy.getplanmoney(plan)) { - inv.setStorageContents(is); - Playerdata pd = new Playerdata(player, inv, plan); - pd.setFinish(Calendar.getInstance()); - Foofledrive.econ.withdrawPlayer(player, Economy.getplanmoney(plan)); - player.sendMessage("[foofle drive]このプランの一週間の利用料金を払いました。"); - Filerelation.createFile(pd); - return true; - } - else { - player.sendMessage("[foofle drive]お金が足りないため、" + plan + "プランの契約ができませんでした。"); - } - return false; - } + if (Foofledrive.econ.getBalance(player) >= Economy.getPlanCost(plan)) { + inv.setStorageContents(is); + Playerdata pd = new Playerdata(player, inv, plan); + pd.setFinish(Calendar.getInstance()); + Foofledrive.econ.withdrawPlayer(player, Economy.getPlanCost(plan)); + player.sendMessage("[foofle drive]このプランの一週間の利用料金を払いました。"); + Filerelation.createFile(pd); + return true; + } else { + player.sendMessage("[foofle drive]お金が足りないため、" + plan + "プランの契約ができませんでした。"); + } + return false; + } - public static void planchange(OfflinePlayer player, plan plan){ - Inventory inv = null; - ItemStack[] is = null; - switch (plan){ - case FREE: - inv = Bukkit.createInventory(null,9,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length > 9){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(9,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; + public static Inventory createInventoryForPlan(plan plan) { + switch (plan) { + case FREE: + return Bukkit.createInventory(null, 9, "foofle drive"); + case LIGHT: + return Bukkit.createInventory(null, 18, "foofle drive"); + case MIDDLE: + return Bukkit.createInventory(null, 27, "foofle drive"); + case LARGE: + return Bukkit.createInventory(null, 54, "foofle drive"); + default: + throw new IllegalArgumentException("Unknown plan: " + plan); + } + } - case LIGHT: - inv = Bukkit.createInventory(null,18,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 19){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(18,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; - case MIDDLE: - inv = Bukkit.createInventory(null,27,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - if(is.length >= 28){ - int a = is.length; - List isl = new ArrayList<>(Arrays.asList(is)); - isl.subList(27,a).clear(); - ItemStack[] array = new ItemStack[isl.size()]; - int i = 0; - for (ItemStack ist : isl){ - array[i] = ist; - i += 1; - } - is = array; - } - break; + public static ItemStack[] trimInventoryItems(ItemStack[] items, plan plan) { + int maxSize = getMaxSizeForPlan(plan); + if (items.length > maxSize) { + List itemList = new ArrayList<>(Arrays.asList(items)); + itemList.subList(maxSize, items.length).clear(); + return itemList.toArray(new ItemStack[0]); + } + return items; + } - case LARGE: - inv = Bukkit.createInventory(null,54,"foofle drive"); - is = Filerelation.readFile(player).getInv().getStorageContents(); - break; - } - inv.setStorageContents(is); - Foofledrive.econ.withdrawPlayer(player,Economy.getplanmoney(Filerelation.readFile(player).getPlan())); - Playerdata pd = new Playerdata(player,inv,plan); - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } -} + public static int getMaxSizeForPlan(plan plan) { + switch (plan) { + case FREE: + return 9; + case LIGHT: + return 18; + case MIDDLE: + return 27; + case LARGE: + return 54; + default: + throw new IllegalArgumentException("Unknown plan: " + plan); + } + } + + public Inventory Inventorysizechange(Inventory oldInv, int setsize) { + Inventory inv = Bukkit.createInventory(null, setsize, "foofle drive"); + inv.setStorageContents(oldInv.getStorageContents()); + return inv; + } +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryEncoder.java b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryEncoder.java index e35f704..6dc85c5 100644 --- a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryEncoder.java +++ b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryEncoder.java @@ -11,35 +11,35 @@ import java.util.Base64; public class InventoryEncoder { - public static String inventoryToString(Inventory inventory) { - try { - ByteArrayOutputStream str = new ByteArrayOutputStream(); - BukkitObjectOutputStream data = new BukkitObjectOutputStream(str); - data.writeInt(inventory.getSize()); - for (int i = 0; i < inventory.getSize(); i++) { - data.writeObject(inventory.getItem(i)); - } - data.close(); - return Base64.getEncoder().encodeToString(str.toByteArray()); - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } + public static String inventoryToString(Inventory inventory) { + try { + ByteArrayOutputStream str = new ByteArrayOutputStream(); + BukkitObjectOutputStream data = new BukkitObjectOutputStream(str); + data.writeInt(inventory.getSize()); + for (int i = 0; i < inventory.getSize(); i++) { + data.writeObject(inventory.getItem(i)); + } + data.close(); + return Base64.getEncoder().encodeToString(str.toByteArray()); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } - public static Inventory stringToInventory(String inventoryData) { - try { - ByteArrayInputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(inventoryData)); - BukkitObjectInputStream data = new BukkitObjectInputStream(stream); - Inventory inventory = Bukkit.createInventory(null, data.readInt(), "foofle drive"); - for (int i = 0; i < inventory.getSize(); i++) { - inventory.setItem(i, (ItemStack) data.readObject()); - } - data.close(); - return inventory; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } + public static Inventory stringToInventory(String inventoryData) { + try { + ByteArrayInputStream stream = new ByteArrayInputStream(Base64.getDecoder().decode(inventoryData)); + BukkitObjectInputStream data = new BukkitObjectInputStream(stream); + Inventory inventory = Bukkit.createInventory(null, data.readInt(), "foofle drive"); + for (int i = 0; i < inventory.getSize(); i++) { + inventory.setItem(i, (ItemStack) data.readObject()); + } + data.close(); + return inventory; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } } diff --git a/src/main/java/ga/ganma/foofledrive/plan.java b/src/main/java/ga/ganma/foofledrive/plan.java index cae0bf5..a842560 100644 --- a/src/main/java/ga/ganma/foofledrive/plan.java +++ b/src/main/java/ga/ganma/foofledrive/plan.java @@ -3,5 +3,5 @@ import java.io.Serializable; public enum plan implements Serializable { - FREE,LIGHT,MIDDLE,LARGE + FREE, LIGHT, MIDDLE, LARGE } diff --git a/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java b/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java index 08d61cf..ef7b7d5 100644 --- a/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java +++ b/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java @@ -11,48 +11,47 @@ import java.util.UUID; public class Playerdata implements Serializable { - private UUID mcid; - private plan plan; - private String inventorySt; - private Calendar finish; - - public Playerdata(Player pl, Inventory inv, plan plan) { - this.mcid = pl.getUniqueId(); - this.plan = plan; - this.inventorySt = InventoryEncoder.inventoryToString(inv); - } - - public Playerdata(OfflinePlayer pl, Inventory inv, plan plan) { - this.mcid = pl.getUniqueId(); - this.plan = plan; - this.inventorySt = InventoryEncoder.inventoryToString(inv); - } - - public ga.ganma.foofledrive.plan getPlan() { - return plan; - } - - public UUID getMcid() { - return mcid; - } - - public Inventory getInv() { - return InventoryEncoder.stringToInventory(inventorySt); - } - - public void setFinish(Calendar cl){ - cl.add(Calendar.DAY_OF_MONTH,+7); - finish = cl; - } - - public Calendar getFinish(){ - if(finish != null) { - return finish; - } - else { - Calendar cl = Calendar.getInstance(); - setFinish(cl); - } - return finish; - } + private final UUID mcid; + private final plan plan; + private final String inventorySt; + private Calendar finish; + + public Playerdata(Player pl, Inventory inv, plan plan) { + this.mcid = pl.getUniqueId(); + this.plan = plan; + this.inventorySt = InventoryEncoder.inventoryToString(inv); + } + + public Playerdata(OfflinePlayer pl, Inventory inv, plan plan) { + this.mcid = pl.getUniqueId(); + this.plan = plan; + this.inventorySt = InventoryEncoder.inventoryToString(inv); + } + + public ga.ganma.foofledrive.plan getPlan() { + return plan; + } + + public UUID getMcid() { + return mcid; + } + + public Inventory getInv() { + return InventoryEncoder.stringToInventory(inventorySt); + } + + public Calendar getFinish() { + if (finish != null) { + return finish; + } else { + Calendar cl = Calendar.getInstance(); + setFinish(cl); + } + return finish; + } + + public void setFinish(Calendar cl) { + cl.add(Calendar.DAY_OF_MONTH, +7); + finish = cl; + } } From b636a0d03b9d0e62b6a81cf23d1101a516d9a384 Mon Sep 17 00:00:00 2001 From: gobotan Date: Tue, 29 Oct 2024 22:02:26 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=80=90=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=80=91=E6=96=87?= =?UTF-8?q?=E8=A8=80=E3=81=AE=E5=A4=89=E6=9B=B4=20free=20drive=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=A8=E3=81=93?= =?UTF-8?q?=E3=82=8D=E3=82=92foofle=20drive=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ga/ganma/foofledrive/command/CommandMain.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java index c08a4bb..6d95a36 100644 --- a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java +++ b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java @@ -147,8 +147,8 @@ private void handleReloadCommand(Player player) { * @param player メッセージを受け取るプレイヤー */ private void sendHelpMessage(Player player) { - player.sendMessage("[free drive] /fl open でfoofle driveを開くことができます。"); - player.sendMessage("[free drive] /fl plan で好きなプランに加入することができます。"); + player.sendMessage("[foofle drive] /fl open でfoofle driveを開くことができます。"); + player.sendMessage("[foofle drive] /fl plan で好きなプランに加入することができます。"); } /** From 5b728efd5feab9587db30411cfb6c1be5fadabb2 Mon Sep 17 00:00:00 2001 From: gobotan Date: Wed, 30 Oct 2024 21:34:55 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E3=80=90=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=80=91=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .idea/.gitignore | 8 + .idea/compiler.xml | 13 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 35 +++ .idea/misc.xml | 12 + .idea/modules.xml | 8 + .idea/uiDesigner.xml | 124 ++++++++++ .idea/vcs.xml | 6 + pom.xml | 10 +- ...lerelation.java => FileRelationUtils.java} | 213 +++++++++--------- .../ga/ganma/foofledrive/FoofleDrivePlan.java | 15 ++ .../ga/ganma/foofledrive/Foofledrive.java | 10 +- .../ganma/foofledrive/Listener/GUIEvent.java | 18 +- .../ganma/foofledrive/Listener/GetEvent.java | 94 ++++---- .../bizlogic/convert/ConvertPlayerData.java | 22 ++ .../foofledrive/bukkitRunnable/Runnable.java | 5 +- .../foofledrive/command/CommandMain.java | 16 +- .../command/{Subopen.java => SubmitOpen.java} | 32 +-- .../command/{Subplan.java => SubmitPlan.java} | 62 ++--- .../ga/ganma/foofledrive/economy/Economy.java | 18 +- .../inventoryRelation/InventoryAPI.java | 18 +- src/main/java/ga/ganma/foofledrive/plan.java | 4 + .../playerdata/PlayerDriveData.java | 63 ++++++ .../foofledrive/playerdata/Playerdata.java | 5 + .../ga/ganma/foofledrive/Filerelation.class | Bin 4133 -> 4569 bytes .../ga/ganma/foofledrive/Foofledrive.class | Bin 3202 -> 3326 bytes .../foofledrive/Listener/GUIEvent$1.class | Bin 792 -> 0 bytes .../ganma/foofledrive/Listener/GUIEvent.class | Bin 6245 -> 6789 bytes .../foofledrive/Listener/GetEvent$1.class | Bin 1959 -> 2126 bytes .../ganma/foofledrive/Listener/GetEvent.class | Bin 4366 -> 4862 bytes .../foofledrive/bukkitRunnable/Runnable.class | Bin 1807 -> 1778 bytes .../foofledrive/command/CommandMain.class | Bin 6629 -> 7963 bytes .../ganma/foofledrive/command/Subopen.class | Bin 1142 -> 1142 bytes .../ganma/foofledrive/command/Subplan.class | Bin 1780 -> 2080 bytes .../ganma/foofledrive/economy/Economy$1.class | Bin 787 -> 806 bytes .../ganma/foofledrive/economy/Economy.class | Bin 5262 -> 4313 bytes .../inventoryRelation/InventoryAPI$1.class | Bin 822 -> 841 bytes .../inventoryRelation/InventoryAPI.class | Bin 6129 -> 5234 bytes .../inventoryRelation/InventoryEncoder.class | Bin 2623 -> 2623 bytes .../classes/ga/ganma/foofledrive/plan.class | Bin 1104 -> 1336 bytes .../foofledrive/playerdata/Playerdata.class | Bin 2041 -> 2169 bytes target/classes/plugin.yml | 2 +- "target/foofledrive-0.7.9\316\262.jar" | Bin 31061 -> 54570 bytes target/maven-archiver/pom.properties | 6 +- .../compile/default-compile/createdFiles.lst | 15 +- .../original-foofledrive-0.7.9\316\262.jar" | Bin 30467 -> 53562 bytes 47 files changed, 594 insertions(+), 248 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml rename src/main/java/ga/ganma/foofledrive/{Filerelation.java => FileRelationUtils.java} (75%) create mode 100644 src/main/java/ga/ganma/foofledrive/FoofleDrivePlan.java create mode 100644 src/main/java/ga/ganma/foofledrive/bizlogic/convert/ConvertPlayerData.java rename src/main/java/ga/ganma/foofledrive/command/{Subopen.java => SubmitOpen.java} (57%) rename src/main/java/ga/ganma/foofledrive/command/{Subplan.java => SubmitPlan.java} (61%) create mode 100644 src/main/java/ga/ganma/foofledrive/playerdata/PlayerDriveData.java delete mode 100644 target/classes/ga/ganma/foofledrive/Listener/GUIEvent$1.class diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..cc5c502 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# デフォルトの無視対象ファイル +/shelf/ +/workspace.xml +# エディターベースの HTTP クライアントリクエスト +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..841c400 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..d027cb1 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..9e0563e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e183065 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index f2ed865..330351c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ ga.ganma foofledrive - 0.7.9β + 1.0.0 jar foofledrive - 1.8 + 1.16 UTF-8 @@ -24,8 +24,8 @@ maven-compiler-plugin 3.7.0 - 8 - 8 + 16 + 16 @@ -72,7 +72,7 @@ org.spigotmc spigot-api - 1.14.4-R0.1-SNAPSHOT + 1.20.2-R0.1-SNAPSHOT provided diff --git a/src/main/java/ga/ganma/foofledrive/Filerelation.java b/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java similarity index 75% rename from src/main/java/ga/ganma/foofledrive/Filerelation.java rename to src/main/java/ga/ganma/foofledrive/FileRelationUtils.java index cb4bdfb..a9d337c 100644 --- a/src/main/java/ga/ganma/foofledrive/Filerelation.java +++ b/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java @@ -1,102 +1,113 @@ -package ga.ganma.foofledrive; - -import ga.ganma.foofledrive.playerdata.Playerdata; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -import java.io.*; -import java.util.logging.Level; - -/** - * Filerelationクラスは、プレイヤーデータのファイル操作を行うためのユーティリティクラスです。 - * プレイヤーデータの読み書きや存在確認を行います。 - */ -public class Filerelation { - - private static final String PLAYERDATA_FOLDER = Foofledrive.ender.getDataFolder() + File.separator + "playerdata" + File.separator; - - /** - * 指定されたプレイヤーのデータファイルが存在するかを確認します。 - * - * @param p チェックするプレイヤー - * @return データファイルが存在する場合はtrue、存在しない場合はfalse - */ - public static boolean nameCheck(Player p) { - return new File(PLAYERDATA_FOLDER + p.getUniqueId() + ".dat").exists(); - } - - /** - * 指定されたオフラインプレイヤーのデータファイルが存在するかを確認します。 - * - * @param offp チェックするオフラインプレイヤー - * @return データファイルが存在する場合はtrue、存在しない場合はfalse - */ - public static boolean nameCheck(OfflinePlayer offp) { - return new File(PLAYERDATA_FOLDER + offp.getUniqueId() + ".dat").exists(); - } - - /** - * 指定されたプレイヤーデータをファイルに書き込みます。 - * - * @param e 書き込むプレイヤーデータ - */ - public static void createFile(Playerdata e) { - try { - File folder = new File(PLAYERDATA_FOLDER); - folder.mkdir(); - File file = new File(PLAYERDATA_FOLDER + e.getMcid().toString() + ".dat"); - - if (file.exists()) { - file.delete(); - } - try (FileOutputStream fos = new FileOutputStream(file); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(e); - } - } catch (IOException io) { - Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの作成に失敗しました。"); - } - } - - /** - * 指定されたプレイヤーのデータファイルを読み込みます。 - * - * @param p 読み込むプレイヤー - * @return 読み込んだプレイヤーデータ、存在しない場合はnull - */ - public static Playerdata readFile(Player p) { - return readFileInternal(p.getUniqueId().toString()); - } - - /** - * 指定されたオフラインプレイヤーのデータファイルを読み込みます。 - * - * @param offp 読み込むオフラインプレイヤー - * @return 読み込んだプレイヤーデータ、存在しない場合はnull - */ - public static Playerdata readFile(OfflinePlayer offp) { - return readFileInternal(offp.getUniqueId().toString()); - } - - /** - * 内部的にプレイヤーデータファイルを読み込みます。 - * - * @param uniqueId 読み込むプレイヤーのUUID - * @return 読み込んだプレイヤーデータ、存在しない場合はnull - */ - private static Playerdata readFileInternal(String uniqueId) { - Playerdata pd = null; - if (!new File(PLAYERDATA_FOLDER + uniqueId + ".dat").exists()) { - return null; - } - try (FileInputStream fis = new FileInputStream(PLAYERDATA_FOLDER + uniqueId + ".dat"); - ObjectInputStream ois = new ObjectInputStream(fis)) { - pd = (Playerdata) ois.readObject(); - } catch (IOException e) { - Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); - } catch (ClassNotFoundException e) { - Foofledrive.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。"); - } - return pd; - } +package ga.ganma.foofledrive; + +import ga.ganma.foofledrive.playerdata.Playerdata; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.io.*; +import java.nio.file.Path; +import java.util.UUID; +import java.util.logging.Level; + +/** + * Filerelationクラスは、プレイヤーデータのファイル操作を行うためのユーティリティクラスです。 + * プレイヤーデータの読み書きや存在確認を行います。 + */ +public final class FileRelationUtils { + + public static final Path PLAYERDATA_FOLDER = new File(Foofledrive.ender.getDataFolder() + File.separator + "playerdata").toPath(); + public static final String DATA_FILE_EXTENTION = ".dat"; + + /** + * インスタンス化を禁止するためのプライベートコンストラクタ。 + */ + private FileRelationUtils() {} + /** + * 指定されたプレイヤーのデータファイルが存在するかを確認します。 + * + * @param p チェックするプレイヤー + * @return データファイルが存在する場合はtrue、存在しない場合はfalse + */ + public static boolean nameCheck(Player p) { + return new File(PLAYERDATA_FOLDER.toString() + p.getUniqueId() + ".dat").exists(); + } + + /** + * 指定されたオフラインプレイヤーのデータファイルが存在するかを確認します。 + * + * @param offp チェックするオフラインプレイヤー + * @return データファイルが存在する場合はtrue、存在しない場合はfalse + */ + public static boolean nameCheck(OfflinePlayer offp) { + return new File(PLAYERDATA_FOLDER.toString() + offp.getUniqueId() + ".dat").exists(); + } + + public static boolean nameCheck(UUID uuid) { + return new File(PLAYERDATA_FOLDER.toString() + uuid + ".dat").exists(); + } + + /** + * 指定されたプレイヤーデータをファイルに書き込みます。 + * @deprecated このメソッドの新規の使用は推奨しません。 + * @param e 書き込むプレイヤーデータ + */ + public static void createFile(Playerdata e) { + try { + File folder = PLAYERDATA_FOLDER.toFile(); + folder.mkdir(); + File file = new File(PLAYERDATA_FOLDER + e.getMcid().toString() + ".dat"); + + if (file.exists()) { + file.delete(); + } + try (FileOutputStream fos = new FileOutputStream(file); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(e); + } + } catch (IOException io) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの作成に失敗しました。"); + } + } + + /** + * 指定されたプレイヤーのデータファイルを読み込みます。 + * + * @param p 読み込むプレイヤー + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + public static Playerdata readFile(Player p) { + return readFileInternal(p.getUniqueId()); + } + + /** + * 指定されたオフラインプレイヤーのデータファイルを読み込みます。 + * + * @param offp 読み込むオフラインプレイヤー + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + public static Playerdata readFile(OfflinePlayer offp) { + return readFileInternal(offp.getUniqueId()); + } + + /** + * 内部的にプレイヤーデータファイルを読み込みます。 + * + * @param uniqueId 読み込むプレイヤーのUUID + * @return 読み込んだプレイヤーデータ、存在しない場合はnull + */ + private static Playerdata readFileInternal(UUID uniqueId) { + Playerdata pd = null; + if (!nameCheck(uniqueId)) { + return null; + } + try (FileInputStream fis = new FileInputStream(PLAYERDATA_FOLDER.toString() + uniqueId + ".dat"); + ObjectInputStream ois = new ObjectInputStream(fis)) { + pd = (Playerdata) ois.readObject(); + } catch (IOException e) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "ファイルの読み取りに失敗しました。"); + } catch (ClassNotFoundException e) { + Foofledrive.ender.getLogger().log(Level.SEVERE, "内部エラーが発生しました。"); + } + return pd; + } } \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/FoofleDrivePlan.java b/src/main/java/ga/ganma/foofledrive/FoofleDrivePlan.java new file mode 100644 index 0000000..534409a --- /dev/null +++ b/src/main/java/ga/ganma/foofledrive/FoofleDrivePlan.java @@ -0,0 +1,15 @@ +package ga.ganma.foofledrive; + +public enum FoofleDrivePlan { + FREE(0), LIGHT(1), MIDDLE(2), LARGE(3); + + private final int id; + + private FoofleDrivePlan(int id) { + this.id = id; + } + + public int getId() { + return id; + } +} diff --git a/src/main/java/ga/ganma/foofledrive/Foofledrive.java b/src/main/java/ga/ganma/foofledrive/Foofledrive.java index ef1ea9b..63f7c80 100644 --- a/src/main/java/ga/ganma/foofledrive/Foofledrive.java +++ b/src/main/java/ga/ganma/foofledrive/Foofledrive.java @@ -16,7 +16,7 @@ public final class Foofledrive extends JavaPlugin { private static final Logger log = Logger.getLogger("Minecraft"); public static Economy econ = null; - public static int[] configamout = new int[4]; + public static int[] configValues = new int[4]; public static String unit; public static Plugin ender; @@ -53,10 +53,10 @@ private boolean setupEconomy() { } private void loadConfigValues() { - configamout[0] = getConfig().getInt("amout.FREE"); - configamout[1] = getConfig().getInt("amout.LIGHT"); - configamout[2] = getConfig().getInt("amout.MIDDLE"); - configamout[3] = getConfig().getInt("amout.LARGE"); + configValues[0] = getConfig().getInt("amout.FREE"); + configValues[1] = getConfig().getInt("amout.LIGHT"); + configValues[2] = getConfig().getInt("amout.MIDDLE"); + configValues[3] = getConfig().getInt("amout.LARGE"); unit = getConfig().getString("unit"); } } \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java b/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java index 6d393f9..c77398d 100644 --- a/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java +++ b/src/main/java/ga/ganma/foofledrive/Listener/GUIEvent.java @@ -1,6 +1,6 @@ package ga.ganma.foofledrive.Listener; -import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.command.CommandMain; import ga.ganma.foofledrive.inventoryRelation.InventoryAPI; import ga.ganma.foofledrive.plan; @@ -22,20 +22,18 @@ public class GUIEvent implements Listener { - private static final HashMap provisionalPlan = new HashMap<>(); + private static final HashMap provisionalPlan = new HashMap<>(); public GUIEvent(Plugin pl) { Bukkit.getPluginManager().registerEvents(this, pl); } @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - if (e.getWhoClicked() == null) { + public void onInventoryClickEvent(InventoryClickEvent e) { + if(!(e.getWhoClicked() instanceof Player player)) { return; } - - Player player = (Player) e.getWhoClicked(); - if (!CommandMain.isopenInventory.containsKey(player) || !CommandMain.isopenInventory.get(player)) { + if ((CommandMain.isopenInventory.containsKey(player) && CommandMain.isopenInventory.get(player)) == false) { return; } @@ -100,12 +98,12 @@ private void handleContractConfirmation(InventoryClickEvent e, Player player) { private void confirmPlanChange(InventoryClickEvent e, Player player) { e.setCancelled(true); plan selectedPlan = provisionalPlan.get(player); - boolean planChanged = InventoryAPI.planchange(player, selectedPlan); - Playerdata playerData = Filerelation.readFile(player); + boolean planChanged = InventoryAPI.changePlan(player, selectedPlan); + Playerdata playerData = FileRelationUtils.readFile(player); if (playerData.getFinish() == null) { playerData.setFinish(Calendar.getInstance()); - Filerelation.createFile(playerData); + FileRelationUtils.createFile(playerData); } if (planChanged) { diff --git a/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java b/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java index 5d868c4..7ba8c92 100644 --- a/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java +++ b/src/main/java/ga/ganma/foofledrive/Listener/GetEvent.java @@ -1,7 +1,6 @@ package ga.ganma.foofledrive.Listener; -import ga.ganma.foofledrive.Filerelation; -import ga.ganma.foofledrive.Foofledrive; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.plan; import ga.ganma.foofledrive.playerdata.Playerdata; import org.bukkit.Bukkit; @@ -17,54 +16,67 @@ import java.util.HashMap; public class GetEvent implements Listener { - public static HashMap isInventoryOpen = new HashMap<>(); - private final Plugin pl; + public static final HashMap isInventoryOpen = new HashMap<>(); + private final Plugin plugin; - public GetEvent(Plugin pl) { - Bukkit.getPluginManager().registerEvents(this, pl); - this.pl = pl; + public GetEvent(Plugin plugin) { + Bukkit.getPluginManager().registerEvents(this, plugin); + this.plugin = plugin; } @EventHandler - public void getplayerloginEvent(PlayerJoinEvent e) { - Player p = e.getPlayer(); - Playerdata pd = Filerelation.readFile(p); + public void onPlayerJoinEvent(PlayerJoinEvent event) { + Player player = event.getPlayer(); + Playerdata playerData = FileRelationUtils.readFile(player); - if (Filerelation.nameCheck(p)) { - if (pd.getPlan() == plan.FREE) { - p.sendMessage("[foofle drive]あなたは現在" + pd.getPlan() + "プランに加入しています。"); - } else { - double bal = Foofledrive.econ.getBalance(p); - if (pd.getFinish() != null) { - Playerdata finalPd = pd; - new BukkitRunnable() { - @Override - public void run() { - long diffTime = finalPd.getFinish().getTimeInMillis() - Calendar.getInstance().getTimeInMillis(); - int diffDayMillis = 1000 * 60 * 60 * 24; - int diffDays = (int) (diffTime / diffDayMillis); - p.sendMessage("[foofle drive]あなたは現在" + finalPd.getPlan() + "プランに加入しています。"); - p.sendMessage("[foofle drive]支払日まであと" + diffDays + "日です。"); - } - }.runTaskLater(pl, 60); - } else { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - } + if (FileRelationUtils.nameCheck(player)) { + handleExistingPlayer(player, playerData); + } else { + handleNewPlayer(player); + } + } + + private void handleExistingPlayer(Player player, Playerdata playerData) { + if (playerData.getPlan() == plan.FREE) { + player.sendMessage("[foofle drive]あなたは現在" + playerData.getPlan() + "プランに加入しています。"); + } else { + handlePaidPlanPlayer(player, playerData); + } + } + + private void handlePaidPlanPlayer(Player player, Playerdata playerData) { + if (playerData.getFinish() != null) { + sendPaymentReminder(player, playerData); } else { - pd = new Playerdata(p, Bukkit.getServer().createInventory(null, 9, "foofle Drive"), plan.FREE); - Filerelation.createFile(pd); - p.sendMessage("[foofle drive]あなたは自動的に" + pd.getPlan() + "プランに加入しました。"); + playerData.setFinish(Calendar.getInstance()); + FileRelationUtils.createFile(playerData); } } + private void sendPaymentReminder(Player player, Playerdata playerData) { + new BukkitRunnable() { + @Override + public void run() { + long diffTime = playerData.getFinish().getTimeInMillis() - Calendar.getInstance().getTimeInMillis(); + int diffDays = (int) (diffTime / (1000 * 60 * 60 * 24)); + player.sendMessage("[foofle drive]あなたは現在" + playerData.getPlan() + "プランに加入しています。"); + player.sendMessage("[foofle drive]支払日まであと" + diffDays + "日です。"); + } + }.runTaskLater(plugin, 60); + } + + private void handleNewPlayer(Player player) { + Playerdata newPlayerData = new Playerdata(player, Bukkit.getServer().createInventory(null, 9, "foofle Drive"), plan.FREE); + FileRelationUtils.createFile(newPlayerData); + player.sendMessage("[foofle drive]あなたは自動的に" + newPlayerData.getPlan() + "プランに加入しました。"); + } + @EventHandler - public void getPlayerInventoryCloseEvent(InventoryCloseEvent e) { - Player pl = (Player) e.getPlayer(); - if (e.getView().getTitle().equals("foofle drive")) { - Playerdata pd = new Playerdata(pl, e.getView().getTopInventory(), Filerelation.readFile(pl).getPlan()); - Filerelation.createFile(pd); + public void onInventoryCloseEvent(InventoryCloseEvent event) { + Player player = (Player) event.getPlayer(); + if ("foofle drive".equals(event.getView().getTitle())) { + Playerdata playerData = new Playerdata(player, event.getView().getTopInventory(), FileRelationUtils.readFile(player).getPlan()); + FileRelationUtils.createFile(playerData); } } -} +} \ No newline at end of file diff --git a/src/main/java/ga/ganma/foofledrive/bizlogic/convert/ConvertPlayerData.java b/src/main/java/ga/ganma/foofledrive/bizlogic/convert/ConvertPlayerData.java new file mode 100644 index 0000000..c13d329 --- /dev/null +++ b/src/main/java/ga/ganma/foofledrive/bizlogic/convert/ConvertPlayerData.java @@ -0,0 +1,22 @@ +package ga.ganma.foofledrive.bizlogic.convert; + +import ga.ganma.foofledrive.FoofleDrivePlan; +import ga.ganma.foofledrive.plan; +import ga.ganma.foofledrive.playerdata.PlayerDriveData; +import ga.ganma.foofledrive.playerdata.Playerdata; + +public class ConvertPlayerData { + + public PlayerDriveData fromPlayerData(Playerdata playerdata) { + return new PlayerDriveData(playerdata.getMcid(), playerdata.getInv(), ConvertPlan(playerdata.getPlan())); + } + + private FoofleDrivePlan ConvertPlan(plan plan) { + return switch (plan) { + case FREE -> FoofleDrivePlan.FREE; + case LIGHT -> FoofleDrivePlan.LIGHT; + case MIDDLE -> FoofleDrivePlan.MIDDLE; + case LARGE -> FoofleDrivePlan.LARGE; + }; + } +} diff --git a/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java b/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java index ab2d0a0..13ed072 100644 --- a/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java +++ b/src/main/java/ga/ganma/foofledrive/bukkitRunnable/Runnable.java @@ -3,6 +3,7 @@ */ package ga.ganma.foofledrive.bukkitRunnable; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -27,7 +28,7 @@ public class Runnable extends BukkitRunnable { */ public Runnable(Plugin plugin) { this.plugin = plugin; - this.playerDataFolder = new File(plugin.getDataFolder(), "playerdata"); + this.playerDataFolder = FileRelationUtils.PLAYERDATA_FOLDER.toFile(); } /** @@ -54,7 +55,7 @@ public void run() { */ private void processPlayerDataFile(File playerDataFile) { String fileName = playerDataFile.getName(); - String uuidString = fileName.substring(0, fileName.lastIndexOf('.')); + String uuidString = fileName.replace(FileRelationUtils.DATA_FILE_EXTENTION, ""); UUID playerUUID = UUID.fromString(uuidString); OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerUUID); Economy.paymoney(offlinePlayer); diff --git a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java index 6d95a36..2164d37 100644 --- a/src/main/java/ga/ganma/foofledrive/command/CommandMain.java +++ b/src/main/java/ga/ganma/foofledrive/command/CommandMain.java @@ -1,6 +1,6 @@ package ga.ganma.foofledrive.command; -import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.economy.Economy; import ga.ganma.foofledrive.plan; @@ -69,7 +69,7 @@ private void handleCommand(Player player, String[] args) { switch (args[0].toLowerCase()) { case "open": - new Subopen(plugin, player); + new SubmitOpen(plugin, player); break; case "plan": handlePlanCommand(player, args); @@ -96,9 +96,9 @@ private void handlePlanCommand(Player player, String[] args) { if (args.length > 1) { plan selectedPlan = getPlanFromString(args[1]); if (selectedPlan != null) { - new Subplan(plugin, player, selectedPlan); + new SubmitPlan(plugin, player, selectedPlan); if (selectedPlan == plan.LIGHT) { - Filerelation.readFile(player).setFinish(Calendar.getInstance()); + FileRelationUtils.readFile(player).setFinish(Calendar.getInstance()); } } else { sendPlanSelectionInventory(player); @@ -130,10 +130,10 @@ private plan getPlanFromString(String planString) { private void handleReloadCommand(Player player) { if (player.isOp()) { plugin.reloadConfig(); - Foofledrive.configamout[0] = plugin.getConfig().getInt("amout.FREE"); - Foofledrive.configamout[1] = plugin.getConfig().getInt("amout.LIGHT"); - Foofledrive.configamout[2] = plugin.getConfig().getInt("amout.MIDDLE"); - Foofledrive.configamout[3] = plugin.getConfig().getInt("amout.LARGE"); + Foofledrive.configValues[0] = plugin.getConfig().getInt("amout.FREE"); + Foofledrive.configValues[1] = plugin.getConfig().getInt("amout.LIGHT"); + Foofledrive.configValues[2] = plugin.getConfig().getInt("amout.MIDDLE"); + Foofledrive.configValues[3] = plugin.getConfig().getInt("amout.LARGE"); Foofledrive.unit = plugin.getConfig().getString("unit"); player.sendMessage("[foofle drive]コンフィグをリロードしました。"); } else { diff --git a/src/main/java/ga/ganma/foofledrive/command/Subopen.java b/src/main/java/ga/ganma/foofledrive/command/SubmitOpen.java similarity index 57% rename from src/main/java/ga/ganma/foofledrive/command/Subopen.java rename to src/main/java/ga/ganma/foofledrive/command/SubmitOpen.java index 96754a6..a666e87 100644 --- a/src/main/java/ga/ganma/foofledrive/command/Subopen.java +++ b/src/main/java/ga/ganma/foofledrive/command/SubmitOpen.java @@ -1,16 +1,16 @@ -package ga.ganma.foofledrive.command; - -import ga.ganma.foofledrive.Filerelation; -import ga.ganma.foofledrive.Listener.GetEvent; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -public class Subopen { - Plugin pl; - - public Subopen(Plugin pl, Player p) { - this.pl = pl; - p.openInventory(Filerelation.readFile(p).getInv()); - GetEvent.isInventoryOpen.put(p, true); - } -} +package ga.ganma.foofledrive.command; + +import ga.ganma.foofledrive.FileRelationUtils; +import ga.ganma.foofledrive.Listener.GetEvent; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class SubmitOpen { + Plugin pl; + + public SubmitOpen(Plugin pl, Player p) { + this.pl = pl; + p.openInventory(FileRelationUtils.readFile(p).getInv()); + GetEvent.isInventoryOpen.put(p, true); + } +} diff --git a/src/main/java/ga/ganma/foofledrive/command/Subplan.java b/src/main/java/ga/ganma/foofledrive/command/SubmitPlan.java similarity index 61% rename from src/main/java/ga/ganma/foofledrive/command/Subplan.java rename to src/main/java/ga/ganma/foofledrive/command/SubmitPlan.java index bd3a584..684ed7d 100644 --- a/src/main/java/ga/ganma/foofledrive/command/Subplan.java +++ b/src/main/java/ga/ganma/foofledrive/command/SubmitPlan.java @@ -1,31 +1,31 @@ -package ga.ganma.foofledrive.command; - -import ga.ganma.foofledrive.Filerelation; -import ga.ganma.foofledrive.inventoryRelation.InventoryAPI; -import ga.ganma.foofledrive.plan; -import ga.ganma.foofledrive.playerdata.Playerdata; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import java.util.Calendar; - -public class Subplan { - Plugin pl; - Player p; - - public Subplan(Plugin pl, Player player, plan plan) { - this.pl = pl; - p = player; - boolean issuccess; - issuccess = InventoryAPI.planchange(player, plan); - Playerdata pd = Filerelation.readFile(p); - if (pd.getFinish() == null) { - pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); - } - - if (issuccess) { - p.sendMessage("[foofle drive]プランを" + plan + "プランに変更しました。"); - } - } -} +package ga.ganma.foofledrive.command; + +import ga.ganma.foofledrive.FileRelationUtils; +import ga.ganma.foofledrive.inventoryRelation.InventoryAPI; +import ga.ganma.foofledrive.plan; +import ga.ganma.foofledrive.playerdata.Playerdata; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +import java.util.Calendar; + +public class SubmitPlan { + Plugin pl; + Player p; + + public SubmitPlan(Plugin pl, Player player, plan plan) { + this.pl = pl; + p = player; + boolean isSuccess; + isSuccess = InventoryAPI.changePlan(player, plan); + Playerdata pd = FileRelationUtils.readFile(p); + if (pd.getFinish() == null) { + pd.setFinish(Calendar.getInstance()); + FileRelationUtils.createFile(pd); + } + + if (isSuccess) { + p.sendMessage("[foofle drive]プランを" + plan + "プランに変更しました。"); + } + } +} diff --git a/src/main/java/ga/ganma/foofledrive/economy/Economy.java b/src/main/java/ga/ganma/foofledrive/economy/Economy.java index 099cb76..e27c4bc 100644 --- a/src/main/java/ga/ganma/foofledrive/economy/Economy.java +++ b/src/main/java/ga/ganma/foofledrive/economy/Economy.java @@ -1,6 +1,6 @@ package ga.ganma.foofledrive.economy; -import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.inventoryRelation.InventoryAPI; import ga.ganma.foofledrive.plan; @@ -15,11 +15,11 @@ public class Economy { public static void paymoney(Player p) { - processPayment(p, Filerelation.readFile(p), Foofledrive.econ.getBalance(p)); + processPayment(p, FileRelationUtils.readFile(p), Foofledrive.econ.getBalance(p)); } public static void paymoney(OfflinePlayer p) { - processPayment(p, Filerelation.readFile(p), Foofledrive.econ.getBalance(p)); + processPayment(p, FileRelationUtils.readFile(p), Foofledrive.econ.getBalance(p)); } private static void processPayment(OfflinePlayer p, Playerdata pd, double bal) { @@ -29,9 +29,9 @@ private static void processPayment(OfflinePlayer p, Playerdata pd, double bal) { Foofledrive.econ.withdrawPlayer(p, planCost); logAndNotify(p, pd.getPlan() + "プランの料金を支払いました。", "[foofle drive]料金の支払いをしました。"); pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); + FileRelationUtils.createFile(pd); } else { - InventoryAPI.planchange(p, plan.FREE); + InventoryAPI.changePlan(p, plan.FREE); logAndNotify(p, "お金が足りないため、自動的にfreeプランへ移行しました。", "[foofle drive]お金が足りないため、自動的にfreeプランへ移行しました。"); logAndNotify(p, "その際、2段目以降にあるアイテムを全消去しました。", "[foofle drive]その際、2段目以降にあるアイテムを全消去しました。"); } @@ -48,13 +48,13 @@ private static void logAndNotify(OfflinePlayer p, String logMessage, String noti public static int getPlanCost(plan plan) { switch (plan) { case FREE: - return Foofledrive.configamout[0]; + return Foofledrive.configValues[0]; case LIGHT: - return Foofledrive.configamout[1]; + return Foofledrive.configValues[1]; case MIDDLE: - return Foofledrive.configamout[2]; + return Foofledrive.configValues[2]; case LARGE: - return Foofledrive.configamout[3]; + return Foofledrive.configValues[3]; default: return 0; } diff --git a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java index 554d915..49bf142 100644 --- a/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java +++ b/src/main/java/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.java @@ -1,6 +1,6 @@ package ga.ganma.foofledrive.inventoryRelation; -import ga.ganma.foofledrive.Filerelation; +import ga.ganma.foofledrive.FileRelationUtils; import ga.ganma.foofledrive.Foofledrive; import ga.ganma.foofledrive.economy.Economy; import ga.ganma.foofledrive.plan; @@ -17,20 +17,20 @@ import java.util.List; public class InventoryAPI { - public static void planchange(OfflinePlayer player, plan plan) { + public static void changePlan(OfflinePlayer player, plan plan) { Inventory inv = createInventoryForPlan(plan); - ItemStack[] is = trimInventoryItems(Filerelation.readFile(player).getInv().getStorageContents(), plan); + ItemStack[] is = trimInventoryItems(FileRelationUtils.readFile(player).getInv().getStorageContents(), plan); inv.setStorageContents(is); - Foofledrive.econ.withdrawPlayer(player, Economy.getPlanCost(Filerelation.readFile(player).getPlan())); + Foofledrive.econ.withdrawPlayer(player, Economy.getPlanCost(FileRelationUtils.readFile(player).getPlan())); Playerdata pd = new Playerdata(player, inv, plan); pd.setFinish(Calendar.getInstance()); - Filerelation.createFile(pd); + FileRelationUtils.createFile(pd); } - public static boolean planchange(Player player, plan plan) { + public static boolean changePlan(Player player, plan plan) { Inventory inv = createInventoryForPlan(plan); - ItemStack[] is = trimInventoryItems(Filerelation.readFile(player).getInv().getStorageContents(), plan); + ItemStack[] is = trimInventoryItems(FileRelationUtils.readFile(player).getInv().getStorageContents(), plan); if (Foofledrive.econ.getBalance(player) >= Economy.getPlanCost(plan)) { inv.setStorageContents(is); @@ -38,7 +38,7 @@ public static boolean planchange(Player player, plan plan) { pd.setFinish(Calendar.getInstance()); Foofledrive.econ.withdrawPlayer(player, Economy.getPlanCost(plan)); player.sendMessage("[foofle drive]このプランの一週間の利用料金を払いました。"); - Filerelation.createFile(pd); + FileRelationUtils.createFile(pd); return true; } else { player.sendMessage("[foofle drive]お金が足りないため、" + plan + "プランの契約ができませんでした。"); @@ -86,7 +86,7 @@ public static int getMaxSizeForPlan(plan plan) { } } - public Inventory Inventorysizechange(Inventory oldInv, int setsize) { + public Inventory inventorySizeChange(Inventory oldInv, int setsize) { Inventory inv = Bukkit.createInventory(null, setsize, "foofle drive"); inv.setStorageContents(oldInv.getStorageContents()); return inv; diff --git a/src/main/java/ga/ganma/foofledrive/plan.java b/src/main/java/ga/ganma/foofledrive/plan.java index a842560..6cfaf83 100644 --- a/src/main/java/ga/ganma/foofledrive/plan.java +++ b/src/main/java/ga/ganma/foofledrive/plan.java @@ -2,6 +2,10 @@ import java.io.Serializable; +/** + * @deprecated planクラスは旧プランクラスのため、新規には使用しないでください。 + */ +@Deprecated(since = "0.8.0", forRemoval = false) public enum plan implements Serializable { FREE, LIGHT, MIDDLE, LARGE } diff --git a/src/main/java/ga/ganma/foofledrive/playerdata/PlayerDriveData.java b/src/main/java/ga/ganma/foofledrive/playerdata/PlayerDriveData.java new file mode 100644 index 0000000..ccda635 --- /dev/null +++ b/src/main/java/ga/ganma/foofledrive/playerdata/PlayerDriveData.java @@ -0,0 +1,63 @@ +package ga.ganma.foofledrive.playerdata; + + +import ga.ganma.foofledrive.FoofleDrivePlan; +import ga.ganma.foofledrive.inventoryRelation.InventoryEncoder; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import java.util.Calendar; +import java.util.UUID; + +public class PlayerDriveData { + private final UUID mcid; + private final FoofleDrivePlan plan; + private final String inventorySt; + private Calendar finish; + + public PlayerDriveData(Player pl, Inventory inv, FoofleDrivePlan plan) { + this.mcid = pl.getUniqueId(); + this.plan = plan; + this.inventorySt = InventoryEncoder.inventoryToString(inv); + } + + public PlayerDriveData(OfflinePlayer pl, Inventory inv, FoofleDrivePlan plan) { + this.mcid = pl.getUniqueId(); + this.plan = plan; + this.inventorySt = InventoryEncoder.inventoryToString(inv); + } + + public PlayerDriveData(UUID uuid, Inventory inv, FoofleDrivePlan plan) { + this.mcid = uuid; + this.plan = plan; + this.inventorySt = InventoryEncoder.inventoryToString(inv); + } + + public FoofleDrivePlan getPlan() { + return plan; + } + + public UUID getMcid() { + return mcid; + } + + public Inventory getInv() { + return InventoryEncoder.stringToInventory(inventorySt); + } + + public Calendar getFinish() { + if (finish != null) { + return finish; + } else { + Calendar cl = Calendar.getInstance(); + setFinish(cl); + } + return finish; + } + + public void setFinish(Calendar cl) { + cl.add(Calendar.DAY_OF_MONTH, +7); + finish = cl; + } +} diff --git a/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java b/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java index ef7b7d5..139597f 100644 --- a/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java +++ b/src/main/java/ga/ganma/foofledrive/playerdata/Playerdata.java @@ -10,6 +10,11 @@ import java.util.Calendar; import java.util.UUID; +/** + * @deprecated Playerdataクラスは旧データクラスのため、新規には使用しないでください。 + * @see ga.ganma.foofledrive.bizlogic.convert.ConvertPlayerData + */ +@Deprecated(since = "0.8.0", forRemoval = false) public class Playerdata implements Serializable { private final UUID mcid; private final plan plan; diff --git a/target/classes/ga/ganma/foofledrive/Filerelation.class b/target/classes/ga/ganma/foofledrive/Filerelation.class index 2886bc0e3fc2fa4a27efc035b06d7132502ad588..b568963ab9c64216d71bb3782ae79c05d11b8b01 100644 GIT binary patch literal 4569 zcmb7|{dW}A8OOgjY%-h800BYSh?X}c0m4>Ap$Qcs$(G0_p(F%?NSN$SHbXW$%kFFd z?TbkY1!}8pMFniBEo~6g0&T;af_?AlFFmLK!WM1+1kY(pzjtOfnF*^saF)Gy?>zTA z_dd_(dFD?3`rqp}0W{z*A(UZ;f`E#0R0ve>(}uN3N=qjr9ew-sxFt}r-bfqP(*iSU z>$(*L1ytL}Fe6bTrB@<^Dg~;FnV2Q8IH^UFT6#!}^qXdXN>5~sVcj;&>M6}K%(TFq zt+90~N5Nbb_hFvE0yCS8^yLQ!4J)Fj zEyFq#*_zT0=~;oQq;73b8~gKmYl2d>b&goxGE$N4+gqC(L%1IgC|IB(j2hoAoqGu= z!&)k@ck~N9TI*Sgz>K*QIh*>r{Nn-cdqN>6Wgbk=yX{){(a|d5b!_HWVVk zUzScHopW3#xmY$zR-X~5Db95w>7Ts;o8;^!f$-F9uL)H`*nk!lQGA7*9mpD%UQ7&M zSc;(7_N^+OmDyAtPnkLHAtrF&6y99}S@VF_m(oMnf_4=h*eWnnOC&n;nM_vC<#a;4 zz#H?)8TNV_(5j%bD9Qb{cC;Lf>lv9`mDmn$e20pi=n+^{GK|rw%;XyNbVBA(P0W*D znN&V$q#0z{FcF`_ZUxV)*n?g_RX#(3N|F#WlSwJKuoz;SfD}iW)Dh=uVO}-DvntifT`~I%*DMm?MaF(7AY8}%lz#7 zZ1OlL(LXdrngnS|#U?F}7gc->Ul$0;T@=ChC$CF>2zj)IkVR_{BLYuMi^o6DzgHN! zb^Ddq3!}$BD=G@ci0o9NG^Mm$uHCevWYo zUjF3d^-o?qGcC{(-EXTniepSM!r9D%6*W^f@zq5@izTCy_2)Y(UY5_X%AB6jvYKUP z=R)9nve3UG@N9|5-3`FqBP9yFK%mJ?kp0;)mgV;RP@kUdl2t)I3(dHe>ejM`{Ot|~ ztO0{jUm7dPi3F_pfMvz3Olw1W(|{fy6nLoCo7ui6XJg$i0g;)O{C<<^0>0;nEf6sK z`=@L8t;kQD09m?Rra+{&^d?HfUf0bmG)?Y(q2pMF%VEw}scF1b)=7Ua7N5IwcTnQuSbOJ^~Sg89iKTUmyWyx{scPbl_L zGt_D3vvC)fIbOI|%ksdgy2&)HoR!rwZMrpJCUQYsy&(I1Tj2Mr{1ss<*p{!j0&$6*GJK!k@-k@t1AeQH z0e*eiffoHa24~f<3ZpGzA%9$@6yhz8TM!{#2a|i z)javxnvecJ&80rgQ#fsFzJ(t-n&R(Vr^2z*?mD@$*vbji?I^B$0;?wQSaH>D{ITRD zf^62(q@ick6|8T+fek(NSFo`m5Du)EKyx@Sfz9IxHvCHVX2G;M(*gLm>0t1&AlPF^7;;FKmkG(x?*JB^{v(4cE zUSJCx!7*&Z3_C=d_<{wV`>U{;y$D|$9%GMZc&y>fC#m)n_102x4RzL1X$|K$P+=X8 z^O$}LjkepKX0W4t5&1FB&`s-k_WcRo<~^$LB7TaW(S^&=i?i&Nab7ikj$hb8KaFvm z;|kv4|NW@?k9>Jh__>2cC|6ML{8G@M@C+^#Y`H^rDyCiFuzfA~DaxX@O>p{T*WeCs zPnCLLlY(v4)H;s~E;DP{N?vC=05X(Uk-o?QFL=!!NM=rgcOLJS5Fv4;McREL4rw8I zRCGkd-{`^$-uSeL71=6MMW#-nTwJ_?teq?FxYc$8c}duTcB1maN2rgn{YH@;c6{uR z$#0Hhe!J6FkuOPKTRowwZSz9)5}_h!zOip{Y~@8RP!iHa*SDaRjBMenZ1*EhgtyTl&d$vly@tBmu1Me2l2 zT_4ncqlQe}K`jCb?ziE}Dim>evss!Ny&E?E>BKY5Ax-%dLL%0wV6>Xm^4DCcQ|=z; zO69*A+s{Yrs&pC0`MHkof(xsZ1ypznXfPG{ElNG{{B7w Ih(9CzKe5Hq<^TWy literal 4133 zcmc&%?^hJp8GbGc%(9G#C{YwE{zwWaEU8JGN*bFeM9cz-{4k_#?65n#j4V6rGHbLy z5*IX8n^v2OMr&$pOwedjwdX(+P1?`>HzpeUsUQ2LC+%}*XJH1>qdh&R9Jq7m-uK@3 zd7tOK?;Za3^=DrIcmmf#XvRPp0(eEi4;1_`gkt&rBfMIUUHGwl)nqdmM6?_+=pn?B z2x3SMCPG|j$YysrhUHuU$q*jHi0q{lm?2antzb_GOOcVysBA0+S-Jh*GQ5U;LF^CV zC-`XyP57CDpNFtou6aF#wRl4|2NdMw(+Xlt!FUh{gE%Cu-&F7m1&0MnpEgp4^^8EE zzM)^Bc#9d+1r|n(l-`vc8Pqeq+F+6+RS`3)CHu9EA>ZA>Vr$446<8ZdXyJsG8qvaW z(~KweSjO0^hue*$p3#$7e$Fr*7##Pz?2gBi z4AJAV*o?>Ldi7fggrXT;vve7lK)8PXu+vT$G0oE4h-9}_l3N-#lQBI*uHznVYH|?3Tmi2>FK7Rz|y(d z`drqK`JmvJD&E4c6#QDnF&tO%8@w%>-!kK7vq`}T6%#nA;FOAYaGI&!%+!(&qv z&MJ6U#qV)e#W|c*@gB|!Eb~I}W{+HUo;g^UzdOIA#UE6>j|(b3K#RcQf~_adRD6g@ z1s7FZ!bbv4_V|Q7cHSPlV2@w6bDwdgr5$?c85(9Xn}{ z9laM`fjS4seG*O}e(TLce;>bSk6pCKFWKWa?c7^mo&M~r6X)gxf9L(r$)$_98%~OHO*)Z~q`iAnQlm&ZKPiq;?GFh?e=HGR;+6$EEDW|yk>UKJrO&BRM zFCRP-%RFV@H^<_W(5ODt4A402Z?YRxy^TmZe zd-tlipS>5R?{*R>C(OQ-u_vo{5J*)4WY#j0;l93(t@Kvm&^t52B5IihQkN7KcyMw_ zwKt#wKzU{8`;1YGm5|pn??o>zUlk+$Bf~L+N-4zG88wKlG^QtYi?_fcck{w!DDR@0 z*)eZfaPFz{*D{8s7c#>Kt-v*RD2XP`QSM$whY>T8kQZBRAv!1cBu9BEhx4{cStiX6}T$ZMZyN%=}ZX;{bgLG`m6hO{9lbPri8QT{g>tr{Fjwgyh9n z;J~k%O9DT(n)nSUe@emc0kp7voNr-11)n92(-7C#DZ;m0BOrv0?5lYLen&pZw=!7( z-Ni@wbr|5-*6S#W+(2O928su!QF0xnpF$CsLU8>Q%Bn(aWT){{l*>_74lZCbg^Fn` z?A$Pg$}8L_@4Ld;a{>3Rz-BCTFx2J!;3<5UcE$KUHldX$HlqYj<9l2waXs_j<688f zxE9m<68f$7;o3|@_rmoop3CDBBV1cbyGswi*DN(vJ0FDFDJ;H=*sdlLdm2GLmT;5m zfu?CZvZ?q6mJZYuPh;7plA4mnDb&=IOkw#XmP8!kY6Y%iWz{#Pu<9Ct11E3_D=2_W zj7<~;Sk6FJpb@pqpOqNGDwwE)g*AAcU+_n;j^754a$O@=*7F0P0T;2}A#58Iu08I` z*NENN;>b6I4UUij?(hhyyyPl?|_CAOi%L30V)@d7bK_*aX-*Yf|2P6Yw} z{+j@V!v9Rztf*v4bfMd&{(wvUq=+>B8Fgn+BCb+}&iScjLguqpcJ7h2T{o~=61qkb zy4E3dog{P$kNy>pMP%ojlX$Ar%V|A1oy0od7zJ46wc$Zowf-tIx*Q`&lVG>G5qDVYO3;fMyoi@b*)Gbx13i>r4<*=635vK&9ecg(0SwSNkwx6IkFp3y z7M_uRp`1ee6EP~$qoASAQKNreH8wn?8uOji|En5pI)p&_4?w}ewsYWk(?4ug}WbWnvnHu>z^Z;rIf{+FG<^KRH_eWy@ diff --git a/target/classes/ga/ganma/foofledrive/Foofledrive.class b/target/classes/ga/ganma/foofledrive/Foofledrive.class index fb34d6876043f5216b25f96f3f93b213f30ea538..6a424a140e4e080e0340b5f87660dca49ac3f6e5 100644 GIT binary patch delta 1668 zcmZ8hTX0iV6kR9D&AqujeWma875Z)hE#;wwR$8Fx16rZ2v;tL3o0}M#2W^uoDu#y- zR6xs7Q3Nf%P;|zjorz!>2Y>kR)A8FG|NQa8FMp76pWE6pcBVOdpS{mMYpuP{Jzesk zr0C}dKl}(_JHF9jfmMZ#LxEl7D0Sub_HZnm*uh|JXdKa@!J$Iu$N*<>i=UWVj4Rb0 zInMUt;wTkY6gNf7*P^=fK%Z~ch$VEC!KK2@&|n@sZ_O*xQ3;oZY6eR% zA`#be)S+J7QMz+O$e#O`=37!Jwk7LKhlniGlp1IybZ{z%f8k-kZX=EkQ(&Ev_*$#6pSs+~C*=)_JHyEt~El%Y~wQ;Nk&RTVeX99`<>5XuV;z?1Z z4U)hb4sjgDn3&OOGBfZrj;MHs!;f)sNgJdp0Woi@rAQDV70+^nag>IlK>VWx=;{cf zDqCU|FLBRuJcs8=Uy^~u^GD;!1a;?dpM>xN$BTGL zOxbspYj~MKH^WWcLq4C5lQ^Z~G{+gdA{On#y&7JlGRqnLeLcNTXgEvbw!AUW*VWbU z)9~h6%Fdx4+BnBxOVSj}dKWm}#yi5UZZ&~kku@*iAAl_-G{w z$i@}2`EmlT;$!j{K3P5dM~X~&d(4xDnnvcRXAyZzC^|^hN=BDZCXEU*Dy6Zm-{Y)G zqsE&?gU8wQpOwZ&I=-3yAGwTzTiE8gjSdSI(BjzM4L@KK%Vp6TX=sFU5vC*@92w2%JQtj)Fq3i0Yp+GnK|<4%-7^waN}Qor!(;Y delta 1500 zcmZ8hTW}L)6#o9~CcD}EP@1-sw59j-lGKJu!3(znO-pM^>5T~WLTooNkS3U>6%Y*| zDtH0wuYjnCilUA$ZDwL?9LMp22j6`3)n^}k*I_*WHYmf+?4I+TJ?H%AeCO=m^_=r$ zf4%#|PXM~{je!968|cKafdd$Ek~XSg%zz!^8YT>A7}s%7dW1DRX~2bX1BY-}$D}kq zB_p1e+A}(yHE;wG9na~Q(lM=Lt2CI>B`RHF2A)UUg^8m$Ce?(F83ReAG#ocjk8wK{ zC9iUcUXUSa7iN*sFz3QNUNkU>6EfXN9j9dEOA?&c@Un(i#0jNIOgK6N46dnEG8&IX zW>Rw*2HWHSgF2UtlkN^3jm$>^iAXXQ7|W#N$=J4q-@GLZj_q-B*vX)@wI3Aw^_cie zuPNiRW@heqkkX}QPFn8{3&XjnXvm6!(_hK)IJR+|!C4LGI9^4N<54^&hFK#wGr@T? znUOB%$pE))iPm2y# zFMeTtqQW*=&QLlVnKygQXk;#t*=r3@eCyaFoZ6VUrEL*^*oG8_I?=^8h_F&wN=L`c zOehtLnQ4Zawsvt=sS>{{JH!!nL=@C!@uxaM5e=f+-XN~nCq#?GOSn@owOn-TRatb= z_5^6(?5L7uljf97S&}ATNuth@G**&!FgbF1ZYLBV$)wfyJ=h{CHte9M!!nj&C+U3E z0lUych++4=VAhc>I_7+N*z!=qz8us7?1w0uBV2$c6+P^8JM%CKa7oDXSmSfAeZY`M z$r9Enl&93~&ZBIYkZPgwBC=bkqKF(8%C48tQY-V=kb{Q~sJf1dWmNlCP-DX~Ho9x` zs9P+cUY_3IbC#nqkLIv!R?wguPFikoPo1@mDE{`(lq6&c$@$%*v8$%SF>J@Uv^l1cZ2tZ%w62P@{V z$<-%!IkHPMBO6J-FQ0{X1ugVXXk9^@4I%#>tnug3{xe#0@GZf22by{ts`4HAt5&ma zlAr}Cr4O`%7Nm}rLr!`9YR=+$r9?#^`su`d^iFQTs%3yQ*^dj#Kd93VV9?pah`1;I tYil!k$g9llUq(j`4>77l`_af@ootj@MXV*}K`C`&o}-McA;LBc{R>b94KV-! diff --git a/target/classes/ga/ganma/foofledrive/Listener/GUIEvent$1.class b/target/classes/ga/ganma/foofledrive/Listener/GUIEvent$1.class deleted file mode 100644 index c04fbf3db62fc9c30c44310046c7d291c57472fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcma)4+iuf95IvhXb`l)wmI7%DrBIV5Txx-U7Z6g_I3cRjN=<1W`m}Mj$rjhHY$yB= zFFXShLJ0K(_$b7zDGEq{kajL-bY^CEcD{c5dc*mm!=O#M-ppV~uCCp_WyQ4}2oVi3!TuulUXGUN_B48>=DAVZlxXUNwZ z`wZGCx}GUr7;5B7O16+RDEdMWo`QKNHQ?nUF+7cHqWD(#mY zcOt@c{g_WU)pSEYh!PnNyCNM$0|ToDY!kOpGjRc?i8a(sG;oJuQKdL^&!Mv&^~V0F zB}FiB<2Z^<+*P!DO5I1Dp+4kJ_DJWKM>?KNQW1*S`FRWb0fX5IDYO~zBoPUNHSMy~ zKNfzWuU}s;-ACP;mPW~e_ zZRahttqke}3sYzi)TgjW(8%CBXw+|>Hm`sxR#79nhKG1e_6au7B%6mt{q(G>i&^q> jBy%KJP&_b*(fwUf#-)rkkIQ5=;sG~F%2cC77FO{)^7yd| diff --git a/target/classes/ga/ganma/foofledrive/Listener/GUIEvent.class b/target/classes/ga/ganma/foofledrive/Listener/GUIEvent.class index 66e7f4607ea331a5a3b6f5f7b7fb4a9ba6581fc8..e1f333288c12762437be4f6316734009754c97b8 100644 GIT binary patch literal 6789 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 diff --git a/target/classes/ga/ganma/foofledrive/Listener/GetEvent$1.class b/target/classes/ga/ganma/foofledrive/Listener/GetEvent$1.class index 230a68b91a46b95c38889dea68bdad41aab2e00d..4b683af4db8483a069905a9f77e867c517f24a70 100644 GIT binary patch literal 2126 zcma)7TT>iG6#kmqa2YNxgoG#wniZD~$$)p=NC@}El%>ST13$pOF$Mk$%hNM!vB+X&t9DLzpWAo(T>8(yclQ9ij&vO= zP^qCxM>T2~Vp(ovxt-(2isP(UBIBAH!bq8(6t-}UaUn-Hge{}}3{4x{imqFHQ@A5s za)#biS>;e9Ln6j(Agz`O<+oNx9qJkC4=pjAO*wAXSkAAlnbIIvrra#*1vkMXUlYTQo#yhoDOYKwFiVQ)h_TRDIb#iY2`_7SMaQdnjp0m5 zK97_QU5Q5*JS9AjXDOwpO0oWHelY@ugo1WONhHgFXZYx`Ywg5qrDpkWC!AdGJ&O!g z!%l`kH>XTnOy_gU!d(a}Gm>)B+*;(WsrJRgD%BNKndSW->xpQ8f)YC=L|N1`jx3>MQAN{Rg{ld@t zpMAUk$#;HX+b?|Y7e4k2dw$_7|Ms0)kgvX@rVc)TaB%mFgKZKgsUHH%_gS!~jnZna z!8`SM7w>6UQe}CAA$r(>roG{;iDDy$O*F>S(s4H#zAUZpqF@-+1h+Gm@S-WlS<9~{ zN?Nwq1|=s)6c;wvMH%s>68SPsUo=7U&6+o*pifHZ}(yR{SLKi(PEi`E=TUykk1`wrpCZP0o5T}Cvt$2gz0Iep7RuOHB_wInjFYQ2! zU)(`M{C70}5=dXAZw(Cy^_}XhHDt29cijJiTJ~`Zma}ulY4Ti{tP3;W`U!7 zzAE ej%X9{u9L=m@O>LM=`2EL6-3qVeSC;zbo>L5U}I7M literal 1959 zcma)7T~ixX7=D(ogs=#v1!@ILEyX0I1hCc*Dz<#J!9cMfwYF6c$sugJ?BZs_40op3 z8TG~+9i}tR=#AeO9Y>p@&hP`g@K5Z3|HAP($)dro4w=b0d)|G&p7(v;v%mfM%Qk>B z$TXrI18NzJpaVk@Jc~0CJcqMtdA_#3_XZ;9#|t667(pY3!gxvT!x5ar%SwAh9bXCK zyxK1`VH9IwjH|;$7?UAf4B?W7hBaaKtY$UzrE?;g6V{4IF4^{yDYK5TCX=hCSeH&# zxFR|G_v0|_++`!*GoT?BY?n6juC%0+yeQp?HEFrZ=A2;}?udq~2Q~_J9-LHsK||e` zos}9|(uO5x3M-4!nHP&DCDF8<5$1w$40ZN}bqa(AJ!LV|F;nF8lE*}F&_@vU3=&hV zQ?R(kRPb=tSX!DlRv1p3($K7q<6?c0ZrdPb<6~FU}pL@moe|)^X^Vv5#UdKWRS9QFB zYdYSp~u_U^ftcrHh%Pq-|u|%#m?O?z2c@<{K_l7?-jSb;yv%ZJ34OStq|VU z@eT;(#QtczpWNU5@YCH*8dCr3a`1A%MK+==rcAjZwE`I#&<6&wom_IUaQn95Ci9tP znJt*)-e_5HrC?bV67(L-p@u^_=~hT)+Bw526PP0sOIL-Fiq-yn__Hx(`?|x54vD~M zf!x*5$cU31kNmQR_EMB#ya5`4Ww~B1TK7=Zf&p#R-53G!u z1V@^}HEfPl*pVVz8IDW)>%K3Gc<`_WR+*7QEXpi%($K{s2c|(&i<t7XkdOT81o@x;6Ri1U6W`9JEy=n_8CkfRVOZ|6M(amo~2frOPt*z>Q z0J!tAP!j$-(FF}p@o9|bTJ9~0QxBje`W~Pr@es8?logM0ZJ;8MphM85GH$_foZzmW zluO=a=)pNNrpHNdmT?zGDXy7W(M?)jWy6&!gaJG)`v@L{xMdP)Hh(w!8 z(0$PsnoD@BgqCP4g(W=xGom&4m;NEXYNO}F(Y7k3e{w#`tbx;r@{`zxB;gJqjX}JN zp)!sHb7Y1-jwo-YUOdD6+jv*S5NAO;u|Ujm>eb>Db!*T^f8e>F{+{Mjg!=8=`TGkH C`7TWW diff --git a/target/classes/ga/ganma/foofledrive/Listener/GetEvent.class b/target/classes/ga/ganma/foofledrive/Listener/GetEvent.class index a533507456d4b36e95d119a845ab3d1edbe6f31b..402929c611f618774028de63b946a99f6a066faa 100644 GIT binary patch literal 4862 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 literal 4366 zcmb7Hds`e=9exkDS(ZsiAc5u%2`1da(k5yZjFwv=LQ(@ENn_Pv8I}pd4Bee2#apvU zYP8YTTaDCe>ZM6bv~7}R2}NVQRjqyi`}aP1>R0fo`uLuiUD$zz#^qto>^Z;d`@5Ze z=f7{>0k9u`FGdK*f@sF^AWq=X5}d?m<=$gKd=8%v;tSB^VCx|#E<@sqT{|N6T+SQ=vypZAy=}2;@zeODHDHc*L+s zAs14V8ZpC~B%d9fvL|#)puG2#HmQZ;j$wwnwb*E%HbJ`Lej{ROPCTj$v@NG-UD*nc z*wm~@sLi%bU9(yaP+(E3VHwT=fo-+fyng%Y1_cV*?O`e{?KLd@P<(tyj}B-|R> znQ#F!ZDQhX3pDzy(j{%kqe`QD&`#5~NF(zmhRKs#smC^~Ia-=kzEW}ikjChU4*t`d zx@;6y)hDo~-_gQj3{2YTO-JGk{J1{IU=oUlEX#H@$FMCTv17Sh*Trtl8aCY|*-8Ms zjOoc_Lc3|l^fVItav-sgGNBwSE+Eaz)vnGY5Y)n9Jr=8JZf+LnxaSD^fm>PtPf%8% zHEgDnEx%SqE7)(xqhYeibbkQ1ERP-@$hkd{4#q@tlee<0A@w zpyCpKs9;*f^Z1d97w}^hKfz@MFRJ({ekM@q){mR;{Z7=dB5iTQ9M+=(RVTef9@-b2n3oYj>Z1@$OSEr4pA? zi7TnZ`BdUgDlwfpb5_L_TvhQhUQsZk;u?Ob;8!YM#cL{F$8{FMz12a@{nF=I+Jk z-g}-dUK6NZ0RwtZBrX#G1;3L4`Mtn>EA>GYf50CV{7J>zxVmVV8v_M@R`D17RmD5_ zo51>Itxv^A@gObE>Ho5JBCu{T_=ks1>0w7;Q?_AlBgyblVb)oj+rufstw-6P`!q|7 z$i&%I>&tRqlS~t_q3p;KmWxDSZB&oQ78rGFo895T9L1fnt|hyKee&E2-;tL@Jp+El%*flwPCN$yZx^E8b#gz z*SQtXAr8xJbSJ0DEDbqcH?4Tc!Pa%8vr}Npssf6%2~K4Wm%X)FgVgIQEp^Mb(yfM? zee_-`u1X(pY)`7d20FEv#%WywB{3S(#}3V$6xf){9`@F%oE~>A4q-a3hizh4(`)HY zXxuQzhV0X3Xi|%tyut9u9-j(zdMh2-`N34|=!{64M$E%B&3~gfJTk)WuX_`&rHZMJtMp2<>Fp3)|LxF)3TnJLrC`Js@jiJ+L-S6xMp>_9g6nKZZl};r#XfE)H!5J zIi4CQzh59@k8c2w$OR8VOr#sbse&dNOxLYW+a-T2Rej zG|dpWANk0WcP;*S%9A%MuElcJ^6X>o-p5hM_ZGDB`3dd}xE#QS`dQ@NMt*(6918ML z-*5|s*IkYSe3qer&rN)8##(GaIkw`H+^L`z^5Ro?h^u^)I(hX*8`^nB4dOf$>IB}c zZ%Cr(7DW9U5VxUB<4Nx=kVNqf1h1e;exFCliCL&+Ym!*Ic%DRQ**fkdv3?F^dAOcF z>brq*`8tOUc{tdZ#KyO=c^(xf>KkWK$&+<85q7Vk?(zSJ5|*?I%1T zJH)!;vZ^^$7l3BWVrQQuk!KlOb}h4|CfgP|mk$Y37uNGxg#ZImhMoM|g37n0jW=l-?tx z3&6jNZuAiLgXAnn;rrl_-bb4c)0hAnm^S-qkhDGk@o#DR?rf9S1@H(yLt2@#A+CaJp$yUMe93dc zm)=R|rBc-+z!5hu1L$X-d(68?Ek7mmXk?!4y@@922L}e9o`_149Obt>4AKiA$kPh0 G{QM8XUJQl+ diff --git a/target/classes/ga/ganma/foofledrive/bukkitRunnable/Runnable.class b/target/classes/ga/ganma/foofledrive/bukkitRunnable/Runnable.class index bdb13db4d1c98790b108d15db7e8ba0a7425b691..80dbbf400c5d786a4dd9c4bab8173b83bd6f3541 100644 GIT binary patch literal 1778 zcmZ`)+j84f6kW%bBgav0rcRnrJ1q&+w??Hv+S+LfZ5l8*7wX2)mdhx%?25>eN47f6 zJDsnXau+6&e2u!6j1P^^d!9`qR==w9G)9v_KeB>Q0 zDp>7CAwPv7@TGtX++CR6qBa|-gfA|Nv- zTUv{H=laahtU44aaT;ITl#zMKcJ{!#pt| z;%$5^;}ZpUaF-bvXo;YG842UwZZu58(u0JtTYJ!_IGMpd9MYzXd)Scise;c?BCXeU zx?Zy_yLF)63!Vbewsz36E&V_snSL{Prh4{#cnG|6>8@R8)h5e~V9Rao>CS^-Ame4b zrkPdEF}(NQrqq36u!EM%ujLsGd4CX3CbGzObX?Bk#6U0mJvBMJLFCCZoylpdbhX<4 zrq=c;$fz*<2Cai`i~oOqSZUWa>itUh<}m1isX+a-G{m=u%Qtjs3>S;Y729=cx;IF) z>_@unwHhw*(hBhg3?c4aTa@D72=f_+;P8LW^$WgzOWD&)W?w>Nb1xug|HSyi-0zqa zh$miR_66pjQz3*h*El4u7q})diWH>9IkR*;h1`aE>bs3cVCi9gj!3uj|z#w6Zx^jdY1!+z?!df9R7dgWEX~O1xn;YbC z6Vv=2&7w$$t60P>pXXYDd6Kv#pRre=1yu1B8BFsN@HM3{ZO8EtkH{lMtH=0;T7nhy Hcz*XEAkd{Q literal 1807 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 E0C)YxnE(I) literal 6629 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 diff --git a/target/classes/ga/ganma/foofledrive/command/Subplan.class b/target/classes/ga/ganma/foofledrive/command/Subplan.class index 0bd3029c29a183836ff4172775d93e4b8efe712d..a09c119e656ae599ef57bdbfe3c2d6dc1353d8b8 100644 GIT binary patch delta 1047 zcmah|O-~b16g{t<=_|tk1u3)$m9N%PD5xkPMNm)#DWHO&;@1EJ6zY`FfrJ$zZdj68 zpwUDZZVZ}06hso)nz-~YG`iG{YxPb`BF02Bnfva?dH0_8=FInuXO8xdKX!HjG-5=8 z1y&A0h6o#jV^Wz@YNCoZUeh}~sgCFjwx);{(VH2p{)&M#*pbE|$w-H6ys}iRD8-VQ z%#@J@$I4=fLqZM?aOBExB9EcgShqNh2i7qvxZvg}kZ}-&3?<2eMHr@n2ZuO{Wt54%a`pCh_~Sr*`bqSqhFp{uBu(SVZ-`FE8mwJoNNDEeSTpCB); zE1DiR!9}7sJCu$PnmA6$XhsWz%kT&;h!p5p6CurPid*mg3#6jOekMd4`An@L#|bgAPR-jjHkTa7QdQ zH9H;Jhf8(ZpV=Fc+Sxxpt?n=G!H0|<(X+6JY*V7qzKE`d801b(Q)k+uN<6N{Ic_s} z|3@jwh(lrU{2NNr3@5=P8#~Du3#KuJNfxFY$ufFGoF;pQqHlz-(b^Sw3l^x{1P@eg zBBLs}jqExh@CF&%$Zr(g;ueZNz~L6RQMLuYxmG!aM{t@D0w38y9qNv?VDA)h4bLM@5E0fo3g*)~Eqr}*G3&QV0nlKffHYo}i3 ziMnte9W=yALpy1wKzoCf4b#cGsa^ofPikxnao9O}ILNukIH72;6_*KOK_B{QwbMlm R(t8CrDU!&$g*zCA`xh=X=|BJg delta 777 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 QoNp|s!RPoh{)(ml1)a}5{r~^~ literal 5262 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 W45^AN)tu*KaRS=P^tK|$(tiP?7Clh_ delta 419 zcmY+9%}&BV6ot>w(rN1;RsJf9qR5}33sDyCi2T?HF)=2tNo1ixjPwE6@B&TWfQ@T4 zA;uW?`UF0W@lH3yWbQflo7|Z*^QFzS+V}6r9KbOSO{8EOFtBD&mzKEBu^}NNWmC!) zN0wv9n^yb@o7g#yU4c9b0!t7AMU(`}*z?mY6BXE(Sdnsol6QX^5zcVfADs<)uG@G0 zCzfDU@1g3YTHa57%)lQ25{2ejV7=AY&pLa%ZuGpOq2Gt`R!HNx-$$DCMOuujMWe1S@Var%B3 zHgYJC7jc9W@*3)BkSnk#Pzz!+SfM^dwMvzQe#2>^`(NlpESQQTL9QZ}B-^Gk=@Nq+ Gmi`BN5jo%h diff --git a/target/classes/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.class b/target/classes/ga/ganma/foofledrive/inventoryRelation/InventoryAPI.class index 75ec84f9bd947ca3091a898380e6f9a1a41731a4..245a44f3275df80674af782975cc7c56b2fdc71f 100644 GIT binary patch literal 5234 zcmbtYi(eGi75?r54vz^UD!wf$nq>tyYP6}Sts=yYfJS^o(b{2mSXP!9x;vnxZQ^1Y z6Kk57hbFbHu{DjRH1UxtXk*fMo4z0a!8S?#AKL!<-I;yj0O_yj?%cU^?z!hXkMG>s z5C3!P4uEy|dnr69P*A9%2vYFNKdKpF|Mt$qde9P>vOZ!&tc?N%-r7B-C`O5b zQWa%T1y+YOe^@hmHGh|Bc1872EHa?`BgTMkSY~W+rykX;h-vr(>6uMC0s>XRn66oR zX0q9g?ckOI8@w&93j6r9p|-`0h5eoVJv|XCyG2%YLn+EJRY8S{X{Z!f>~jTk!38q{Ol+Eo|L;?t03X?{mg4r#^=%v4aNVisl#_&)to z`Z}yzbc?`Z@1$_cFc>Yth>TYLLw6NZ28WtlI7g*x0?a0NQ37tP+ z>Amfi7VIIQVpOYGgvC^1#Uj0#z)2Y@Ipm#G$G8q;Tqj*Dk=CeKie)q)?t-Fbasz7j zl)#Hx1wIwaQ72IC8kgp58VeNaL6cco(_-kBzc&)?=`@c-{R3Km)bh(mX78ZC$+_B5 zU!lT}2Lu#)nhC+B3m8V%eV951*Q~;71rMrNgSFhpRdUQm0%a-fjb@zHxp2ag36$X> zd``hS6%AO=w3-}=K>3k~)g6jyN1UV<2ux5KTWUXrcXsOWKGTTnwwE?as`fDyMeBgopXVwmogvaNks z#a58BN|<-eB*J*Nz$~wuwA{EH+f=lmRiM=2IEP#O;|IxwKpaKeC5`PE%S)``S2;Gl{x;*h}X9D2+%oVgHZQnc#vIGIskW-7RJPT1d0x--HJ zG9nr}6$Dj;K%tyA>4>oC2efFvzP(FeS*`}Bi!xH##+p)E$p#!&(TxZ*s#oigtQ^#= zy(~VCWNJ!+&Qq2)=U!zc=s{FLuL=XEz#3O7$&kBiU#?k63aV*m@dvwGwLY>D|FgB% zJ|uT#6?!BAqYSBGfEF$kylZ94ygl=Br-c>TW&J0W zI$aw!(nZq)>0?Kn)truVV_uxyoXeWYVKO%fhMXit^#s7Z8@&sDhh2J*Bl%|%1Ruu zG>*1B91_4N9`#66D^Hv~hxI9B84$a(Af&J@=iu~JJ~oQ|9@y9lhvlO$-9i^&&lU`G z*8CS%jDw08=!fgn zBu8mK^k)2UAmxX5`MeC`-_R7yRq#69!5>>vVZB6?WcUwW!(rbI^sR9G%2yrO^M$-t z^Ha;uDt;P7MM>qr2##J66_x41y!2qLGq{Z>_Av_x{upo*iTAnCK|Yt+CKY)Z$(4-M zI=)0S^1B7=bMo(?jRugGD=6|7^N&{Z7lV}5?@*nzYzv~ zDdnTwEN0)2af2IjJA%2us~n~M{QyR|i-+~$RF5NnoAT0n*4DqUny-8E7?(2s1wNB5 zZyMwBI?l=Yw9A)pyo{gPijv`q%HfK6!xd|XCv)vKy0(?SNNi`yJW3b0)6u(gT-!9p zwI2R)*Pr0MlyzMx*H(%7b}-xOm)litmv_DNox>XCwnz4}Zaer!cOc_0FryvzkfS@S zNr|Zn@7rD~W=+aEmErrq*7Z~TjMqX+_2B0ml~ez3c=rqY`&alQ=PEhZ!z(I^@hAKR If5V*r0$SGm?EnA( literal 6129 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 Bsx@Nw?K~)Ym_S0nr-3$5*%*{B$1ML zjBY)aOy%VZBbpge8hZu$kYQ-_s@Y}F9(P@9S(Qr7WKHyAfa8$B+ZdF88583i?=bBC zw+RzBO7@~xt~w@$a9H47RkwN3EjwP(vr5-4xK_yy;V1)D8fBz;IS^}6lEws%<2?qG zz~%X1f}B~L;5aETfl~}oc_|o`KLop@CPr{Z^)5$9$(gL`@>zzo{4tOw{7FoykLTp$ z;J!h%d|%)^A`INMty$_@2t@`lSFO%f?9N%YyhJVe5R~L2fsZjQp9fd{G&2I9;xlRU z{Xve;8QSH5(Qc}CTLM>5lHc<~bgGl+=9rV0_0eC}ZZp{xcow<$zl%}y2!CF_2pl*< zb#snmyC*7Et!CFq(}Yv1&e|?nCvD$C7i_v?>d`=e2+}w&f9HEvu98o!fF_h_6uxa> z0oQ2NfC|1)d&&NrVs)Ae+u+k1XvlBFobKI#nCeS!p_ySFZQ5A8Zm%KImyU1Y%>cRM zs~Y=h=g+=%bZugP?>f@!IQTG6#&B!+$V0#4DV(O$)o@iVg$7rYk|EL=rz_~7O8yX? zaq2M*L&UU2sV;;+*u;f%+OXcHXMEH(L^EwVefs1#T-w5A z4XZjK{z0DEOr4C?xy~a0n(J0WookHxoj|A0rK1_ga0|CdPn7n#xI#PBMLlFUdi&dJ#VKV#azxa-tkfr%P G8vX%P8PkUV delta 1156 zcmYk5O>7%Q6vzLwyY_50)224IW70T@lh*hnCM_xDBTm|;AE{|RN?i;gK-t=x;MBFl zdYh6K8a@Ju8`T_MfGaP3vXlguX!N6oEMb0blg7PjZ?~*c87A_;NQeUxf1=Ace77k<9 z#2m*}6@1mgH54oaaGm2d3t<$MdELYt7UuD$nk?`*-crJEtJxICI~+F{{JBc4;!QB< z$yD)&u@JRp2&O1m1_s(Gc)(N6u;yQ(zTw2FS0p{-D5Jta02ExQ`E&;zx2^&!&|3KwuqZ z2C-PLFIJs_vRheoI6fBm1fL3gh7E>3`JFE!zcx&2@pF73|1@%;Bg^)xJyNx6OCxhP zmz|Q=PV195c=+MBJ%bE<$?*!6drk{D&tTqlE1r|DQKpg1r;4(dosdPAFd2NMYQ5pe zZ`fcrzgR2P%Z^JO;POVor#?ObpUw7J~Y67nByJWHD=7ba6hDo;+gm@4&=d~M|p z6}ygodrXBmd1dNc{;F@ttHv?8X`GB8jy}3v>e0dIDC1-Yb97yGatc1ga1<$|Y2Cyb zWH3y*0h~q_&(h7mO#O`DM5}%dC-EFrjndl-{Rv_m8i&Ciqi3I#87Dz9hl%NVQfM); zPEznuMPV0#`E3N#O+2-QP=VOOiY+q3sO#=vbQ@34>Zgsck!_)FBAN{w6zcgIM|aSx zW5XcCzi1_vZIiJ!7yX(CT=zTLToZKO3Hk<#%Rm>#@d93?exlT17B3Ok5XBUYj+y@v z7Vt904hR#__esRZk>dz(go%#6;bZjg6AxkL+N>I>gA^xFr!g2L_X-_bjSk@&jUS-n EKR64{)&Kwi diff --git a/target/classes/ga/ganma/foofledrive/plan.class b/target/classes/ga/ganma/foofledrive/plan.class index 2a7f5304053b1cf7bf90785f13eb03bf15786d8a..5ddbe3d38a2ec0481ca3921dd5220147b88a34c8 100644 GIT binary patch literal 1336 zcmaJ=T~8BH5Ix&=yY0G4Er^2PCu$2yK|#?Xg0w10QA4!`eY&*Ux@Nm;wp$*2@+WCY z)Mzw3`=gBK-qujR+T?b2X3w0NGduVDkI&x#+(N-XM8jA^#ki3oLxKj z+7(_B8e$f7#A)ws6^j~9mi~**OL)RUQo{Ap#{CCRWaN+qOGe_G8-+rtC__gq40SEB_3&(MS#j39F*&0SN+0rYqD{}0;k$bfB z%C3fa6XQ5(V8X&APOrHaXhY$3YIM^_JsR$*RxIF3rx7vF-<3cGKs~qr6a9o#*Eq=eZ1hbxhtH#>V7@ zP?py~S?)fN8kZZ-B%SYPF~h7Jy>qnkXLgYKfRTM1dq+>h9RK6$9e0PDJdcRNFVM;i zGp$X3!q`4EiI4n-zsiW!Md2D2=q>W-OnWP#++0Kz**vWjVoc9We8lPZeC%gR;(*D( zb*VxzB_ou>XPz4>WhrIKm1apPX%R901Cz#AXxq^aqUG&a2S#~Y@9=AF$2&M&mRQOxFQRKgnA$>mj5mS4JD(6B>IfimB>dG;db1ANz!=I4ZLrRM27BDG_1LGhP fr0sTm3wg#OSjKHyV1*||{2j(tTUf*0=UD#<8SWLF literal 1104 zcmaJ(u8#o@p17Uf{lM z)sEcy0YCD|qR9|@6$UG9pYSto5xJ`6H0xea&1d?iPuO9Z`-i;liCEo$O2BIrH}P*U zs&vf@yyiMX>V{mqnL}z^^MgnA#2v31@Mfz{k)mng(AUa-_i>>obTMev*7}fK&v(FH zXgMzN^u3RQD|O#+!dAWPZhN8&aWRr5QND@WV({Z8p5q0>#D529Vg@fw%;CO?1V&9H z#Wg0b6h;|_u9_)GG9;zpFCsMbvL6OSA(_tf)U|hX;+C64bG5fq1)nz>-HNV{>3XvK z#tLoY2pDcb-Ix&k0Fp#eN@6J`5d}sjMai`O3gVc+B)yse?4WQL_oSa1NGOqU1yT9{ExR~?C&fKyW27<5XpHin&ZFu|$Q0)t44M&zKqiGG~7T^AlHz3L)uNL*Bz&B88z2D zG4x|UT1|Q~2&}FGk!ICo)WlUWZ)$iCDcaE27PwOy7T7MtaT_x+q&3{ZU4iv0ElvA` zsX6ZHo?%JPbZotN@$%fRIyIH-jjqwYQ}$fbZV0SpN`2Mo8uYviK}q~-cf9&n}1zyBb47!G8tT2b31TIWELMhrUPuf*OAT=PA z3o8bi#K#)e@JL{+Wq8{G>aEOGu-S?NUf1v#pHjE7My*6M#bUM+LxEI%8m6O{4cC;G z`LjH<2>oiHVFPk5Tvw9+5LvcDEpAdL0#hY6=0&@CXt?_w%w)-_N~iHI0hdGTFUnw(WTShG6qjedF5mA@gX<^o1T> zUV6N=%!qZz-7}ibiL}C8$-q3N9)jRTHoW0WdTa*IlRh|lYl*qH^_~5et zVxRwL7kmdRfq#QkRbA8c&-~?w$-F)17Rcq_VO2e{mW(24wLBK8iSm^LkQHp3At8G!*)F9S?tFMP-5=Vv^I+?H*{Z)3Y zVrd`x*oXe8u6}1`NG3?C4}Ce8efHkpw{Pd~fByIrz$#wkFoxAU?qY2O7jRE4_jC9h zU#L?#j|W&&*Dp0Z%wYtNl=v%k`Z~wcHyYM8Jl60;AhTb$8v^6i*YZ%Boxpa?ot?_# zGG7iH=?ctMTheSvcVC)K&ucnX!?zDDQ$12CZ@Y(<8+iUvEfAQ9yzr@I)&k#lTU5z5 zZP#wU5|~V2tV_po8`4+r5BMHD6!@`N_57B(+u7T*1Cw6u;K+RL$Ro=yCttddX5|#T z{2wHjUNV+-uVD#{Rc+UL*4f{+{B61GP%=^V>e6{BeOujQVJ3KGw*{65Iwhlq3}j4B z9T`XJz!8{D673H`AWh~1i%FI9VmX_Mt!C39@Bb$geFXbG3urAXAPlR%P+S@qy{fy? z+zdNsf|~F2PL|Isj=&YZCW?A~xFc;V*od2Cs+jQB?GjbPRGs-9q2p84LLYKhS75Xj z$ok%q*9pB@rj>{-$ zsOs3nGxkd_)KfqmTX?Qx3e!4%z-=ANxG7)^nwocehtn5&4aa6{_qA2$C{2bU+cRqx zd(*Lhj`}rSRH>Lwq_nTeIFL-xj%)wau__$vd*`y~R^f%^$iVj8-XJ}3>zou{;9^&4 z+lxk7V6|^Ry9zz)a@-32A3&0AU&j%p9sUyAUgdO>LzG@R;$P$gnkX$B40xzmsi+L8 zG*sMnAl1!8v}heTBJHc^xec zk85v{GfKzE_sVsF&)~FbG|+J?bXJHAx@8)rd^)6I;&$w|MIGgKmbCJJh3xWgPM}wf w(p!uwp(2_NvlO+&9b&8y<1Slpjg4`?i#5)ci4f>7M!geS3zgIr9#i=2U&J2FtpET3 diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index 656f953..51fef91 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -1,5 +1,5 @@ name: foofledrive -version: 0.7.9β +version: 1.0.0 main: ga.ganma.foofledrive.Foofledrive api-version: 1.13 commands: diff --git "a/target/foofledrive-0.7.9\316\262.jar" "b/target/foofledrive-0.7.9\316\262.jar" index 874b986ac0241b94446b2d23e8c92e9fd3fc0aa5..c83910aa6c43ebed7b0dd0b708db6e1e74dd0673 100644 GIT binary patch literal 54570 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 literal 31061 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 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties index ea93cfa..9b3938a 100644 --- a/target/maven-archiver/pom.properties +++ b/target/maven-archiver/pom.properties @@ -1,5 +1,3 @@ -#Generated by Maven -#Sat Oct 05 22:36:13 JST 2019 -groupId=ga.ganma artifactId=foofledrive -version=0.7.9\u03B2 +groupId=ga.ganma +version=1.0.0 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index bae6fb4..b652f55 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,17 +1,20 @@ -ga\ganma\foofledrive\playerdata\Playerdata.class +ga\ganma\foofledrive\FoofleDrivePlan.class ga\ganma\foofledrive\economy\Economy$1.class ga\ganma\foofledrive\Listener\GetEvent$1.class ga\ganma\foofledrive\Filerelation.class ga\ganma\foofledrive\command\CommandMain.class ga\ganma\foofledrive\command\Subopen.class +ga\ganma\foofledrive\bizlogic\convert\ConvertPlayerData.class +ga\ganma\foofledrive\Listener\GUIEvent.class +ga\ganma\foofledrive\bizlogic\convert\ConvertPlayerData$1.class +ga\ganma\foofledrive\bukkitRunnable\Runnable.class +ga\ganma\foofledrive\command\Subplan.class +ga\ganma\foofledrive\Listener\GetEvent.class +ga\ganma\foofledrive\playerdata\Playerdata.class +ga\ganma\foofledrive\playerdata\PlayerDriveData.class ga\ganma\foofledrive\inventoryRelation\InventoryEncoder.class ga\ganma\foofledrive\Foofledrive.class ga\ganma\foofledrive\inventoryRelation\InventoryAPI$1.class ga\ganma\foofledrive\economy\Economy.class -ga\ganma\foofledrive\Listener\GUIEvent.class ga\ganma\foofledrive\inventoryRelation\InventoryAPI.class -ga\ganma\foofledrive\Listener\GUIEvent$1.class -ga\ganma\foofledrive\bukkitRunnable\Runnable.class -ga\ganma\foofledrive\command\Subplan.class -ga\ganma\foofledrive\Listener\GetEvent.class ga\ganma\foofledrive\plan.class diff --git "a/target/original-foofledrive-0.7.9\316\262.jar" "b/target/original-foofledrive-0.7.9\316\262.jar" index 26869f3691bf0de618121870e5da7c5eb1198448..8b7db2de1ed71b79dc15abac0d4c67fd225cb2b0 100644 GIT binary patch literal 53562 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 literal 30467 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 From c9183d1e64c65e6dc8f1f01d596cbed0e87820db Mon Sep 17 00:00:00 2001 From: gobotan Date: Tue, 5 Nov 2024 22:46:00 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E3=80=90=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=80=91=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E6=8C=87=E6=91=98=E4=BA=8B=E9=A0=85?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ga/ganma/foofledrive/FileRelationUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java b/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java index a9d337c..ce1694e 100644 --- a/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java +++ b/src/main/java/ga/ganma/foofledrive/FileRelationUtils.java @@ -29,7 +29,7 @@ private FileRelationUtils() {} * @return データファイルが存在する場合はtrue、存在しない場合はfalse */ public static boolean nameCheck(Player p) { - return new File(PLAYERDATA_FOLDER.toString() + p.getUniqueId() + ".dat").exists(); + return nameCheck(p.getUniqueId()); } /** @@ -39,7 +39,7 @@ public static boolean nameCheck(Player p) { * @return データファイルが存在する場合はtrue、存在しない場合はfalse */ public static boolean nameCheck(OfflinePlayer offp) { - return new File(PLAYERDATA_FOLDER.toString() + offp.getUniqueId() + ".dat").exists(); + return nameCheck(offp.getUniqueId()); } public static boolean nameCheck(UUID uuid) {