From 1db8603910633ad42d3c5192f1c27e398c888709 Mon Sep 17 00:00:00 2001 From: CocoTheOwner <65736624+CocoTheOwner@users.noreply.github.com> Date: Tue, 3 May 2022 20:11:09 +0200 Subject: [PATCH 01/25] Replace MV with bukkit --- src/main/java/com/volmit/iris/core/commands/CommandIris.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index c3e5a7f1e..568137c4b 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -76,7 +76,7 @@ public class CommandIris implements DecreeExecutor { return; } - sender().sendMessage(C.RED + "You should not be using this command to create new worlds. Instead, use /mvc " + name + " NORMAL -g Iris:" + type.getName()); + sender().sendMessage(C.RED + "You should not be using this command to create new worlds. Instead, use the tutorial: https://docs.volmit.com/iris/getting-started"); try { IrisToolbelt.createWorld() From b8b9d7bf8c406936ad02bde942180086081e8453 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Thu, 12 May 2022 19:11:02 +0200 Subject: [PATCH 02/25] Added external block data registry. --- src/main/java/com/volmit/iris/Iris.java | 17 +-- .../iris/core/link/BlockDataProvider.java | 35 ++++++ .../volmit/iris/core/link/ItemAdderLink.java | 22 ++++ .../iris/core/link/OraxenDataProvider.java | 95 +++++++++++++++ .../com/volmit/iris/core/link/OraxenLink.java | 113 ------------------ .../iris/core/service/CustomBlockDataSVC.java | 67 +++++++++++ .../volmit/iris/core/service/RegistrySVC.java | 41 ------- .../java/com/volmit/iris/util/data/B.java | 46 +++---- 8 files changed, 234 insertions(+), 202 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/link/BlockDataProvider.java create mode 100644 src/main/java/com/volmit/iris/core/link/ItemAdderLink.java create mode 100644 src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java delete mode 100644 src/main/java/com/volmit/iris/core/link/OraxenLink.java create mode 100644 src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java delete mode 100644 src/main/java/com/volmit/iris/core/service/RegistrySVC.java diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 16ef33507..1669c56dc 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -20,25 +20,18 @@ package com.volmit.iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.ServerConfigurator; -import com.volmit.iris.core.link.IrisPapiExpansion; -import com.volmit.iris.core.link.MultiverseCoreLink; -import com.volmit.iris.core.link.MythicMobsLink; -import com.volmit.iris.core.link.OraxenLink; +import com.volmit.iris.core.link.*; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.service.StudioSVC; -import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.EnginePanic; -import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisCompat; import com.volmit.iris.engine.object.IrisDimension; -import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.engine.platform.BukkitChunkGenerator; import com.volmit.iris.engine.platform.DummyChunkGenerator; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.data.B; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; @@ -46,8 +39,6 @@ import com.volmit.iris.util.function.NastyRunnable; import com.volmit.iris.util.io.*; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.IrisMatter; -import com.volmit.iris.util.matter.Matter; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.plugin.Metrics; @@ -63,16 +54,12 @@ import net.kyori.adventure.text.serializer.ComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.WorldCreator; -import org.bukkit.block.data.BlockData; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -100,7 +87,6 @@ public class Iris extends VolmitPlugin implements Listener { public static Iris instance; public static BukkitAudiences audiences; public static MultiverseCoreLink linkMultiverseCore; - public static OraxenLink linkOraxen; public static MythicMobsLink linkMythicMobs; public static IrisCompat compat; public static FileWatcher configWatcher; @@ -405,7 +391,6 @@ public class Iris extends VolmitPlugin implements Listener { instance = this; compat = IrisCompat.configured(getDataFile("compat.json")); linkMultiverseCore = new MultiverseCoreLink(); - linkOraxen = new OraxenLink(); linkMythicMobs = new MythicMobsLink(); configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java new file mode 100644 index 000000000..c058ea200 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java @@ -0,0 +1,35 @@ +package com.volmit.iris.core.link; + +import com.volmit.iris.util.collection.KList; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.bukkit.Bukkit; +import org.bukkit.block.data.BlockData; +import org.bukkit.plugin.Plugin; + +import java.util.MissingResourceException; + +@RequiredArgsConstructor +public abstract class BlockDataProvider { + + @Getter + private final String pluginId, identifierPrefix; + + public Plugin getPlugin() { + return Bukkit.getPluginManager().getPlugin(pluginId); + } + + public boolean isPresent() { + return getPlugin() != null; + } + + public abstract BlockData getBlockData(String blockId) throws MissingResourceException; + + public String[] getBlockIdentifiers() { + KList names = new KList<>(getBlockTypes()); + names.rewrite(s -> identifierPrefix + ":" + s); + return names.toArray(new String[0]); + } + + public abstract String[] getBlockTypes(); +} diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java new file mode 100644 index 000000000..a1ffd06b1 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java @@ -0,0 +1,22 @@ +package com.volmit.iris.core.link; + +import org.bukkit.block.data.BlockData; + +import java.util.MissingResourceException; + +public class ItemAdderLink extends BlockDataProvider { + + public ItemAdderLink() { + super("ItemAdder", "itemadder"); + } + + @Override + public BlockData getBlockData(String blockId) throws MissingResourceException { + throw new MissingResourceException("Fuck you, not implemented yet.", getPluginId(), blockId); + } + + @Override + public String[] getBlockTypes() { + return new String[0]; + } +} diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java new file mode 100644 index 000000000..4957df4de --- /dev/null +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -0,0 +1,95 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2022 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.core.link; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KList; +import io.th0rgal.oraxen.items.OraxenItems; +import io.th0rgal.oraxen.mechanics.MechanicFactory; +import io.th0rgal.oraxen.mechanics.MechanicsManager; +import io.th0rgal.oraxen.mechanics.provided.gameplay.block.BlockMechanic; +import io.th0rgal.oraxen.mechanics.provided.gameplay.block.BlockMechanicFactory; +import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanicFactory; +import io.th0rgal.oraxen.utils.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.MultipleFacing; + +import java.lang.reflect.Field; +import java.util.Map; +import java.util.MissingResourceException; + +public class OraxenDataProvider extends BlockDataProvider { + + private static final String FIELD_FACTORIES_MAP = "FACTORIES_BY_MECHANIC_ID"; + + private Map factories; + + public OraxenDataProvider() { + super("Oraxen", "oraxen"); + + try { + Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); + f.setAccessible(true); + factories = (Map) f.get(null); + } catch(NoSuchFieldException | IllegalAccessException e) { + Iris.error("Failed to set up Oraxen Link:"); + Iris.error("\t" + e.getClass().getSimpleName()); + } + } + + @Override + public BlockData getBlockData(String blockId) throws MissingResourceException { + MechanicFactory f = getFactory(blockId); + if(f instanceof NoteBlockMechanicFactory) + return ((NoteBlockMechanicFactory)f).createNoteBlockData(blockId); + else if(f instanceof BlockMechanicFactory) { + MultipleFacing newBlockData = (MultipleFacing) Bukkit.createBlockData(Material.MUSHROOM_STEM); + Utils.setBlockFacing(newBlockData, ((BlockMechanic)f.getMechanic(blockId)).getCustomVariation()); + return newBlockData; + } else + throw new MissingResourceException("Failed to find BlockData!", getIdentifierPrefix(), blockId); + } + + @Override + public String[] getBlockTypes() { + KList names = new KList<>(); + for(String name : OraxenItems.getItemNames()) { + try { + if(getBlockData(name) != null) + names.add(name); + } catch(MissingResourceException ignored) { } + } + + return names.toArray(new String[0]); + } + + @Override + public boolean isPresent() { + return super.isPresent() && factories != null; + } + + private MechanicFactory getFactory(String blockId) throws MissingResourceException { + return factories.values().stream() + .filter(i -> i.getItems().contains(blockId)) + .findFirst() + .orElseThrow(() -> new MissingResourceException("Failed to find BlockData!", getPluginId(), blockId)); + } +} diff --git a/src/main/java/com/volmit/iris/core/link/OraxenLink.java b/src/main/java/com/volmit/iris/core/link/OraxenLink.java deleted file mode 100644 index 3c3c36eec..000000000 --- a/src/main/java/com/volmit/iris/core/link/OraxenLink.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2022 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.core.link; - -import com.volmit.iris.util.collection.KList; -import io.th0rgal.oraxen.items.OraxenItems; -import io.th0rgal.oraxen.mechanics.Mechanic; -import io.th0rgal.oraxen.mechanics.MechanicFactory; -import io.th0rgal.oraxen.mechanics.MechanicsManager; -import io.th0rgal.oraxen.mechanics.provided.gameplay.block.BlockMechanic; -import io.th0rgal.oraxen.mechanics.provided.gameplay.block.BlockMechanicFactory; -import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanicFactory; -import io.th0rgal.oraxen.utils.Utils; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.MultipleFacing; -import org.bukkit.plugin.Plugin; - -import java.lang.reflect.Field; -import java.util.Map; - -public class OraxenLink { - private static final String[] EMPTY = new String[0]; - - public boolean supported() { - return getOraxen() != null; - } - - public BlockData getBlockDataFor(String id) { - if(!supported()) { - return null; - } - - MechanicFactory f = getFactory(id); - - if(f == null) { - return null; - } - - Mechanic m = f.getMechanic(id); - - // TODO: Why isnt there a simple getBlockData() function? - if(m.getFactory() instanceof NoteBlockMechanicFactory) { - return ((NoteBlockMechanicFactory) m.getFactory()).createNoteBlockData(id); - } else if(m.getFactory() instanceof BlockMechanicFactory) { - MultipleFacing newBlockData = (MultipleFacing) Bukkit.createBlockData(Material.MUSHROOM_STEM); - Utils.setBlockFacing(newBlockData, ((BlockMechanic) m).getCustomVariation()); - return newBlockData; - } - - return null; - } - - public MechanicFactory getFactory(String id) { - if(!supported()) { - return null; - } - - try { - Field f = MechanicsManager.class.getDeclaredField("FACTORIES_BY_MECHANIC_ID"); - f.setAccessible(true); - Map map = (Map) f.get(null); - - for(MechanicFactory i : map.values()) { - if(i.getItems().contains(id)) { - return i; - } - } - } catch(Throwable e) { - e.printStackTrace(); - } - - return null; - } - - public String[] getItemTypes() { - if(!supported()) { - return EMPTY; - } - - KList v = new KList<>(); - - for(String i : OraxenItems.getItemNames()) { - if(getBlockDataFor(i) != null) { - v.add(i); - } - } - - return v.toArray(new String[0]); - } - - public Plugin getOraxen() { - - return Bukkit.getPluginManager().getPlugin("Oraxen"); - } -} diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java new file mode 100644 index 000000000..293983ee1 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -0,0 +1,67 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2022 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.core.service; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.link.BlockDataProvider; +import com.volmit.iris.core.link.ItemAdderLink; +import com.volmit.iris.core.link.OraxenDataProvider; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.plugin.IrisService; +import lombok.Data; +import org.bukkit.block.data.BlockData; + +import java.util.MissingResourceException; +import java.util.Optional; + +@Data +public class CustomBlockDataSVC implements IrisService { + + private KList providers = new KList<>(); + + @Override + public void onEnable() { + addProvider(new OraxenDataProvider(), new ItemAdderLink()); + } + + @Override + public void onDisable() { } + + public void addProvider(BlockDataProvider... provider) { + providers.add(provider); + } + + public Optional getBlockData(String namespace, String key) { + Optional provider = providers.stream().filter(p -> p.isPresent() && p.getIdentifierPrefix().equalsIgnoreCase(namespace)).findFirst(); + if(provider.isEmpty()) + return Optional.empty(); + try { + return Optional.of(provider.get().getBlockData(key)); + } catch(MissingResourceException e) { + Iris.error(e.getMessage() + " - [" + e.getClassName() + ":" + e.getKey() + "]"); + return Optional.empty(); + } + } + + public String[] getAllIdentifiers() { + KList names = new KList<>(); + providers.forEach(p -> names.add(p.getBlockIdentifiers())); + return names.toArray(new String[0]); + } +} diff --git a/src/main/java/com/volmit/iris/core/service/RegistrySVC.java b/src/main/java/com/volmit/iris/core/service/RegistrySVC.java deleted file mode 100644 index f5b126e6b..000000000 --- a/src/main/java/com/volmit/iris/core/service/RegistrySVC.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2022 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.core.service; - -import com.volmit.iris.util.plugin.IrisService; -import com.volmit.iris.util.plugin.PluginRegistryGroup; -import lombok.Data; -import org.bukkit.block.data.BlockData; - -import java.util.function.Supplier; - -@Data -public class RegistrySVC implements IrisService { - private PluginRegistryGroup> customBlockRegistry; - - @Override - public void onEnable() { - customBlockRegistry = new PluginRegistryGroup<>(); - } - - @Override - public void onDisable() { - - } -} diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 72dff8a99..95885f446 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -20,7 +20,7 @@ package com.volmit.iris.util.data; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.core.service.RegistrySVC; +import com.volmit.iris.core.service.CustomBlockDataSVC; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.scheduling.ChronoLatch; @@ -35,12 +35,11 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Leaves; import org.bukkit.block.data.type.PointedDripstone; -import org.checkerframework.checker.units.qual.K; import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import java.util.function.Supplier; +import java.util.Optional; import java.util.stream.Collectors; import static org.bukkit.Material.*; @@ -471,23 +470,19 @@ public class B { BlockData bx = null; if(!ix.startsWith("minecraft:")) { - if(ix.startsWith("oraxen:") && Iris.linkOraxen.supported()) { - bx = Iris.linkOraxen.getBlockDataFor(ix.split("\\Q:\\E")[1]); - } - - if(bx == null) { - try { - if(ix.contains(":")) { - String[] v = ix.toLowerCase().split("\\Q:\\E"); - Supplier b = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(v[0], v[1]); - - if(b != null) { - bx = b.get(); - } + try { + if(ix.contains(":")) { + String[] id = ix.toLowerCase().split("\\Q:\\E"); + Optional bd = Iris.service(CustomBlockDataSVC.class).getBlockData(id[0], id[1]); + if(bd.isPresent()) { + bx = bd.get(); + } else { + /*Supplier sup = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(id[0], id[1]); + bx = sup == null ? null : sup.get();*/ } - } catch(Throwable e) { - e.printStackTrace();// TODO: REMOVE } + } catch(Throwable e) { + e.printStackTrace();// TODO: REMOVE } } @@ -661,22 +656,9 @@ public class B { } } - try { - for(String i : Iris.linkOraxen.getItemTypes()) { - bt.add("oraxen:" + i); - } - } catch(Throwable e) { - e.printStackTrace(); - } - + bt.add(Iris.service(CustomBlockDataSVC.class).getAllIdentifiers()); bt.addAll(custom.k()); - try { - bt.addAll(Iris.service(RegistrySVC.class).getCustomBlockRegistry().compile()); - } catch(Throwable e) { - e.printStackTrace(); - } - return bt.toArray(new String[0]); } From 192538a741c18709cb58b6f16cf52cc48614ee2b Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Fri, 13 May 2022 23:25:27 +0200 Subject: [PATCH 03/25] ItemAdder link --- build.gradle | 2 ++ .../iris/core/link/BlockDataProvider.java | 14 +++----- .../volmit/iris/core/link/ItemAdderLink.java | 26 ++++++++++++--- .../iris/core/link/OraxenDataProvider.java | 33 +++++++++++-------- .../iris/core/service/CustomBlockDataSVC.java | 13 ++++---- .../java/com/volmit/iris/util/data/B.java | 24 +++++--------- 6 files changed, 63 insertions(+), 49 deletions(-) diff --git a/build.gradle b/build.gradle index d926c5a29..520275ac5 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,7 @@ repositories { maven { url "https://dl.cloudsmith.io/public/arcane/archive/maven/" } mavenCentral() mavenLocal() + maven { url "https://jitpack.io"} } /** @@ -126,6 +127,7 @@ dependencies { implementation 'me.clip:placeholderapi:2.11.1' implementation 'io.th0rgal:oraxen:1.94.0' implementation 'org.bukkit:craftbukkit:1.18.2-R0.1-SNAPSHOT:remapped-mojang' + implementation 'com.github.LoneDev6:api-itemsadder:3.1.0b' // Shaded implementation 'com.dfsek:Paralithic:0.4.0' diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java index c058ea200..0e9c31e76 100644 --- a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java @@ -1,9 +1,9 @@ package com.volmit.iris.core.link; -import com.volmit.iris.util.collection.KList; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.plugin.Plugin; @@ -13,7 +13,7 @@ import java.util.MissingResourceException; public abstract class BlockDataProvider { @Getter - private final String pluginId, identifierPrefix; + private final String pluginId; public Plugin getPlugin() { return Bukkit.getPluginManager().getPlugin(pluginId); @@ -23,13 +23,9 @@ public abstract class BlockDataProvider { return getPlugin() != null; } - public abstract BlockData getBlockData(String blockId) throws MissingResourceException; + public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException; - public String[] getBlockIdentifiers() { - KList names = new KList<>(getBlockTypes()); - names.rewrite(s -> identifierPrefix + ":" + s); - return names.toArray(new String[0]); - } + public abstract NamespacedKey[] getBlockTypes(); - public abstract String[] getBlockTypes(); + public abstract boolean isProviderBlock(NamespacedKey namespace); } diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java index a1ffd06b1..e7ec9017f 100644 --- a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java @@ -1,5 +1,9 @@ package com.volmit.iris.core.link; +import com.volmit.iris.util.collection.KList; +import dev.lone.itemsadder.api.CustomBlock; +import dev.lone.itemsadder.api.ItemsAdder; +import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import java.util.MissingResourceException; @@ -7,16 +11,28 @@ import java.util.MissingResourceException; public class ItemAdderLink extends BlockDataProvider { public ItemAdderLink() { - super("ItemAdder", "itemadder"); + super("ItemsAdder"); } @Override - public BlockData getBlockData(String blockId) throws MissingResourceException { - throw new MissingResourceException("Fuck you, not implemented yet.", getPluginId(), blockId); + public BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException { + return CustomBlock.getBaseBlockData(blockId.toString()); } @Override - public String[] getBlockTypes() { - return new String[0]; + public NamespacedKey[] getBlockTypes() { + KList keys = new KList<>(); + for(String s : ItemsAdder.getNamespacedBlocksNamesInConfig()) + keys.add(NamespacedKey.fromString(s)); + return keys.toArray(new NamespacedKey[0]); + } + + @Override + public boolean isProviderBlock(NamespacedKey blockId) { + for(NamespacedKey k : getBlockTypes()) + if(k.equals(blockId)) { + return true; + } + return false; } } diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 4957df4de..dcca40fad 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -29,6 +29,7 @@ import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanic import io.th0rgal.oraxen.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; @@ -43,7 +44,7 @@ public class OraxenDataProvider extends BlockDataProvider { private Map factories; public OraxenDataProvider() { - super("Oraxen", "oraxen"); + super("Oraxen"); try { Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); @@ -56,29 +57,30 @@ public class OraxenDataProvider extends BlockDataProvider { } @Override - public BlockData getBlockData(String blockId) throws MissingResourceException { + public BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException { MechanicFactory f = getFactory(blockId); if(f instanceof NoteBlockMechanicFactory) - return ((NoteBlockMechanicFactory)f).createNoteBlockData(blockId); + return ((NoteBlockMechanicFactory)f).createNoteBlockData(blockId.getKey()); else if(f instanceof BlockMechanicFactory) { MultipleFacing newBlockData = (MultipleFacing) Bukkit.createBlockData(Material.MUSHROOM_STEM); - Utils.setBlockFacing(newBlockData, ((BlockMechanic)f.getMechanic(blockId)).getCustomVariation()); + Utils.setBlockFacing(newBlockData, ((BlockMechanic)f.getMechanic(blockId.getKey())).getCustomVariation()); return newBlockData; } else - throw new MissingResourceException("Failed to find BlockData!", getIdentifierPrefix(), blockId); + throw new MissingResourceException("Failed to find BlockData!", blockId.getNamespace(), blockId.getKey()); } @Override - public String[] getBlockTypes() { - KList names = new KList<>(); + public NamespacedKey[] getBlockTypes() { + KList names = new KList<>(); for(String name : OraxenItems.getItemNames()) { try { - if(getBlockData(name) != null) - names.add(name); + NamespacedKey key = new NamespacedKey("oraxen", name); + if(getBlockData(key) != null) + names.add(key); } catch(MissingResourceException ignored) { } } - return names.toArray(new String[0]); + return names.toArray(new NamespacedKey[0]); } @Override @@ -86,10 +88,15 @@ public class OraxenDataProvider extends BlockDataProvider { return super.isPresent() && factories != null; } - private MechanicFactory getFactory(String blockId) throws MissingResourceException { + @Override + public boolean isProviderBlock(NamespacedKey key) { + return key.getNamespace().equalsIgnoreCase("oraxen"); + } + + private MechanicFactory getFactory(NamespacedKey key) throws MissingResourceException { return factories.values().stream() - .filter(i -> i.getItems().contains(blockId)) + .filter(i -> i.getItems().contains(key.getKey())) .findFirst() - .orElseThrow(() -> new MissingResourceException("Failed to find BlockData!", getPluginId(), blockId)); + .orElseThrow(() -> new MissingResourceException("Failed to find BlockData!", key.getNamespace(), key.getKey())); } } diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java index 293983ee1..3c036a193 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -25,6 +25,7 @@ import com.volmit.iris.core.link.OraxenDataProvider; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.IrisService; import lombok.Data; +import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import java.util.MissingResourceException; @@ -47,8 +48,8 @@ public class CustomBlockDataSVC implements IrisService { providers.add(provider); } - public Optional getBlockData(String namespace, String key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.getIdentifierPrefix().equalsIgnoreCase(namespace)).findFirst(); + public Optional getBlockData(NamespacedKey key) { + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isProviderBlock(key)).findFirst(); if(provider.isEmpty()) return Optional.empty(); try { @@ -59,9 +60,9 @@ public class CustomBlockDataSVC implements IrisService { } } - public String[] getAllIdentifiers() { - KList names = new KList<>(); - providers.forEach(p -> names.add(p.getBlockIdentifiers())); - return names.toArray(new String[0]); + public NamespacedKey[] getAllIdentifiers() { + KList names = new KList<>(); + providers.forEach(p -> names.add(p.getBlockTypes())); + return names.toArray(new NamespacedKey[0]); } } diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 95885f446..855b38247 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -31,6 +31,7 @@ import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.ints.IntSets; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Leaves; @@ -469,21 +470,11 @@ public class B { try { BlockData bx = null; - if(!ix.startsWith("minecraft:")) { - try { - if(ix.contains(":")) { - String[] id = ix.toLowerCase().split("\\Q:\\E"); - Optional bd = Iris.service(CustomBlockDataSVC.class).getBlockData(id[0], id[1]); - if(bd.isPresent()) { - bx = bd.get(); - } else { - /*Supplier sup = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(id[0], id[1]); - bx = sup == null ? null : sup.get();*/ - } - } - } catch(Throwable e) { - e.printStackTrace();// TODO: REMOVE - } + if(!ix.startsWith("minecraft:") && ix.contains(":")) { + NamespacedKey key = NamespacedKey.fromString(ix); + Optional bd = Iris.service(CustomBlockDataSVC.class).getBlockData(key); + if(bd.isPresent()) + bx = bd.get(); } if(bx == null) { @@ -656,7 +647,8 @@ public class B { } } - bt.add(Iris.service(CustomBlockDataSVC.class).getAllIdentifiers()); + for(NamespacedKey id : Iris.service(CustomBlockDataSVC.class).getAllIdentifiers()) + bt.add(id.toString()); bt.addAll(custom.k()); return bt.toArray(new String[0]); From 5658d6709ca954e22d1d3f95cbb36339df601fdd Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 18:29:57 +0200 Subject: [PATCH 04/25] Fixed Oraxen, and custom dimension height. --- .../iris/core/link/OraxenDataProvider.java | 17 ++++++----- .../iris/core/service/CustomBlockDataSVC.java | 2 +- .../iris/engine/object/IrisDimension.java | 30 +++++++++---------- .../engine/platform/BukkitChunkGenerator.java | 1 + 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index dcca40fad..0907d7d67 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -45,14 +45,15 @@ public class OraxenDataProvider extends BlockDataProvider { public OraxenDataProvider() { super("Oraxen"); - - try { - Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); - f.setAccessible(true); - factories = (Map) f.get(null); - } catch(NoSuchFieldException | IllegalAccessException e) { - Iris.error("Failed to set up Oraxen Link:"); - Iris.error("\t" + e.getClass().getSimpleName()); + if(getPlugin() != null) { + try { + Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); + f.setAccessible(true); + factories = (Map) f.get(null); + } catch(NoSuchFieldException | IllegalAccessException e) { + Iris.error("Failed to set up Oraxen Link:"); + Iris.error("\t" + e.getClass().getSimpleName()); + } } } diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java index 3c036a193..47ec56e87 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -62,7 +62,7 @@ public class CustomBlockDataSVC implements IrisService { public NamespacedKey[] getAllIdentifiers() { KList names = new KList<>(); - providers.forEach(p -> names.add(p.getBlockTypes())); + providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); return names.toArray(new NamespacedKey[0]); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 9997cc93b..597ba4c98 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -74,6 +74,7 @@ public class IrisDimension extends IrisRegistrant { @MaxNumber(2032) @Desc("Maximum height at which players can be teleported to through gameplay.") private int logicalHeight = 256; + @RegistryListResource(IrisJigsawStructure.class) @Desc("If defined, Iris will place the given jigsaw structure where minecraft should place the overworld stronghold.") private String stronghold; @@ -405,19 +406,20 @@ public class IrisDimension extends IrisRegistrant { } } - /* if(!dimensionHeight.equals(new IrisRange(-64, 320))) { - File dimType = new File(datapacks, "iris/data/minecraft/dimension_type/" + getLoadKey().toLowerCase() + ".json"); - if(!dimType.exists()) - changed = true; + if(!dimensionHeight.equals(new IrisRange(-64, 320)) && this.name.equalsIgnoreCase("overworld")) { + File dimType = new File(datapacks, "iris/data/minecraft/dimension_type/overworld.json"); + if(!dimType.exists()) + changed = true; - Iris.verbose(" Installing Data Pack Dimension Type: " + dimType.getPath()); - dimType.getParentFile().mkdirs(); - try { - IO.writeAll(dimType, generateDatapackJson()); - } catch(IOException e) { - Iris.reportError(e); - e.printStackTrace(); - }*/ + Iris.verbose(" Installing Data Pack Dimension Type: " + dimType.getPath()); + dimType.getParentFile().mkdirs(); + try { + IO.writeAll(dimType, generateDatapackJson()); + } catch(IOException e) { + Iris.reportError(e); + e.printStackTrace(); + } + } if(write) { File mcm = new File(datapacks, "iris/pack.mcmeta"); @@ -465,19 +467,17 @@ public class IrisDimension extends IrisRegistrant { private static final String DP_OVERWORLD_DEFAULT = """ { - "name": "minecraft:overworld", "ultrawarm": false, "natural": true, "coordinate_scale": 1.0, "has_skylight": true, "has_ceiling": false, "ambient_light": 0, - "fixed_time": false, "piglin_safe": false, "bed_works": true, "respawn_anchor_works": false, "has_raids": true, - "infiniburn": "infiniburn_overworld", + "infiniburn": "#minecraft:infiniburn_overworld", "effects": "minecraft:overworld" }"""; } diff --git a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java index 45b08c037..c21e9eff1 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -165,6 +165,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun continue; } + Iris.warn("Min: " + world.getMinHeight() + " | Max: " + world.getMaxHeight()); c.getBlock(xx, yy + (finalI << 4) + world.getMinHeight(), zz) .setBlockData(tc.getBlockData(xx, yy + (finalI << 4) + world.getMinHeight(), zz), false); } From c3de8b33de6b2bfd10ac4db1945a382b99c1f0a6 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 19:03:18 +0200 Subject: [PATCH 05/25] Fixed Oraxen, and custom dimension height. --- .../iris/core/link/BlockDataProvider.java | 2 ++ .../volmit/iris/core/link/ItemAdderLink.java | 3 +++ .../iris/core/link/OraxenDataProvider.java | 22 +++++++++---------- .../iris/core/service/CustomBlockDataSVC.java | 6 ++++- .../engine/platform/BukkitChunkGenerator.java | 2 -- src/main/resources/plugin.yml | 3 ++- 6 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java index 0e9c31e76..0af0b6274 100644 --- a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java @@ -23,6 +23,8 @@ public abstract class BlockDataProvider { return getPlugin() != null; } + public abstract void init(); + public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException; public abstract NamespacedKey[] getBlockTypes(); diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java index e7ec9017f..d601196ac 100644 --- a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java @@ -14,6 +14,9 @@ public class ItemAdderLink extends BlockDataProvider { super("ItemsAdder"); } + @Override + public void init() { } + @Override public BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException { return CustomBlock.getBaseBlockData(blockId.toString()); diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 0907d7d67..7b7a110d2 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -43,17 +43,17 @@ public class OraxenDataProvider extends BlockDataProvider { private Map factories; - public OraxenDataProvider() { - super("Oraxen"); - if(getPlugin() != null) { - try { - Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); - f.setAccessible(true); - factories = (Map) f.get(null); - } catch(NoSuchFieldException | IllegalAccessException e) { - Iris.error("Failed to set up Oraxen Link:"); - Iris.error("\t" + e.getClass().getSimpleName()); - } + public OraxenDataProvider() { super("Oraxen"); } + + @Override + public void init() { + try { + Field f = MechanicsManager.class.getDeclaredField(FIELD_FACTORIES_MAP); + f.setAccessible(true); + factories = (Map) f.get(null); + } catch(NoSuchFieldException | IllegalAccessException e) { + Iris.error("Failed to set up Oraxen Link:"); + Iris.error("\t" + e.getClass().getSimpleName()); } } diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java index 47ec56e87..aa06c0787 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -45,7 +45,11 @@ public class CustomBlockDataSVC implements IrisService { public void onDisable() { } public void addProvider(BlockDataProvider... provider) { - providers.add(provider); + for(BlockDataProvider p : provider) { + if(p.getPlugin() != null) + providers.add(p); + p.init(); + } } public Optional getBlockData(NamespacedKey key) { diff --git a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java index c21e9eff1..6ff5edc6e 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -164,8 +164,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun if(yy + (finalI << 4) >= engine.getHeight() || yy + (finalI << 4) < 0) { continue; } - - Iris.warn("Min: " + world.getMinHeight() + " | Max: " + world.getMaxHeight()); c.getBlock(xx, yy + (finalI << 4) + world.getMinHeight(), zz) .setBlockData(tc.getBlockData(xx, yy + (finalI << 4) + world.getMinHeight(), zz), false); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9bb9bcdc0..90814f4b2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -21,4 +21,5 @@ commands: iris: aliases: [ ir, irs ] api-version: ${apiversion} -hotload-dependencies: false \ No newline at end of file +hotload-dependencies: false +softdepend: [ "Oraxen", "ItemsAdder", "IrisFeller"] \ No newline at end of file From 4be6abe416e9c4e19836ad39cc2d8b6b3568d57d Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Sat, 14 May 2022 10:38:52 -0700 Subject: [PATCH 06/25] 2032 New MAX height --- .../volmit/iris/engine/object/IrisBiomeGeneratorLink.java | 8 ++++---- .../volmit/iris/engine/object/IrisBiomePaletteLayer.java | 4 ++-- .../java/com/volmit/iris/engine/object/IrisDecorator.java | 4 ++-- .../volmit/iris/engine/object/IrisDepositGenerator.java | 4 ++-- .../volmit/iris/engine/object/IrisObjectTranslate.java | 4 ++-- .../iris/engine/object/IrisShapedGeneratorStyle.java | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisBiomeGeneratorLink.java b/src/main/java/com/volmit/iris/engine/object/IrisBiomeGeneratorLink.java index a2e66f50f..eeb967a07 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisBiomeGeneratorLink.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisBiomeGeneratorLink.java @@ -47,14 +47,14 @@ public class IrisBiomeGeneratorLink { private String generator = "default"; @DependsOn({"min", "max"}) @Required - @MinNumber(-256) // TODO: WARNING HEIGHT - @MaxNumber(256) // TODO: WARNING HEIGHT + @MinNumber(-2032) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The min block value (value + fluidHeight)") private int min = 0; @DependsOn({"min", "max"}) @Required - @MinNumber(-256) // TODO: WARNING HEIGHT - @MaxNumber(256) // TODO: WARNING HEIGHT + @MinNumber(-2032) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The max block value (value + fluidHeight)") private int max = 0; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisBiomePaletteLayer.java b/src/main/java/com/volmit/iris/engine/object/IrisBiomePaletteLayer.java index afd1f7409..dd3a8beae 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisBiomePaletteLayer.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisBiomePaletteLayer.java @@ -50,13 +50,13 @@ public class IrisBiomePaletteLayer { private IrisGeneratorStyle style = NoiseStyle.STATIC.style(); @DependsOn({"minHeight", "maxHeight"}) @MinNumber(0) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The min thickness of this layer") private int minHeight = 1; @DependsOn({"minHeight", "maxHeight"}) @MinNumber(1) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The max thickness of this layer") private int maxHeight = 1; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java b/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java index e630acd7d..f8e9917aa 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java @@ -65,12 +65,12 @@ public class IrisDecorator { private IrisDecorationPart partOf = IrisDecorationPart.NONE; @DependsOn({"stackMin", "stackMax"}) @MinNumber(1) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The minimum repeat stack height (setting to 3 would stack 3 of on top of each other") private int stackMin = 1; @DependsOn({"stackMin", "stackMax"}) @MinNumber(1) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The maximum repeat stack height") private int stackMax = 1; @DependsOn({"stackMin", "stackMax"}) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDepositGenerator.java b/src/main/java/com/volmit/iris/engine/object/IrisDepositGenerator.java index 58081fdcc..6a7ea1b29 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDepositGenerator.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDepositGenerator.java @@ -46,12 +46,12 @@ public class IrisDepositGenerator { private final transient AtomicCache> blockData = new AtomicCache<>(); @Required @MinNumber(0) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The minimum height this deposit can generate at") private int minHeight = 7; @Required @MinNumber(0) - @MaxNumber(256) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The maximum height this deposit can generate at") private int maxHeight = 55; @Required diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObjectTranslate.java b/src/main/java/com/volmit/iris/engine/object/IrisObjectTranslate.java index 4804553c6..886ba4cc1 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObjectTranslate.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObjectTranslate.java @@ -42,8 +42,8 @@ public class IrisObjectTranslate { private int x = 0; @Required - @MinNumber(-256) // TODO: WARNING HEIGHT - @MaxNumber(256) // TODO: WARNING HEIGHT + @MinNumber(-128) // TODO: WARNING HEIGHT + @MaxNumber(128) // TODO: WARNING HEIGHT @Desc("The x shift in blocks") private int y = 0; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisShapedGeneratorStyle.java b/src/main/java/com/volmit/iris/engine/object/IrisShapedGeneratorStyle.java index 19d92fbea..8aa25febd 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisShapedGeneratorStyle.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisShapedGeneratorStyle.java @@ -42,14 +42,14 @@ public class IrisShapedGeneratorStyle { private IrisGeneratorStyle generator = new IrisGeneratorStyle(NoiseStyle.IRIS); @Required - @MinNumber(-256) // TODO: WARNING HEIGHT - @MaxNumber(256) // TODO: WARNING HEIGHT + @MinNumber(-2032) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The min block value") private int min = 0; @Required - @MinNumber(-256) // TODO: WARNING HEIGHT - @MaxNumber(256) // TODO: WARNING HEIGHT + @MinNumber(-2032) // TODO: WARNING HEIGHT + @MaxNumber(2032) // TODO: WARNING HEIGHT @Desc("The max block value") private int max = 0; From e225bcfb96011fbf08b3e0d402a9f51d7b97b1cc Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 19:45:44 +0200 Subject: [PATCH 07/25] To make brian shut up. --- .../iris/core/link/BlockDataProvider.java | 5 ++++- .../volmit/iris/core/link/ItemAdderLink.java | 12 ++++++++++- .../iris/core/link/OraxenDataProvider.java | 11 +++++++++- .../iris/core/service/CustomBlockDataSVC.java | 20 ++++++++++++++++--- .../volmit/iris/engine/object/IrisLoot.java | 17 ++++++++++++++-- 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java index 0af0b6274..74f8946e3 100644 --- a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import java.util.MissingResourceException; @@ -27,7 +28,9 @@ public abstract class BlockDataProvider { public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException; + public abstract ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException; + public abstract NamespacedKey[] getBlockTypes(); - public abstract boolean isProviderBlock(NamespacedKey namespace); + public abstract boolean isValidProvider(NamespacedKey namespace); } diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java index d601196ac..b12c2f204 100644 --- a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java @@ -2,9 +2,11 @@ package com.volmit.iris.core.link; import com.volmit.iris.util.collection.KList; import dev.lone.itemsadder.api.CustomBlock; +import dev.lone.itemsadder.api.CustomStack; import dev.lone.itemsadder.api.ItemsAdder; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; @@ -22,6 +24,14 @@ public class ItemAdderLink extends BlockDataProvider { return CustomBlock.getBaseBlockData(blockId.toString()); } + @Override + public ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException { + CustomStack stack = CustomStack.getInstance(itemId.toString()); + if(stack == null) + throw new MissingResourceException("Failed to find ItemData!", itemId.getNamespace(), itemId.getKey()); + return stack.getItemStack(); + } + @Override public NamespacedKey[] getBlockTypes() { KList keys = new KList<>(); @@ -31,7 +41,7 @@ public class ItemAdderLink extends BlockDataProvider { } @Override - public boolean isProviderBlock(NamespacedKey blockId) { + public boolean isValidProvider(NamespacedKey blockId) { for(NamespacedKey k : getBlockTypes()) if(k.equals(blockId)) { return true; diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 7b7a110d2..973cc0eb6 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import io.th0rgal.oraxen.items.ItemBuilder; import io.th0rgal.oraxen.items.OraxenItems; import io.th0rgal.oraxen.mechanics.MechanicFactory; import io.th0rgal.oraxen.mechanics.MechanicsManager; @@ -32,10 +33,12 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; +import org.bukkit.inventory.ItemStack; import java.lang.reflect.Field; import java.util.Map; import java.util.MissingResourceException; +import java.util.Optional; public class OraxenDataProvider extends BlockDataProvider { @@ -70,6 +73,12 @@ public class OraxenDataProvider extends BlockDataProvider { throw new MissingResourceException("Failed to find BlockData!", blockId.getNamespace(), blockId.getKey()); } + @Override + public ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException { + Optional opt = OraxenItems.getOptionalItemById(itemId.getKey()); + return opt.orElseThrow(() -> new MissingResourceException("Failed to find ItemData!", itemId.getNamespace(), itemId.getKey())).build(); + } + @Override public NamespacedKey[] getBlockTypes() { KList names = new KList<>(); @@ -90,7 +99,7 @@ public class OraxenDataProvider extends BlockDataProvider { } @Override - public boolean isProviderBlock(NamespacedKey key) { + public boolean isValidProvider(NamespacedKey key) { return key.getNamespace().equalsIgnoreCase("oraxen"); } diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java index aa06c0787..b252ec0f1 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -27,6 +27,7 @@ import com.volmit.iris.util.plugin.IrisService; import lombok.Data; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; import java.util.Optional; @@ -46,14 +47,15 @@ public class CustomBlockDataSVC implements IrisService { public void addProvider(BlockDataProvider... provider) { for(BlockDataProvider p : provider) { - if(p.getPlugin() != null) + if(p.getPlugin() != null) { providers.add(p); - p.init(); + p.init(); + } } } public Optional getBlockData(NamespacedKey key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isProviderBlock(key)).findFirst(); + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); if(provider.isEmpty()) return Optional.empty(); try { @@ -64,6 +66,18 @@ public class CustomBlockDataSVC implements IrisService { } } + public Optional getItemStack(NamespacedKey key) { + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); + if(provider.isEmpty()) + return Optional.empty(); + try { + return Optional.of(provider.get().getItemStack(key)); + } catch(MissingResourceException e) { + Iris.error(e.getMessage() + " - [" + e.getClassName() + ":" + e.getKey() + "]"); + return Optional.empty(); + } + } + public NamespacedKey[] getAllIdentifiers() { KList names = new KList<>(); providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java index a697171a6..ac67242a4 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.object; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.volmit.iris.Iris; +import com.volmit.iris.core.service.CustomBlockDataSVC; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.Desc; @@ -36,6 +37,7 @@ import com.volmit.iris.util.format.Form; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.noise.CNG; +import com.volmit.iris.util.plugin.IrisService; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -44,6 +46,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.TagParser; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -52,7 +55,9 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.material.Colorable; +import javax.xml.stream.events.Namespace; import java.awt.Color; +import java.util.Optional; @Snippet("loot") @Accessors(chain = true) @@ -117,7 +122,16 @@ public class IrisLoot { public ItemStack get(boolean debug, RNG rng) { try { - ItemStack is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + ItemStack is; + Iris.warn(type); + if(!type.startsWith("minecraft:") && type.contains(":")) { + Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); + is = opt.orElse(new ItemStack(getType())); + is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } else { + is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } + ItemMeta m = is.getItemMeta(); if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { @@ -184,7 +198,6 @@ public class IrisLoot { return applyCustomNbt(is); } catch(Throwable e) { Iris.reportError(e); - } return new ItemStack(Material.AIR); From 6500ed2075c238f3384006d696cd95374ef0fee9 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 20:26:24 +0200 Subject: [PATCH 08/25] Made third party items work in loot tables. --- .../volmit/iris/engine/framework/Engine.java | 2 + .../volmit/iris/engine/object/IrisLoot.java | 38 ++++++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index 7110824f1..6d7848092 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -472,6 +472,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat int b = 4; for(IrisLootTable i : tables) { + if(i == null) + continue; b++; items.addAll(i.getLoot(debug, items.isEmpty(), rng, slot, x, y, z, b + b, mgf + b)); } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java index ac67242a4..dc4cc9070 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -123,10 +123,13 @@ public class IrisLoot { public ItemStack get(boolean debug, RNG rng) { try { ItemStack is; - Iris.warn(type); if(!type.startsWith("minecraft:") && type.contains(":")) { Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); - is = opt.orElse(new ItemStack(getType())); + if(opt.isEmpty()) { + Iris.warn("Unknown Material: " + type); + return null; + } + is = opt.get(); is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); } else { is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); @@ -134,8 +137,8 @@ public class IrisLoot { ItemMeta m = is.getItemMeta(); - if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { - int max = getType().getMaxDurability(); + if(is.getType().getMaxDurability() > 0 && m instanceof Damageable d) { + int max = is.getType().getMaxDurability(); d.setDamage((int) Math.round(Math.max(0, Math.min(max, (1D - rng.d(getMinDurability(), getMaxDurability())) * max)))); } @@ -209,17 +212,25 @@ public class IrisLoot { } if(giveSomething || chance.aquire(() -> NoiseStyle.STATIC.create(rng)).fit(1, rarity * table.getRarity(), x, y, z) == 1) { - if(getType() == null) { - Iris.warn("Cant find item type " + type); - return null; - } - try { - ItemStack is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + ItemStack is; + if(!type.startsWith("minecraft:") && type.contains(":")) { + Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); + if(opt.isEmpty()) { + Iris.warn("Unknown Material: " + type); + return null; + } + is = opt.get(); + is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + return is; + } else { + is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } + ItemMeta m = is.getItemMeta(); - if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { - int max = getType().getMaxDurability(); + if(is.getType().getMaxDurability() > 0 && m instanceof Damageable d) { + int max = is.getType().getMaxDurability(); d.setDamage((int) Math.round(Math.max(0, Math.min(max, (1D - rng.d(getMinDurability(), getMaxDurability())) * max)))); } @@ -273,7 +284,8 @@ public class IrisLoot { is.setItemMeta(m); return applyCustomNbt(is); } catch(Throwable e) { - Iris.reportError(e); + //Iris.reportError(e); + e.printStackTrace(); } } From d08f3264772f0225a55104ea5ca16ae475607d4d Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 20:31:23 +0200 Subject: [PATCH 09/25] Renaming. --- ...rovider.java => ExternalDataProvider.java} | 2 +- ...erLink.java => ItemAdderDataProvider.java} | 4 ++-- .../iris/core/link/OraxenDataProvider.java | 2 +- ...BlockDataSVC.java => ExternalDataSVC.java} | 20 +++++++++---------- .../volmit/iris/engine/object/IrisLoot.java | 9 ++++----- .../java/com/volmit/iris/util/data/B.java | 6 +++--- 6 files changed, 21 insertions(+), 22 deletions(-) rename src/main/java/com/volmit/iris/core/link/{BlockDataProvider.java => ExternalDataProvider.java} (95%) rename src/main/java/com/volmit/iris/core/link/{ItemAdderLink.java => ItemAdderDataProvider.java} (93%) rename src/main/java/com/volmit/iris/core/service/{CustomBlockDataSVC.java => ExternalDataSVC.java} (74%) diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java similarity index 95% rename from src/main/java/com/volmit/iris/core/link/BlockDataProvider.java rename to src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java index 74f8946e3..4725a5c90 100644 --- a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java @@ -11,7 +11,7 @@ import org.bukkit.plugin.Plugin; import java.util.MissingResourceException; @RequiredArgsConstructor -public abstract class BlockDataProvider { +public abstract class ExternalDataProvider { @Getter private final String pluginId; diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java similarity index 93% rename from src/main/java/com/volmit/iris/core/link/ItemAdderLink.java rename to src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java index b12c2f204..d05ca3cf4 100644 --- a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java @@ -10,9 +10,9 @@ import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; -public class ItemAdderLink extends BlockDataProvider { +public class ItemAdderDataProvider extends ExternalDataProvider { - public ItemAdderLink() { + public ItemAdderDataProvider() { super("ItemsAdder"); } diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 973cc0eb6..138cecaa7 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -40,7 +40,7 @@ import java.util.Map; import java.util.MissingResourceException; import java.util.Optional; -public class OraxenDataProvider extends BlockDataProvider { +public class OraxenDataProvider extends ExternalDataProvider { private static final String FIELD_FACTORIES_MAP = "FACTORIES_BY_MECHANIC_ID"; diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java similarity index 74% rename from src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java rename to src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java index b252ec0f1..6c96c3871 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java @@ -19,8 +19,8 @@ package com.volmit.iris.core.service; import com.volmit.iris.Iris; -import com.volmit.iris.core.link.BlockDataProvider; -import com.volmit.iris.core.link.ItemAdderLink; +import com.volmit.iris.core.link.ExternalDataProvider; +import com.volmit.iris.core.link.ItemAdderDataProvider; import com.volmit.iris.core.link.OraxenDataProvider; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.IrisService; @@ -33,20 +33,20 @@ import java.util.MissingResourceException; import java.util.Optional; @Data -public class CustomBlockDataSVC implements IrisService { +public class ExternalDataSVC implements IrisService { - private KList providers = new KList<>(); + private KList providers = new KList<>(); @Override public void onEnable() { - addProvider(new OraxenDataProvider(), new ItemAdderLink()); + addProvider(new OraxenDataProvider(), new ItemAdderDataProvider()); } @Override public void onDisable() { } - public void addProvider(BlockDataProvider... provider) { - for(BlockDataProvider p : provider) { + public void addProvider(ExternalDataProvider... provider) { + for(ExternalDataProvider p : provider) { if(p.getPlugin() != null) { providers.add(p); p.init(); @@ -55,7 +55,7 @@ public class CustomBlockDataSVC implements IrisService { } public Optional getBlockData(NamespacedKey key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); if(provider.isEmpty()) return Optional.empty(); try { @@ -67,7 +67,7 @@ public class CustomBlockDataSVC implements IrisService { } public Optional getItemStack(NamespacedKey key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); if(provider.isEmpty()) return Optional.empty(); try { @@ -80,7 +80,7 @@ public class CustomBlockDataSVC implements IrisService { public NamespacedKey[] getAllIdentifiers() { KList names = new KList<>(); - providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); + providers.stream().filter(ExternalDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); return names.toArray(new NamespacedKey[0]); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java index dc4cc9070..958c955a3 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -20,7 +20,7 @@ package com.volmit.iris.engine.object; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.volmit.iris.Iris; -import com.volmit.iris.core.service.CustomBlockDataSVC; +import com.volmit.iris.core.service.ExternalDataSVC; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.Desc; @@ -37,7 +37,6 @@ import com.volmit.iris.util.format.Form; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.noise.CNG; -import com.volmit.iris.util.plugin.IrisService; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -55,7 +54,6 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.material.Colorable; -import javax.xml.stream.events.Namespace; import java.awt.Color; import java.util.Optional; @@ -124,8 +122,9 @@ public class IrisLoot { try { ItemStack is; if(!type.startsWith("minecraft:") && type.contains(":")) { - Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); + Optional opt = Iris.service(ExternalDataSVC.class).getItemStack(NamespacedKey.fromString(type)); if(opt.isEmpty()) { + //TODO Better third party provider Iris.warn("Unknown Material: " + type); return null; } @@ -215,7 +214,7 @@ public class IrisLoot { try { ItemStack is; if(!type.startsWith("minecraft:") && type.contains(":")) { - Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); + Optional opt = Iris.service(ExternalDataSVC.class).getItemStack(NamespacedKey.fromString(type)); if(opt.isEmpty()) { Iris.warn("Unknown Material: " + type); return null; diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 855b38247..5b7ba27a7 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -20,7 +20,7 @@ package com.volmit.iris.util.data; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.core.service.CustomBlockDataSVC; +import com.volmit.iris.core.service.ExternalDataSVC; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.scheduling.ChronoLatch; @@ -472,7 +472,7 @@ public class B { if(!ix.startsWith("minecraft:") && ix.contains(":")) { NamespacedKey key = NamespacedKey.fromString(ix); - Optional bd = Iris.service(CustomBlockDataSVC.class).getBlockData(key); + Optional bd = Iris.service(ExternalDataSVC.class).getBlockData(key); if(bd.isPresent()) bx = bd.get(); } @@ -647,7 +647,7 @@ public class B { } } - for(NamespacedKey id : Iris.service(CustomBlockDataSVC.class).getAllIdentifiers()) + for(NamespacedKey id : Iris.service(ExternalDataSVC.class).getAllIdentifiers()) bt.add(id.toString()); bt.addAll(custom.k()); From faa7b7c7429d10c0e2d330fbe5c661192a470eca Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Sat, 14 May 2022 12:07:27 -0700 Subject: [PATCH 10/25] Object placement height now increased (need to make engine dependent) --- .../java/com/volmit/iris/engine/object/IrisObjectLimit.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObjectLimit.java b/src/main/java/com/volmit/iris/engine/object/IrisObjectLimit.java index 9d547a6df..9fac8a1bb 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObjectLimit.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObjectLimit.java @@ -37,12 +37,12 @@ public class IrisObjectLimit { @MinNumber(0) @MaxNumber(1024) @Desc("The minimum height for placement (bottom of object)") - private int minimumHeight = 0; + private int minimumHeight = -2048; //TODO: WARNING HEIGHT @MinNumber(0) @MaxNumber(1024) @Desc("The maximum height for placement (top of object)") - private int maximumHeight = 255; + private int maximumHeight = 2048; //TODO: WARNING HEIGHT public boolean canPlace(int h, int l) { return h <= maximumHeight && l >= minimumHeight; From e31b9c1a287fc709a03fc3a3d055477891887eef Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 15 May 2022 01:26:52 +0200 Subject: [PATCH 11/25] Fixed log error. --- src/main/java/com/volmit/iris/core/loader/IrisData.java | 2 ++ .../com/volmit/iris/engine/object/matter/IrisMatterObject.java | 2 ++ 2 files changed, 4 insertions(+) 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 1c8b2380b..3b3ff757a 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -75,6 +75,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { private ResourceLoader scriptLoader; private ResourceLoader caveLoader; private ResourceLoader ravineLoader; + private ResourceLoader matterObjectLoader; private KMap> possibleSnippets; private Gson gson; private Gson snippetLoader; @@ -337,6 +338,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { this.objectLoader = registerLoader(IrisObject.class); this.imageLoader = registerLoader(IrisImage.class); this.scriptLoader = registerLoader(IrisScript.class); + this.matterObjectLoader = registerLoader(IrisMatterObject.class); gson = builder.create(); } diff --git a/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterObject.java b/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterObject.java index 8ea9e35f6..227f55a29 100644 --- a/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterObject.java +++ b/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterObject.java @@ -7,11 +7,13 @@ import com.volmit.iris.util.matter.IrisMatter; import com.volmit.iris.util.matter.Matter; import com.volmit.iris.util.plugin.VolmitSender; import lombok.Data; +import lombok.EqualsAndHashCode; import java.io.File; import java.io.IOException; @Data +@EqualsAndHashCode(callSuper = false) public class IrisMatterObject extends IrisRegistrant { private final Matter matter; From 8951fcdebdf028fbd93ffaa6fa016db13efd9c32 Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Sun, 15 May 2022 00:13:42 -0700 Subject: [PATCH 12/25] SHUT THE HELL UP (no more hotloading error) --- .../iris/engine/object/matter/IrisMatterPlacementLocation.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterPlacementLocation.java b/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterPlacementLocation.java index ed9f1b762..20f175cb4 100644 --- a/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterPlacementLocation.java +++ b/src/main/java/com/volmit/iris/engine/object/matter/IrisMatterPlacementLocation.java @@ -1,10 +1,11 @@ package com.volmit.iris.engine.object.matter; import com.volmit.iris.engine.IrisEngine; +import com.volmit.iris.engine.object.annotations.Desc; import com.volmit.iris.util.function.Function3; import java.util.function.Function; - +@Desc("WHERE THINGS PLACE") public enum IrisMatterPlacementLocation { SURFACE((e, x, z) -> e.getHeight(x, z, true)), SURFACE_ON_FLUID((e, x, z) -> e.getHeight(x, z, false)), From d133ac00887802a1deb4bb6679dc9ca94039e409 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 15 May 2022 20:28:11 +0200 Subject: [PATCH 13/25] Refactor. --- .../iris/engine/object/IrisDimension.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 597ba4c98..c3a539bd3 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -407,18 +407,8 @@ public class IrisDimension extends IrisRegistrant { } if(!dimensionHeight.equals(new IrisRange(-64, 320)) && this.name.equalsIgnoreCase("overworld")) { - File dimType = new File(datapacks, "iris/data/minecraft/dimension_type/overworld.json"); - if(!dimType.exists()) - changed = true; - - Iris.verbose(" Installing Data Pack Dimension Type: " + dimType.getPath()); - dimType.getParentFile().mkdirs(); - try { - IO.writeAll(dimType, generateDatapackJson()); - } catch(IOException e) { - Iris.reportError(e); - e.printStackTrace(); - } + Iris.verbose(" Installing Data Pack Dimension Type: \"minecraft:overworld\""); + changed = writeDimensionType(changed, datapacks); } if(write) { @@ -457,6 +447,20 @@ public class IrisDimension extends IrisRegistrant { } + public boolean writeDimensionType(boolean changed, File datapacks) { + File dimType = new File(datapacks, "iris/data/minecraft/dimension_type/overworld.json"); + if(!dimType.exists()) + changed = true; + dimType.getParentFile().mkdirs(); + try { + IO.writeAll(dimType, generateDatapackJson()); + } catch(IOException e) { + Iris.reportError(e); + e.printStackTrace(); + } + return changed; + } + private String generateDatapackJson() { JSONObject obj = new JSONObject(DP_OVERWORLD_DEFAULT); obj.put("min_y", dimensionHeight.getMin()); From 11b05b10a4ef898709b30775afc2cbedaaa09eff Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 15 May 2022 21:28:12 +0200 Subject: [PATCH 14/25] Removed a single empty line. --- src/main/java/com/volmit/iris/core/service/StudioSVC.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/service/StudioSVC.java b/src/main/java/com/volmit/iris/core/service/StudioSVC.java index 29dee3ce1..d9ae1a9c6 100644 --- a/src/main/java/com/volmit/iris/core/service/StudioSVC.java +++ b/src/main/java/com/volmit/iris/core/service/StudioSVC.java @@ -315,7 +315,6 @@ public class StudioSVC implements IrisService { return activeProject != null && activeProject.isOpen(); } - public void open(VolmitSender sender, String dimm) { open(sender, 1337, dimm); } From e7c458de3f1a9caa0b0adb6d9fd4cba2936a29fd Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sun, 15 May 2022 22:10:17 +0200 Subject: [PATCH 15/25] Hot reload listener for datapacks and stilts underwater. --- src/main/java/com/volmit/iris/engine/IrisEngine.java | 5 +++++ src/main/java/com/volmit/iris/engine/object/IrisObject.java | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 596bbfb6b..bfa4dd7f5 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -21,6 +21,7 @@ package com.volmit.iris.engine; import com.google.common.util.concurrent.AtomicDouble; import com.google.gson.Gson; import com.volmit.iris.Iris; +import com.volmit.iris.core.ServerConfigurator; import com.volmit.iris.core.events.IrisEngineHotloadEvent; import com.volmit.iris.core.gui.PregeneratorJob; import com.volmit.iris.core.project.IrisProject; @@ -233,6 +234,10 @@ public class IrisEngine implements Engine { getTarget().setDimension(getData().getDimensionLoader().load(getDimension().getLoadKey())); prehotload(); setupEngine(); + J.a(() -> { + Iris.warn("Meme."); + synchronized(ServerConfigurator.class) { ServerConfigurator.installDataPacks(false); } + }); } @Override 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 b0f34e31d..0e0086b34 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -719,7 +719,7 @@ public class IrisObject extends IrisRegistrant { i = config.getRotation().rotate(i.clone(), spinx, spiny, spinz).clone(); i = config.getTranslate().translate(i.clone(), config.getRotation(), spinx, spiny, spinz).clone(); - if(stilting && i.getBlockY() < lowest && !B.isAir(data)) { + if(stilting && i.getBlockY() < lowest && !B.isAirOrFluid(data)) { lowest = i.getBlockY(); } @@ -825,7 +825,7 @@ public class IrisObject extends IrisRegistrant { } - if(d == null || B.isAir(d)) { + if(d == null || B.isAirOrFluid(d)) { continue; } From 44c707e0597bf706f32f74f29d50b36e78eb6e94 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 16:53:49 +0200 Subject: [PATCH 16/25] Stilting underwater works now. --- src/main/java/com/volmit/iris/engine/IrisEngine.java | 5 +---- .../java/com/volmit/iris/engine/object/IrisObject.java | 7 +++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index bfa4dd7f5..049bd3e73 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -234,10 +234,7 @@ public class IrisEngine implements Engine { getTarget().setDimension(getData().getDimensionLoader().load(getDimension().getLoadKey())); prehotload(); setupEngine(); - J.a(() -> { - Iris.warn("Meme."); - synchronized(ServerConfigurator.class) { ServerConfigurator.installDataPacks(false); } - }); + J.a(() -> { synchronized(ServerConfigurator.class) { ServerConfigurator.installDataPacks(false); } }); } @Override 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 0e0086b34..8494e881c 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -719,7 +719,7 @@ public class IrisObject extends IrisRegistrant { i = config.getRotation().rotate(i.clone(), spinx, spiny, spinz).clone(); i = config.getTranslate().translate(i.clone(), config.getRotation(), spinx, spiny, spinz).clone(); - if(stilting && i.getBlockY() < lowest && !B.isAirOrFluid(data)) { + if(stilting && i.getBlockY() < lowest && !B.isAir(data)) { lowest = i.getBlockY(); } @@ -824,8 +824,7 @@ public class IrisObject extends IrisRegistrant { continue; } - - if(d == null || B.isAirOrFluid(d)) { + if(d == null || B.isAir(d)) { continue; } @@ -837,7 +836,7 @@ public class IrisObject extends IrisRegistrant { zz += config.warp(rng, i.getZ() + z, i.getY() + y, i.getX() + x, getLoader()); } - int yg = placer.getHighest(xx, zz, getLoader(), config.isUnderwater()); + int yg = placer.getHighest(xx, zz, getLoader(), true); if(yv >= 0 && config.isBottom()) { y += Math.floorDiv(h, 2); From ccc2ed08069f8c01ab3af9841affbd89f30793a4 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 17:33:15 +0200 Subject: [PATCH 17/25] Fixed Dust of Revealing Pt.1 --- .../volmit/iris/core/edit/DustRevealer.java | 1 - .../com/volmit/iris/core/service/WandSVC.java | 1 - .../volmit/iris/core/tools/IrisToolbelt.java | 20 +++++++++++++++++-- .../volmit/iris/engine/IrisEngineMantle.java | 2 +- .../volmit/iris/engine/framework/Engine.java | 1 - .../iris/engine/framework/EngineTarget.java | 2 ++ .../com/volmit/iris/util/mantle/Mantle.java | 7 +++++-- 7 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java index 1e356b06b..ffaf9e724 100644 --- a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java +++ b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java @@ -99,7 +99,6 @@ public class DustRevealer { if(access != null) { String a = access.getObjectPlacementKey(block.getX(), block.getY(), block.getZ()); - if(a != null) { world.playSound(block.getLocation(), Sound.ITEM_LODESTONE_COMPASS_LOCK, 1f, 0.1f); diff --git a/src/main/java/com/volmit/iris/core/service/WandSVC.java b/src/main/java/com/volmit/iris/core/service/WandSVC.java index 5ae35f84c..244163b9f 100644 --- a/src/main/java/com/volmit/iris/core/service/WandSVC.java +++ b/src/main/java/com/volmit/iris/core/service/WandSVC.java @@ -408,7 +408,6 @@ public class WandSVC implements IrisService { e.setCancelled(true); e.getPlayer().playSound(Objects.requireNonNull(e.getClickedBlock()).getLocation(), Sound.ENTITY_ENDER_EYE_DEATH, 2f, 1.97f); DustRevealer.spawn(e.getClickedBlock(), new VolmitSender(e.getPlayer(), Iris.instance.getTag())); - } } } catch(Throwable xx) { diff --git a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java index 4998e13e8..fba7fc07a 100644 --- a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java +++ b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java @@ -116,8 +116,24 @@ public class IrisToolbelt { public static PlatformChunkGenerator access(World world) { if(isIrisWorld(world)) { return ((PlatformChunkGenerator) world.getGenerator()); - } - + } /*else { + Iris.warn(""" + "---------- No World? --------------- + ⠀⣞⢽⢪⢣⢣⢣⢫⡺⡵⣝⡮⣗⢷⢽⢽⢽⣮⡷⡽⣜⣜⢮⢺⣜⢷⢽⢝⡽⣝ + ⠸⡸⠜⠕⠕⠁⢁⢇⢏⢽⢺⣪⡳⡝⣎⣏⢯⢞⡿⣟⣷⣳⢯⡷⣽⢽⢯⣳⣫⠇ + ⠀⠀⢀⢀⢄⢬⢪⡪⡎⣆⡈⠚⠜⠕⠇⠗⠝⢕⢯⢫⣞⣯⣿⣻⡽⣏⢗⣗⠏⠀ + ⠀⠪⡪⡪⣪⢪⢺⢸⢢⢓⢆⢤⢀⠀⠀⠀⠀⠈⢊⢞⡾⣿⡯⣏⢮⠷⠁⠀⠀ + ⠀⠀⠀⠈⠊⠆⡃⠕⢕⢇⢇⢇⢇⢇⢏⢎⢎⢆⢄⠀⢑⣽⣿⢝⠲⠉⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⡿⠂⠠⠀⡇⢇⠕⢈⣀⠀⠁⠡⠣⡣⡫⣂⣿⠯⢪⠰⠂⠀⠀⠀⠀ + ⠀⠀⠀⠀⡦⡙⡂⢀⢤⢣⠣⡈⣾⡃⠠⠄⠀⡄⢱⣌⣶⢏⢊⠂⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⢝⡲⣜⡮⡏⢎⢌⢂⠙⠢⠐⢀⢘⢵⣽⣿⡿⠁⠁⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠨⣺⡺⡕⡕⡱⡑⡆⡕⡅⡕⡜⡼⢽⡻⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⣼⣳⣫⣾⣵⣗⡵⡱⡡⢣⢑⢕⢜⢕⡝⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⣴⣿⣾⣿⣿⣿⡿⡽⡑⢌⠪⡢⡣⣣⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⡟⡾⣿⢿⢿⢵⣽⣾⣼⣘⢸⢸⣞⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠁⠇⠡⠩⡫⢿⣝⡻⡮⣒⢽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + """); + }*/ return null; } diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 7e1ad4c01..3af60176c 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -60,7 +60,7 @@ public class IrisEngineMantle implements EngineMantle { public IrisEngineMantle(Engine engine) { this.engine = engine; - this.mantle = new Mantle(new File(engine.getWorld().worldFolder(), "mantle"), engine.getTarget().getHeight()); + this.mantle = new Mantle(new File(engine.getWorld().worldFolder(), "mantle"), engine.getTarget().getHeight(), engine.getTarget().getMinY()); radius = radCache.aquire(this::computeParallaxSize); components = new KList<>(); registerComponent(new MantleCarvingComponent(this)); diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index 6d7848092..db7d22743 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -748,7 +748,6 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat default PlacedObject getObjectPlacement(int x, int y, int z) { String objectAt = getMantle().getMantle().get(x, y, z, String.class); - if(objectAt == null || objectAt.isEmpty()) { return null; } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java b/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java index cd33cf998..736d680f2 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java @@ -42,6 +42,8 @@ public class EngineTarget { return world.maxHeight() - world.minHeight(); } + public int getMinY() { return world.minHeight(); } + public void close() { } diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 1150cb17d..1b12d52ce 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -58,6 +58,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class Mantle { private final File dataFolder; private final int worldHeight; + private final int minY; private final Map lastUse; @Getter private final Map loadedRegions; @@ -76,11 +77,12 @@ public class Mantle { * the world's height (in blocks) */ @BlockCoordinates - public Mantle(File dataFolder, int worldHeight) { + public Mantle(File dataFolder, int worldHeight, int minY) { this.hyperLock = new HyperLock(); this.closed = new AtomicBoolean(false); this.dataFolder = dataFolder; this.worldHeight = worldHeight; + this.minY = minY; this.io = new AtomicBoolean(false); dataFolder.mkdirs(); unload = new KSet<>(); @@ -330,7 +332,7 @@ public class Mantle { } /** - * Gets the data tat the current block position This method will attempt to find a + * Gets the data at the current block position This method will attempt to find a * Tectonic Plate either by loading it or creating a new one. This method uses * the hyper lock packaged with each Mantle. The hyperlock allows locking of multiple * threads at a single region while still allowing other threads to continue @@ -352,6 +354,7 @@ public class Mantle { @SuppressWarnings("unchecked") @BlockCoordinates public T get(int x, int y, int z, Class t) { + y -= minY; if(closed.get()) { throw new RuntimeException("The Mantle is closed"); } From 5a4ca2f907e4a5cb33d2232f2a80bdae477473b2 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 17:49:49 +0200 Subject: [PATCH 18/25] Fixed stilting with edited data. --- .../volmit/iris/engine/object/IrisObject.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 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 8494e881c..1a033aeb4 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -820,13 +820,27 @@ public class IrisObject extends IrisRegistrant { i = config.getRotation().rotate(i.clone(), spinx, spiny, spinz).clone(); i = config.getTranslate().translate(i.clone(), config.getRotation(), spinx, spiny, spinz).clone(); - if(i.getBlockY() != lowest) { + if(i.getBlockY() != lowest) continue; + + for(IrisObjectReplace j : config.getEdit()) { + if(rng.chance(j.getChance())) { + for(BlockData k : j.getFind(rdata)) { + if(j.isExact() ? k.matches(d) : k.getMaterial().equals(d.getMaterial())) { + BlockData newData = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z, rdata).clone(); + + if(newData.getMaterial() == d.getMaterial()) { + d = d.merge(newData); + } else { + d = newData; + } + } + } + } } - if(d == null || B.isAir(d)) { + if(d == null || B.isAir(d)) continue; - } xx = x + (int) Math.round(i.getX()); zz = z + (int) Math.round(i.getZ()); @@ -838,6 +852,10 @@ public class IrisObject extends IrisRegistrant { int yg = placer.getHighest(xx, zz, getLoader(), true); + if(config.isWaterloggable() && yg <= placer.getFluidHeight() && d instanceof Waterlogged) { + ((Waterlogged) d).setWaterlogged(true); + } + if(yv >= 0 && config.isBottom()) { y += Math.floorDiv(h, 2); } @@ -1117,7 +1135,5 @@ public class IrisObject extends IrisRegistrant { } @Override - public void scanForErrors(JSONObject p, VolmitSender sender) { - - } + public void scanForErrors(JSONObject p, VolmitSender sender) { } } From 923860a90bcdc31d68335e3d25eb0cf36d34c7b4 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 18:10:59 +0200 Subject: [PATCH 19/25] Version bump. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 520275ac5..9483dbf85 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.0.7-1.18.2' // Needs to be version specific +version '2.1.0-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' From a63a6f751f339de645c0b0ff8741d6b5eea869dc Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 19:40:39 +0200 Subject: [PATCH 20/25] Dust of Revealing Pt.2, also Whoops. --- src/main/java/com/volmit/iris/core/edit/DustRevealer.java | 2 +- src/main/java/com/volmit/iris/core/service/WandSVC.java | 3 +++ src/main/java/com/volmit/iris/engine/IrisEngineMantle.java | 2 +- .../java/com/volmit/iris/engine/framework/EngineTarget.java | 2 -- src/main/java/com/volmit/iris/util/mantle/Mantle.java | 5 +---- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java index ffaf9e724..142791656 100644 --- a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java +++ b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java @@ -98,7 +98,7 @@ public class DustRevealer { Engine access = IrisToolbelt.access(world).getEngine(); if(access != null) { - String a = access.getObjectPlacementKey(block.getX(), block.getY(), block.getZ()); + String a = access.getObjectPlacementKey(block.getX(), block.getY() - block.getWorld().getMinHeight(), block.getZ()); if(a != null) { world.playSound(block.getLocation(), Sound.ITEM_LODESTONE_COMPASS_LOCK, 1f, 0.1f); diff --git a/src/main/java/com/volmit/iris/core/service/WandSVC.java b/src/main/java/com/volmit/iris/core/service/WandSVC.java index 244163b9f..4b60d0664 100644 --- a/src/main/java/com/volmit/iris/core/service/WandSVC.java +++ b/src/main/java/com/volmit/iris/core/service/WandSVC.java @@ -42,6 +42,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -388,6 +389,8 @@ public class WandSVC implements IrisService { @EventHandler public void on(PlayerInteractEvent e) { + if(e.getHand() != EquipmentSlot.HAND) + return; try { if(isHoldingWand(e.getPlayer())) { if(e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { diff --git a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java index 3af60176c..7e1ad4c01 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngineMantle.java @@ -60,7 +60,7 @@ public class IrisEngineMantle implements EngineMantle { public IrisEngineMantle(Engine engine) { this.engine = engine; - this.mantle = new Mantle(new File(engine.getWorld().worldFolder(), "mantle"), engine.getTarget().getHeight(), engine.getTarget().getMinY()); + this.mantle = new Mantle(new File(engine.getWorld().worldFolder(), "mantle"), engine.getTarget().getHeight()); radius = radCache.aquire(this::computeParallaxSize); components = new KList<>(); registerComponent(new MantleCarvingComponent(this)); diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java b/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java index 736d680f2..cd33cf998 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineTarget.java @@ -42,8 +42,6 @@ public class EngineTarget { return world.maxHeight() - world.minHeight(); } - public int getMinY() { return world.minHeight(); } - public void close() { } diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 1b12d52ce..e08222ed8 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -58,7 +58,6 @@ import java.util.concurrent.atomic.AtomicBoolean; public class Mantle { private final File dataFolder; private final int worldHeight; - private final int minY; private final Map lastUse; @Getter private final Map loadedRegions; @@ -77,12 +76,11 @@ public class Mantle { * the world's height (in blocks) */ @BlockCoordinates - public Mantle(File dataFolder, int worldHeight, int minY) { + public Mantle(File dataFolder, int worldHeight) { this.hyperLock = new HyperLock(); this.closed = new AtomicBoolean(false); this.dataFolder = dataFolder; this.worldHeight = worldHeight; - this.minY = minY; this.io = new AtomicBoolean(false); dataFolder.mkdirs(); unload = new KSet<>(); @@ -354,7 +352,6 @@ public class Mantle { @SuppressWarnings("unchecked") @BlockCoordinates public T get(int x, int y, int z, Class t) { - y -= minY; if(closed.get()) { throw new RuntimeException("The Mantle is closed"); } From 4c48f812d5d84ba36603fab4b1ce83ffdea5c2a4 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Mon, 16 May 2022 21:55:47 +0200 Subject: [PATCH 21/25] Dust of Revealing Pt.3 :skull: --- src/main/java/com/volmit/iris/core/edit/BlockSignal.java | 5 ++--- src/main/java/com/volmit/iris/core/edit/DustRevealer.java | 5 +++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/edit/BlockSignal.java b/src/main/java/com/volmit/iris/core/edit/BlockSignal.java index 9227d36b6..cd4b8d639 100644 --- a/src/main/java/com/volmit/iris/core/edit/BlockSignal.java +++ b/src/main/java/com/volmit/iris/core/edit/BlockSignal.java @@ -36,12 +36,11 @@ public class BlockSignal { public BlockSignal(Block block, int ticks) { active.incrementAndGet(); - Location tg = block.getLocation().clone().add(0.5, 0, 0.5).clone(); - FallingBlock e = block.getWorld().spawnFallingBlock(tg.clone(), block.getBlockData()); + Location tg = block.getLocation().clone().add(0.5, 0, 0.5); + FallingBlock e = block.getWorld().spawnFallingBlock(tg, block.getBlockData()); e.setGravity(false); e.setInvulnerable(true); e.setGlowing(true); - e.teleport(tg.clone()); e.setDropItem(false); e.setHurtEntities(false); e.setSilent(true); diff --git a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java index 142791656..f04ec80cc 100644 --- a/src/main/java/com/volmit/iris/core/edit/DustRevealer.java +++ b/src/main/java/com/volmit/iris/core/edit/DustRevealer.java @@ -49,7 +49,7 @@ public class DustRevealer { this.hits = hits; J.s(() -> { - new BlockSignal(world.getBlockAt(block.getX(), block.getY(), block.getZ()), 7); + new BlockSignal(world.getBlockAt(block.getX(), block.getY(), block.getZ()), 10); if(M.r(0.25)) { world.playSound(block.toBlock(world).getLocation(), Sound.BLOCK_AMETHYST_BLOCK_CHIME, 1f, RNG.r.f(0.2f, 2f)); } @@ -111,7 +111,8 @@ public class DustRevealer { } private boolean is(BlockPosition a) { - if(isValidTry(a) && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()) != null && engine.getObjectPlacementKey(a.getX(), a.getY(), a.getZ()).equals(key)) { + int betterY = a.getY() - world.getMinHeight(); + if(isValidTry(a) && engine.getObjectPlacementKey(a.getX(), betterY, a.getZ()) != null && engine.getObjectPlacementKey(a.getX(), betterY, a.getZ()).equals(key)) { hits.add(a); new DustRevealer(engine, world, a, key, hits); return true; From 1e3ff59b262d6a502f4859cadd53c530c666857c Mon Sep 17 00:00:00 2001 From: DanMB Date: Mon, 16 May 2022 23:23:42 -0700 Subject: [PATCH 22/25] Placement options removals --- .../java/com/volmit/iris/core/edit/JigsawEditor.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java b/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java index d93aec65c..477e73591 100644 --- a/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java +++ b/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java @@ -19,6 +19,7 @@ package com.volmit.iris.core.edit; import com.google.gson.Gson; +import com.google.gson.JsonObject; import com.volmit.iris.Iris; import com.volmit.iris.core.service.WandSVC; import com.volmit.iris.engine.object.IrisDirection; @@ -157,7 +158,14 @@ public class JigsawEditor implements Listener { public void close() { exit(); try { - IO.writeAll(targetSaveLocation, new JSONObject(new Gson().toJson(piece)).toString(4)); + JSONObject j = new JSONObject(new Gson().toJson(piece)); + // Remove sub-key + // J.attempt(() -> j.getJSONObject("placementOptions").remove("translateCenter")); + + // remove root key + // j.remove("placementOptions"); + + IO.writeAll(targetSaveLocation, j.toString(4)); } catch(IOException e) { Iris.reportError(e); e.printStackTrace(); From 516a7111a7d0982bfb3848c63ef38b20355e6bc4 Mon Sep 17 00:00:00 2001 From: DanMB Date: Mon, 16 May 2022 23:34:58 -0700 Subject: [PATCH 23/25] f --- .../volmit/iris/core/edit/JigsawEditor.java | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java b/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java index 477e73591..d4b2db1f4 100644 --- a/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java +++ b/src/main/java/com/volmit/iris/core/edit/JigsawEditor.java @@ -27,6 +27,7 @@ import com.volmit.iris.engine.object.IrisJigsawPiece; import com.volmit.iris.engine.object.IrisJigsawPieceConnector; import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.engine.object.IrisPosition; +import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.Cuboid; import com.volmit.iris.util.io.IO; @@ -48,6 +49,7 @@ import org.bukkit.util.Vector; import java.io.File; import java.io.IOException; +import java.util.List; import java.util.concurrent.ExecutionException; public class JigsawEditor implements Listener { @@ -155,15 +157,48 @@ public class JigsawEditor implements Listener { } } + private void removeKey(JSONObject o, String... path) + { + if(path.length == 1) + { + o.remove(path[0]); + return; + } + + List s = new java.util.ArrayList<>(List.of(path)); + s.remove(0); + removeKey(o.getJSONObject(path[0]), s.toArray(new String[0])); + } + + private List getObjectsInArray(JSONObject a, String key) + { + KList o = new KList<>(); + + for(int i = 0; i < a.getJSONArray(key).length(); i++) + { + o.add(a.getJSONArray(key).getJSONObject(i)); + } + + return o; + } + public void close() { exit(); try { JSONObject j = new JSONObject(new Gson().toJson(piece)); // Remove sub-key - // J.attempt(() -> j.getJSONObject("placementOptions").remove("translateCenter")); + removeKey(j, "placementOptions", "translateCenter"); // should work + J.attempt(() -> j.getJSONObject("placementOptions").remove("translateCenter")); // otherwise // remove root key - // j.remove("placementOptions"); + removeKey(j, "placementOptions"); // should work + j.remove("placementOptions"); // otherwise + + // Remove key in all objects in array + for(JSONObject i : getObjectsInArray(j, "connectors")) + { + removeKey(i, "rotateConnector"); + } IO.writeAll(targetSaveLocation, j.toString(4)); } catch(IOException e) { From f51734fea036e5914626dce97a940e7785eedd84 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Tue, 17 May 2022 19:40:16 +0200 Subject: [PATCH 24/25] Fixed fast_min_height? --- 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 1a033aeb4..552e49311 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -585,7 +585,7 @@ public class IrisObject extends IrisRegistrant { } } } else if(config.getMode().equals(ObjectPlaceMode.FAST_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 67efdb47aa57dd21c81c92206b65457c2d51be89 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Tue, 17 May 2022 20:15:02 +0200 Subject: [PATCH 25/25] Custom dimension info on splash. --- src/main/java/com/volmit/iris/Iris.java | 47 +++++++++++++++++++++---- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 1669c56dc..ca2e00d2b 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -18,6 +18,10 @@ package com.volmit.iris; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.ServerConfigurator; import com.volmit.iris.core.link.*; @@ -71,15 +75,12 @@ import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; +import java.io.*; import java.lang.annotation.Annotation; import java.net.URL; import java.util.Date; import java.util.Map; +import java.util.Objects; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { @@ -675,17 +676,51 @@ public class Iris extends VolmitPlugin implements Listener { String padd2 = Form.repeat(" ", 4); String[] info = {"", "", "", "", "", padd2 + C.IRIS + " Iris", padd2 + C.GRAY + " by " + "Volmit Software", padd2 + C.GRAY + " v" + C.IRIS + getDescription().getVersion(), }; - String[] splash = {padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.IRIS + " .(((()))). ", padd + C.GRAY + "@@@&&&&&&&&" + C.DARK_GRAY + "&&&&&" + C.IRIS + " .((((((())))))). ", padd + C.GRAY + "@@@&&&&&" + C.DARK_GRAY + "&&&&&&&" + C.IRIS + " ((((((((())))))))) " + C.GRAY + " @", padd + C.GRAY + "@@@&&&&" + C.DARK_GRAY + "@@@@@&" + C.IRIS + " ((((((((-))))))))) " + C.GRAY + " @@", padd + C.GRAY + "@@@&&" + C.IRIS + " ((((((({ })))))))) " + C.GRAY + " &&@@@", padd + C.GRAY + "@@" + C.IRIS + " ((((((((-))))))))) " + C.DARK_GRAY + "&@@@@@" + C.GRAY + "&&&&@@@", padd + C.GRAY + "@" + C.IRIS + " ((((((((())))))))) " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&@@@", padd + C.GRAY + "" + C.IRIS + " '((((((()))))))' " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&&@@@", padd + C.GRAY + "" + C.IRIS + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@" + String[] splash = { + padd + C.GRAY + " @@@@@@@@@@@@@@" + C.DARK_GRAY + "@@@", + padd + C.GRAY + " @@&&&&&&&&&" + C.DARK_GRAY + "&&&&&&" + C.IRIS + " .(((()))). ", + padd + C.GRAY + "@@@&&&&&&&&" + C.DARK_GRAY + "&&&&&" + C.IRIS + " .((((((())))))). ", + padd + C.GRAY + "@@@&&&&&" + C.DARK_GRAY + "&&&&&&&" + C.IRIS + " ((((((((())))))))) " + C.GRAY + " @", + padd + C.GRAY + "@@@&&&&" + C.DARK_GRAY + "@@@@@&" + C.IRIS + " ((((((((-))))))))) " + C.GRAY + " @@", + padd + C.GRAY + "@@@&&" + C.IRIS + " ((((((({ })))))))) " + C.GRAY + " &&@@@", + padd + C.GRAY + "@@" + C.IRIS + " ((((((((-))))))))) " + C.DARK_GRAY + "&@@@@@" + C.GRAY + "&&&&@@@", + padd + C.GRAY + "@" + C.IRIS + " ((((((((())))))))) " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&@@@", + padd + C.GRAY + "" + C.IRIS + " '((((((()))))))' " + C.DARK_GRAY + "&&&&&" + C.GRAY + "&&&&&&&&@@@", + padd + C.GRAY + "" + C.IRIS + " '(((())))' " + C.DARK_GRAY + "&&&&&&&&" + C.GRAY + "&&&&&&&@@", + padd + C.GRAY + " " + C.DARK_GRAY + "@@@" + C.GRAY + "@@@@@@@@@@@@@@" }; //@done Iris.info("Server type & version: " + Bukkit.getVersion()); Iris.info("Bukkit version: " + Bukkit.getBukkitVersion()); Iris.info("Java version: " + getJavaVersion()); Iris.info("Custom Biomes: " + INMS.get().countCustomBiomes()); + printPacks(); + for(int i = 0; i < info.length; i++) { splash[i] += info[i]; } Iris.info("\n\n " + new KList<>(splash).toString("\n") + "\n"); } + + private void printPacks() { + File packFolder = Iris.service(StudioSVC.class).getWorkspaceFolder(); + File[] packs = packFolder.listFiles(File::isDirectory); + if(packs == null || packs.length == 0) + return; + Iris.info("Custom Dimensions: " + packs.length); + for(File f : packs) + printPack(f); + } + + private void printPack(File pack) { + String dimName = pack.getName(); + String version = "???"; + try(FileReader r = new FileReader(new File(pack, "dimensions/" + dimName + ".json"))) { + JsonObject json = JsonParser.parseReader(r).getAsJsonObject(); + if(json.has("version")) + version = json.get("version").getAsString(); + } catch(IOException | JsonParseException ignored) { } + Iris.info(" " + dimName + " v" + version); + } }