From aa63ff945be9f98986a746b9af55b96ef757aae3 Mon Sep 17 00:00:00 2001 From: Maxopoly Date: Mon, 14 Mar 2022 17:54:38 +0100 Subject: [PATCH] Support different field dimensions --- plugins/jukealert-paper/.gitignore | 2 + plugins/jukealert-paper/build.gradle.kts | 2 +- .../jukealert/model/SnitchFactoryType.java | 9 ++-- .../jukealert/model/SnitchTypeManager.java | 43 ++++++++++++++--- .../model/field/SingleCuboidRangeManager.java | 32 +------------ .../field/VariableSizeCuboidRangeManager.java | 47 +++++++++++++++++++ 6 files changed, 94 insertions(+), 41 deletions(-) create mode 100644 plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/VariableSizeCuboidRangeManager.java diff --git a/plugins/jukealert-paper/.gitignore b/plugins/jukealert-paper/.gitignore index 464c44b14..ef603e8a5 100644 --- a/plugins/jukealert-paper/.gitignore +++ b/plugins/jukealert-paper/.gitignore @@ -13,3 +13,5 @@ .gradle build + +paper/bin diff --git a/plugins/jukealert-paper/build.gradle.kts b/plugins/jukealert-paper/build.gradle.kts index a07d5ca70..4fcf138c3 100644 --- a/plugins/jukealert-paper/build.gradle.kts +++ b/plugins/jukealert-paper/build.gradle.kts @@ -15,7 +15,7 @@ subprojects { apply(plugin = "java-library") apply(plugin = "maven-publish") - group = "net.cimc.jukealert" + group = "net.civmc.jukealert" version = "3.0.0-SNAPSHOT" java { diff --git a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchFactoryType.java b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchFactoryType.java index dbb785219..3333858e1 100644 --- a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchFactoryType.java +++ b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchFactoryType.java @@ -1,6 +1,7 @@ package com.untamedears.jukealert.model; import com.untamedears.jukealert.model.appender.AbstractSnitchAppender; +import com.untamedears.jukealert.model.field.FieldManager; import com.untamedears.jukealert.model.field.SingleCuboidRangeManager; import java.util.List; import java.util.function.Function; @@ -12,21 +13,21 @@ public class SnitchFactoryType { private final int id; private final ItemStack item; private final String name; - private final int range; + private final Function fieldGenerator; private final List> appenders; - public SnitchFactoryType(ItemStack item, int range, String name, int id, + public SnitchFactoryType(ItemStack item, Function fieldGenerator, String name, int id, List> appenders) { this.item = item; this.name = name; this.id = id; - this.range = range; + this.fieldGenerator = fieldGenerator; this.appenders = appenders; } public Snitch create(int snitchID, Location location, String name, int groupID, boolean isNew) { - Snitch snitch = new Snitch(snitchID, location, isNew, groupID, s -> new SingleCuboidRangeManager(range, s), + Snitch snitch = new Snitch(snitchID, location, isNew, groupID, fieldGenerator, this, name); for(Function appenderFunc : appenders) { AbstractSnitchAppender appender = appenderFunc.apply(snitch); diff --git a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchTypeManager.java b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchTypeManager.java index 6bc981878..50e8741f1 100644 --- a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchTypeManager.java +++ b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/SnitchTypeManager.java @@ -7,6 +7,10 @@ import com.untamedears.jukealert.model.appender.DormantCullingAppender; import com.untamedears.jukealert.model.appender.LeverToggleAppender; import com.untamedears.jukealert.model.appender.ShowOwnerOnDestroyAppender; import com.untamedears.jukealert.model.appender.SnitchLogAppender; +import com.untamedears.jukealert.model.field.FieldManager; +import com.untamedears.jukealert.model.field.SingleCuboidRangeManager; +import com.untamedears.jukealert.model.field.VariableSizeCuboidRangeManager; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -61,8 +65,9 @@ public class SnitchTypeManager { return false; } String name = config.getString("name"); - if (!config.isInt("range")) { - logger.warning("Snitch type at " + config.getCurrentPath() + " had no range specified"); + Function fieldGenerator = getFieldInstanciation(config); + if (fieldGenerator == null) { + logger.warning("Snitch type at " + config.getCurrentPath() + " had no valid field specified"); return false; } sb.append("Successfully parsed type "); @@ -71,9 +76,6 @@ public class SnitchTypeManager { sb.append(id); sb.append(", item: "); sb.append(item.toString()); - int range = config.getInt("range"); - sb.append(", range: "); - sb.append(range); sb.append(", appenders: "); List> appenderInstanciations = new ArrayList<>(); if (config.isConfigurationSection("appender")) { @@ -101,12 +103,41 @@ public class SnitchTypeManager { if (appenderInstanciations.isEmpty()) { logger.warning("Snitch config at " + config.getCurrentPath() + " has no appenders, this is likely not what you intended"); } - SnitchFactoryType configFactory = new SnitchFactoryType(item, range, name, id, appenderInstanciations); + SnitchFactoryType configFactory = new SnitchFactoryType(item, fieldGenerator, name, id, appenderInstanciations); configFactoriesById.put(configFactory.getID(), configFactory); configFactoriesByItem.put(configFactory.getItem(), configFactory); logger.info(sb.toString()); return true; } + + private Function getFieldInstanciation(ConfigurationSection config) { + Logger logger = JukeAlert.getInstance().getLogger(); + if (config.isInt("range")) { + int range = config.getInt("range"); + return (s -> new SingleCuboidRangeManager(range, s)); + } + ConfigurationSection rangeSection = config.getConfigurationSection("range"); + if (rangeSection == null) { + logger.warning("Snitch config at " + config.getCurrentPath() + " had no range config"); + return null; + } + String type = rangeSection.getString("type", "none"); + switch(type) { + case "cube": + int range = rangeSection.getInt("range", 11); + logger.info("Parsed cube FieldManager with range " + range); + return (s -> new SingleCuboidRangeManager(range, s)); + case "cuboid": + int width = rangeSection.getInt("width"); + int height = rangeSection.getInt("height"); + logger.info("Parsed cuboid FieldManager with width " + width + " and height " + height); + return (s -> new VariableSizeCuboidRangeManager(width, height, s)); + default: + logger.warning("Unknown range type " + type + " at " + rangeSection.getCurrentPath()); + return null; + } + + } /** * Creates a function which will instanciate the appender based on the diff --git a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/SingleCuboidRangeManager.java b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/SingleCuboidRangeManager.java index ed27ce0f5..0e4607afc 100644 --- a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/SingleCuboidRangeManager.java +++ b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/SingleCuboidRangeManager.java @@ -6,38 +6,10 @@ import com.untamedears.jukealert.model.SnitchQTEntry; import java.util.Collection; import org.bukkit.Location; -public class SingleCuboidRangeManager implements FieldManager { - - private Snitch snitch; - private SnitchQTEntry entry; - private int range; +public class SingleCuboidRangeManager extends VariableSizeCuboidRangeManager { public SingleCuboidRangeManager(int range, Snitch snitch) { - entry = new SnitchQTEntry(snitch, snitch.getLocation(), range); - this.snitch = snitch; - this.range = range; - } - - @Override - public boolean isInside(Location location) { - int x = snitch.getLocation().getBlockX(); - if (location.getBlockX() > (x + range) || location.getBlockX() < (x - range)) { - return false; - } - int y = snitch.getLocation().getBlockY(); - if (location.getBlockY() > (y + range) || location.getBlockY() < (y - range)) { - return false; - } - int z = snitch.getLocation().getBlockZ(); - if (location.getBlockZ() > (z + range) || location.getBlockZ() < (z - range)) { - return false; - } - return true; - } - - @Override - public Collection getQTEntries() { - return Lists.asList(entry, new SnitchQTEntry[0]); + super(range, range, snitch); } } diff --git a/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/VariableSizeCuboidRangeManager.java b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/VariableSizeCuboidRangeManager.java new file mode 100644 index 000000000..7c078e9ad --- /dev/null +++ b/plugins/jukealert-paper/paper/src/main/java/com/untamedears/jukealert/model/field/VariableSizeCuboidRangeManager.java @@ -0,0 +1,47 @@ +package com.untamedears.jukealert.model.field; + +import java.util.Collection; + +import org.bukkit.Location; + +import com.google.common.collect.Lists; +import com.untamedears.jukealert.model.Snitch; +import com.untamedears.jukealert.model.SnitchQTEntry; + +public class VariableSizeCuboidRangeManager implements FieldManager { + + private Snitch snitch; + private SnitchQTEntry entry; + private int width; + private int height; + + public VariableSizeCuboidRangeManager(int width, int height, Snitch snitch) { + entry = new SnitchQTEntry(snitch, snitch.getLocation(), width); + this.snitch = snitch; + this.width = width; + this.height = height; + } + + @Override + public boolean isInside(Location location) { + int x = snitch.getLocation().getBlockX(); + if (location.getBlockX() > (x + width) || location.getBlockX() < (x - width)) { + return false; + } + int y = snitch.getLocation().getBlockY(); + if (location.getBlockY() > (y + height) || location.getBlockY() < (y - height)) { + return false; + } + int z = snitch.getLocation().getBlockZ(); + if (location.getBlockZ() > (z + width) || location.getBlockZ() < (z - width)) { + return false; + } + return true; + } + + @Override + public Collection getQTEntries() { + return Lists.asList(entry, new SnitchQTEntry[0]); + } + +}