개인 자료란 (JE)

  서버 커뮤니티

Profile 눈샘 대표칭호 없음

Nun_saem 1a94a50033f242cea79056282d346f86

Profile

질문하기 Java

플러그인 제작중 계속된 오류발생 관련 질문 ㅠㅠ

2024.06.10 조회 수 88 추천 수 0
이해도 입문자 
게임버전 (JE) 관련없음 
게임버전 (BE) 관련없음 

latest.log 

계속 명령어를 쓸 때마다 오류가 나더라고요 ㅠㅠ 챗지피티한테 물어보니  Integer 타입 변수를 Long 타입으로 강제 변환하려 했으나 실패한 것이 원인입니다. 라고 나오는데, 아무리봐도 그럴만한 오류가 날 위치가 안보여서 질문드립니다.

만들던 코드도 올릴게요.

package org.nu.nustock;

import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Villager;
import org.bukkit.plugin.java.JavaPlugin;
import org.yaml.snakeyaml.Yaml;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public final class NuStock extends JavaPlugin {


static List<Map<String,Long>> golem;
static List<Map<String,Long>> pigman;
static List<Map<String,Long>> ender;
static List<Map<String,Long>> villager;
static List<Map<String,Long>> witch;
static List<Map<String,Long>> parrot;
static List<Map<String,Long>> allay;
static List<Map<String,Long>> saedam;
static List<Map<String,Long>> pig;
static List<Map<String,Long>> creeper;

    @Override
    public void onEnable() {
        Map<String,List<Map<String,Long>>> Mapstock;
        File config = new File(getDataFolder(),"config.yml");
        File StockFile = new File(getDataFolder(), "Stock.yml");
        // Plugin startup logic
        if (!StockFile.exists()) {
            saveResource("Stock.yml", false);
        }
        try (FileInputStream fis = new FileInputStream(StockFile)) {
            Yaml yaml = new Yaml();
            Mapstock = yaml.load(fis);
            golem = Mapstock.get("golem");
            pigman = Mapstock.get("pigman");
            ender = Mapstock.get("ender");
            villager = Mapstock.get("villager");
            witch = Mapstock.get("witch");
            parrot = Mapstock.get("parrot");
            allay = Mapstock.get("allay");
            saedam = Mapstock.get("saedam");
            pig = Mapstock.get("pig");
            creeper = Mapstock.get("creeper");

        } catch (IOException e) {
            e.printStackTrace();
        }
        config = new File(getDataFolder(), "config.yml");
        if (!StockFile.exists()) {
            saveResource("config.yml", false);
        }
        getCommand("테스트").setExecutor(new commandim());
    }
    @Override
    public void onDisable() {
        // Plugin shutdown logic
        Map<String,List<Map<String,Long>>> Mapstock = new HashMap<>();
        Mapstock.put("golem",golem);
        Mapstock.put("pigman",pigman);
        Mapstock.put("ender",ender);
        Mapstock.put("villager",villager);
        Mapstock.put("witch",witch);
        Mapstock.put("parrot",parrot);
        Mapstock.put("allay",allay);
        Mapstock.put("saedam",saedam);
        Mapstock.put("pig",pig);
        Mapstock.put("creeper",creeper);
        File StockFile = new File(getDataFolder(), "Stock.yml");
        try (FileOutputStream fos = new FileOutputStream(StockFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            Yaml yaml = new Yaml();
            yaml.dump(Mapstock, osw);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package org.nu.nustock;


import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class commandim extends StockGui implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player player = (Player) sender;
        MakeGui(player);
        return true;
    }
}

package org.nu.nustock;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

import java.util.List;
import java.util.Map;

public class StockGui {
    private Inventory inv;

    public void MakeGui(Player player) {
        inv = Bukkit.createInventory(null, 36, "주식 리스트");
        String uuid = player.getUniqueId().toString();
        Golem(player);
        pigman(player);
        ender(player);
        villager(player);
        witch(player);
        parrot(player);
        allay(player);
        saedam(player);
        pig(player);
        creeper(player);
        player.openInventory(inv);
    }

    private void Golem(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.golem) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.golem) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.golem) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.IRON_BARS, 1, ChatColor.WHITE + "골렘 제철","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(11,item);
    }

    private void pigman(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.pigman) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.pigman) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.pigman) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.ROTTEN_FLESH, 1, ChatColor.WHITE + "피그맨 전자","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(12,item);
    }

    private void ender(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.ender) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.ender) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.ender) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.ENDER_EYE, 1, ChatColor.WHITE + "엔더 건설","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(13,item);
    }
    private void villager(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.villager) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.villager) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.villager) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.EMERALD, 1, ChatColor.WHITE + "주민 유통","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(14,item);
    }
    private void witch(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.witch) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.witch) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.witch) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.EXPERIENCE_BOTTLE, 1, ChatColor.WHITE + "마녀 제약","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(15,item);
    }
    private void parrot(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.parrot) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.parrot) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.parrot) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.FEATHER, 1, ChatColor.WHITE + "앵무 엔터","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(20,item);
    }
    private void allay(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.allay) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.allay) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.allay) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.CHEST_MINECART, 1, ChatColor.WHITE + "알레이 택배","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(21,item);
    }
    private void saedam(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.saedam) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.saedam) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.saedam) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.COOKIE, 1, ChatColor.WHITE + "새담 게임즈","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(22,item);
    }
    private void pig(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.pig) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.pig) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.pig) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.COOKED_PORKCHOP, 1, ChatColor.WHITE + "돼지 식품","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(23,item);
    }
    private void creeper(Player player) {
        Long price = 0L;
        Long have = 0L;
        Long amount = 0L;
        for (Map<String, Long> map : NuStock.creeper) {
            if (map.containsKey("price")) {
                price = Long.parseLong(map.get("price").toString());
            }
        }
        for (Map<String, Long> map : NuStock.creeper) {
            if (map.containsKey("amount")) {
                amount = Long.parseLong(map.get("amount").toString());
            }
        }
        for (Map<String, Long> map : NuStock.creeper) {
            if (map.containsKey(player.getName())) {
                have = Long.parseLong(map.get(player.getName()).toString());
            }
        }
        ItemStack item = Util.buildItem(Material.GUNPOWDER, 1, ChatColor.WHITE + "크리퍼 병기","남은 수량 : " + amount,"현재 주가 : " +
                        price, "소유중인 주 : " + have + " 주", "해당 주식을 구매 하려면 좌클릭하세요."
                , "해당 주식을 판매 하려면 우클릭하세요.", "판매 수수료 : 10%");
        inv.setItem(24,item);
    }
}
package org.nu.nustock;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.text.NumberFormat;
import java.util.Arrays;

