add option to disable specific mantle components for testing

This commit is contained in:
Julian Krings 2025-07-08 19:52:09 +02:00
parent 03c5998c02
commit 0b1af51227
No known key found for this signature in database
GPG Key ID: 208C6E08C3B718D2
12 changed files with 108 additions and 2 deletions

View File

@ -466,6 +466,26 @@ public class SchemaBuilder {
items.put("$ref", "#/definitions/" + key); items.put("$ref", "#/definitions/" + key);
prop.put("items", items); prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid Enchantment Type (use ctrl+space for auto complete!)"); description.add(SYMBOL_TYPE__N + " Must be a valid Enchantment Type (use ctrl+space for auto complete!)");
} else if (k.isAnnotationPresent(RegistryListFunction.class)) {
var functionClass = k.getDeclaredAnnotation(RegistryListFunction.class).value();
try {
var instance = functionClass.getDeclaredConstructor().newInstance();
String key = instance.key();
fancyType = instance.fancyName();
if (!definitions.containsKey(key)) {
JSONObject j = new JSONObject();
j.put("enum", instance.apply(data));
definitions.put(key, j);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + key);
prop.put("items", items);
description.add(SYMBOL_TYPE__N + " Must be a valid " + fancyType + " (use ctrl+space for auto complete!)");
} catch (Throwable e) {
Iris.error("Could not execute apply method in " + functionClass.getName());
}
} else if (t.type().equals(PotionEffectType.class)) { } else if (t.type().equals(PotionEffectType.class)) {
fancyType = "List of Potion Effect Types"; fancyType = "List of Potion Effect Types";
String key = "enum-potion-effect-type"; String key = "enum-potion-effect-type";

View File

@ -29,7 +29,9 @@ import com.volmit.iris.engine.mantle.components.MantleJigsawComponent;
import com.volmit.iris.engine.mantle.components.MantleObjectComponent; import com.volmit.iris.engine.mantle.components.MantleObjectComponent;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.mantle.MantleFlag;
import lombok.*; import lombok.*;
import java.io.File; import java.io.File;
@ -44,7 +46,7 @@ public class IrisEngineMantle implements EngineMantle {
@Getter(AccessLevel.NONE) @Getter(AccessLevel.NONE)
private final KMap<Integer, KList<MantleComponent>> components; private final KMap<Integer, KList<MantleComponent>> components;
private final AtomicCache<KList<Pair<KList<MantleComponent>, Integer>>> componentsCache = new AtomicCache<>(); private final AtomicCache<KList<Pair<KList<MantleComponent>, Integer>>> componentsCache = new AtomicCache<>();
private final AtomicCache<Integer> radCache = new AtomicCache<>(); private final AtomicCache<KSet<MantleFlag>> disabledFlags = new AtomicCache<>();
private final MantleObjectComponent object; private final MantleObjectComponent object;
private final MantleJigsawComponent jigsaw; private final MantleJigsawComponent jigsaw;
@ -101,10 +103,20 @@ public class IrisEngineMantle implements EngineMantle {
@Override @Override
public void registerComponent(MantleComponent c) { public void registerComponent(MantleComponent c) {
c.setEnabled(!getDimension().getDisabledComponents().contains(c.getFlag()));
components.computeIfAbsent(c.getPriority(), k -> new KList<>()).add(c); components.computeIfAbsent(c.getPriority(), k -> new KList<>()).add(c);
componentsCache.reset(); componentsCache.reset();
} }
@Override
public KList<MantleFlag> getComponentFlags() {
return components.values()
.stream()
.flatMap(KList::stream)
.map(MantleComponent::getFlag)
.collect(KList.collector());
}
@Override @Override
public MantleJigsawComponent getJigsawComponent() { public MantleJigsawComponent getJigsawComponent() {
return jigsaw; return jigsaw;

View File

@ -0,0 +1,14 @@
package com.volmit.iris.engine.mantle;
import com.volmit.iris.util.mantle.MantleFlag;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ComponentFlag {
MantleFlag value();
}

View File

@ -65,6 +65,8 @@ public interface EngineMantle extends IObjectPlacer {
void registerComponent(MantleComponent c); void registerComponent(MantleComponent c);
KList<MantleFlag> getComponentFlags();
default int getHighest(int x, int z) { default int getHighest(int x, int z) {
return getHighest(x, z, getData()); return getHighest(x, z, getData());
} }
@ -227,7 +229,9 @@ public interface EngineMantle extends IObjectPlacer {
} }
default void generateMantleComponent(MantleWriter writer, int x, int z, MantleComponent c, MantleChunk mc, ChunkContext context) { default void generateMantleComponent(MantleWriter writer, int x, int z, MantleComponent c, MantleChunk mc, ChunkContext context) {
mc.raiseFlag(c.getFlag(), () -> c.generateLayer(writer, x, z, context)); mc.raiseFlag(c.getFlag(), () -> {
if (c.isEnabled()) c.generateLayer(writer, x, z, context);
});
} }
@ChunkCoordinates @ChunkCoordinates

View File

@ -30,4 +30,5 @@ public abstract class IrisMantleComponent implements MantleComponent {
private final EngineMantle engineMantle; private final EngineMantle engineMantle;
private final MantleFlag flag; private final MantleFlag flag;
private final int priority; private final int priority;
private boolean enabled = true;
} }

View File

@ -61,6 +61,10 @@ public interface MantleComponent extends Comparable<MantleComponent> {
MantleFlag getFlag(); MantleFlag getFlag();
boolean isEnabled();
void setEnabled(boolean b);
@ChunkCoordinates @ChunkCoordinates
void generateLayer(MantleWriter writer, int x, int z, ChunkContext context); void generateLayer(MantleWriter writer, int x, int z, ChunkContext context);

View File

@ -19,6 +19,7 @@
package com.volmit.iris.engine.mantle.components; package com.volmit.iris.engine.mantle.components;
import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.mantle.ComponentFlag;
import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.mantle.MantleWriter;
@ -32,6 +33,7 @@ import com.volmit.iris.util.math.RNG;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@ComponentFlag(MantleFlag.CARVED)
public class MantleCarvingComponent extends IrisMantleComponent { public class MantleCarvingComponent extends IrisMantleComponent {
private final int radius = computeRadius(); private final int radius = computeRadius();

View File

@ -19,6 +19,7 @@
package com.volmit.iris.engine.mantle.components; package com.volmit.iris.engine.mantle.components;
import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.mantle.ComponentFlag;
import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.mantle.MantleWriter;
@ -32,6 +33,7 @@ import com.volmit.iris.util.math.RNG;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@ComponentFlag(MantleFlag.FLUID_BODIES)
public class MantleFluidBodyComponent extends IrisMantleComponent { public class MantleFluidBodyComponent extends IrisMantleComponent {
private final int radius = computeRadius(); private final int radius = computeRadius();

View File

@ -19,6 +19,7 @@
package com.volmit.iris.engine.mantle.components; package com.volmit.iris.engine.mantle.components;
import com.volmit.iris.engine.jigsaw.PlannedStructure; import com.volmit.iris.engine.jigsaw.PlannedStructure;
import com.volmit.iris.engine.mantle.ComponentFlag;
import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.mantle.MantleWriter;
@ -39,6 +40,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.List;
@ComponentFlag(MantleFlag.JIGSAW)
public class MantleJigsawComponent extends IrisMantleComponent { public class MantleJigsawComponent extends IrisMantleComponent {
@Getter @Getter
private final int radius = computeRadius(); private final int radius = computeRadius();

View File

@ -20,6 +20,7 @@ package com.volmit.iris.engine.mantle.components;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.mantle.ComponentFlag;
import com.volmit.iris.engine.mantle.EngineMantle; import com.volmit.iris.engine.mantle.EngineMantle;
import com.volmit.iris.engine.mantle.IrisMantleComponent; import com.volmit.iris.engine.mantle.IrisMantleComponent;
import com.volmit.iris.engine.mantle.MantleWriter; import com.volmit.iris.engine.mantle.MantleWriter;
@ -47,6 +48,7 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@Getter @Getter
@ComponentFlag(MantleFlag.OBJECT)
public class MantleObjectComponent extends IrisMantleComponent { public class MantleObjectComponent extends IrisMantleComponent {
private final int radius = computeRadius(); private final int radius = computeRadius();

View File

@ -28,11 +28,13 @@ import com.volmit.iris.core.nms.datapack.IDataFixer;
import com.volmit.iris.core.nms.datapack.IDataFixer.Dimension; import com.volmit.iris.core.nms.datapack.IDataFixer.Dimension;
import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.*; import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.engine.object.annotations.functions.ComponentFlagFunction;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.data.DataProvider; import com.volmit.iris.util.data.DataProvider;
import com.volmit.iris.util.io.IO; import com.volmit.iris.util.io.IO;
import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.json.JSONObject;
import com.volmit.iris.util.mantle.MantleFlag;
import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.Position2;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG; import com.volmit.iris.util.noise.CNG;
@ -238,6 +240,10 @@ public class IrisDimension extends IrisRegistrant {
@MaxNumber(318) @MaxNumber(318)
@Desc("The Subterrain Fluid Layer Height") @Desc("The Subterrain Fluid Layer Height")
private int caveLavaHeight = 8; private int caveLavaHeight = 8;
@RegistryListFunction(ComponentFlagFunction.class)
@ArrayType(type = MantleFlag.class)
@Desc("Collection of disabled components")
private KList<MantleFlag> disabledComponents = new KList<>();
public int getMaxHeight() { public int getMaxHeight() {
return (int) getDimensionHeight().getMax(); return (int) getDimensionHeight().getMax();

View File

@ -0,0 +1,37 @@
package com.volmit.iris.engine.object.annotations.functions;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.framework.ListFunction;
import com.volmit.iris.engine.mantle.ComponentFlag;
import com.volmit.iris.engine.mantle.MantleComponent;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.mantle.MantleFlag;
import java.util.Objects;
public class ComponentFlagFunction implements ListFunction<KList<String>> {
@Override
public String key() {
return "component-flag";
}
@Override
public String fancyName() {
return "Component Flag";
}
@Override
public KList<String> apply(IrisData data) {
var engine = data.getEngine();
if (engine != null) return engine.getMantle().getComponentFlags().toStringList();
return Iris.getClasses("com.volmit.iris.engine.mantle.components", ComponentFlag.class)
.stream()
.filter(MantleComponent.class::isAssignableFrom)
.map(c -> c.getDeclaredAnnotation(ComponentFlag.class))
.filter(Objects::nonNull)
.map(ComponentFlag::value)
.map(MantleFlag::toString)
.collect(KList.collector());
}
}