From 8f3093ea2b994a2904492ab3b66c943dc67a7fff Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 24 Jan 2022 13:05:40 +0100 Subject: [PATCH 1/4] Re-enable debug --- src/main/java/com/volmit/iris/core/service/VillageSVC.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 9c567257c..2297c475d 100644 --- a/src/main/java/com/volmit/iris/core/service/VillageSVC.java +++ b/src/main/java/com/volmit/iris/core/service/VillageSVC.java @@ -43,11 +43,11 @@ public class VillageSVC implements IrisService { */ @EventHandler public void on(VillagerAcquireTradeEvent event) { - if(!IrisToolbelt.isIrisWorld((event.getEntity().getWorld()))) { + if(!IrisToolbelt.isIrisWorld(event.getEntity().getWorld())) { return; } - // Iris.info("Trade event: type " + event.getRecipe().getResult().getType() + " / meta " + event.getRecipe().getResult().getItemMeta() + " / data " + event.getRecipe().getResult().getData()); + Iris.info("Trade event: type " + event.getRecipe().getResult().getType() + " / meta " + event.getRecipe().getResult().getItemMeta() + " / data " + event.getRecipe().getResult().getData()); if(!event.getRecipe().getResult().getType().equals(Material.FILLED_MAP)) { return; } From 4ade79a3073aef4312e813cf40d906eef8a21e41 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 24 Jan 2022 13:05:40 +0100 Subject: [PATCH 2/4] Revert "Re-enable debug" This reverts commit 8f3093ea2b994a2904492ab3b66c943dc67a7fff. --- src/main/java/com/volmit/iris/core/service/VillageSVC.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 2297c475d..9c567257c 100644 --- a/src/main/java/com/volmit/iris/core/service/VillageSVC.java +++ b/src/main/java/com/volmit/iris/core/service/VillageSVC.java @@ -43,11 +43,11 @@ public class VillageSVC implements IrisService { */ @EventHandler public void on(VillagerAcquireTradeEvent event) { - if(!IrisToolbelt.isIrisWorld(event.getEntity().getWorld())) { + if(!IrisToolbelt.isIrisWorld((event.getEntity().getWorld()))) { return; } - Iris.info("Trade event: type " + event.getRecipe().getResult().getType() + " / meta " + event.getRecipe().getResult().getItemMeta() + " / data " + event.getRecipe().getResult().getData()); + // Iris.info("Trade event: type " + event.getRecipe().getResult().getType() + " / meta " + event.getRecipe().getResult().getItemMeta() + " / data " + event.getRecipe().getResult().getData()); if(!event.getRecipe().getResult().getType().equals(Material.FILLED_MAP)) { return; } From 510535fdd44d881789e78bccb3a5e1146f05a966 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 24 Jan 2022 13:36:39 +0100 Subject: [PATCH 3/4] Remove cartographers entirely --- .../volmit/iris/core/service/VillageSVC.java | 24 ++++++++++++++++++- .../iris/engine/object/IrisDimension.java | 6 +++-- 2 files changed, 27 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 9c567257c..e40d41d9f 100644 --- a/src/main/java/com/volmit/iris/core/service/VillageSVC.java +++ b/src/main/java/com/volmit/iris/core/service/VillageSVC.java @@ -24,8 +24,10 @@ import com.volmit.iris.engine.object.IrisVillagerOverride; import com.volmit.iris.engine.object.IrisVillagerTrade; import com.volmit.iris.util.plugin.IrisService; import org.bukkit.Material; +import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.VillagerAcquireTradeEvent; +import org.bukkit.event.entity.VillagerCareerChangeEvent; public class VillageSVC implements IrisService { @Override @@ -38,9 +40,28 @@ 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()) { + return; + } + + if (event.getProfession().equals(Villager.Profession.CARTOGRAPHER)) { + event.setCancelled(true); + Iris.info("Cancelled Cartographer Villager to prevent server crash!"); + } + } + + /* * Replace or disable villager trade add event to prevent explorer map */ + /* Removed due to MC breaking stuff again. This event is now called after the cartographer maps are made, + so it can fuck right off. @EventHandler public void on(VillagerAcquireTradeEvent event) { if(!IrisToolbelt.isIrisWorld((event.getEntity().getWorld()))) { @@ -71,4 +92,5 @@ public class VillageSVC implements IrisService { event.setRecipe(trade.convert()); Iris.debug("Overrode cartographer trade with: " + trade + " to prevent allowing cartography map trades"); } + */ } 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 b99aa71fc..677409c0e 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -223,8 +223,10 @@ public class IrisDimension extends IrisRegistrant { private IrisMaterialPalette rockPalette = new IrisMaterialPalette().qclear().qadd("stone"); @Desc("The palette of blocks for 'water'") private IrisMaterialPalette fluidPalette = new IrisMaterialPalette().qclear().qadd("water"); - @Desc("Cartographer map trade overrides") - private IrisVillagerOverride patchCartographers = new IrisVillagerOverride().setDisableTrade(false); +// @Desc("Cartographer map trade overrides") +// 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("Collection of ores to be generated") @ArrayType(type = IrisOreGenerator.class, min = 1) private KList ores = new KList<>(); From 73ffcbcb41569ce94e38bcfa38b5d65ea952f6a9 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 24 Jan 2022 13:46:09 +0100 Subject: [PATCH 4/4] 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<>();