DREAMFIRE Docs ← Back to site
Loading...
Searching...
No Matches
DreamClassAPI.java
Go to the documentation of this file.
1/*
2 * MIT License
3 *
4 * Copyright (c) 2025 Dreamfire Studio
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24package com.dreamfirestudios.dreamcore.DreamJava;
25
26import com.comphenix.protocol.events.PacketAdapter;
27import com.dreamfirestudios.dreamcore.DreamChat.DreamChat;
28import com.dreamfirestudios.dreamcore.DreamChat.DreamMessageSettings;
29import com.dreamfirestudios.dreamcore.DreamCore;
30import com.dreamfirestudios.dreamcore.DreamEnchantment.IDreamEnchantment;
31import com.dreamfirestudios.dreamcore.DreamHologram.DreamHologram; // (import retained even if unused by compiler settings)
32import com.dreamfirestudios.dreamcore.DreamItems.IDreamItemStack;
33import com.dreamfirestudios.dreamcore.DreamLoop.IDreamLoop;
34import com.dreamfirestudios.dreamcore.DreamMessagingChannel.PluginMessageLibrary;
35import com.dreamfirestudios.dreamcore.DreamPlaceholder.IDreamPlaceholder;
36import com.dreamfirestudios.dreamcore.DreamRecipe.IDreamRecipe;
37import com.dreamfirestudios.dreamcore.DreamVariable.DreamVariableTest;
38import org.bukkit.Bukkit;
39import org.bukkit.event.Listener;
40import org.bukkit.plugin.java.JavaPlugin;
41
42import java.lang.reflect.InvocationTargetException;
43import java.util.HashMap;
44import java.util.Map;
45import java.util.function.BiConsumer;
46
61public class DreamClassAPI {
62
70 private static final Map<Class<?>, BiConsumer<JavaPlugin, Object>> registrationActions = new HashMap<>();
71
72 static {
73 registrationActions.put(IDreamLoop.class, (javaPlugin, instance) -> RegisterPulseLoop(javaPlugin, (IDreamLoop) instance));
74 registrationActions.put(PacketAdapter.class, (javaPlugin, instance) -> RegisterPacketAdapter(javaPlugin, (PacketAdapter) instance));
75 registrationActions.put(IDreamEnchantment.class, (javaPlugin, instance) -> RegisterDreamEnchantment(javaPlugin, (IDreamEnchantment) instance));
76 registrationActions.put(Listener.class, (javaPlugin, instance) -> RegisterListener(javaPlugin, (Listener) instance));
77 registrationActions.put(IDreamPlaceholder.class, (javaPlugin, instance) -> RegisterPulsePlaceholder(javaPlugin, (IDreamPlaceholder) instance));
78 registrationActions.put(IDreamItemStack.class, (javaPlugin, instance) -> RegisterIDreamItemStack(javaPlugin, (IDreamItemStack) instance));
79 registrationActions.put(IDreamRecipe.class, (javaPlugin, instance) -> RegisterPulseRecipe(javaPlugin, (IDreamRecipe) instance));
80 registrationActions.put(DreamVariableTest.class, (javaPlugin, instance) -> RegisterPulseVariableTest(javaPlugin, (DreamVariableTest) instance));
81 registrationActions.put(PluginMessageLibrary.class, (javaPlugin, instance) -> RegisterPluginMessageListener(javaPlugin, (PluginMessageLibrary) instance));
82 }
83
92 public static void RegisterClasses(JavaPlugin javaPlugin){
93 try { RegisterClassesRaw(javaPlugin); }
94 catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
95 throw new RuntimeException(e);
96 }
97 }
98
113 public static void RegisterClassesRaw(JavaPlugin javaPlugin)
114 throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
115 try {
116 for (var autoRegisterClass : DreamfireJavaAPI.getAutoRegisterClasses(javaPlugin)) {
117 for (var entry : registrationActions.entrySet()) {
118 if (entry.getKey().isAssignableFrom(autoRegisterClass)) {
119 Object instance = autoRegisterClass.getConstructor().newInstance();
120 entry.getValue().accept(javaPlugin, instance);
121 break; // Stop checking after the first successful match
122 }
123 }
124 }
125 } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
126 javaPlugin.getLogger().severe("Failed to register classes: " + e.getMessage());
127 e.printStackTrace();
128 }
129 }
130
142 public static void RegisterPulseLoop(JavaPlugin javaPlugin, IDreamLoop iDreamLoop){
143 iDreamLoop.Start();
144 int finalId = Bukkit.getScheduler().scheduleSyncRepeatingTask(javaPlugin, new Runnable() {
145 @Override
146 public void run() {
147 iDreamLoop.Loop();
148 }
149 }, iDreamLoop.StartDelay(), iDreamLoop.LoopInterval());
150 iDreamLoop.PassID(finalId);
151 DreamCore.IDreamLoops.put(iDreamLoop.ReturnID(), iDreamLoop);
152 DreamChat.SendMessageToConsole(String.format("&8Registered Loop: %s", iDreamLoop.ReturnID()), DreamMessageSettings.all());
153 }
154
163 public static void RegisterPacketAdapter(JavaPlugin javaPlugin, PacketAdapter packetAdapter) {
164 DreamCore.ProtocolManager.addPacketListener(packetAdapter);
165 DreamChat.SendMessageToConsole(String.format("&8Registered PacketAdapter: %s", packetAdapter.getClass().getSimpleName()), DreamMessageSettings.all());
166 }
167
176 public static void RegisterListener(JavaPlugin javaPlugin, Listener listener){
177 Bukkit.getPluginManager().registerEvents(listener, javaPlugin);
178 DreamChat.SendMessageToConsole(String.format("&8Registered Listener: %s", listener.getClass().getSimpleName()), DreamMessageSettings.all());
179 }
180
189 public static void RegisterDreamEnchantment(JavaPlugin javaPlugin, IDreamEnchantment pulseEnchantment){
190 DreamCore.IDreamEnchantments.add(pulseEnchantment);
191 DreamChat.SendMessageToConsole(String.format("&8Registered DreamEnchantment: %s", pulseEnchantment.getName()), DreamMessageSettings.all());
192 }
193
202 public static void RegisterPulsePlaceholder(JavaPlugin javaPlugin, IDreamPlaceholder iDreamPlaceholder){
203 DreamCore.DreamPlaceholderManager.register(iDreamPlaceholder);
204 DreamChat.SendMessageToConsole(String.format("&8Registered IDreamPlaceholder: %s", iDreamPlaceholder.getClass().getSimpleName()), DreamMessageSettings.all());
205 }
206
215 public static void RegisterPulseRecipe(JavaPlugin javaPlugin, IDreamRecipe iDreamRecipe){
216 Bukkit.addRecipe(iDreamRecipe.ReturnRecipe(javaPlugin));
217 DreamChat.SendMessageToConsole(String.format("&8Registered IDreamRecipe: %s", iDreamRecipe.getClass().getSimpleName()), DreamMessageSettings.all());
218 }
219
228 public static void RegisterIDreamItemStack(JavaPlugin javaPlugin, IDreamItemStack iDreamItemStack){
229 DreamCore.IDreamItemStacks.add(iDreamItemStack);
230 DreamChat.SendMessageToConsole(String.format("&8Registered IDreamItemStack: %s", iDreamItemStack.getClass().getSimpleName()), DreamMessageSettings.all());
231 }
232
242 public static void RegisterPulseVariableTest(JavaPlugin javaPlugin, DreamVariableTest dreamfireVariableTest){
243 DreamChat.SendMessageToConsole(String.format("&8Registered DreamVariableTest: %s", dreamfireVariableTest.getClass().getSimpleName()), DreamMessageSettings.all());
244 for(var classType : dreamfireVariableTest.ClassTypes()){
245 DreamCore.DreamVariableTests.put(classType, dreamfireVariableTest);
246 }
247 }
248
260 public static void RegisterPluginMessageListener(JavaPlugin javaPlugin, PluginMessageLibrary pluginMessageListener) {
261 var channelName = pluginMessageListener.getChannelName(javaPlugin);
262 Bukkit.getMessenger().registerOutgoingPluginChannel(javaPlugin, channelName);
263 Bukkit.getMessenger().registerIncomingPluginChannel(javaPlugin, channelName, pluginMessageListener);
264 if (Bukkit.getMessenger().isOutgoingChannelRegistered(javaPlugin, channelName)) {
265 DreamChat.SendMessageToConsole(String.format("&8Registered PluginMessageListener: %s on channel %s", pluginMessageListener.getClass().getSimpleName(), channelName), DreamMessageSettings.all());
266 } else {
267 Bukkit.getConsoleSender().sendMessage("Failed to register outgoing channel: " + channelName);
268 }
269 }
270}
static final LinkedHashMap< UUID, IDreamLoop > IDreamLoops
static final LinkedHashMap< Class<?>, DreamVariableTest > DreamVariableTests
static DreamPlaceholderManager DreamPlaceholderManager
static ProtocolManager ProtocolManager
static final ArrayList< IDreamEnchantment > IDreamEnchantments
static final ArrayList< IDreamItemStack > IDreamItemStacks
Central auto‑registration hub for Dreamfire “components” discovered via PulseAutoRegister.
static void RegisterPulseRecipe(JavaPlugin javaPlugin, IDreamRecipe iDreamRecipe)
Registers a recipe via Bukkit.
static void RegisterIDreamItemStack(JavaPlugin javaPlugin, IDreamItemStack iDreamItemStack)
Registers a custom item definition for global access.
static void RegisterPulseLoop(JavaPlugin javaPlugin, IDreamLoop iDreamLoop)
Registers an IDreamLoop: starts it, schedules repeating task, records ID.
static void RegisterClasses(JavaPlugin javaPlugin)
Discovers and registers all annotated classes.
static void RegisterListener(JavaPlugin javaPlugin, Listener listener)
Registers a Bukkit Listener.
static void RegisterPacketAdapter(JavaPlugin javaPlugin, PacketAdapter packetAdapter)
Registers a ProtocolLib PacketAdapter.
static void RegisterClassesRaw(JavaPlugin javaPlugin)
Discovers and registers annotated classes, propagating reflection errors.
static void RegisterDreamEnchantment(JavaPlugin javaPlugin, IDreamEnchantment pulseEnchantment)
Registers a custom enchantment with DreamCore’s registry.
static void RegisterPluginMessageListener(JavaPlugin javaPlugin, PluginMessageLibrary pluginMessageListener)
Registers a plugin messaging listener on a named channel.
static void RegisterPulsePlaceholder(JavaPlugin javaPlugin, IDreamPlaceholder iDreamPlaceholder)
Registers an IDreamPlaceholder with the placeholder manager.
static void RegisterPulseVariableTest(JavaPlugin javaPlugin, DreamVariableTest dreamfireVariableTest)
Registers a DreamVariableTest against its supported class types.
Reflection utilities for scanning a plugin JAR to discover annotated classes.
static List< Class<?> > getAutoRegisterClasses(JavaPlugin javaPlugin)
Retrieves auto‑register classes, wrapping checked exceptions.