개인 자료란 (JE)

  서버 커뮤니티

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 130,266명 ( +6명 )

※ 장기간 미활동 회원 제외

Profile HL812 대표칭호 없음
Profile

커뮤니티 개발자란 개발 질문 Java

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

29 일 전 조회 수 46 추천 수 0
분야 플러그인 
API 버킷 

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


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


11개의 댓글

허두
29 일 전

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

HL812
28 일 전
@허두

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

허두
28 일 전
@HL812

이거 한번 참고해보세용

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

HL812
26 일 전
@허두

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

허두
26 일 전
@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
26 일 전
@허두

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

 

허두
26 일 전
@HL812

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

HL812
26 일 전
@허두
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
26 일 전
@HL812

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

허두
26 일 전
@HL812

여기 한번 참고해보세용

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

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

A_bins
29 일 전

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

뉴스 및 컨텐츠
https://www.koreaminecraft.net/files/thumbnails/428/070/003/262x150.crop.jpg?20220123140328

당신에게 추천하는 10가지의 정글 시드들 1

teara

2022-01-23

0

https://www.koreaminecraft.net/files/thumbnails/935/065/003/262x150.crop.jpg?20220121124720

업데이트

베드락 에디션 베타 1.18.10.28 업데이트 3

허두

2022-01-21

0

https://www.koreaminecraft.net/files/thumbnails/631/064/003/262x150.crop.jpg?20220120191819

업데이트

마인크래프트 1.18.2 스냅샷 22w03a 업데이트 4

마리오군

2022-01-20

1

https://www.koreaminecraft.net/files/thumbnails/166/062/003/262x150.crop.jpg?20220119202938

레딧

번역) 크리퍼 그림을 만들어봤어 4

teara

2022-01-19

1