public class Util {
    public static ItemStack buildItem(Material type, int amount, String displayName, String... lore) {
        ItemStack stack = new ItemStack(type, amount);
        ItemMeta meta = stack.getItemMeta();
        meta.setDisplayName(displayName);
        meta.setLore(Arrays.asList(lore));
        stack.setItemMeta(meta);
        return stack;
    }
    public static String Numberset(long num) {
        NumberFormat numberFormat = NumberFormat.getInstance();
        String formattedNumber = numberFormat.format(num);
        return formattedNumber;
    }
}



4개의 댓글

qsef1256
2024.06.10

빌드가 완료된 후에 서버를 켜셨나요? 한번 재시도 해보세요.

눈샘
2024.06.10
@qsef1256

저 코드 대로 빌드한 다음에 서버 켰을때 저 오류 나왔습니다 ㅠㅠㅠㅠㅠ

노을넴
2024.06.10

로그 첨부를 제대로 한 게 맞나욘?

눈샘
2024.06.10
@노을넴

네 맞아요. 근데 해결 했습니다! 귀찮게 해서 죄송합니다 ㅠㅠ yml을 불러올 때 숫자를 Integer로 불러오는게 문제였더라고요. 다른 변수로 불러오면 Long로 변환하는 내용 추가해서 해결했어요!

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3