Вопрос Java сохранить обьект в файл с модификатором переменой static.

Версия Minecraft
1.20.X

Ermak

Пользователь
Сообщения
36
Пока писал плагин сталкнулся с тем что обьект инвенторя не может быть сохранен не в статик, если я не ставлю статик то оно просто не сохраняет это, я не очень хочу переписывать, так что хотелось бы чтобы мне помогли, если что я использую стандартные инструменты серилизаций java.
 
Что-то ничего не понял, можешь подробнее написать, код отправить
Лол, нормально же написал, смотри, я создаю матрицу, в сундуке, после пытаюсь сохранить это в обьекте, с выгрузкой на диск по нику, но если я пытаюсь сохранить переменую то она не сохраняеться, однако из внутри обьекта добавить в переменую модификатор статик, то оно добавляет это в обьект, но проблема в том что если я пытаюсь сохранить со статиком на диск оно не сохраняет данные в переменой.
Объединено

Что-то ничего не понял, можешь подробнее написать, код отправить
Ой, не сохранить переменую а загрузить туда данные.
 
Давай код полностью, это никакие не X-Files. Проблема не в статике как таковом, а в том, что в большинстве случаев его пихают везде и получают потом проблемы на ровном месте.
 
Давай код полностью, это никакие не X-Files. Проблема не в статике как таковом, а в том, что в большинстве случаев его пихают везде и получают потом проблемы на ровном месте.
Обьект инвентаря.
Код:
package ermak;

import java.io.Serializable;

import org.bukkit.inventory.Inventory;

public class Inventorys implements Serializable
{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    private static Inventory inventoryss;

    
    public void invset(Inventory s) {
    
        inventoryss = s;
        
    }
    public Inventory invget() {
        return inventoryss;
        
    }
    }
Эвенты.
Код:
package ermak;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryInteractEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin;

import de.tr7zw.nbtapi.NBTItem;

import static ermak.main.pl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import static ermak.main.invs;
public class Events implements Listener {
    

      
      
      
        
        @EventHandler
        public void INV(InventoryClickEvent e) {
    
                 try {
                
                
                
                 NBTItem itemnbt = new NBTItem(e.getCurrentItem());
                
                 String out = itemnbt.getString("1");
                
                if(out.equals("NULLPALL")) {
                    e.setCancelled(true);
                    
            }
                 }catch(NullPointerException h) {
                    
                 }
        }
        
        @EventHandler
        public void Onout(PlayerQuitEvent event) throws IOException {
            Inventorys inv = invs.get(event.getPlayer().getName());
            FileOutputStream save = new FileOutputStream("talismans/"+event.getPlayer().getName());
            ObjectOutputStream saveobj = new ObjectOutputStream(save);
            saveobj.writeObject(inv);
            saveobj.close();
        }
        @EventHandler
        public void onLogin(PlayerLoginEvent event) throws IOException, ClassNotFoundException {
            File playerfile = new File("talismans/" + event.getPlayer().getName());
            Player player = event.getPlayer();
            if(playerfile.exists()) {
                
                  FileInputStream loadst = new FileInputStream("talismans/"+player.getName());
                   ObjectInputStream loadstobj = new ObjectInputStream(loadst);

                   Inventorys inv = (Inventorys) loadstobj.readObject();
                   invs.put(player.getName(),inv);
                
                
            }else {
                
                generateconfigs.gen(player);
            }
                
                
            }
            
        }
Команда с выбором.
Код:
package ermak;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Chest;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import de.tr7zw.nbtapi.NBTItem;
import static ermak.main.*;
import static ermak.main.pl;
public class Talisman implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender com, Command arg1, String arg2, String[] arg3) {
        Player player = Bukkit.getPlayer(com.getName());
        Inventorys inv = invs.get(player.getName());
        Inventory temp = inv.invget();
        player.openInventory(temp);
        
        return true;
        


}
}
Главный класс.
Код:
package ermak;

import static ermak.main.invs;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin {
    static HashMap<String, Inventorys> invs = new HashMap<>();

    static JavaPlugin pl;
    
    public void addall() throws IOException, ClassNotFoundException {
        for(Player player : Bukkit.getOnlinePlayers())  {
            File playerfile = new File("talismans/" + player.getName());
        
            if(playerfile.exists()) {
                
                  FileInputStream loadst = new FileInputStream("talismans/"+player.getName());
                   ObjectInputStream loadstobj = new ObjectInputStream(loadst);

                   Inventorys inv = (Inventorys) loadstobj.readObject();
                   invs.put(player.getName(),inv);
                
                
            }else {
                
                generateconfigs.gen(player);
            }
            }
        
    }
    @Override
    public void onEnable() {
        
        createtali();
        
        pl = this;
        try {
            addall();
        } catch (IOException e) {
            
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        this.getServer().getPluginManager().registerEvents(new Events(), this);
        this.getServer().getPluginCommand("zemloroy").setExecutor(new Zemleroy());
    this.getServer().getPluginCommand("talisman").setExecutor(new Talisman());
}
    public void createtali() {
           File theDir = new File("talismans");
           if (!theDir.exists()){
               theDir.mkdirs();
           }
    }
}
Создание файлов.
Код:
package ermak;

import static ermak.main.invs;
import static ermak.main.pl;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import de.tr7zw.nbtapi.NBTItem;

public class generateconfigs {
public static void gen(Player player) throws IOException {
    Inventorys inv = new Inventorys();
      
    Inventory temp = pl.getServer().createInventory( player, 54, "Талисманы");
    ItemStack nulls = new ItemStack(Material.GLASS);
    ItemMeta nulls1 = nulls.getItemMeta();
nulls1.setDisplayName(" ");
    nulls.setItemMeta(nulls1);
    NBTItem itemnbt = new NBTItem(nulls);
    itemnbt.setString("1", "NULLPALL");
    itemnbt.applyNBT(nulls);
    for(int x = 0 ; x <= 53; x++) {
        temp.setItem(x, nulls);
    }
    temp.clear(13);
    temp.clear(22);
    temp.clear(31);
    temp.clear(40);
    temp.clear(27);
    ItemStack signtab = new ItemStack(Material.ANVIL);
     NBTItem signnbt = new NBTItem(signtab);
     signnbt.setString("1", "NULLPALL");
     signnbt.applyNBT(signtab);
     ItemMeta signmeta = signtab.getItemMeta();
     signmeta.setDisplayName("§cИнформация");
     List<String> strings = new ArrayList<String>();
    strings.add("§fВы можете поставить 4 артефакта в свободные слоты");
    strings.add(" ");
    strings.add("§dНельзя использовать идентичные артефакты");
    signmeta.setLore(strings);
    signtab.setItemMeta(signmeta);
    temp.setItem(27, signtab);
    inv.invset(temp);
    FileOutputStream save = new FileOutputStream("talismans/"+player.getName());
    ObjectOutputStream saveobj = new ObjectOutputStream(save);
    saveobj.writeObject(inv);
    saveobj.close();
  
  
    invs.put(player.getName(),inv);
}
}
 
Назад
Сверху Снизу