From 909461975a9700c0cf6e1c19c2a11f56c35ce31d Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 21 May 2022 04:47:12 +0200 Subject: [PATCH 1/9] Chat filter. --- .../iris/core/nms/v18_2/NMSBinding18_2.java | 15 +++-- .../iris/core/service/LogFilterSVC.java | 59 +++++++++++++++++++ .../volmit/iris/engine/object/IrisObject.java | 2 +- 3 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/service/LogFilterSVC.java diff --git a/src/main/java/com/volmit/iris/core/nms/v18_2/NMSBinding18_2.java b/src/main/java/com/volmit/iris/core/nms/v18_2/NMSBinding18_2.java index cdc0fd464..90d6325cb 100644 --- a/src/main/java/com/volmit/iris/core/nms/v18_2/NMSBinding18_2.java +++ b/src/main/java/com/volmit/iris/core/nms/v18_2/NMSBinding18_2.java @@ -416,18 +416,21 @@ public class NMSBinding18_2 implements INMSBinding { } private static Object fieldFor(Class returns, Object in) { - for(Field i : in.getClass().getFields()) { - if(i.getType().equals(returns)) { + return fieldForClass(returns, in.getClass(), in); + } + + @SuppressWarnings("unchecked") + private static T fieldForClass(Class returnType, Class sourceType, Object in) { + for(Field i : sourceType.getFields()) + if(i.getType().equals(returnType)) { i.setAccessible(true); try { - Iris.info("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName()); - return i.get(in); + Iris.info("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); + return (T)i.get(in); } catch(IllegalAccessException e) { e.printStackTrace(); } } - } - return null; } } diff --git a/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java new file mode 100644 index 000000000..521575d7a --- /dev/null +++ b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java @@ -0,0 +1,59 @@ +package com.volmit.iris.core.service; + +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.plugin.IrisService; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.message.Message; + +public class LogFilterSVC implements IrisService, Filter { + + private static final String HEIGHTMAP_MISMATCH = "Ignoring heightmap data for chunk"; + + private static final KList FILTERS = new KList<>(); + + public void onEnable() { + FILTERS.add(HEIGHTMAP_MISMATCH); + ((Logger) LogManager.getRootLogger()).addFilter(this); + } + + public void initialize() { } + public void start() { } + public void stop() { } + public void onDisable() { } + public boolean isStarted() { return true; } + public boolean isStopped() { return false; } + + public State getState() { + try { return State.STARTED; } + catch (Exception var2) { return null; } + } + + public Filter.Result getOnMatch() { return Result.NEUTRAL; } + public Filter.Result getOnMismatch() { return Result.NEUTRAL; } + + public Result filter(LogEvent event) { return check(event.getMessage().getFormattedMessage()); } + public Result filter(Logger logger, Level level, Marker marker, Object msg, Throwable t) { return check(msg.toString()); } + public Result filter(Logger logger, Level level, Marker marker, Message msg, Throwable t) { return check(msg.getFormattedMessage()); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object... params) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8) { return check(message); } + public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8, Object p9) { return check(message); } + + private Result check(String string) { + if(FILTERS.stream().anyMatch(string::contains)) + return Result.DENY; + return Result.NEUTRAL; + } +} diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index 552e49311..b987ee8cf 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -568,7 +568,7 @@ public class IrisObject extends IrisRegistrant { } } } else if(config.getMode().equals(ObjectPlaceMode.MIN_HEIGHT)) { - y = 257; + y = rdata.getEngine().getHeight() + 1; BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); From 62f7fc17d17bc91bde57fd54a323569b7a6917da Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 21 May 2022 18:41:04 +0200 Subject: [PATCH 2/9] Suppressed persistent raid error. --- src/main/java/com/volmit/iris/core/service/LogFilterSVC.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java index 521575d7a..c55427a47 100644 --- a/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java +++ b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java @@ -13,12 +13,13 @@ import org.apache.logging.log4j.message.Message; public class LogFilterSVC implements IrisService, Filter { private static final String HEIGHTMAP_MISMATCH = "Ignoring heightmap data for chunk"; + private static final String RAID_PERSISTENCE = "Could not save data net.minecraft.world.entity.raid.PersistentRaid"; private static final KList FILTERS = new KList<>(); public void onEnable() { - FILTERS.add(HEIGHTMAP_MISMATCH); - ((Logger) LogManager.getRootLogger()).addFilter(this); + FILTERS.add(HEIGHTMAP_MISMATCH, RAID_PERSISTENCE); + ((Logger)LogManager.getRootLogger()).addFilter(this); } public void initialize() { } From d37b298f079861b5ef5fe9b48f9a0846ea0bb811 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 03:02:50 +0200 Subject: [PATCH 3/9] Fixed bad math for MAX_HEIGHT and FAST_MAX_HEIGHT. --- src/main/java/com/volmit/iris/Iris.java | 8 ++-- .../volmit/iris/engine/object/IrisObject.java | 45 +++++++++---------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index ca2e00d2b..a8576b4b5 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -244,12 +244,12 @@ public class Iris extends VolmitPlugin implements Listener { return f; } - public static void warn(String string) { - msg(C.YELLOW + string); + public static void warn(String format, Object... objs) { + msg(C.YELLOW + String.format(format, objs)); } - public static void error(String string) { - msg(C.RED + string); + public static void error(String format, Object... objs) { + msg(C.RED + String.format(format, objs)); } public static void debug(String string) { diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index b987ee8cf..e33203bf9 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -534,19 +534,19 @@ public class IrisObject extends IrisRegistrant { } else if(config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - - for(int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) { - for(int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) { - int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; - - if(placer.isCarved(i, h, j) || placer.isCarved(i, h - 1, j) || placer.isCarved(i, h - 2, j) || placer.isCarved(i, h - 3, j)) { + int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i++) { + int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii++) { + int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; break; } - - if(h > y) { + if(h > y) y = h; - } } } } else if(config.getMode().equals(ObjectPlaceMode.FAST_MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.FAST_STILT)) { @@ -571,17 +571,19 @@ public class IrisObject extends IrisRegistrant { y = rdata.getEngine().getHeight() + 1; BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - - for(int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) { - for(int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) { - int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; - if(placer.isCarved(i, h, j) || placer.isCarved(i, h - 1, j) || placer.isCarved(i, h - 2, j) || placer.isCarved(i, h - 3, j)) { + int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i++) { + int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii++) { + int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; break; } - if(h < y) { + if(h < y) y = h; - } } } } else if(config.getMode().equals(ObjectPlaceMode.FAST_MIN_HEIGHT)) { @@ -745,6 +747,7 @@ public class IrisObject extends IrisRegistrant { data = config.getRotation().rotate(data, spinx, spiny, spinz); xx = x + (int) Math.round(i.getX()); + int yy = y + (int) Math.round(i.getY()); zz = z + (int) Math.round(i.getZ()); @@ -787,7 +790,6 @@ public class IrisObject extends IrisRegistrant { if(!data.getMaterial().equals(Material.AIR) && !data.getMaterial().equals(Material.CAVE_AIR)) { placer.set(xx, yy, zz, data); - if(tile != null) { placer.setTile(xx, yy, zz, tile); } @@ -852,17 +854,14 @@ public class IrisObject extends IrisRegistrant { int yg = placer.getHighest(xx, zz, getLoader(), true); - if(config.isWaterloggable() && yg <= placer.getFluidHeight() && d instanceof Waterlogged) { + if(config.isWaterloggable() && yg <= placer.getFluidHeight() && d instanceof Waterlogged) ((Waterlogged) d).setWaterlogged(true); - } - if(yv >= 0 && config.isBottom()) { + if(yv >= 0 && config.isBottom()) y += Math.floorDiv(h, 2); - } - for(int j = lowest + y; j > yg - config.getOverStilt() - 1; j--) { + for(int j = lowest + y; j > yg - config.getOverStilt() - 1; j--) placer.set(xx, j, zz, d); - } } readLock.unlock(); From df98f8f626c1b9bfa7cf798a92fe6e54fbda49af Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 03:07:46 +0200 Subject: [PATCH 4/9] Added filter for duplicated entity uuid. --- src/main/java/com/volmit/iris/core/service/LogFilterSVC.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java index c55427a47..7f86621c3 100644 --- a/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java +++ b/src/main/java/com/volmit/iris/core/service/LogFilterSVC.java @@ -14,11 +14,12 @@ public class LogFilterSVC implements IrisService, Filter { private static final String HEIGHTMAP_MISMATCH = "Ignoring heightmap data for chunk"; private static final String RAID_PERSISTENCE = "Could not save data net.minecraft.world.entity.raid.PersistentRaid"; + private static final String DUPLICATE_ENTITY_UUID = "UUID of added entity already exists"; private static final KList FILTERS = new KList<>(); public void onEnable() { - FILTERS.add(HEIGHTMAP_MISMATCH, RAID_PERSISTENCE); + FILTERS.add(HEIGHTMAP_MISMATCH, RAID_PERSISTENCE, DUPLICATE_ENTITY_UUID); ((Logger)LogManager.getRootLogger()).addFilter(this); } From d5699a7472875b070ca9c415e715a5360025c0f9 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 03:22:19 +0200 Subject: [PATCH 5/9] Totally didn't replace MIN_HEIGHT instead of FAST_MAX_HEIGHT :skull: --- .../volmit/iris/engine/object/IrisObject.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index e33203bf9..a2695dbd7 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -552,38 +552,36 @@ public class IrisObject extends IrisRegistrant { } else if(config.getMode().equals(ObjectPlaceMode.FAST_MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.FAST_STILT)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - - for(int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i += (rotatedDimensions.getBlockX() / 2) + 1) { - for(int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j += (rotatedDimensions.getBlockZ() / 2) + 1) { - int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; - - if(placer.isCarved(i, h, j) || placer.isCarved(i, h - 1, j) || placer.isCarved(i, h - 2, j) || placer.isCarved(i, h - 3, j)) { + int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i +=(rotatedDimensions.getBlockX() / 2) + 1) { + int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii += (rotatedDimensions.getBlockX() / 2) + 1) { + int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; break; } - - if(h > y) { + if(h > y) y = h; - } } } } else if(config.getMode().equals(ObjectPlaceMode.MIN_HEIGHT)) { y = rdata.getEngine().getHeight() + 1; BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i++) { - int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii++) { - int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; - if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { + + for(int i = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i <= x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); i++) { + for(int j = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j <= z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); j++) { + int h = placer.getHighest(i, j, getLoader(), config.isUnderwater()) + rty; + if(placer.isCarved(i, h, j) || placer.isCarved(i, h - 1, j) || placer.isCarved(i, h - 2, j) || placer.isCarved(i, h - 3, j)) { bail = true; break; } - if(h < y) + if(h < y) { y = h; + } } } } else if(config.getMode().equals(ObjectPlaceMode.FAST_MIN_HEIGHT)) { From 9aa2c5ed8a9d85797c98856ba522ba1db2281e2d Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 03:23:20 +0200 Subject: [PATCH 6/9] SPACE --- src/main/java/com/volmit/iris/engine/object/IrisObject.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index a2695dbd7..1fea8fdd9 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -554,7 +554,7 @@ public class IrisObject extends IrisRegistrant { BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i +=(rotatedDimensions.getBlockX() / 2) + 1) { + for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i += (rotatedDimensions.getBlockX() / 2) + 1) { int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii += (rotatedDimensions.getBlockX() / 2) + 1) { From 4a3a1491d494550b99a4367e07a454bc887ecff1 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 04:25:39 +0200 Subject: [PATCH 7/9] Cleanup. --- .../volmit/iris/engine/object/IrisObject.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index 1fea8fdd9..bd4993e04 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -534,12 +534,14 @@ public class IrisObject extends IrisRegistrant { } else if(config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i++) { - int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii++) { + int xLength = (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); + int minX = Math.min(x - xLength, x + xLength); + int maxX = Math.max(x - xLength, x + xLength); + int zLength = (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); + int minZ = Math.min(z - zLength, z + zLength); + int maxZ = Math.max(z - zLength, z + zLength); + for(int i = minX; i <= maxX; i++) { + for(int ii = minZ; ii <= maxZ; ii++) { int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; @@ -552,12 +554,16 @@ public class IrisObject extends IrisRegistrant { } else if(config.getMode().equals(ObjectPlaceMode.FAST_MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.FAST_STILT)) { BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ()); BlockVector rotatedDimensions = config.getRotation().rotate(new BlockVector(getW(), getH(), getD()), spinx, spiny, spinz).clone(); - int x1 = x - (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - int x2 = x + (rotatedDimensions.getBlockX() / 2) + offset.getBlockX(); - for(int i = Math.min(x1, x2); i <= Math.max(x1, x2); i += (rotatedDimensions.getBlockX() / 2) + 1) { - int z1 = z - (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - int z2 = z + (rotatedDimensions.getBlockZ() / 2) + offset.getBlockZ(); - for(int ii = Math.min(z1, z2); ii <= Math.max(z1, z2); ii += (rotatedDimensions.getBlockX() / 2) + 1) { + int xRadius = (rotatedDimensions.getBlockX() / 2); + int xLength = xRadius + offset.getBlockX(); + int minX = Math.min(x - xLength, x + xLength); + int maxX = Math.max(x - xLength, x + xLength); + int zRadius = (rotatedDimensions.getBlockZ() / 2); + int zLength = zRadius + offset.getBlockZ(); + int minZ = Math.min(z - zLength, z + zLength); + int maxZ = Math.max(z - zLength, z + zLength); + for(int i = minX; i <= maxX; i += xRadius + 1) { + for(int ii = minZ; ii <= maxZ; ii += zRadius + 1) { int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; From fd8a7ebb4c042bda97ec71afc846a9a7cae5723c Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 05:08:28 +0200 Subject: [PATCH 8/9] Properly fixed FAST_MAX_HEIGHT. --- src/main/java/com/volmit/iris/engine/object/IrisObject.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index bd4993e04..d03d0b0c6 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -562,8 +562,8 @@ public class IrisObject extends IrisRegistrant { int zLength = zRadius + offset.getBlockZ(); int minZ = Math.min(z - zLength, z + zLength); int maxZ = Math.max(z - zLength, z + zLength); - for(int i = minX; i <= maxX; i += xRadius + 1) { - for(int ii = minZ; ii <= maxZ; ii += zRadius + 1) { + for(int i = minX; i <= maxX; i += Math.abs(xRadius) + 1) { + for(int ii = minZ; ii <= maxZ; ii += Math.abs(zRadius) + 1) { int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty; if(placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) { bail = true; From bae2a18e24f5124ff5dd7dfe4592a47e750e8518 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 22 May 2022 05:18:13 +0200 Subject: [PATCH 9/9] V+ --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9483dbf85..82e60860b 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.1.0-1.18.2' // Needs to be version specific +version '2.1.1-1.18.2' // Needs to be version specific def nmsVersion = "1.18.2" def apiVersion = '1.18' def spigotJarVersion = '1.18.2-R0.1-SNAPSHOT'