Cast from String to ItemMeta

Discussion in 'Plugin Development' started by LeonLaiTime, Jan 21, 2019.

Thread Status:
Not open for further replies.
  1. Offline

    LeonLaiTime

    I upload the ItemMeta to mysql
    When I download the ItemMeta that was a String
    Any way to Cast String to ItemMeta?
    Please help me

    Code:
    package cc.leon.bukkit.WebShop;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Map;
    import java.util.Set;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemFlag;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.util.io.BukkitObjectInputStream;
    
    import com.earth2me.essentials.Settings;
    import com.earth2me.essentials.api.Economy;
    import com.earth2me.essentials.api.UserDoesNotExistException;
    
    public class main extends JavaPlugin{
    
        Connection conn = null;
       
        public void onEnable() {
            getLogger().info("The Webshop Plugin Is Enable");
        }
        public void onDisable() {
            getLogger().info("The Webshop Plugin Is Disable");
        }
    
        public boolean onCommand(CommandSender sender,Command cmd,String cmdlable,String[] args) {
           
            Player player = (Player) sender;
            String pname = player.getName();
           
            if(cmdlable.equals("webshop")) {
                PlayerInventory inventory = player.getInventory();
                if(args.length == 0) {
                    player.sendMessage(ChatColor.AQUA + "玩家 " + pname + " 您好 請參閱網路商城插件教學  !  !");
                   
                }else if(args.length > 0 && args.length == 3 && args[0].equalsIgnoreCase("sell")){
                       
                    String itemprice = args[1], title = args[2];//宣告變數物品價錢, 商品標題
                    player.sendMessage(ChatColor.AQUA + "正在將您的商品上傳到網路商城...");
                    ItemStack item = inventory.getItemInMainHand();//宣告item為玩家手上物品
                    Material itemtype = item.getType();//宣告itemtype 為物品類別
                    ItemMeta itemmeta = item.getItemMeta();//宣告itemmeta 為物品資訊
                    int amount = item.getAmount();//宣告amount 為物品數量
                    String sqlmessage = uploadsql(pname, title, itemtype, itemmeta, amount, itemprice);//上傳物品至資料庫
                   
                    if(sqlmessage == "ok") {
                        player.sendMessage(ChatColor.GREEN + "已經成功將您的商品上傳 ! !");
                    }else {   
                        player.sendMessage(ChatColor.RED + "資料庫錯誤請聯繫管理員 ! !");
                    }
                   
                }else if(args.length > 0 && args.length == 3 && args[0].equalsIgnoreCase("buy")){
                    String itemid = args[1];
                    String[] sqlmessage = downloadsql(itemid);
                    Material itemtype = Material.getMaterial(sqlmessage[2]);
                    int itemamount = Integer.parseInt(sqlmessage[4]);
                    ItemStack item = new ItemStack(itemtype, itemamount);
                    ItemMeta itemmeta = item.getItemMeta();
                   
                    itemmeta.setDisplayName(sqlmessage[2]);
                    item.setItemMeta(itemmeta);
                    inventory.addItem(item);
                    player.sendMessage(sqlmessage[0] + sqlmessage[1] + sqlmessage[2] + sqlmessage[3] + sqlmessage[4] + sqlmessage[5]);
                   
                }else if(args.length > 0 && args.length == 1 && args[0].equalsIgnoreCase("test")){
                    ItemStack item = inventory.getItemInMainHand();
                    ItemMeta itemmeta = item.getItemMeta();
                    String stackstring = item.toString();
                    player.sendMessage("" + item);
                }else {
                    player.sendMessage(ChatColor.RED + "【WebShop】指令使用錯誤 請使用/webshop參閱指令教學! !");   
                }
               
        }
           
            return false;
        }
       
        public double getBalance(String pname) {
            try {
                return Economy.getMoneyExact(pname).doubleValue();
            } catch (UserDoesNotExistException | NullPointerException e) {
                return 0;
            }
        }
       
        public String uploadsql(String player, String title, Material itemtype, ItemMeta itemmeta, int amount, String price) {
           
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String datasource = "jdbc:mysql://localhost/minecraft_database?user=minecraft&password=TmXBYLUCd0PHiEWH&useSSL=false";
                conn = DriverManager.getConnection(datasource);
                Statement st = conn.createStatement();
                st.execute("INSERT INTO `webshop`(`player`, `title`, `type`, `meta`, `amount`, `price`) VALUES ('" + player + "', '"+ title +"' ,'" + itemtype + "' ,'" + itemmeta +"' ,'" + amount +"' , '" + price + "');");
            }catch(Exception e)
            {
                return e.getMessage();
            }
           
            return "ok";
        }
       
        public String[] downloadsql(String itemid) {
           
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String datasource = "jdbc:mysql://localhost/minecraft_database?user=minecraft&password=TmXBYLUCd0PHiEWH&useSSL=false";
                conn = DriverManager.getConnection(datasource);
                Statement st = conn.createStatement();
                st.execute("SELECT * FROM `webshop` WHERE `id` = " + Integer.parseInt(itemid) + ";");
                ResultSet rs = st.getResultSet();
                String[] arr = new String[6];
                while(rs.next()) {
                arr[0] = rs.getString("player");
                arr[1] = rs.getString("title");
                arr[2] = rs.getString("type");
                arr[3] = rs.getString("meta");
                arr[4] = rs.getString("amount");
                arr[5] = rs.getString("price");
                }
                return arr;
            }catch(Exception e)
            {
                String[] arr = new String[1];
                arr[0] = "notgood";
                return arr;
            }
        }
       
    }
    
     
  2. Offline

    timtower Administrator Administrator Moderator

    @LeonLaiTime You need to serialize and deserialize the meta instead of just sending it.
     
  3. Offline

    LeonLaiTime

    So I need to do like
    Code:
    itemmeta.getDisplayName();
                    itemmeta.getEnchants();
     
  4. Offline

    timtower Administrator Administrator Moderator

  5. Offline

    LeonLaiTime

    Code:
    ItemStack item = inventory.getItemInMainHand();
                    List<ItemStack> items = new ArrayList<ItemStack>();
                    items.add(item);
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    try {
                        BukkitObjectOutputStream boos = new BukkitObjectOutputStream(baos);
                        boos.writeObject(items);
                        boos.close();
                    } catch (IOException ioexception) {
                        ioexception.printStackTrace();
                    }
                 
                 
                    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                    Object backFromTheDead = null;
                    try {
                        BukkitObjectInputStream bois = new BukkitObjectInputStream(bais);
                        backFromTheDead = bois.readObject();
                        bois.close();
                    } catch (IOException ioexception) {
                        ioexception.printStackTrace();
                    } catch (ClassNotFoundException classNotFoundException) {
                        classNotFoundException.printStackTrace();
                    }
                    List<ItemStack> returnedItemList = (List<ItemStack>) backFromTheDead;
                    player.sendMessage("" + returnedItemList);
    I need to send the boos to sql
    and download it with returnedItemList and insert to item?
     
  6. Offline

    timtower Administrator Administrator Moderator

  7. Offline

    LeonLaiTime

    Oh god I solved the problem
    Thank you verymuch
     
Thread Status:
Not open for further replies.

Share This Page