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();