diff --git a/Account.java b/Account.java index 47c45d2..50707ae 100644 --- a/Account.java +++ b/Account.java @@ -1,19 +1,33 @@ package org.poopki.duckdns.user_db; + public class Account { private int m_Balance; - + private int MAX_BALANCE = 2147483647; public Account(int Balance){ // Account Balance 초기화 m_Balance = Balance; } - + public boolean setBalance(Long Amount){ + if(Amount= Amount){ - m_Balance -= Amount; + m_Balance -= Amount.intValue(); return true; } return false; diff --git a/AccountArray.java b/AccountArray.java index 8084591..1898e7b 100644 --- a/AccountArray.java +++ b/AccountArray.java @@ -7,12 +7,22 @@ import java.util.UUID; public class AccountArray { private static Map m_AccountArray = new HashMap(); - public void transfer(UUID Src, UUID Des, int Amount){ // 송금 method + public int transfer(UUID Src, UUID Des, Long Amount){ // 송금 method Account m_Src = m_AccountArray.get(Src); Account m_Des = m_AccountArray.get(Des); if(m_Src.withdraw(Amount)){ //인출 성공시 입금 - m_Des.credit(Amount); + if(m_Des.credit(Amount)) + { + return 1; + } + else{ + m_Src.credit(Amount); + return 2; + } + } + else { + return 3; } } @@ -24,4 +34,9 @@ public class AccountArray { public void putAccountInfo(UUID uuid, int Amount) { //AccountArray 생성 m_AccountArray.put(uuid, new Account(Amount)); } + + public boolean setAccountInfo(UUID uuid, Long Amount) { + Account m_Account = m_AccountArray.get(uuid); + return m_Account.setBalance(Amount); + } } diff --git a/AccountEventHandler.java b/AccountEventHandler.java new file mode 100644 index 0000000..5eb75ea --- /dev/null +++ b/AccountEventHandler.java @@ -0,0 +1,113 @@ +package org.poopki.duckdns.user_db; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class AccountEventHandler implements CommandExecutor { + AccountArray m_AccountArray; + public AccountEventHandler(AccountArray AA){ + m_AccountArray = AA; + } + public static boolean isStringDouble(String s) { + try { + Double.parseDouble(s); + return true; + } catch (NumberFormatException e) { + return false; + } + } + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player p = (Player) sender; + + if (args.length != 0) { + switch (args[0]) { + case "설정": { + if (p.isOp()) { + if (args.length > 1) { + if (args[1] != null) { + Player op = Bukkit.getPlayer(args[1]); + if (op != null) { + if (args.length > 2) { + if (isStringDouble(args[2])) { + if(m_AccountArray.setAccountInfo(op.getUniqueId(), Long.parseLong(args[2]))){ + p.sendMessage(op.getName() + "님의 잔액을" + Integer.parseInt(args[2]) + "원으로 설정하였습니다."); + } else{ + p.sendMessage("최대 금액 이상으로 설정할 수 없습니다."); + } + + } else { + p.sendMessage("설정 금액은 숫자만 가능합니다."); + } + } else { + p.sendMessage("설정 금액을 입력해주세요."); + } + } else { + p.sendMessage("잘못된 계좌입니다."); + } + } + }else{ + p.sendMessage("설정 대상이 지정되지 않았습니다."); + } + } else { + p.sendMessage("관리자만 실행 가능한 명령어입니다."); + } + break; + } + case "잔액": { + p.sendMessage("잔액: " + m_AccountArray.getAccountInfo(p.getUniqueId()) + "원"); + break; + } + case "이체": { + if (args.length > 1) { + if(args.length > 2) { + Player op = Bukkit.getPlayer(args[1]); + if (op != null) { + if (isStringDouble(args[2])) { + if(p.getUniqueId() != op.getUniqueId()) { + switch(m_AccountArray.transfer(p.getUniqueId(), op.getUniqueId(), Long.parseLong(args[2]))) + { + case 1: { + p.sendMessage(op.getName() + "님에게 " + Integer.parseInt(args[2]) + "원을 이체하였습니다."); + break; + } + case 2: { + p.sendMessage("잔액은 최대 금액을 초과할 수 없습니다."); + break; + } + case 3:{ + p.sendMessage("잔액이 부족합니다."); + break; + } + } + } else{ + p.sendMessage("자기 자신에게는 이체할 수 없습니다."); + } + } else { + p.sendMessage("이체 금액은 숫자만 가능합니다."); + } + } else { + p.sendMessage("잘못된 계좌입니다."); + } + } else { + p.sendMessage("이체 금액을 입력해주세요."); + } + } else { + p.sendMessage("이체 대상이 지정되지 않았습니다."); + } + break; + } + default: { + p.sendMessage("잘못된 명령어"); + } + } + } + else{ + p.sendMessage("명령어를 입력하세요(잔액 | 이체)"); + } + return true; + } +} diff --git a/CustomItem_test.java b/CustomItem_test.java new file mode 100644 index 0000000..c0b401f --- /dev/null +++ b/CustomItem_test.java @@ -0,0 +1,40 @@ +package org.poopki.duckdns.user_db; + +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.util.Vector; + +import java.util.Random; + +public class CustomItem_test implements CommandExecutor { //명령어 처리 클래스는 CommandExecutor 인터페이스를 상속해야 한다. + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { //명령어 실행 시 + if(sender instanceof Player) { //명령어 사용자가 플레이어인 경우 + Player player = (Player)sender; //명령어 사용자 객체를 플레이어 객체로 변환할 수 있음 + player.sendMessage("zl존 개쩌는 테스트 명령어를 실행하셨습니다."); //사용자에게 메시지 발신 + ItemStack irons = new ItemStack(Material.IRON_INGOT); //아이템을 ItemStack 객체를 생성해 만들 수 있음 + ItemStack golds = new ItemStack(Material.GOLD_INGOT); + ItemStack diamonds = new ItemStack(Material.DIAMOND); + + irons.setAmount(10); //아이템 갯수를 정할 수 있음 + golds.setAmount(20); + diamonds.setAmount(30); + + player.getInventory().addItem(irons, golds, diamonds); //플레이어의 인벤토리를 가져와 아이템을 집어넣음 + return true; //true값을 반환하면 명령어가 성공한 것으로 간주 + } + else if(sender instanceof ConsoleCommandSender) { //명령어 사용자가 콘솔인 경우 + sender.sendMessage("콘솔에서는 이 명령어를 실행할 수 없습니다."); + return false; //false값을 반환하면 명령어가 실패한 것으로 간주 + } + return false; + } +} diff --git a/Status.java b/Status.java new file mode 100644 index 0000000..0ff7531 --- /dev/null +++ b/Status.java @@ -0,0 +1,29 @@ +package org.poopki.duckdns.user_db; + +public class Status { + int m_HP; + int m_MP; + int m_Level; + + int m_STR; + int m_DEX; + int m_INT; + int m_LUK; + + int m_PATK; + int m_PDEF; + int m_MATK; + int m_MDEF; + //방어율 = (방어력 / (100 + 방어력) + //Add Equipment Class instance + public Status(int HP, int MP, int Level, int STR, int DEX, int INT, int LUK){ + m_HP = HP; + m_MP = MP; + m_Level = Level; + + m_STR = STR; + m_DEX = DEX; + m_INT = INT; + m_LUK = LUK; + } +} diff --git a/UserInfo.java b/UserInfo.java index b4d6c99..aa22792 100644 --- a/UserInfo.java +++ b/UserInfo.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public class UserInfo { +public class UserInfo extends Status { private UUID m_UUID; private String m_Name; @@ -15,16 +15,17 @@ public class UserInfo { private int m_Farm; public UserInfo(UUID uuid, String Name, int Nation, int Squad, int Farm){ //UserInfo 초기화 + super(100,100,1,10,10,10,10); m_UUID = uuid; m_Name = Name; m_Nation = Nation; m_Squad = Squad; m_Farm = Farm; } + public void JoinNation(int Nation) { m_Nation = Nation; } public void JoinSquad(int Squad) { m_Squad = Squad; } public void JoinFarm(int Farm) { m_Farm = Farm; } - public String getUserName(){ return m_Name; } diff --git a/User_DB.java b/User_DB.java index 0318d38..6bdbed9 100644 --- a/User_DB.java +++ b/User_DB.java @@ -24,7 +24,7 @@ public final class User_DB extends JavaPlugin implements Listener { } catch (SQLException e) { throw new RuntimeException(e); } - + getCommand("계좌").setExecutor(new AccountEventHandler(m_AccountArrayInstance)); getServer().getPluginManager().registerEvents(new UserJoin(m_InfoArrayInstance, m_AccountArrayInstance),this); }