Писал плагин якобы как на "монетный бассейн" , уже все перепробывал , методы, смена версий worldguard, worledit всё равно ничего, уже даже к нейронке обратился, все равно нет
settings:
[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% очков!"
points: 10 # Количество очков
regions:
- campspawn
giveCommand: "p give %player% %points%" # Команда начисления очков
messages:
pointsGiven: "Вы получили %points% очков!"
Последнее редактирование: