Вопрос Помогите пж по созданию плагинов в майнкрафт (IDE Bukkit Paper, java)

Версия Minecraft
1.16.X

Tanri09YT

Пользователь
Сообщения
31
Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
У меня плагин на изменения времени роста семян и деревьев.
Кто знает как сделать так, что бы значения в cfg файле изменялись (например если есть "speed: 7d", то был рост растений семян пшеницы в 7 дней, а если изменить на 1d, то 1 день, так же с другими значениями делать все под конфиг)

config.yml:
Код:
# Значения, для конфига:
# id - Айди растения
# Все существующие id растений и семян: 295 (пшеница), 361 (тыква),
# Названия растений и семян на английском: wheat_seeds (пшеница), melon_seeds (тыква),
# speed - Скорость его роста
# droping - Это категория, в которой пишем что выпадает с собирания растений.
# remove - То, что вы хотите убрать при выпадении, когда растение вырастит
# add - То, что вы хотите добавить при выпадении, когда растение вырастит

Wheat_Seeds:
id: 295
speed: 7d
droping:
remove: wheat_seeds
Melon_Seeds:
id: 362
speed: 7d
droping:
remove: melon_seeds


Plant_growth.class:
Код:
package yt.tanr1.plant_growth;

import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.Map;

public class Plant_growth extends JavaPlugin implements Listener {

// Храним время роста для конкретного ID растения
    private Map<Integer, Long> growthTimes = new HashMap<>();

// Константы
    private final int WHEAT_ID = Material.WHEAT.getId(); // ID блоков пшеницы
    private final long WHEAT_GROWTH_TIME = 16800; // Время роста в тиках (7 дней)

    @Override
    public void onEnable() {
getLogger().info(Color.ORANGE + "Plugin Enabled");
getServer().getPluginManager().registerEvents(this, this);

// Инициализируем время роста прямо в коде
        growthTimes.put(WHEAT_ID, WHEAT_GROWTH_TIME);
    }

@EventHandler
    public void onPlantGrow(BlockGrowEvent event) {
 int id = event.getBlock().getType().getId();
if (growthTimes.containsKey(id)) {
event.setCancelled(true); // Отменяем обычный рост
            getServer().getScheduler().runTaskLater(this, () -> {
// Здесь логика для нового роста через заданный таймаут
                // Например, чтобы пшеница выросла:
                event.getBlock().setType(Material.WHEAT); // Убедитесь, что в этом месте вы используете правильный тип блока
            }, growthTimes.get(id));
        }
    }

@EventHandler
    public void onBlockBreak(BlockBreakEvent event) {
 int id = event.getBlock().getType().getId();

// Проверяем, является ли блок пшеницей
        if (id == WHEAT_ID) {
event.setDropItems(false); // Отменить выпадение предметов при сборе пшеницы
        }
    }
}
 
Последнее редактирование модератором:
@EventHandler
public void onPlantGrow(BlockGrowEvent event) {
int id = event.getBlock().getType().getId();
if (growthTimes.containsKey(id)) {
event.setCancelled(true); // Отменяем обычный рост
getServer().getScheduler().runTaskLater(this, () -> {
// Здесь логика для нового роста через заданный таймаут
// Например, чтобы пшеница выросла:
event.getBlock().setType(Material.WHEAT); // Убедитесь, что в этом месте вы используете правильный тип блока
}, growthTimes.get(id));
}
ну скорее всего этот эвент срабатывает уже после того как семена выросли
 
Назад
Сверху Снизу