1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите FluidTypeEmpty change

Тема в разделе "Разработка плагинов для новичков", создана пользователем NightDay_, 13 фев 2022.

  1. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Форумчане привет вот такая проблема у меня есть терминал который по клику открывает менюшку но если выключить а затем включить сервер то FluidTypeEmpty меняется помогите с проблемой

    FluidTypeEmpty до ростарта
    Код:
    FluidTypeEmpty@1bf0f6f6}:
                terminal: km_food
    FluidTypeEmpty после рестрарта
    Код:
    FluidTypeEmpty@710b30ef}:
                terminal: km_food
    

    Код:
    f (getInstance().tdata.getString("data." + e.getClickedBlock() + ".terminal")
                        .equalsIgnoreCase("km_pickaxe")) {
                    mining = Bukkit.createInventory(null, 9 * 3, ChatColor.DARK_GREEN + "Кирки");
    
                    ItemStack wooden = new ItemStack(WOODEN_PICKAXE);
                    ItemMeta woodenm = wooden.getItemMeta();
                    woodenm.setDisplayName(ChatColor.GREEN + "Деревянная кирка (250)");
                    wooden.setItemMeta(woodenm);
                    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
                    wooden.addEnchantment(Enchantment.MENDING, 1);
                    wooden.addEnchantment(Enchantment.DIG_SPEED, 3);
    
                    mining.setItem(10, wooden);
    
                    ItemStack stone = new ItemStack(STONE_PICKAXE);
                    ItemMeta stonem = stone.getItemMeta();
                    stonem.setDisplayName(ChatColor.GREEN + "Каменная кирка (800)");
                    stone.setItemMeta(stonem);
                    stone.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 2);
                    stone.addEnchantment(Enchantment.DIG_SPEED, 2);
    
                    mining.setItem(11, stone);
    
                    ItemStack golden = new ItemStack(GOLDEN_PICKAXE);
                    ItemMeta goldenm = golden.getItemMeta();
                    goldenm.setDisplayName(ChatColor.GREEN + "Золотая кирка (2.500)");
                    golden.setItemMeta(goldenm);
                    golden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 2);
                    golden.addEnchantment(Enchantment.DIG_SPEED, 3);
    
                    mining.setItem(12, golden);
    
                    ItemStack iron = new ItemStack(IRON_PICKAXE);
                    ItemMeta ironm = iron.getItemMeta();
                    ironm.setDisplayName(ChatColor.GREEN + "Железная кирка (6.400)");
                    iron.setItemMeta(ironm);
                    iron.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 2);
                    iron.addEnchantment(Enchantment.DIG_SPEED, 4);
    
                    mining.setItem(13, iron);
    
                    ItemStack diamond = new ItemStack(DIAMOND_PICKAXE);
                    ItemMeta diamondm = diamond.getItemMeta();
                    diamondm.setDisplayName(ChatColor.GREEN + "Алмазная кирка (20.000)");
                    diamond.setItemMeta(diamondm);
                    diamond.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
                    diamond.addEnchantment(Enchantment.DIG_SPEED, 5);
    
                    mining.setItem(14, diamond);
    
                    ItemStack netherite = new ItemStack(NETHERITE_PICKAXE);
                    ItemMeta netheritem = netherite.getItemMeta();
                    netheritem.setDisplayName(ChatColor.GREEN + "Незеритовая кирка (80.000)");
                    netherite.setItemMeta(netheritem);
                    netherite.addEnchantment(Enchantment.MENDING, 1);
                    netherite.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
                    netherite.addEnchantment(Enchantment.DIG_SPEED, 5);
    
                    mining.setItem(15, netherite);
    
                    ItemStack slot = new ItemStack(Material.GREEN_STAINED_GLASS_PANE);
                    ItemMeta slotmeta = slot.getItemMeta();
                    slotmeta.setDisplayName(ChatColor.MAGIC + "/#/A'?3/2");
                    slot.setItemMeta(slotmeta);
    
                    for (int i = 0; i < 9 * 3; i++) {
                        if (i == 10 || i == 11 || i == 12 || i == 13 || i == 14 || i == 15)
                            continue;
                        mining.setItem(i, slot);
                    }
    
                    e.getPlayer().openInventory(mining);
    if (e.getView().getTitle().equalsIgnoreCase(ChatColor.DARK_GREEN + "Кирки")) {
    Player p = (Player) e.getWhoClicked();
    e.setCancelled(true);
    if (e.getCurrentItem() == null)
    return;
    if (e.getCurrentItem().getItemMeta() == null)
    return;
    if (e.getCurrentItem().getItemMeta().getDisplayName() == null)
    return;
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Деревянная кирка (250)")) {
    if (econ.getBalance(p.getName()) >= 250) {
    ItemStack wooden = new ItemStack(WOODEN_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Деревянная кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
    wooden.addEnchantment(Enchantment.MENDING, 1);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 3);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Деревянную кирку");
    econ.withdrawPlayer(p.getName(), 250);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Каменная кирка (800)")) {
    if (econ.getBalance(p.getName()) >= 800) {
    ItemStack wooden = new ItemStack(STONE_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Каменная кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 2);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Каменную кирку");
    econ.withdrawPlayer(p.getName(), 800);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Золотая кирка (2.500)")) {
    if (econ.getBalance(p.getName()) >= 2500) {
    ItemStack wooden = new ItemStack(GOLDEN_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Золотая кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 3);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Золотую кирку");
    econ.withdrawPlayer(p.getName(), 2500);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Железная кирка (6.400)")) {
    if (econ.getBalance(p.getName()) >= 6400) {
    ItemStack wooden = new ItemStack(IRON_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Железная кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 2);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 4);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Железную кирку");
    econ.withdrawPlayer(p.getName(), 6400);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Алмазная кирка (20.000)")) {
    if (econ.getBalance(p.getName()) >= 20000) {
    ItemStack wooden = new ItemStack(DIAMOND_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Алмазная кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 5);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Алмазную кирку");
    econ.withdrawPlayer(p.getName(), 20000);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    if (e.getCurrentItem().getItemMeta().getDisplayName()
    .equalsIgnoreCase(ChatColor.GREEN + "Незеритовая кирка (80.000)")) {
    if (econ.getBalance(p.getName()) >= 80000) {
    ItemStack wooden = new ItemStack(NETHERITE_PICKAXE);
    ItemMeta woodenm = wooden.getItemMeta();
    woodenm.setDisplayName(ChatColor.GREEN + "Незеритовая кирка");
    wooden.setItemMeta(woodenm);
    wooden.addEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 3);
    wooden.addEnchantment(Enchantment.MENDING, 1);
    wooden.addEnchantment(Enchantment.DIG_SPEED, 5);
    p.getInventory().addItem(wooden);
    p.sendMessage(ChatColor.GREEN + "Вы купили " + ChatColor.GREEN + "Незеритоваю кирку");
    econ.withdrawPlayer(p.getName(), 80000);
    return;
    } else {
    p.sendMessage(ChatColor.RED + "У вас не хватает Bit'ов");
    return;
    }
    }
    }
     
  2. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
  3. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Ну всё правильно, при рестарте старый экземпляр FluidTypeEmpty удаляется и создаётся новый. Если нужно что бы какие-то параметры сохранялись, сохраняй их и загружай когда надо
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Как связан твой код с FluidTypeEmpty? Не вижу нигде в коде упоминания FluidType.

    И выше правильно заметили, что при перезапуске сервера все объекты создаются заново. Естественно, что и адреса в памяти у них тоже будут другие.

    Но никакой проблемы в этом нет абсолютно
     
  5. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    У меня в fluid идёт информация какой терминал стоит на там или ином блоке (еда, оружие, броня)
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тебе не нужен FluidType, это только для жидкостей.
     
  7. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    А как тогда:creeper:
     
    Последнее редактирование: 14 фев 2022
  8. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я не знаю, что такое терминал.
    Расскажи, что ты хочешь получить в конечном итоге и мы подскажем, как это реализовать
     
  9. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Короче
    1. Ты пишешь команду /setterminal название(еда,оружие)
    2. Кликаешь по блоку и в него записывается какой он терминал
    3. При следующем клике по этому блоку открывается менюшка где можно что то купить
     
  10. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Он у меня в event.getclickedblock был
     
  11. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Окей. На какой версии сервер?
     
  12. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    1.17.1
     
  13. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Почитай:
    https://www.spigotmc.org/threads/a-guide-to-1-14-persistentdataholder-api.371200/

    Единственное - по-моему, этот контейнер есть исключительно у тайл блоков. В качестве альтернативы можно хранить в данных чанков.

    Помимо этого, данные о блоках можно хранить самостоятельно в базе данных.
    В yaml-конфиге тоже можно, но он не предназначен для хранения большого кол-ва данных. Может начать тормозить
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Получи локацию и тип блока если надо и запиши куда то в конфиг, потом проверяй.
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    PersistentDataContainer есть у чанков ентити и айтемстаков, на счет тайлов хз.
     
  16. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Я так и хотел сделать
     
  17. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Да но ведь тогда нужно что бы у каждого терминала должно быть своё имя
    А если я хочу сделать 2 одинаковых терминала то как
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну и добавь в конфиг какое то имя, если тебе нужно как то группировать. Ну и там по локации получишь свою запись обратно.
     
  19. Автор темы
    NightDay_

    NightDay_ Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    NightDay_
    Всм как мне это сделать
     

Поделиться этой страницей