Search in sources :

Example 1 with Pointjao

use of com.jaoafa.MyMaid2.Lib.Pointjao in project MyMaid2 by jaoafa.

the class Event_Shop method BUY.

@SuppressWarnings("deprecation")
void BUY(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    Block block = event.getClickedBlock();
    Sign sign = (Sign) block.getState();
    Location loc = block.getLocation();
    Location ChestLoc = loc.add(0, -1, 0);
    Block ChestBlock = ChestLoc.getWorld().getBlockAt(ChestLoc);
    Chest chest = (Chest) ChestBlock.getState();
    // チェストに関連するアイテムがあるかどうか?
    // 必要なjaoポイントを持っているか?
    // →販売・購入
    String TransManager_Str = sign.getLine(1);
    if (TransManager_Str.equalsIgnoreCase(player.getName())) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "取引運営者が購入することはできません。");
        return;
    }
    OfflinePlayer TransManager = Bukkit.getOfflinePlayer(TransManager_Str);
    if (TransManager == null) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "取引運営者が取得できませんでした。");
        return;
    }
    Pointjao TransManager_jao;
    try {
        TransManager_jao = new Pointjao(TransManager);
    } catch (NullPointerException | ClassNotFoundException | SQLException e) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "取引運営者のjaoポイントデータが取得できませんでした。");
        BugReporter(e);
        return;
    }
    Pointjao Player_jao;
    try {
        Player_jao = new Pointjao(player);
    } catch (NullPointerException | ClassNotFoundException | SQLException e) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "jaoポイントデータが取得できませんでした。");
        BugReporter(e);
        return;
    }
    Inventory inv = chest.getInventory();
    String Line4 = sign.getLine(3);
    ItemStack MainItem = inv.getItem(0);
    if (MainItem == null) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "販売アイテムの情報が取得できませんでした。");
        return;
    }
    ItemStack item = null;
    int slot;
    for (int i = 1; i < inv.getSize(); i++) {
        ItemStack is = inv.getItem(i);
        if (is == null) {
            continue;
        }
        if (MainItem != is) {
            continue;
        }
        item = is;
        slot = i;
        break;
    }
    if (item == null) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "販売できる商品がありませんでした。");
        return;
    }
    try {
        int jao = Player_jao.get();
    } catch (ClassNotFoundException | NullPointerException | SQLException e) {
        player.sendMessage(ChatColor.GOLD + "[jaoShop] " + ChatColor.RESET + "jaoポイントデータが操作できませんでした。");
        BugReporter(e);
        return;
    }
}
Also used : Chest(org.bukkit.block.Chest) Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) SQLException(java.sql.SQLException) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) Block(org.bukkit.block.Block) OfflinePlayer(org.bukkit.OfflinePlayer) Sign(org.bukkit.block.Sign) ItemStack(org.bukkit.inventory.ItemStack) Inventory(org.bukkit.inventory.Inventory) Location(org.bukkit.Location)

Example 2 with Pointjao

use of com.jaoafa.MyMaid2.Lib.Pointjao in project MyMaid2 by jaoafa.

the class Event_VoteReceived method VoteReceive.

