From 0dc0d5c981e4d2fed07bd0181ae925db4edb711e Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sun, 12 Sep 2021 08:37:57 -0400 Subject: [PATCH] Markers --- .../com/volmit/iris/core/loader/IrisData.java | 7 +++ .../volmit/iris/engine/object/IrisMarker.java | 63 +++++++++++++++++++ .../iris/engine/object/IrisObjectMarker.java | 57 +++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 src/main/java/com/volmit/iris/engine/object/IrisMarker.java create mode 100644 src/main/java/com/volmit/iris/engine/object/IrisObjectMarker.java diff --git a/src/main/java/com/volmit/iris/core/loader/IrisData.java b/src/main/java/com/volmit/iris/core/loader/IrisData.java index 3ba37bb9e..cd2949cda 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -42,6 +42,7 @@ import com.volmit.iris.engine.object.IrisJigsawPiece; import com.volmit.iris.engine.object.IrisJigsawPool; import com.volmit.iris.engine.object.IrisJigsawStructure; import com.volmit.iris.engine.object.IrisLootTable; +import com.volmit.iris.engine.object.IrisMarker; import com.volmit.iris.engine.object.IrisMod; import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.engine.object.IrisRavine; @@ -79,6 +80,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { private ResourceLoader jigsawPoolLoader; private ResourceLoader jigsawStructureLoader; private ResourceLoader entityLoader; + private ResourceLoader markerLoader; private ResourceLoader spawnerLoader; private ResourceLoader modLoader; private ResourceLoader blockLoader; @@ -176,6 +178,10 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false)); } + public static IrisMarker loadAnyMarker(String key) { + return loadAny(key, (dm) -> dm.getMarkerLoader().load(key, false)); + } + public static IrisCave loadAnyCave(String key) { return loadAny(key, (dm) -> dm.getCaveLoader().load(key, false)); } @@ -324,6 +330,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { this.jigsawPieceLoader = registerLoader(IrisJigsawPiece.class); this.generatorLoader = registerLoader(IrisGenerator.class); this.caveLoader = registerLoader(IrisCave.class); + this.markerLoader = registerLoader(IrisMarker.class); this.ravineLoader = registerLoader(IrisRavine.class); this.blockLoader = registerLoader(IrisBlockData.class); this.expressionLoader = registerLoader(IrisExpression.class); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisMarker.java b/src/main/java/com/volmit/iris/engine/object/IrisMarker.java new file mode 100644 index 000000000..b2fa8a2db --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/object/IrisMarker.java @@ -0,0 +1,63 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.object; + +import com.volmit.iris.core.loader.IrisRegistrant; +import com.volmit.iris.engine.object.annotations.ArrayType; +import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.MaxNumber; +import com.volmit.iris.engine.object.annotations.MinNumber; +import com.volmit.iris.engine.object.annotations.RegistryListResource; +import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.json.JSONObject; +import com.volmit.iris.util.plugin.VolmitSender; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +@Desc("Represents a marker") +@Data +@EqualsAndHashCode(callSuper = false) +public class IrisMarker extends IrisRegistrant { + @Desc("A list of spawners to add to anywhere this marker is. Note markers can only support initial spawns!") + @RegistryListResource(IrisSpawner.class) + @ArrayType(type = String.class, min = 1) + private KList spawners = new KList<>(); + + @Override + public String getFolderName() { + return "markers"; + } + + @Override + public String getTypeName() { + return "Marker"; + } + + @Override + public void scanForErrors(JSONObject p, VolmitSender sender) { + + } +} diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObjectMarker.java b/src/main/java/com/volmit/iris/engine/object/IrisObjectMarker.java new file mode 100644 index 000000000..c8f421684 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/object/IrisObjectMarker.java @@ -0,0 +1,57 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.object; + +import com.volmit.iris.engine.object.annotations.ArrayType; +import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.MaxNumber; +import com.volmit.iris.engine.object.annotations.MinNumber; +import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.engine.object.annotations.Snippet; +import com.volmit.iris.util.collection.KList; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Snippet("object-marker") +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Desc("Find blocks to mark") +@Data +public class IrisObjectMarker { + @ArrayType(min = 1, type = IrisBlockData.class) + @Required + @Desc("Find block types to mark") + private KList mark = new KList<>(); + + @MinNumber(1) + @MaxNumber(16) + @Desc("The maximum amount of markers to place. Use these sparingly!") + private int maximumMarkers = 8; + + @MinNumber(0.01) + @MaxNumber(1) + @Desc("The percentage of blocks in this object to check.") + private double checkRatio = 0.33; + + @Desc("If true, markers will only be placed here if there is 2 air blocks above it.") + private boolean emptyAbove = true; +}