diff --git a/api/src/main/java/com/volmit/iris/api/IrisAPI.java b/api/src/main/java/com/volmit/iris/api/IrisAPI.java index ce1822816..d133a5052 100644 --- a/api/src/main/java/com/volmit/iris/api/IrisAPI.java +++ b/api/src/main/java/com/volmit/iris/api/IrisAPI.java @@ -31,7 +31,7 @@ import java.util.function.Supplier; public class IrisAPI { - private static final AtomicCache> customBlock = new AtomicCache<>(); + private static final AtomicCache>> customBlock = new AtomicCache<>(); /** * Checks if the given world is an Iris World @@ -56,14 +56,19 @@ public class IrisAPI * Used for registering ids into custom blocks * @return the registry */ - public static RegistryHolder getCustomBlockRegistry() + public static RegistryHolder> getCustomBlockRegistry() { - return customBlock.aquire(RegistryHolder::new); + return customBlock.aquire(() -> new RegistryHolder<>(() -> Iris.service(RegistrySVC.class).getCustomBlockRegistry())); } public static class RegistryHolder { - private Supplier> registry; + private final Supplier> registry; + + public RegistryHolder(Supplier> registry) + { + this.registry = registry; + } /** * Unregister a node @@ -72,8 +77,7 @@ public class IrisAPI */ public void unregister(String namespace, String id) { - Iris.service(RegistrySVC.class).getCustomBlockRegistry() - .getRegistry(namespace).unregister(id); + registry.get().getRegistry(namespace).unregister(id); } /** @@ -82,8 +86,7 @@ public class IrisAPI */ public void unregisterAll(String namespace) { - Iris.service(RegistrySVC.class).getCustomBlockRegistry() - .getRegistry(namespace).unregisterAll(); + registry.get().getRegistry(namespace).unregisterAll(); } /** @@ -95,10 +98,9 @@ public class IrisAPI * @param id the identifier for this node (ruby_ore) * @param block the provider for this node data (always return a new instance!) */ - public void register(String namespace, String id, Supplier block) + public void register(String namespace, String id, T block) { - Iris.service(RegistrySVC.class).getCustomBlockRegistry() - .getRegistry(namespace).register(id, block); + registry.get().getRegistry(namespace).register(id, block); } /** @@ -108,8 +110,7 @@ public class IrisAPI */ public List getRegsitries(String namespace) { - return Iris.service(RegistrySVC.class).getCustomBlockRegistry() - .getRegistry(namespace).getRegistries(); + return registry.get().getRegistry(namespace).getRegistries(); } } } diff --git a/src/main/java/com/volmit/iris/core/service/RegistrySVC.java b/src/main/java/com/volmit/iris/core/service/RegistrySVC.java index f8bdc4576..c173d6b63 100644 --- a/src/main/java/com/volmit/iris/core/service/RegistrySVC.java +++ b/src/main/java/com/volmit/iris/core/service/RegistrySVC.java @@ -23,9 +23,11 @@ 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; + private PluginRegistryGroup> customBlockRegistry; @Override public void onEnable() { 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 e2dc44ec2..1c87a4856 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -40,6 +40,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.function.Supplier; import java.util.stream.Collectors; import static org.bukkit.Material.*; @@ -448,7 +449,12 @@ public class B { if(ix.contains(":")) { String[] v = ix.toLowerCase().split("\\Q:\\E"); - bx = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(v[0], v[1]); + Supplier b = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(v[0], v[1]); + + if(b != null) + { + bx = b.get(); + } } } diff --git a/src/main/java/com/volmit/iris/util/plugin/PluginRegistry.java b/src/main/java/com/volmit/iris/util/plugin/PluginRegistry.java index ab4f95427..ed3f25a51 100644 --- a/src/main/java/com/volmit/iris/util/plugin/PluginRegistry.java +++ b/src/main/java/com/volmit/iris/util/plugin/PluginRegistry.java @@ -18,18 +18,14 @@ package com.volmit.iris.util.plugin; -import com.volmit.iris.engine.object.annotations.Required; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.bukkit.plugin.Plugin; - -import java.util.function.Supplier; @RequiredArgsConstructor public class PluginRegistry { - private final KMap> registry = new KMap<>(); + private final KMap registry = new KMap<>(); @Getter private final String namespace; @@ -50,10 +46,10 @@ public class PluginRegistry { return null; } - return registry.get(s).get(); + return registry.get(s); } - public void register(String s, Supplier t) + public void register(String s, T t) { registry.put(s, t); } @@ -69,13 +65,6 @@ public class PluginRegistry { return null; } - Supplier m = registry.get(id); - - if(m == null) - { - return null; - } - - return m.get(); + return registry.get(id); } }