public static boolean VoteReceive(String name) {
    final int VOTEPOINT = 20;
    String oldVote = "取得できませんでした";
    String newVote = "取得できませんでした";
    String oldjao = "取得できませんでした";
    String newjao = "取得できませんでした";
    /* ------------- 投票イベント関連開始 ------------- */
    /*
		String plusargs = "";
		// ハロウィンイベント Issue #18
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
			Date start = format.parse("2017/10/15 09:00:00");
			Date end = format.parse("2017/11/01 08:59:59");
			if(isPeriod(start, end)){
				plusargs = "&pluscount=2"; // 2倍
			}
		} catch (ParseException e) {
			BugReporter(e);
		}
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
			Date start = format.parse("2017/07/01 00:00:00");
			Date end = format.parse("2017/07/14 23:59:59");
			if(Method.isPeriod(start, end)){
				VOTECOUNT += 20;
				Bukkit.broadcastMessage("[MyMaid] " + ChatColor.GREEN + player.getName() + "さんが投票し、七夕イベントボーナスを追加で20ポイントポイント追加しました。");
    			DiscordSend(player.getName() + "さんが投票し、七夕イベントボーナスを追加で20ポイント追加しました。");
			}
		} catch (ParseException e) {
			BugReporter(e);
		}
		 */
    /* ------------- 投票イベント関連終了 ------------- */
    UUID uuid = null;
    try {
        PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM login WHERE player = ? ORDER BY id DESC");
        statement.setString(1, name);
        ResultSet res = statement.executeQuery();
        if (res.next()) {
            uuid = UUID.fromString(res.getString("uuid"));
        }
    } catch (SQLException | ClassNotFoundException e) {
        // TODO 自動生成された catch ブロック
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "のプレイヤーデータをデータベースから取得している最中にClassNotFoundExceptionもしくはSQLExceptionが発生したため、投票処理が正常に行われませんでした。");
        BugReporter(e);
        return false;
    }
    if (uuid == null) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "のプレイヤーデータがデータベースから取得できなかったため、投票処理が正常に行われませんでした。");
        return false;
    }
    OfflinePlayer offplayer = Bukkit.getOfflinePlayer(uuid);
    if (offplayer == null) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "のOfflinePlayerを取得できなかったため、投票処理が正常に行われませんでした。");
        return false;
    }
    if (!offplayer.getName().equals(name)) {
        name += "(" + offplayer.getName() + ")";
    }
    boolean first = PlayerVoteData.TodayFirstVote();
    String i;
    try {
        PlayerVoteData pvd = new PlayerVoteData(offplayer);
        oldVote = String.valueOf(pvd.get());
        pvd.add();
        newVote = String.valueOf(pvd.get());
        i = String.valueOf(pvd.get());
    } catch (ClassNotFoundException | SQLException e) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "の投票処理時にClassNotFoundExceptionもしくはSQLExceptionが発生したため、投票処理(投票数追加)が正常に行われませんでした。");
        BugReporter(e);
        return false;
    } catch (NullPointerException e) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "のプレイヤー投票データが取得できなかったため、投票処理(投票数追加)が正常に行われませんでした。");
        return false;
    }
    try {
        Pointjao pointjao = new Pointjao(offplayer);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        oldjao = "" + pointjao.get();
        pointjao.add(VOTEPOINT, sdf.format(new Date()) + "の投票ボーナス");
        newjao = "" + pointjao.get();
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Date start = format.parse("2018/08/12 00:00:00");
            Date end = format.parse("2018/08/31 23:59:59");
            if (isPeriod(start, end)) {
                Random rnd = new Random();
                int random = rnd.nextInt(40) + 11;
                pointjao.add(random, sdf.format(new Date()) + "の投票ボーナス (サバイバルイベント分)");
                Bukkit.broadcastMessage("[jaoPoint] " + ChatColor.GREEN + name + "さんがサバイバルイベント投票ボーナスによってjaoポイントを追加で" + random + "ポイント追加しました。");
                DiscordSend(name + "さんがサバイバルイベント投票ボーナスによってjaoポイントを追加で" + random + "ポイント追加しました。");
            }
        } catch (ParseException e) {
            BugReporter(e);
        }
    } catch (NullPointerException e) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "のプレイヤーデータが取得できなかったため、投票処理(ポイント追加)が正常に行われませんでした。");
        return false;
    } catch (ClassNotFoundException | SQLException e) {
        DiscordSend("499922840871632896", "<@221991565567066112> :outbox_tray:**投票受信エラー**: " + name + "の投票処理時にClassNotFoundExceptionもしくはSQLExceptionが発生したため、投票処理(投票数追加)が正常に行われませんでした。");
        BugReporter(e);
        return false;
    }
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Bukkit.broadcastMessage("[MyMaid] " + ChatColor.GREEN + "プレイヤー「" + name + "」が投票をしました!(現在の投票数:" + i + "回)");
    Bukkit.broadcastMessage("[MyMaid] " + ChatColor.GREEN + "投票をよろしくお願いします! https://jaoafa.com/vote");
    DiscordSend("プレイヤー「" + name + "」が投票をしました!(現在の投票数:" + i + "回)");
    DiscordSend("投票をよろしくお願いします! https://jaoafa.com/vote");
    DiscordSend("499922840871632896", ":inbox_tray:**投票を受信しました。(" + format.format(new Date()) + ")**\n" + "プレイヤー: `" + name + "`\n" + "投票前カウント: " + oldVote + "\n" + "投票後カウント: " + newVote + "\n" + "投票前jaoポイント: " + oldjao + "\n" + "投票後jaoポイント: " + newjao);
    if (first) {
        // 初めての投票だったら、実績獲得 (No.21 / 筆頭株主)
        if (offplayer != null) {
            Achievementjao.getAchievement(offplayer, new AchievementType(21));
        }
    }
    /*
    		if(date.format(Date).equalsIgnoreCase("2017-02")){
    			Random rnd = new Random();
    			int random = rnd.nextInt(50)+1;

    			Pointjao.addjao(player, random, sdf.format(Date) + "の投票ボーナス(2月ポイント補填ボーナス)");
    			Bukkit.broadcastMessage("[MyMaid] " + ChatColor.GREEN + player.getName() + "さんが投票し、2月ポイント補填ボーナスを" + random + "ポイント追加しました。");
    			DiscordSend(player.getName() + "さんが投票し、2月ポイント補填ボーナスを" + random + "ポイント追加しました。");
    		}
		 */
    return true;
}
Also used : SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) Date(java.util.Date) Random(java.util.Random) AchievementType(com.jaoafa.jaoSuperAchievement.jaoAchievement.AchievementType) ResultSet(java.sql.ResultSet) OfflinePlayer(org.bukkit.OfflinePlayer) ParseException(java.text.ParseException) UUID(java.util.UUID) SimpleDateFormat(java.text.SimpleDateFormat) PlayerVoteData(com.jaoafa.MyMaid2.Lib.PlayerVoteData)

