개인 자료란 (JE)

  서버 커뮤니티

Profile HL812 대표칭호 없음
Profile

질문하기 플러그인

데이터 저장하는법 알려주세요

2021.12.25 조회 수 904 추천 수 0
이해도 초보자 
게임버전 (JE) 관련없음 
게임버전 (BE) 관련없음 

플러그인을끼고 reload나 다시 서버를 키면 변수가 초기화가 되는데(총알 갯수가 초기화되는 등)이걸 초기화가 되지 않고 그대로 유지 한 채로 reload나 다시 서버를 어떻게 키나요?


방법 세세하게 알려주시면 감사합니다

11개의 댓글

A_bins
2021.12.25

로컬 파일이나 외부 SQL등을 통하여 데이터를 저장 하시는 방식을 배우셔야 합니다

허두
2021.12.26

onDisable에서 config.yml에 필요한 값들을 저장하고, onEnable에서 해당 파일을 읽는 방식을 많이들 사용하십니다!

HL812
2021.12.26
@허두

코드를 보여주실 수 있나요?

허두
2021.12.27
@HL812

이거 한번 참고해보세용

https://bukkit.fandom.com/wiki/Configuration_API_Reference

HL812
2021.12.28
@허두

죄송한데 참고해서 해보았는데도 안됍니다 ㅠㅠ onEnable 와 onDisable 에 뭐를 넣어야 하는지 아직도 모르겠습니다

허두
2021.12.28
@HL812

한마포 개발자 강좌란에 좋은 글이 있네용!

 

https://www.koreaminecraft.net/index.php?mid=dev_lecture&category=1119016&document_srl=1592946

https://www.koreaminecraft.net/index.php?mid=dev_lecture&category=1119016&document_srl=1618156

 

https://www.koreaminecraft.net/index.php?mid=dev_lecture&category=1119016&document_srl=2154053

 

한번 확인해보시고, 그래도 어려우시다면 현재 코드와 함께 다시 답글 남겨주세요 :)

HL812
2021.12.28
@허두

혹시hashmap이나 변수들을 다른 class에서도 사용할 수 있게 어떻게 하나요

 

허두
2021.12.28
@HL812

public static HashMap<> 같은 형식으로 하시면 됩니다!

HL812
2021.12.28
@허두
package gunplugin.gunplugin;

import java.io.*;
import java.util.UUID;
import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import static gunplugin.gunplugin.GunPluginRifle.Rifleammom;

public final class GunPlugin extends JavaPlugin {
    public static Inventory gunStore = Bukkit.createInventory((InventoryHolder)null, 27, "총 모음");
    private final File f = new File(getDataFolder(), "/data.txt");
    ConsoleCommandSender consol = Bukkit.getConsoleSender();

    public GunPlugin() {
    }

    public void onEnable() {

        this.getConfig().options().copyDefaults(true);
        Bukkit.getPluginManager().registerEvents(new GunPluginInventoryClick(), this);
        Bukkit.getPluginManager().registerEvents(new GunPluginRifle(this), this);
        Bukkit.getPluginManager().registerEvents(new GunPluginPistor(this), this);
        Bukkit.getPluginManager().registerEvents(new GunPluginSniper(this), this);
        Bukkit.getPluginManager().registerEvents(new GunPluginMachine(this), this);
        this.getCommand("gun").setExecutor(new GunPluginCommand());

        Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("GunPlugin");
        Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, () -> {
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.setNoDamageTicks(0);
            }
        }, 0, 1);
        makeFile(f);
        fileToMap(f, Rifleammom);
        mapToFile(f, Rifleammom);
    }


    public void onDisable() {
        mapToFile(f, Rifleammom);
    }

    @SuppressWarnings("deprecation")
    public void mapToFile(File f, HashMap<UUID, Integer> map) {
        Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {

            @Override
            public void run() {
                try {
                    consol.sendMessage(ChatColor.GREEN + "데이터를 저장 했습니다");
                    FileWriter writer = new FileWriter(f, false);
                    for (UUID uuid : map.keySet()) {
                        writer.write(uuid.toString() + "|" + map.get(uuid) + "\n");
                    }
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }, 20 * 30, 20 * 30);

    }

    public void fileToMap(File f, HashMap<UUID, Integer> map) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(f));
            String fileLine = null;
            while ((fileLine = reader.readLine()) != null) {

                UUID uuid = UUID.fromString(fileLine.split("\\|")[0]);
                String str = fileLine.split("\\|")[1];

                map.put(uuid, Integer.parseInt(str));
            }
        } catch (FileNotFoundException e3) {
            e3.printStackTrace();
        } catch (IOException e4) {
            e4.printStackTrace();
        }
    }

    public void makeFile(File f) {
        if (!f.exists() || !f.isFile()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
public class GunPluginRifle implements Listener {
    GunPlugin plugin;
    public static HashMap<UUID, Integer> Rifleammom = new HashMap<UUID, Integer>();
}
HL812
2021.12.28
@HL812

이렇게 코드가 있을때 Rifleammo라는 변수를 data에 저장하려면 어떻게 해야하나요

허두
2021.12.28
@HL812

여기 한번 참고해보세용

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lsj30224&logNo=220586099250

HashMap은 ObjectOutputStream과 ObjectInputStream으로 쉽게 쓰고 읽을 수 있는것 같네요