Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,18 @@ repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://oss.sonatype.org/content/groups/public/")
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
maven("https://nexus.iridiumdevelopment.net/repository/maven-releases/")
maven("https://jitpack.io")
maven("https://maven.enginehub.org/repo/")
maven("https://mvn.lumine.io/repository/maven-public/")
maven("https://nexus.neetgames.com/repository/maven-releases/")
maven("https://repo.jsinco.dev/releases")
maven("https://maven.playpro.com/")
maven("https://repo.okaeri.cloud/releases")
}

dependencies {
compileOnly("me.clip:placeholderapi:2.11.6")
compileOnly("com.github.Zrips:jobs:v4.17.2") {
compileOnly("com.github.Zrips:Jobs:v5.2.6.2") {
isTransitive = false
}
compileOnly("net.dmulloy2:ProtocolLib:5.4.0")
Expand All @@ -47,9 +46,10 @@ dependencies {
compileOnly("dev.lumas.glowapi:LumaGlowAPI:c57567c")

implementation("com.iridium:IridiumColorAPI:1.0.9")
implementation("eu.okaeri:okaeri-configs-yaml-snakeyaml:6.1.0-beta.1")

// PaperWeight
paperweight.paperDevBundle("1.21.10-R0.1-SNAPSHOT")
paperweight.paperDevBundle("1.21.11-R0.1-SNAPSHOT")
}

tasks {
Expand All @@ -66,6 +66,7 @@ tasks {
shadowJar {
val pack = "dev.lumas.lumaitems.shaded"
relocate("com.iridium.iridiumcolorapi", "$pack.iridiumcolorapi")
relocate("eu.okaeri", "$pack.okaeri")
exclude("kotlin/**")
minimize()
archiveClassifier.set("")
Expand Down
76 changes: 9 additions & 67 deletions src/main/java/dev/lumas/lumaitems/LumaItems.java
Original file line number Diff line number Diff line change
@@ -1,56 +1,43 @@
package dev.lumas.lumaitems;

import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import dev.lumas.lumacore.manager.modules.ModuleManager;
import dev.lumas.lumacore.reflect.ReflectionUtil;
import dev.lumas.lumaitems.api.LumaItemsAPI;
import dev.lumas.lumaitems.events.items.PassiveListeners;
import dev.lumas.lumaitems.guis.AbstractGui;
import dev.lumas.lumaitems.enums.Action;
import dev.lumas.lumaitems.manager.FileManager;
import dev.lumas.lumaitems.manager.GlowManager;
import dev.lumas.lumaitems.manager.ItemManager;
import dev.lumas.lumaitems.relics.RelicCrafting;
import dev.lumas.lumaitems.relics.RelicDisassembler;
import dev.lumas.lumaitems.util.Executors;
import dev.lumas.lumaitems.util.Util;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
import java.lang.reflect.Field;
import java.util.Set;
import java.util.logging.Level;

public final class LumaItems extends JavaPlugin {

private static LumaItems instance;
private static PassiveListeners passiveListeners;
private static ItemManager itemManagerInstance;
private static ItemManager itemManager;
private static ModuleManager moduleManager;

// TODO: please move this to some kind of actual hook manager/registry
private static boolean withProtocolLib;
private static boolean withMythicMobs;
private static boolean withmcMMO;
private static boolean withCoreProtect;
private static boolean withLumaGlowAPI;

@Override
public void onLoad() {
instance = this;
passiveListeners = new PassiveListeners(this);
itemManager = new ItemManager();
moduleManager = new ModuleManager(this);
}

@Override
public void onEnable() {
FileManager.generateDefaultFiles(); // TODO: Replace FileManager with Okaeri
long start = System.currentTimeMillis();
ReflectionUtil reflectionUtil = ReflectionUtil.of(getClass());
reflectionUtil.whitelistPackages(
Expand All @@ -60,30 +47,21 @@ public void onEnable() {
"events.items"
);

withProtocolLib = getServer().getPluginManager().isPluginEnabled("ProtocolLib");
withMythicMobs = getServer().getPluginManager().isPluginEnabled("MythicMobs");
withmcMMO = getServer().getPluginManager().isPluginEnabled("mcMMO");
withCoreProtect = getServer().getPluginManager().isPluginEnabled("CoreProtect");
withLumaGlowAPI = getServer().getPluginManager().isPluginEnabled("LumaGlowAPI");

passiveListeners = new PassiveListeners(this);
itemManagerInstance = new ItemManager(this);

Set<Class<?>> classSet = reflectionUtil.getAllClassesFor();
moduleManager.reflectivelyRegisterModules(classSet);
if (!Bukkit.getOnlinePlayers().isEmpty()) {
log("Players are online, registering items asynchronously");
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
Executors.async(task -> {
try {
initItemManager(itemManagerInstance);
initItemManager(itemManager);
} catch (Throwable e) {
getLogger().log(Level.SEVERE, "An error occurred while registering items asynchronously", e);
getServer().getPluginManager().disablePlugin(this);
}
log("Finished asynchronous item registration!" + " Took " + (System.currentTimeMillis() - start) + "ms");
});
} else {
initItemManager(itemManagerInstance);
initItemManager(itemManager);
log("Finished synchronous item registration!" + " Took " + (System.currentTimeMillis() - start) + "ms");
}

Expand Down Expand Up @@ -119,20 +97,6 @@ public void onDisable() {
player.closeInventory();
}
}


// stupid and unnecessary
try {
Field singleTonField = LumaItemsAPI.class.getDeclaredField("singleton");
singleTonField.setAccessible(true);
if (singleTonField.get(LumaItemsAPI.class) == null) {
return;
}
singleTonField.set(null, null);
LumaItems.log("API Singleton instance has been reset!");
} catch (NoSuchFieldException | IllegalAccessException e) {
LumaItems.log("Failed to reset API Singleton instance!", e);
}
}

@NotNull
Expand All @@ -145,30 +109,8 @@ public static LumaItems getInstance() {
return instance;
}

@Nullable
public static ProtocolManager getProtocolManager() {
return withProtocolLib ? ProtocolLibrary.getProtocolManager() : null;
}

@Nullable
public static CoreProtectAPI getCoreProtectAPI() {
return withCoreProtect ? CoreProtect.getInstance().getAPI() : null;
}

public static boolean isWithMythicMobs() {
return withMythicMobs;
}

public static boolean isWithmcMMO() {
return withmcMMO;
}

public static boolean isWithLumaGlowAPI() {
return withLumaGlowAPI;
}

public static ItemManager getItemManagerInstance() {
return itemManagerInstance;
public static ItemManager getItemManager() {
return itemManager;
}

public static void log(String m) {
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/dev/lumas/lumaitems/api/LumaItemsAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import dev.lumas.lumaitems.items.ItemFactory;
import dev.lumas.lumaitems.manager.CustomItem;
import dev.lumas.lumaitems.manager.ItemManager;
import dev.lumas.lumaitems.registry.Registry;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
Expand Down Expand Up @@ -83,8 +84,8 @@ public CustomItem getCustomItem(ItemStack itemStack) {
if (!itemStack.hasItemMeta()) return null;
var meta = itemStack.getItemMeta();

for (var customItem : ItemManager.CUSTOM_ITEMS.entrySet()) {
if (meta.getPersistentDataContainer().has(customItem.getKey(), PersistentDataType.SHORT)) {
for (var customItem : Registry.CUSTOM_ITEMS) {
if (meta.getPersistentDataContainer().has(customItem.getKey().asNameSpacedKey(), PersistentDataType.SHORT)) {
return customItem.getValue();
}
}
Expand Down Expand Up @@ -124,7 +125,7 @@ public List<ItemStack> getAllItems() {
* @param customItem CustomItem to register
*/
public void registerCustomItem(CustomItem customItem) {
LumaItems.getItemManagerInstance().registerItem(customItem);
LumaItems.getItemManager().registerItem(customItem);
}

/**
Expand All @@ -139,7 +140,7 @@ public void registerCustomItem(CustomItem customItem) {
public void registerForPackage(String pack, File file) throws IOException {
try (URLClassLoader classLoader = new URLClassLoader(new URL[]{ file.toURI().toURL() }, this.getClass().getClassLoader())) {
ClassPath classPath = ClassPath.from(classLoader);
LumaItems.getItemManagerInstance().registerForPackage(pack, classPath);
LumaItems.getItemManager().registerForPackage(pack, classPath);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import dev.lumas.lumacore.manager.commands.CommandInfo
import dev.lumas.lumacore.manager.modules.AutoRegister
import dev.lumas.lumacore.manager.modules.RegisterType
import dev.lumas.lumaitems.LumaItems
import dev.lumas.lumaitems.hooks.ProtocolLibHook
import dev.lumas.lumaitems.registry.Registry
import dev.lumas.lumaitems.util.MiniMessageUtil
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
Expand All @@ -22,7 +24,7 @@ import org.bukkit.entity.Player
class SwapHandsCommand : AbstractCommand() {

override fun handle(sender: CommandSender, label: String, args: Array<out String>): Boolean {
val protocolManager = LumaItems.getProtocolManager() ?: run {
val protocolManager = Registry.HOOKS.getOrThrow(ProtocolLibHook::class).getProtocolManager() ?: run {
MiniMessageUtil.msg(sender, "Couldn't find ProtocolLib!")
return true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ package dev.lumas.lumaitems.commands.subcommands
import dev.lumas.lumacore.manager.commands.CommandInfo
import dev.lumas.lumacore.manager.modules.AutoRegister
import dev.lumas.lumacore.manager.modules.RegisterType
import dev.lumas.lumacore.utility.Text
import dev.lumas.lumaitems.LumaItems
import dev.lumas.lumaitems.commands.CommandManager
import dev.lumas.lumaitems.commands.SubCommand
import dev.lumas.lumaitems.manager.FileManager
import dev.lumas.lumaitems.configuration.files.AstralYml
import dev.lumas.lumaitems.registry.Registry
import dev.lumas.lumaitems.relics.RelicCrafting
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
Expand All @@ -22,12 +24,10 @@ import org.bukkit.entity.Player
)
class GiveAstralCommand : SubCommand {

private val file = FileManager("astral.yml").generateYamlFile()

override fun execute(plugin: LumaItems, sender: CommandSender, label: String, args: Array<out String>): Boolean {
val player = sender as? Player ?: return false
if (args.size != 1) {
player.sendMessage("Invalid arguments")
Text.msg(player, "Invalid arguments")
return false
}
val items = RelicCrafting.getItemsFromClass(args[0])
Expand All @@ -38,7 +38,11 @@ class GiveAstralCommand : SubCommand {
}

override fun tabComplete(plugin: LumaItems, sender: CommandSender, args: Array<out String>): List<String>? {
return file.getConfigurationSection("astral-orb-rarities")?.getKeys(false)?.toList()
return Registry.CONFIGS.getOrThrow(AstralYml::class)
.astralOrbRarities
.keys
.map { it.setClass.simpleName }
.toList()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import dev.lumas.lumaitems.LumaItems
import dev.lumas.lumaitems.commands.CommandManager
import dev.lumas.lumaitems.commands.SubCommand
import dev.lumas.lumaitems.manager.ItemManager
import dev.lumas.lumaitems.registry.Registry
import dev.lumas.lumaitems.registry.StringIdentifier
import dev.lumas.lumaitems.util.MiniMessageUtil
import dev.lumas.lumaitems.util.Util
import org.bukkit.command.CommandSender
Expand Down Expand Up @@ -63,7 +65,7 @@ class GiveItemCommand : SubCommand {
override fun tabComplete(plugin: LumaItems, sender: CommandSender, args: Array<out String>): List<String>? {
return when (args.size) {
1 -> {
val list: MutableList<String> = ItemManager.CUSTOM_ITEMS_BY_NAME.keys.toMutableList()
val list: MutableList<String> = Registry.NAMED_CUSTOM_ITEMS.keySet(StringIdentifier::class).map { it.key() }.toMutableList()
list.add("all")
list
}
Expand Down
60 changes: 60 additions & 0 deletions src/main/java/dev/lumas/lumaitems/configuration/ConfigManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package dev.lumas.lumaitems.configuration;

import com.google.common.base.Preconditions;
import dev.lumas.lumaitems.LumaItems;
import dev.lumas.lumaitems.configuration.serdes.AstralSetClassTransformer;
import dev.lumas.lumaitems.configuration.serdes.EnchantmentTransformer;
import dev.lumas.lumaitems.configuration.serdes.LocationTransformer;
import dev.lumas.lumaitems.configuration.serdes.PairedEnchantmentTransformer;
import dev.lumas.lumaitems.registry.Registry;
import dev.lumas.lumaitems.registry.RegistryCrafter;
import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.serdes.standard.StandardSerdes;
import eu.okaeri.configs.yaml.snakeyaml.YamlSnakeYamlConfigurer;

import java.nio.file.Path;

public class ConfigManager implements RegistryCrafter.Extension<OkaeriConfig> {

public static final Path DATA_FOLDER = LumaItems.getInstance().getDataPath();

@Override
public <T extends OkaeriConfig> T craft(Class<?> clazz) {
File annotation = clazz.getAnnotation(File.class);
if (annotation == null) {
throw new IllegalStateException("OkaeriFile must be annotated with @File");
}

String fileName = annotation.value();
Preconditions.checkNotNull(fileName, "Dynamic file name could not be resolved for " + clazz.getName());
Path bindFile = DATA_FOLDER.resolve(fileName);


return eu.okaeri.configs.ConfigManager.create((Class<T>) clazz, (it) -> {
it.configure(configurer -> {
configurer.configurer(new YamlSnakeYamlConfigurer(), new StandardSerdes());
configurer.removeOrphans(true);
configurer.bindFile(bindFile);
configurer.serdes(serdes -> {
serdes.add(new LocationTransformer());
serdes.add(new EnchantmentTransformer());
serdes.add(new PairedEnchantmentTransformer());
serdes.add(new AstralSetClassTransformer());
});
});

it.saveDefaults();
it.load(true);
});
}


public static <T extends OkaeriFile> T get(Class<T> clazz) {
return Registry.CONFIGS.values().stream()
.filter(it -> it.getClass().equals(clazz))
.map(it -> (T) it)
.findFirst()
.orElseThrow(() -> new IllegalStateException("No config found for class " + clazz.getName()));
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package dev.lumas.lumaitems.util;
package dev.lumas.lumaitems.configuration;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface NeedsEdits {
boolean review() default false;
@Target(ElementType.TYPE)
public @interface File {
String value() default "";
}
Loading