Example 3 with Pointjao

use of com.jaoafa.MyMaid2.Lib.Pointjao in project MyMaid2 by jaoafa.

the class Event_JoinjaoPoint method OnEvent_JoinjaoPoint.

@EventHandler
public void OnEvent_JoinjaoPoint(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    String uuid = player.getUniqueId().toString();
    Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
    cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    SimpleDateFormat date_full = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    date_full.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
    String today = date_full.format(cal.getTime());
    SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
    try {
        PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM login WHERE uuid = ? AND date >= cast(? as datetime) AND login_success = ?");
        statement.setString(1, uuid);
        statement.setString(2, today);
        statement.setBoolean(3, true);
        ResultSet res = statement.executeQuery();
        if (res.next()) {
            return;
        }
    } catch (SQLException | ClassNotFoundException e) {
        BugReporter(e);
    }
    try {
        Pointjao Pjao = new Pointjao(player);
        Pjao.add(10, date.format(new Date()) + "のログインボーナス");
    } catch (NullPointerException e) {
        BugReporter(e);
        return;
    } catch (ClassNotFoundException | SQLException e) {
        BugReporter(e);
        return;
    }
    try {
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date start = format.parse("2019/03/05 00:00:00");
        Date end = format.parse("2019/03/15 23:59:59");
        if (isPeriod(start, end)) {
            String group = PermissionsManager.getPermissionMainGroup(player);
            if (!group.equalsIgnoreCase("Admin") && !group.equalsIgnoreCase("Moderator") && !group.equalsIgnoreCase("Regular") && !group.equalsIgnoreCase("Default")) {
                return;
            }
            ItemStack item = new ItemStack(Material.POTATO_ITEM);
            net.minecraft.server.v1_12_R1.ItemStack nms = CraftItemStack.asNMSCopy(item);
            NBTTagCompound nbttag = nms.getTag();
            if (nbttag == null) {
                nbttag = new NBTTagCompound();
            }
            UUID item_uuid = UUID.randomUUID();
            MessageDigest md;
            try {
                md = MessageDigest.getInstance("SHA-1");
            } catch (NoSuchAlgorithmException e) {
                BugReporter(e);
                player.sendMessage("[EscapeJail] " + ChatColor.RED + "新しいEscapeJailアイテムの精製に失敗しました。(2)");
                return;
            }
            byte[] digest = md.digest(item_uuid.toString().getBytes());
            String id = DatatypeConverter.printHexBinary(digest);
            if (id == null) {
                player.sendMessage("[EscapeJail] " + ChatColor.RED + "新しいEscapeJailアイテムの精製に失敗しました。(3)");
                return;
            }
            nbttag.setString("MyMaid_EscapeJailID", id);
            nms.setTag(nbttag);
            item = CraftItemStack.asBukkitCopy(nms);
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName("EscapeItem - IMO");
            List<String> lore = new ArrayList<String>();
            lore.add("このアイテムをインベントリ内に配置しておくと、Jail(EBan除く)を無効化できます!(アイテム1つにつき1回限り)");
            lore.add(ChatColor.RED + "NBTデータを削除してしまうと、アイテムは無効となります。また、複製をしても1つしか有効ではありません。");
            meta.setLore(lore);
            meta.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 999, true);
            item.setItemMeta(meta);
            try {
                PreparedStatement statement = MySQL.getNewPreparedStatement("INSERT INTO uniqueitem (id, type) VALUES (?, ?)");
                statement.setString(1, id);
                statement.setString(2, "MyMaid_EscapeJailID");
                statement.executeUpdate();
            } catch (SQLException | ClassNotFoundException e) {
                BugReporter(e);
                player.sendMessage("[EscapeJail] " + ChatColor.RED + "新しいEscapeJailアイテムの精製に失敗しました。(3)");
                return;
            }
            player.sendMessage("[EscapeJail] " + ChatColor.RED + "新しいEscapeJailアイテムの精製に成功しました。");
            player.sendMessage("[EscapeJail] " + ChatColor.RED + "このアイテムをインベントリの中に配置しておくと、Jail(EBan除く)をアイテム個数分だけ無効化できます!");
            if (player.getInventory().firstEmpty() == -1) {
                player.getLocation().getWorld().dropItem(player.getLocation(), item);
                player.sendMessage("[EscapeJail] " + ChatColor.RED + "インベントリがいっぱいだったため、あなたの足元にアイテムをドロップしました。");
                Bukkit.getLogger().info("[EscapeJail] dropped to " + player.getName());
            } else {
                player.getInventory().addItem(item);
                Bukkit.getLogger().info("[EscapeJail] gived to " + player.getName());
            }
        }
    } catch (ParseException e) {
        BugReporter(e);
    }
}
Also used : SQLException(java.sql.SQLException) NBTTagCompound(net.minecraft.server.v1_12_R1.NBTTagCompound) ArrayList(java.util.ArrayList) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) ResultSet(java.sql.ResultSet) UUID(java.util.UUID) MessageDigest(java.security.MessageDigest) ItemMeta(org.bukkit.inventory.meta.ItemMeta) Player(org.bukkit.entity.Player) Calendar(java.util.Calendar) PreparedStatement(java.sql.PreparedStatement) Date(java.util.Date) ParseException(java.text.ParseException) CraftItemStack(org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack) ItemStack(org.bukkit.inventory.ItemStack) SimpleDateFormat(java.text.SimpleDateFormat) EventHandler(org.bukkit.event.EventHandler)

