From a40e53306899ed0e6a33070680ac3c6808be633f Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 13 Apr 2022 19:17:25 -0400 Subject: [PATCH] Revert "Drop oraxen support " This reverts commit d315e99b637dd0dea340619558c4b3e726af8a72. --- build.gradle | 1 + src/main/java/com/volmit/iris/Iris.java | 4 + .../com/volmit/iris/core/link/OraxenLink.java | 113 ++++++++++++++++++ .../java/com/volmit/iris/util/data/B.java | 12 ++ 4 files changed, 130 insertions(+) create mode 100644 src/main/java/com/volmit/iris/core/link/OraxenLink.java diff --git a/build.gradle b/build.gradle index 1e5f3348e..0b27ed74d 100644 --- a/build.gradle +++ b/build.gradle @@ -124,6 +124,7 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.22' implementation 'org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT' 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' // Shaded diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index adb7e232c..e4a308afc 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -23,6 +23,7 @@ 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.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.service.StudioSVC; @@ -64,6 +65,7 @@ import org.bukkit.World; import org.bukkit.WorldCreator; 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.Player; @@ -93,6 +95,7 @@ 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; @@ -398,6 +401,7 @@ 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/OraxenLink.java b/src/main/java/com/volmit/iris/core/link/OraxenLink.java new file mode 100644 index 000000000..3c3c36eec --- /dev/null +++ b/src/main/java/com/volmit/iris/core/link/OraxenLink.java @@ -0,0 +1,113 @@ +/* + * 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/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index d61ee7542..b0342b9ee 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -462,6 +462,10 @@ 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(":")) { @@ -648,6 +652,14 @@ public class B { } } + try { + for(String i : Iris.linkOraxen.getItemTypes()) { + bt.add("oraxen:" + i); + } + } catch(Throwable e) { + e.printStackTrace(); + } + try { bt.addAll(Iris.service(RegistrySVC.class).getCustomBlockRegistry().compile()); } catch(Throwable e) {