Use direct types

This commit is contained in:
cyberpwn 2021-09-09 08:35:41 -04:00
parent e3a5da64a5
commit c3b1d6735e
4 changed files with 28 additions and 30 deletions

View File

@ -31,7 +31,7 @@ import java.util.function.Supplier;
public class IrisAPI public class IrisAPI
{ {
private static final AtomicCache<RegistryHolder<BlockData>> customBlock = new AtomicCache<>(); private static final AtomicCache<RegistryHolder<Supplier<BlockData>>> customBlock = new AtomicCache<>();
/** /**
* Checks if the given world is an Iris World * Checks if the given world is an Iris World
@ -56,14 +56,19 @@ public class IrisAPI
* Used for registering ids into custom blocks * Used for registering ids into custom blocks
* @return the registry * @return the registry
*/ */
public static RegistryHolder<BlockData> getCustomBlockRegistry() public static RegistryHolder<Supplier<BlockData>> getCustomBlockRegistry()
{ {
return customBlock.aquire(RegistryHolder::new); return customBlock.aquire(() -> new RegistryHolder<>(() -> Iris.service(RegistrySVC.class).getCustomBlockRegistry()));
} }
public static class RegistryHolder<T> public static class RegistryHolder<T>
{ {
private Supplier<PluginRegistryGroup<T>> registry; private final Supplier<PluginRegistryGroup<T>> registry;
public RegistryHolder(Supplier<PluginRegistryGroup<T>> registry)
{
this.registry = registry;
}
/** /**
* Unregister a node * Unregister a node
@ -72,8 +77,7 @@ public class IrisAPI
*/ */
public void unregister(String namespace, String id) public void unregister(String namespace, String id)
{ {
Iris.service(RegistrySVC.class).getCustomBlockRegistry() registry.get().getRegistry(namespace).unregister(id);
.getRegistry(namespace).unregister(id);
} }
/** /**
@ -82,8 +86,7 @@ public class IrisAPI
*/ */
public void unregisterAll(String namespace) public void unregisterAll(String namespace)
{ {
Iris.service(RegistrySVC.class).getCustomBlockRegistry() registry.get().getRegistry(namespace).unregisterAll();
.getRegistry(namespace).unregisterAll();
} }
/** /**
@ -95,10 +98,9 @@ public class IrisAPI
* @param id the identifier for this node (ruby_ore) * @param id the identifier for this node (ruby_ore)
* @param block the provider for this node data (always return a new instance!) * @param block the provider for this node data (always return a new instance!)
*/ */
public void register(String namespace, String id, Supplier<BlockData> block) public void register(String namespace, String id, T block)
{ {
Iris.service(RegistrySVC.class).getCustomBlockRegistry() registry.get().getRegistry(namespace).register(id, block);
.getRegistry(namespace).register(id, block);
} }
/** /**
@ -108,8 +110,7 @@ public class IrisAPI
*/ */
public List<String> getRegsitries(String namespace) public List<String> getRegsitries(String namespace)
{ {
return Iris.service(RegistrySVC.class).getCustomBlockRegistry() return registry.get().getRegistry(namespace).getRegistries();
.getRegistry(namespace).getRegistries();
} }
} }
} }

View File

@ -23,9 +23,11 @@ import com.volmit.iris.util.plugin.PluginRegistryGroup;
import lombok.Data; import lombok.Data;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import java.util.function.Supplier;
@Data @Data
public class RegistrySVC implements IrisService { public class RegistrySVC implements IrisService {
private PluginRegistryGroup<BlockData> customBlockRegistry; private PluginRegistryGroup<Supplier<BlockData>> customBlockRegistry;
@Override @Override
public void onEnable() { public void onEnable() {

View File

@ -40,6 +40,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.bukkit.Material.*; import static org.bukkit.Material.*;
@ -448,7 +449,12 @@ public class B {
if(ix.contains(":")) if(ix.contains(":"))
{ {
String[] v = ix.toLowerCase().split("\\Q:\\E"); String[] v = ix.toLowerCase().split("\\Q:\\E");
bx = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(v[0], v[1]); Supplier<BlockData> b = Iris.service(RegistrySVC.class).getCustomBlockRegistry().resolve(v[0], v[1]);
if(b != null)
{
bx = b.get();
}
} }
} }

View File

@ -18,18 +18,14 @@
package com.volmit.iris.util.plugin; 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.KList;
import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KMap;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.bukkit.plugin.Plugin;
import java.util.function.Supplier;
@RequiredArgsConstructor @RequiredArgsConstructor
public class PluginRegistry<T> { public class PluginRegistry<T> {
private final KMap<String, Supplier<T>> registry = new KMap<>(); private final KMap<String, T> registry = new KMap<>();
@Getter @Getter
private final String namespace; private final String namespace;
@ -50,10 +46,10 @@ public class PluginRegistry<T> {
return null; return null;
} }
return registry.get(s).get(); return registry.get(s);
} }
public void register(String s, Supplier<T> t) public void register(String s, T t)
{ {
registry.put(s, t); registry.put(s, t);
} }
@ -69,13 +65,6 @@ public class PluginRegistry<T> {
return null; return null;
} }
Supplier<T> m = registry.get(id); return registry.get(id);
if(m == null)
{
return null;
}
return m.get();
} }
} }