Example 4 with Pointjao

use of com.jaoafa.MyMaid2.Lib.Pointjao in project MyMaid2 by jaoafa.

the class MyMaidBookHistory method onCommand.

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length >= 1 && args[0].equalsIgnoreCase("help")) {
        SendUsageMessage(sender, cmd);
        return true;
    }
    if (args.length == 1) {
        if (args[0].equalsIgnoreCase("list")) {
            // /book list : 本のリストを表示
            try {
                PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT COUNT(*) FROM book WHERE status = ?");
                statement.setString(1, "now");
                ResultSet rescount = statement.executeQuery();
                rescount.next();
                int size = rescount.getInt("COUNT(*)");
                statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE status = ?");
                statement.setString(1, "now");
                ResultSet res = statement.executeQuery();
                int count = 0;
                int page = 1;
                int startcount = (page - 1) * 10;
                int endcount = page * 10;
                int maxpage = size / 10;
                if (size % 10 != 0)
                    maxpage += 1;
                SendMessage(sender, cmd, "Book List: " + page + "page / " + maxpage + "page");
                SendMessage(sender, cmd, "-------------------------");
                while (res.next()) {
                    if (count < startcount) {
                        count++;
                        continue;
                    }
                    if (count > endcount) {
                        break;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    MyMaidBookData bookdata;
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, pages_str, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                    SendMessage(sender, cmd, "[" + bookdata.getID() + "] " + bookdata.getTitle() + ChatColor.GREEN + " - " + bookdata.getAuthorName() + "(" + bookdata.getRequiredjao() + "jao)");
                    count++;
                }
                SendMessage(sender, cmd, "-------------------------");
                SendMessage(sender, cmd, startcount + " - " + endcount + " / " + size);
                if (page != maxpage) {
                    SendMessage(sender, cmd, "次のページを見るには「/book list " + (page + 1) + "」を実行します。");
                }
                return true;
            } catch (ClassNotFoundException | SQLException e) {
                BugReporter(e);
            }
        }
    } else if (args.length == 2) {
        if (args[0].equalsIgnoreCase("get")) {
            // /book get <Name|ID>
            if (!(sender instanceof Player)) {
                SendMessage(sender, cmd, "このコマンドはサーバ内から実行可能です。");
                return true;
            }
            Player player = (Player) sender;
            try {
                MyMaidBookData bookdata = null;
                if (isNumber(args[1])) {
                    // ID
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE id = ?");
                    statement.setInt(1, Integer.parseInt(args[1]));
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (status.equalsIgnoreCase("end")) {
                        // 販売終了
                        SendMessage(sender, cmd, "指定された本はすでに販売を終了しています。");
                        return true;
                    } else if (!status.equalsIgnoreCase("now")) {
                        SendMessage(sender, cmd, "指定された本は未発売か、なにかしらの理由で販売できません。(Status: " + status + ")");
                        return true;
                    }
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, pages_str, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                } else {
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE title = ?");
                    statement.setString(1, args[1]);
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, pages_str, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                }
                Pointjao Pjao = new Pointjao(player);
                if (!Pjao.has(bookdata.getRequiredjao())) {
                    // ポイントが足りない
                    SendMessage(sender, cmd, "指定された本を購入するには、" + bookdata.getRequiredjao() + "jaoが必要です。");
                    return true;
                }
                Pjao.use(bookdata.getRequiredjao(), "本「" + bookdata.getTitle() + "」の購入のため");
                if (bookdata.getAuthor() != null) {
                    try {
                        Pointjao Pjao_wasbought = new Pointjao(bookdata.getAuthor());
                        Pjao_wasbought.add(bookdata.getRequiredjao(), "本「" + bookdata.getTitle() + "」を" + player.getName() + "が購入したため");
                    } catch (UnsupportedOperationException e) {
                    // jaotanなど指定した場合アカウントがないといわれるので回避
                    }
                }
                ItemStack is = bookdata.getBook();
                if (player.getInventory().firstEmpty() == -1) {
                    player.getLocation().getWorld().dropItem(player.getLocation(), is);
                    SendMessage(sender, cmd, "購入された本をインベントリに追加しようとしましたが、インベントリが一杯だったのであなたの足元にドロップしました。");
                } else {
                    player.getInventory().addItem(is);
                    SendMessage(sender, cmd, "購入された本をインベントリに追加しました。");
                }
                SendMessage(sender, cmd, "必ずお読みください: https://jaoafa.com/blog/tomachi/book_command_item_duplication");
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                String date = sdf.format(new Date());
                bookdata.addHistory(player, MyMaidBookHistoryType.BUY, date);
                PreparedStatement statement = MySQL.getNewPreparedStatement("UPDATE book SET history = ?, count = count + 1 WHERE id = ?");
                statement.setString(1, bookdata.getRawHistory());
                statement.setInt(2, bookdata.getID());
                statement.executeUpdate();
                return true;
            } catch (SQLException | ClassNotFoundException | NullPointerException e) {
                // TODO 自動生成された catch ブロック
                BugReporter(e);
                return true;
            }
        } else if (args[0].equalsIgnoreCase("delete")) {
            // /book delete <Name|ID>
            if (!(sender instanceof Player)) {
                SendMessage(sender, cmd, "このコマンドはサーバ内から実行可能です。");
                return true;
            }
            Player player = (Player) sender;
            try {
                MyMaidBookData bookdata = null;
                if (isNumber(args[1])) {
                    // ID
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE id = ?");
                    statement.setInt(1, Integer.parseInt(args[1]));
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, status, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                } else {
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE title = ?");
                    statement.setString(1, args[1]);
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, status, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                }
                if (bookdata.getAuthor() == null) {
                    SendMessage(sender, cmd, "この本は販売終了できません。(プレイヤーデータ取得失敗)");
                    return true;
                }
                OfflinePlayer offplayer = bookdata.getAuthor();
                if (!offplayer.getUniqueId().toString().equalsIgnoreCase(player.getUniqueId().toString())) {
                    // 割とクソ実装感ある
                    // UUIDが違ったら(プレイヤーが違ったら)
                    SendMessage(sender, cmd, "この本は" + offplayer.getName() + "の販売物のため、販売を終了できません。");
                    return true;
                }
                if (!bookdata.getStatus().equalsIgnoreCase("now")) {
                    SendMessage(sender, cmd, "この本は現在販売中ではないため、販売を終了できません。");
                    return true;
                }
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                String date = sdf.format(new Date());
                bookdata.addHistory(player, MyMaidBookHistoryType.END, date);
                PreparedStatement statement = MySQL.getNewPreparedStatement("UPDATE book SET history = ?, status = ? WHERE id = ?");
                statement.setString(1, bookdata.getRawHistory());
                statement.setString(2, "end");
                statement.setInt(3, bookdata.getID());
                statement.executeUpdate();
                SendMessage(sender, cmd, "販売を終了しました。");
                return true;
            } catch (SQLException | ClassNotFoundException e) {
                // TODO 自動生成された catch ブロック
                BugReporter(e);
                return true;
            }
        } else if (args[0].equalsIgnoreCase("history")) {
            // /book history <Name|ID>
            try {
                MyMaidBookData bookdata = null;
                if (isNumber(args[1])) {
                    // ID
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE id = ?");
                    statement.setInt(1, Integer.parseInt(args[1]));
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, status, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                } else {
                    PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE title = ?");
                    statement.setString(1, args[1]);
                    ResultSet res = statement.executeQuery();
                    if (!res.next()) {
                        SendMessage(sender, cmd, "指定された本は見つかりませんでした。");
                        return true;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, status, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                }
                SendMessage(sender, cmd, "----- 本「" + bookdata.getTitle() + "」のログデータ -----");
                List<MyMaidBookHistory> historys = bookdata.getHistory();
                for (MyMaidBookHistory history : historys) {
                    SendMessage(sender, cmd, history.getName() + "が" + history.getDate() + "に" + history.getType().getName() + "しました。");
                }
                return true;
            } catch (SQLException | ClassNotFoundException e) {
                // TODO 自動生成された catch ブロック
                BugReporter(e);
                return true;
            }
        } else if (args[0].equalsIgnoreCase("sell")) {
            // /book save <Point>
            if (!(sender instanceof Player)) {
                SendMessage(sender, cmd, "このコマンドはサーバ内から実行可能です。");
                return true;
            }
            Player player = (Player) sender;
            if (!isNumber(args[1])) {
                // 販売に必要なjaoポイント
                SendMessage(sender, cmd, "必要jaoポイント数には数値を指定してください。");
                return true;
            }
            int requiredjao = Integer.parseInt(args[1]);
            try {
                if (player.getInventory().getItemInMainHand().getType() == Material.AIR) {
                    SendMessage(sender, cmd, "アイテムを持っていません。");
                    return true;
                }
                Material handtype = player.getInventory().getItemInMainHand().getType();
                if (handtype != Material.WRITTEN_BOOK) {
                    SendMessage(sender, cmd, "このコマンドを使用するには、販売する本を手に持ってください。");
                    return true;
                }
                BookMeta book = (BookMeta) player.getInventory().getItemInMainHand().getItemMeta();
                String title = book.getTitle();
                PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE title = ? AND status = ?");
                statement.setString(1, title);
                statement.setString(2, "now");
                ResultSet res = statement.executeQuery();
                if (res.next()) {
                    // 被りを防ぐため、同名の本は販売できない
                    SendMessage(sender, cmd, "指定された本の題名と同じ題名の本が発売されています。");
                    SendMessage(sender, cmd, "システムの障害を引き起こしたり、無駄な発売のし過ぎを未然に防ぐため、同名の本を複数販売することはできません。");
                    return true;
                }
                String pages_data = implode(book.getPages(), "§j");
                String author = player.getName();
                String author_uuid = player.getUniqueId().toString();
                long unixtime = System.currentTimeMillis() / 1000L;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                String date = sdf.format(new Date());
                statement.execute("INSERT INTO book (title, author, author_uuid, data, requiredjao, count, history, status, createdate) VALUES ('" + title + "', '" + author + "', '" + author_uuid + "', '" + pages_data + "', '" + requiredjao + "', '0', '" + author + ",create," + date + "', 'now', '" + unixtime + "');");
                SendMessage(sender, cmd, "指定された本の販売を開始しました。詳しくは/book listをお使いください。");
                return true;
            } catch (SQLException | ClassNotFoundException e) {
                // TODO 自動生成された catch ブロック
                BugReporter(e);
                return true;
            }
        } else if (args[0].equalsIgnoreCase("list")) {
            // /book list <Page> : 本のリストを表示
            try {
                PreparedStatement statement = MySQL.getNewPreparedStatement("SELECT COUNT(*) FROM book WHERE status = ?");
                statement.setString(1, "now");
                ResultSet rescount = statement.executeQuery();
                rescount.next();
                int size = rescount.getInt("COUNT(*)");
                statement = MySQL.getNewPreparedStatement("SELECT * FROM book WHERE status = ?");
                statement.setString(1, "now");
                ResultSet res = statement.executeQuery();
                if (!isNumber(args[1])) {
                    SendMessage(sender, cmd, "指定されたページは数値ではありません。");
                    return true;
                }
                int count = 0;
                int page = Integer.parseInt(args[1]);
                int startcount = (page - 1) * 10;
                int endcount = page * 10;
                int maxpage = size / 10;
                if (size % 10 != 0)
                    maxpage += 1;
                SendMessage(sender, cmd, "Book List: " + page + "page / " + maxpage + "page");
                SendMessage(sender, cmd, "-------------------------");
                while (res.next()) {
                    if (count < startcount) {
                        count++;
                        continue;
                    }
                    if (count > endcount) {
                        break;
                    }
                    int id = res.getInt("id");
                    String title = res.getString("title");
                    String author = res.getString("author");
                    String author_uuid = res.getString("author_uuid");
                    String pages_str = res.getString("data");
                    int requiredjao = res.getInt("requiredjao");
                    int book_count = res.getInt("count");
                    String history = res.getString("history");
                    String status = res.getString("status");
                    int createdate = res.getInt("createdate");
                    MyMaidBookData bookdata;
                    if (author_uuid.equalsIgnoreCase("null") || author_uuid.equalsIgnoreCase("")) {
                        bookdata = new MyMaidBookData(id, title, author, pages_str, requiredjao, book_count, history, status, createdate);
                    } else {
                        UUID uuid = UUID.fromString(author_uuid);
                        try {
                            bookdata = new MyMaidBookData(id, title, uuid, pages_str, requiredjao, book_count, history, status, createdate);
                        } catch (IllegalArgumentException e) {
                            BugReporter(e);
                            SendMessage(sender, cmd, "データの解析に失敗しました。");
                            return true;
                        }
                    }
                    SendMessage(sender, cmd, "[" + bookdata.getID() + "] " + bookdata.getTitle() + " - " + bookdata.getAuthorName() + "(" + bookdata.getRequiredjao() + "jao)");
                    count++;
                }
                SendMessage(sender, cmd, "-------------------------");
                SendMessage(sender, cmd, startcount + " - " + endcount + " / " + size);
                if (page != maxpage) {
                    SendMessage(sender, cmd, "次のページを見るには「/book list " + (page + 1) + "」を実行します。");
                }
                return true;
            } catch (SQLException | ClassNotFoundException e) {
                // TODO 自動生成された catch ブロック
                BugReporter(e);
                return true;
            }
        }
    }
    SendUsageMessage(sender, cmd);
    return true;
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) Material(org.bukkit.Material) Date(java.util.Date) ResultSet(java.sql.ResultSet) OfflinePlayer(org.bukkit.OfflinePlayer) ArrayList(java.util.ArrayList) List(java.util.List) UUID(java.util.UUID) ItemStack(org.bukkit.inventory.ItemStack) SimpleDateFormat(java.text.SimpleDateFormat) BookMeta(org.bukkit.inventory.meta.BookMeta)

Example 5 with Pointjao

use of com.jaoafa.MyMaid2.Lib.Pointjao in project MyMaid2 by jaoafa.

the class Cmd_Summer method onCommand.

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (args.length >= 1 && args[0].equalsIgnoreCase("help")) {
        SendUsageMessage(sender, cmd);
        return true;
    }
    if (MyMaid2.econ == null) {
        SendMessage(sender, cmd, "このコマンドは現在使用できません。");
        return true;
    }
    try {
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date start = format.parse("2018/08/01 00:00:00");
        Date end = format.parse("2018/08/31 23:59:59");
        if (!isPeriod(start, end)) {
            SendMessage(sender, cmd, "イベントが終了したため、コマンドは使用できません。");
            return true;
        }
    } catch (ParseException e) {
        BugReporter(e);
    }
    if (args.length == 3) {
        // /summer exchange [jP/jSP] jao
        if (args[0].equalsIgnoreCase("exchange")) {
            // jSP: (Summer2017ワールドで使用できるポイント)
            if (args[1].equalsIgnoreCase("jSP")) {
                if (!(sender instanceof Player)) {
                    SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                    return true;
                }
                Player player = (Player) sender;
                int i;
                try {
                    i = Integer.parseInt(args[2]);
                } catch (NumberFormatException e) {
                    SendMessage(sender, cmd, "「交換ポイント」には数値を入力してください。");
                    return true;
                }
                try {
                    Pointjao jaoP = new Pointjao(player);
                    if (!jaoP.has(i)) {
                        SendMessage(sender, cmd, "指定された交換ポイントのjaoPointをあなたは持っていません。");
                        return true;
                    }
                    jaoP.use(i, "jao Survival Pointへのポイント交換");
                } catch (NullPointerException | ClassNotFoundException | SQLException e) {
                    SendMessage(sender, cmd, "jaoポイントデータが取得できませんでした。");
                    BugReporter(e);
                    return true;
                }
                MyMaid2.econ.depositPlayer(player, i);
                SendMessage(sender, cmd, "あなたは現在jao Survival Pointを " + MyMaid2.econ.format(MyMaid2.econ.getBalance(player)) + "持っています。");
                return true;
            // Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "money give " + player.getName() + " " + i);
            } else if (args[1].equalsIgnoreCase("jP")) {
                // jSP -> jP
                if (!(sender instanceof Player)) {
                    SendMessage(sender, cmd, "このコマンドはゲーム内から実行してください。");
                    return true;
                }
                Player player = (Player) sender;
                int i;
                try {
                    i = Integer.parseInt(args[2]);
                } catch (NumberFormatException e) {
                    SendMessage(sender, cmd, "「交換ポイント」には数値を入力してください。");
                    return true;
                }
                if (!MyMaid2.econ.has(player, i)) {
                    SendMessage(sender, cmd, "指定された交換ポイントのjaoSurvivalPointをあなたは持っていません。");
                    return true;
                }
                try {
                    Pointjao jaoP = new Pointjao(player);
                    jaoP.add(i, "jao Survival Pointからのポイント交換");
                } catch (NullPointerException | ClassNotFoundException | SQLException e) {
                    SendMessage(sender, cmd, "jaoポイントデータが取得できませんでした。");
                    BugReporter(e);
                    return true;
                }
                MyMaid2.econ.withdrawPlayer(player, i);
                SendMessage(sender, cmd, "あなたは現在jao Survival Pointを " + MyMaid2.econ.format(MyMaid2.econ.getBalance(player)) + "持っています。");
                return true;
            }
        }
    }
    SendUsageMessage(sender, cmd);
    return true;
}
Also used : Player(org.bukkit.entity.Player) SQLException(java.sql.SQLException) Pointjao(com.jaoafa.MyMaid2.Lib.Pointjao) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Aggregations

Pointjao (com.jaoafa.MyMaid2.Lib.Pointjao)8 SQLException (java.sql.SQLException)8 Player (org.bukkit.entity.Player)7 SimpleDateFormat (java.text.SimpleDateFormat)5 Date (java.util.Date)5 PreparedStatement (java.sql.PreparedStatement)4 ArrayList (java.util.ArrayList)4 UUID (java.util.UUID)4 OfflinePlayer (org.bukkit.OfflinePlayer)4 ItemStack (org.bukkit.inventory.ItemStack)4 ResultSet (java.sql.ResultSet)3 ParseException (java.text.ParseException)3 AchievementType (com.jaoafa.jaoSuperAchievement.jaoAchievement.AchievementType)2 MessageDigest (java.security.MessageDigest)2 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)2 NBTTagCompound (net.minecraft.server.v1_12_R1.NBTTagCompound)2 Location (org.bukkit.Location)2 Block (org.bukkit.block.Block)2 CraftItemStack (org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack)2 EventHandler (org.bukkit.event.EventHandler)2