From 73ffcbcb41569ce94e38bcfa38b5d65ea952f6a9 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 24 Jan 2022 13:46:09 +0100 Subject: [PATCH] Warning message in configurable radius --- .../volmit/iris/core/service/VillageSVC.java | 40 +++++++++++++++++-- .../iris/engine/object/IrisDimension.java | 2 + 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/service/VillageSVC.java b/src/main/java/com/volmit/iris/core/service/VillageSVC.java index e40d41d9f..06160b129 100644 --- a/src/main/java/com/volmit/iris/core/service/VillageSVC.java +++ b/src/main/java/com/volmit/iris/core/service/VillageSVC.java @@ -20,15 +20,22 @@ package com.volmit.iris.core.service; import com.volmit.iris.Iris; import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.object.IrisVillagerOverride; import com.volmit.iris.engine.object.IrisVillagerTrade; +import com.volmit.iris.util.format.C; import com.volmit.iris.util.plugin.IrisService; +import com.volmit.iris.util.plugin.VolmitSender; +import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.VillagerAcquireTradeEvent; import org.bukkit.event.entity.VillagerCareerChangeEvent; +import java.util.List; + public class VillageSVC implements IrisService { @Override public void onEnable() { @@ -42,18 +49,45 @@ public class VillageSVC implements IrisService { @EventHandler public void on(VillagerCareerChangeEvent event) { + if (!IrisToolbelt.isIrisWorld(event.getEntity().getWorld())) { return; } - if (!IrisToolbelt.access(event.getEntity().getWorld()) - .getEngine().getDimension().isRemoveCartographersDueToCrash()) { + IrisDimension dim = IrisToolbelt.access(event.getEntity().getWorld()) + .getEngine().getDimension(); + + if (!dim.isRemoveCartographersDueToCrash()) { return; } if (event.getProfession().equals(Villager.Profession.CARTOGRAPHER)) { event.setCancelled(true); - Iris.info("Cancelled Cartographer Villager to prevent server crash!"); + + Location eventLocation = event.getEntity().getLocation(); + + int radius = dim.getNotifyPlayersOfCartographerCancelledRadius(); + + if (radius == -1) { + return; + } + + List playersInWorld = event.getEntity().getWorld().getPlayers(); + + String message = C.GOLD + "Iris does not allow cartographers in its world due to crashes."; + + Iris.info("Cancelled Cartographer Villager to prevent server crash at " + eventLocation + "!"); + + if (radius == -2) { + playersInWorld.stream().map(VolmitSender::new).forEach(v -> v.sendMessage(message)); + } else { + playersInWorld.forEach(p -> { + if (p.getLocation().distance(eventLocation) < radius) { + new VolmitSender(p).sendMessage(message); + } + }); + } + } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 677409c0e..22f453a63 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -227,6 +227,8 @@ public class IrisDimension extends IrisRegistrant { // private IrisVillagerOverride patchCartographers = new IrisVillagerOverride().setDisableTrade(false); @Desc("Remove cartographers so they do not crash the server (Iris worlds only)") private boolean removeCartographersDueToCrash = true; + @Desc("Notify players of cancelled cartographer villager in this radius in blocks (set to -1 to disable, -2 for everyone)") + private int notifyPlayersOfCartographerCancelledRadius = 30; @Desc("Collection of ores to be generated") @ArrayType(type = IrisOreGenerator.class, min = 1) private KList ores = new KList<>();