Вопрос Проверка человека в регионе ( Ошибка )

Версия Minecraft
1.16.X

ZZII

Разработчик
Пользователь
Сообщения
191
Решения
1
Веб-сайт
app.zzii.info
Писал плагин якобы как на "монетный бассейн" , уже все перепробывал , методы, смена версий worldguard, worledit всё равно ничего, уже даже к нейронке обратился, все равно нет

[16:56:50 WARN]: [ZCampFire] Task #466 for ZCampFire v1.5 generated an exceptionjava.lang.NullPointerException: null at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770) ~[patched_1.16.5.jar:git-Purpur-1171] at com.sk89q.worldguard.WorldGuard.getPlatform(WorldGuard.java:100) ~[?:?] at org.zzii.zcampfire.ZCampFire.isPlayerInRegion(ZCampFire.java:81) ~[?:?] at org.zzii.zcampfire.ZCampFire.access$000(ZCampFire.java:19) ~[?:?] at org.zzii.zcampfire.ZCampFire$1.run(ZCampFire.java:57) ~[?:?] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:100) ~[patched_1.16.5.jar:git-Purpur-1171] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:468) ~[patched_1.16.5.jar:git-Purpur-1171] at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1503) ~[patched_1.16.5.jar:git-Purpur-1171] at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:449) ~[patched_1.16.5.jar:git-Purpur-1171] at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1416) ~[patched_1.16.5.jar:git-Purpur-1171] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1142) ~[patched_1.16.5.jar:git-Purpur-1171] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171] at java.lang.Thread.run(Thread.java:840) [?:?]


Java:
package org.zzii.zcampfire;

import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.List;

public final class ZCampFire extends JavaPlugin {

private FileConfiguration config;

    @Override
 public void onEnable() {
getLogger().info("ZCampFire enabled");

        // Проверяем, установлен ли и включён ли WorldGuard
        if (!isWorldGuardEnabled()) {
getLogger().severe("WorldGuard plugin not found or not enabled! Disabling ZCampFire.");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

// Сохраняем config.yml, если не существует
        saveDefaultConfig();
        config = getConfig();

        // Запускаем периодическую задачу для начисления очков
        startPointsTask();
    }

    @Override
 public void onDisable() {
getLogger().info("ZCampFire disabled");
    }

 private void startPointsTask() {
long interval = config.getLong("settings.interval", 1800) * 20; // Секунды -> тики
        List<String> regionList = config.getStringList("settings.regions");
        int points = config.getInt("settings.points", 10);

        new BukkitRunnable() {
            @Override
 public void run() {
 for (Player player : Bukkit.getOnlinePlayers()) {
// Проверяем, стоит ли игрок в нужном регионе
                    if (isPlayerInRegion(player, regionList)) {
// Подставляем %player% и %points% в команду
                        String command = config.getString("settings.giveCommand", "p give %player% %points%")
.replace("%player%", player.getName())
.replace("%points%", String.valueOf(points));

                        // Выполняем команду от имени консоли
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);

                        // Отправляем сообщение игроку
                        String message = config.getString("messages.pointsGiven", "Вы получили %points% очков!")
.replace("%points%", String.valueOf(points));
                        player.sendMessage(message);
                    }
                }
            }
}.runTaskTimer(this, interval, interval);
    }

/**
     * Проверка: находится ли игрок в каком-либо из указанных регионов (ID).
     */
    private boolean isPlayerInRegion(Player player, List<String> regionIds) {
// Берём RegionContainer из WorldGuard
        RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
        if (container == null) {
getLogger().severe("RegionContainer is null. WorldGuard may not be loaded correctly.");
            return false;
        }

// Менеджер регионов для мира, в котором стоит игрок
        RegionManager regionManager = container.get(BukkitAdapter.adapt(player.getWorld()));
        if (regionManager == null) {
getLogger().warning("RegionManager is null for world: " + player.getWorld().getName());
            return false;
        }

 try {
// Адаптируем локейшн игрока в WorldEdit
            Location weLocation = BukkitAdapter.adapt(player.getLocation());
            if (weLocation == null) {
getLogger().warning("Player location is null.");
                return false;
            }

// Превращаем в BlockVector3 (целочисленные координаты)
            BlockVector3 blockVector3 = weLocation.toVector().toBlockPoint();

            // Смотрим все регионы, которые покрывают эту точку
            ApplicableRegionSet applicableRegions = regionManager.getApplicableRegions(blockVector3);

            // Перебираем регионы и ищем совпадение с нужным ID
            for (ProtectedRegion region : applicableRegions) {
getLogger().info("Player " + player.getName() + " is in region: " + region.getId());
                if (regionIds.contains(region.getId())) {
return true;
                }
            }
} catch (Exception e) {
getLogger().severe("An error occurred while checking regions: " + e.getMessage());
            e.printStackTrace();
        }

return false;
    }

/**
     * Проверяем, установлен и включен ли WorldGuard.
     */
    private boolean isWorldGuardEnabled() {
return getServer().getPluginManager().getPlugin("WorldGuard") != null
                && getServer().getPluginManager().getPlugin("WorldGuard").isEnabled();
    }
}


settings:
interval: 1800 # Интервал в секундах (30 минут)
points: 10 # Количество очков
regions:
- campspawn
giveCommand: "p give %player% %points%" # Команда начисления очков

messages:
pointsGiven: "Вы получили %points% очков!"
 
Последнее редактирование:
offtop ну пожалуйста,
Вам необходимо зарегистрироваться для просмотра изображений-вложений


спасибо
 
Назад
Сверху Снизу