mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Experimental Folia support (#30)
Current implementation is not 100% safe. (may have issue on config reload while someone triggered an anvil event). And GUI do not work. But main functionalities should work (as most of it is read of the config/config holder objects. Concurrent read should be fine)
This commit is contained in:
commit
694ece5443
14 changed files with 163 additions and 50 deletions
|
|
@ -0,0 +1,18 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.scheduler
|
||||||
|
|
||||||
|
import org.bukkit.entity.Entity
|
||||||
|
import org.bukkit.plugin.Plugin
|
||||||
|
|
||||||
|
interface TaskScheduler {
|
||||||
|
|
||||||
|
fun scheduleGlobally(plugin: Plugin, task: Runnable, time: Long): Any?
|
||||||
|
fun scheduleGlobally(plugin: Plugin, task: Runnable): Any?{
|
||||||
|
return scheduleGlobally(plugin, task, 0L)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun scheduleOnEntity(plugin: Plugin, entity: Entity, task: Runnable, time: Long): Any?
|
||||||
|
fun scheduleOnEntity(plugin: Plugin, entity: Entity, task: Runnable): Any?{
|
||||||
|
return scheduleOnEntity(plugin, entity, task, 0L)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.scheduler
|
||||||
|
|
||||||
|
import io.papermc.paper.threadedregions.scheduler.ScheduledTask
|
||||||
|
import org.bukkit.Bukkit
|
||||||
|
import org.bukkit.entity.Entity
|
||||||
|
import org.bukkit.plugin.Plugin
|
||||||
|
import java.util.function.Consumer
|
||||||
|
|
||||||
|
class FoliaScheduler : TaskScheduler {
|
||||||
|
override fun scheduleGlobally(plugin: Plugin, task: Runnable, time: Long): Any? {
|
||||||
|
if(time < 1){
|
||||||
|
return Bukkit.getGlobalRegionScheduler().run(
|
||||||
|
plugin,
|
||||||
|
Consumer { scheduledTask: ScheduledTask? -> task.run() }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return Bukkit.getGlobalRegionScheduler().runDelayed(
|
||||||
|
plugin,
|
||||||
|
Consumer { scheduledTask: ScheduledTask? -> task.run() },
|
||||||
|
time
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun scheduleOnEntity(plugin: Plugin, entity: Entity, task: Runnable, time: Long): Any? {
|
||||||
|
if(time < 1){
|
||||||
|
return entity.scheduler.run(
|
||||||
|
plugin,
|
||||||
|
Consumer { scheduledTask: ScheduledTask? -> task.run() },
|
||||||
|
Runnable {}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return entity.scheduler.runDelayed(
|
||||||
|
plugin,
|
||||||
|
Consumer { scheduledTask: ScheduledTask? -> task.run() },
|
||||||
|
Runnable {},
|
||||||
|
time
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun isFolia(): Boolean {
|
||||||
|
try {
|
||||||
|
Class.forName("io.papermc.paper.threadedregions.RegionizedServer")
|
||||||
|
return true
|
||||||
|
} catch (e: ClassNotFoundException) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package xyz.alexcrea.cuanvil.api;
|
package xyz.alexcrea.cuanvil.api;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui;
|
||||||
|
|
||||||
|
|
@ -21,8 +21,8 @@ public class ConflictAPI {
|
||||||
|
|
||||||
private ConflictAPI() {}
|
private ConflictAPI() {}
|
||||||
|
|
||||||
private static int saveChangeTask = -1;
|
private static Object saveChangeTask = null;
|
||||||
private static int reloadChangeTask = -1;
|
private static Object reloadChangeTask = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write and add a conflict.
|
* Write and add a conflict.
|
||||||
|
|
@ -151,27 +151,27 @@ public class ConflictAPI {
|
||||||
* Prepare a task to save conflict configuration.
|
* Prepare a task to save conflict configuration.
|
||||||
*/
|
*/
|
||||||
private static void prepareSaveTask() {
|
private static void prepareSaveTask() {
|
||||||
if(saveChangeTask != -1) return;
|
if(saveChangeTask != null) return;
|
||||||
|
|
||||||
saveChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true);
|
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true);
|
||||||
saveChangeTask = -1;
|
saveChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare a task to reload every conflict.
|
* Prepare a task to reload every conflict.
|
||||||
*/
|
*/
|
||||||
private static void prepareUpdateTask() {
|
private static void prepareUpdateTask() {
|
||||||
if(reloadChangeTask != -1) return;
|
if(reloadChangeTask != null) return;
|
||||||
|
|
||||||
reloadChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
reloadChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.CONFLICT_HOLDER.reload();
|
ConfigHolder.CONFLICT_HOLDER.reload();
|
||||||
EnchantConflictGui conflictGui = EnchantConflictGui.getCurrentInstance();
|
EnchantConflictGui conflictGui = EnchantConflictGui.getCurrentInstance();
|
||||||
if(conflictGui != null) conflictGui.reloadValues();
|
if(conflictGui != null) conflictGui.reloadValues();
|
||||||
|
|
||||||
reloadChangeTask = -1;
|
reloadChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package xyz.alexcrea.cuanvil.api;
|
package xyz.alexcrea.cuanvil.api;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.global.CustomRecipeConfigGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.CustomRecipeConfigGui;
|
||||||
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe;
|
import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe;
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ public class CustomAnvilRecipeApi {
|
||||||
|
|
||||||
private CustomAnvilRecipeApi(){}
|
private CustomAnvilRecipeApi(){}
|
||||||
|
|
||||||
private static int saveChangeTask = -1;
|
private static Object saveChangeTask = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write and add a custom anvil recipe.
|
* Write and add a custom anvil recipe.
|
||||||
|
|
@ -103,12 +103,12 @@ public class CustomAnvilRecipeApi {
|
||||||
* Prepare a task to save custom recipe configuration.
|
* Prepare a task to save custom recipe configuration.
|
||||||
*/
|
*/
|
||||||
private static void prepareSaveTask() {
|
private static void prepareSaveTask() {
|
||||||
if(saveChangeTask != -1) return;
|
if(saveChangeTask != null) return;
|
||||||
|
|
||||||
saveChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true);
|
ConfigHolder.CONFLICT_HOLDER.saveToDisk(true);
|
||||||
saveChangeTask = -1;
|
saveChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
package xyz.alexcrea.cuanvil.api;
|
package xyz.alexcrea.cuanvil.api;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
import xyz.alexcrea.cuanvil.enchant.CAEnchantment;
|
||||||
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
|
import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry;
|
||||||
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity;
|
||||||
|
|
@ -26,7 +26,7 @@ import java.util.Map;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class EnchantmentApi {
|
public class EnchantmentApi {
|
||||||
|
|
||||||
private static int saveChangeTask = -1;
|
private static Object saveChangeTask = null;
|
||||||
|
|
||||||
private EnchantmentApi() {}
|
private EnchantmentApi() {}
|
||||||
|
|
||||||
|
|
@ -180,12 +180,12 @@ public class EnchantmentApi {
|
||||||
* Prepare a task to save custom recipe configuration.
|
* Prepare a task to save custom recipe configuration.
|
||||||
*/
|
*/
|
||||||
private static void prepareSaveTask() {
|
private static void prepareSaveTask() {
|
||||||
if(saveChangeTask != -1) return;
|
if(saveChangeTask != null) return;
|
||||||
|
|
||||||
saveChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.DEFAULT_CONFIG.saveToDisk(true);
|
ConfigHolder.DEFAULT_CONFIG.saveToDisk(true);
|
||||||
saveChangeTask = -1;
|
saveChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@ package xyz.alexcrea.cuanvil.api;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import io.delilaheve.util.ConfigOptions;
|
import io.delilaheve.util.ConfigOptions;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||||
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
|
||||||
import xyz.alexcrea.cuanvil.group.ExcludeGroup;
|
import xyz.alexcrea.cuanvil.group.ExcludeGroup;
|
||||||
import xyz.alexcrea.cuanvil.group.IncludeGroup;
|
import xyz.alexcrea.cuanvil.group.IncludeGroup;
|
||||||
|
|
@ -24,8 +24,8 @@ public class MaterialGroupApi {
|
||||||
|
|
||||||
private MaterialGroupApi(){}
|
private MaterialGroupApi(){}
|
||||||
|
|
||||||
private static int saveChangeTask = -1;
|
private static Object saveChangeTask = null;
|
||||||
private static int reloadChangeTask = -1;
|
private static Object reloadChangeTask = null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -180,28 +180,28 @@ public class MaterialGroupApi {
|
||||||
* Prepare a task to reload every conflict.
|
* Prepare a task to reload every conflict.
|
||||||
*/
|
*/
|
||||||
private static void prepareSaveTask() {
|
private static void prepareSaveTask() {
|
||||||
if(saveChangeTask != -1) return;
|
if(saveChangeTask != null) return;
|
||||||
|
|
||||||
saveChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true);
|
ConfigHolder.ITEM_GROUP_HOLDER.saveToDisk(true);
|
||||||
saveChangeTask = -1;
|
saveChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare a task to save configuration.
|
* Prepare a task to save configuration.
|
||||||
*/
|
*/
|
||||||
private static void prepareUpdateTask() {
|
private static void prepareUpdateTask() {
|
||||||
if(reloadChangeTask != -1) return;
|
if(reloadChangeTask != null) return;
|
||||||
|
|
||||||
reloadChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
reloadChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.ITEM_GROUP_HOLDER.reload();
|
ConfigHolder.ITEM_GROUP_HOLDER.reload();
|
||||||
|
|
||||||
GroupConfigGui configGui = GroupConfigGui.getCurrentInstance();
|
GroupConfigGui configGui = GroupConfigGui.getCurrentInstance();
|
||||||
if(configGui != null) configGui.reloadValues();
|
if(configGui != null) configGui.reloadValues();
|
||||||
|
|
||||||
reloadChangeTask = -1;
|
reloadChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@ package xyz.alexcrea.cuanvil.api;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import kotlin.Triple;
|
import kotlin.Triple;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui;
|
import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui;
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ public class UnitRepairApi {
|
||||||
|
|
||||||
private UnitRepairApi(){}
|
private UnitRepairApi(){}
|
||||||
|
|
||||||
private static int saveChangeTask = -1;
|
private static Object saveChangeTask = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write and add a custom anvil unit repair recipe.
|
* Write and add a custom anvil unit repair recipe.
|
||||||
|
|
@ -161,12 +161,12 @@ public class UnitRepairApi {
|
||||||
* Prepare a task to save custom unit repair recipe configuration.
|
* Prepare a task to save custom unit repair recipe configuration.
|
||||||
*/
|
*/
|
||||||
private static void prepareSaveTask() {
|
private static void prepareSaveTask() {
|
||||||
if(saveChangeTask != -1) return;
|
if(saveChangeTask != null) return;
|
||||||
|
|
||||||
saveChangeTask = Bukkit.getScheduler().scheduleSyncDelayedTask(CustomAnvil.instance, ()->{
|
saveChangeTask = DependencyManager.scheduler.scheduleGlobally(CustomAnvil.instance, ()->{
|
||||||
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true);
|
ConfigHolder.UNIT_REPAIR_HOLDER.saveToDisk(true);
|
||||||
saveChangeTask = -1;
|
saveChangeTask = null;
|
||||||
}, 0L);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ class CustomAnvil : JavaPlugin() {
|
||||||
|
|
||||||
// Load other thing later.
|
// Load other thing later.
|
||||||
// It is so other dependent plugins can implement there event listener before we fire them.
|
// It is so other dependent plugins can implement there event listener before we fire them.
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, {loadEnchantmentSystem()}, 0L)
|
DependencyManager.scheduler.scheduleGlobally(this, {loadEnchantmentSystem()})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadEnchantmentSystem(){
|
private fun loadEnchantmentSystem(){
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import org.bukkit.command.Command
|
||||||
import org.bukkit.command.CommandExecutor
|
import org.bukkit.command.CommandExecutor
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui
|
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
|
||||||
|
|
||||||
|
|
@ -15,6 +16,15 @@ class EditConfigExecutor : CommandExecutor {
|
||||||
sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM)
|
sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if(DependencyManager.isFolia){
|
||||||
|
sender.sendMessage("§cIt look like you are using Folia. Sadly Custom Anvil do not support Config gui for Folia.")
|
||||||
|
sender.sendMessage("§eIt is may come in a future version.")
|
||||||
|
sender.sendMessage("")
|
||||||
|
sender.sendMessage("§eCurrently you need to edit manually the config or copy from another server (spigot or better)")
|
||||||
|
sender.sendMessage("§eThen /anvilconfigreload after config file is edited")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if (sender !is HumanEntity) return false
|
if (sender !is HumanEntity) return false
|
||||||
MainConfigGui.getInstance().show(sender)
|
MainConfigGui.getInstance().show(sender)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency
|
package xyz.alexcrea.cuanvil.dependency
|
||||||
|
|
||||||
|
import io.delilaheve.CustomAnvil
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
import org.bukkit.event.inventory.PrepareAnvilEvent
|
||||||
|
|
@ -7,9 +8,14 @@ import org.bukkit.inventory.AnvilInventory
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerSelector
|
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerSelector
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.scheduler.BukkitScheduler
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.scheduler.FoliaScheduler
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.scheduler.TaskScheduler
|
||||||
|
|
||||||
object DependencyManager {
|
object DependencyManager {
|
||||||
|
|
||||||
|
var isFolia: Boolean = false
|
||||||
|
lateinit var scheduler: TaskScheduler
|
||||||
lateinit var packetManager: PacketManager
|
lateinit var packetManager: PacketManager
|
||||||
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
var enchantmentSquaredCompatibility: EnchantmentSquaredDependency? = null
|
||||||
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
var ecoEnchantCompatibility: EcoEnchantDependency? = null
|
||||||
|
|
@ -18,6 +24,14 @@ object DependencyManager {
|
||||||
fun loadDependency(){
|
fun loadDependency(){
|
||||||
val pluginManager = Bukkit.getPluginManager()
|
val pluginManager = Bukkit.getPluginManager()
|
||||||
|
|
||||||
|
// Bukkit or Paper scheduler ?
|
||||||
|
isFolia = FoliaScheduler.isFolia()
|
||||||
|
scheduler = if(isFolia) {
|
||||||
|
CustomAnvil.instance.logger.info("Folia detected... Custom Anvil Folia support is experimental. issues are more likely to happens.")
|
||||||
|
|
||||||
|
FoliaScheduler()
|
||||||
|
} else BukkitScheduler()
|
||||||
|
|
||||||
// Packet Manager
|
// Packet Manager
|
||||||
val forceProtocolib = ConfigHolder.DEFAULT_CONFIG.config.getBoolean("force_protocolib", false)
|
val forceProtocolib = ConfigHolder.DEFAULT_CONFIG.config.getBoolean("force_protocolib", false)
|
||||||
packetManager = PacketManagerSelector.selectPacketManager(forceProtocolib)
|
packetManager = PacketManagerSelector.selectPacketManager(forceProtocolib)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.scheduler
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit
|
||||||
|
import org.bukkit.entity.Entity
|
||||||
|
import org.bukkit.plugin.Plugin
|
||||||
|
|
||||||
|
class BukkitScheduler : TaskScheduler {
|
||||||
|
|
||||||
|
override fun scheduleGlobally(plugin: Plugin, task: Runnable, time: Long): Any? {
|
||||||
|
return Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, task, time)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun scheduleOnEntity(plugin: Plugin, entity: Entity, task: Runnable, time: Long): Any? {
|
||||||
|
return Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, task, time)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package xyz.alexcrea.cuanvil.listener
|
package xyz.alexcrea.cuanvil.listener
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil
|
import io.delilaheve.CustomAnvil
|
||||||
import org.bukkit.Bukkit
|
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent
|
import org.bukkit.event.player.AsyncPlayerChatEvent
|
||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
@ -39,9 +39,11 @@ class ChatEventListener : Listener {
|
||||||
event.isCancelled = true
|
event.isCancelled = true
|
||||||
|
|
||||||
// sync callback with default server thread
|
// sync callback with default server thread
|
||||||
Bukkit.getScheduler().runTask(CustomAnvil.instance, Runnable {
|
DependencyManager.scheduler.scheduleOnEntity(
|
||||||
|
CustomAnvil.instance, player,
|
||||||
|
Runnable {
|
||||||
eventCallback.accept(event.message)
|
eventCallback.accept(event.message)
|
||||||
})
|
}, 0L)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -38,21 +38,20 @@ object AnvilXpUtil {
|
||||||
anvilCost
|
anvilCost
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val player = view.player
|
||||||
|
|
||||||
/* Because Minecraft likes to have the final say in the repair cost displayed
|
/* Because Minecraft likes to have the final say in the repair cost displayed
|
||||||
* we need to wait for the event to end before overriding it, this ensures that
|
* we need to wait for the event to end before overriding it, this ensures that
|
||||||
* we have the final say in the process. */
|
* we have the final say in the process. */
|
||||||
CustomAnvil.instance
|
DependencyManager.scheduler.scheduleOnEntity(
|
||||||
.server
|
CustomAnvil.instance, player,
|
||||||
.scheduler
|
Runnable {
|
||||||
.runTask(CustomAnvil.instance, Runnable {
|
|
||||||
inventory.maximumRepairCost =
|
inventory.maximumRepairCost =
|
||||||
if (ConfigOptions.doRemoveCostLimit || ignoreRules)
|
if (ConfigOptions.doRemoveCostLimit || ignoreRules)
|
||||||
{ Int.MAX_VALUE }
|
{ Int.MAX_VALUE }
|
||||||
else
|
else
|
||||||
{ ConfigOptions.maxAnvilCost + 1 }
|
{ ConfigOptions.maxAnvilCost + 1 }
|
||||||
|
|
||||||
val player = view.player
|
|
||||||
|
|
||||||
inventory.repairCost = finalAnvilCost
|
inventory.repairCost = finalAnvilCost
|
||||||
view.setProperty(REPAIR_COST, finalAnvilCost)
|
view.setProperty(REPAIR_COST, finalAnvilCost)
|
||||||
player.openInventory.setProperty(REPAIR_COST, finalAnvilCost)
|
player.openInventory.setProperty(REPAIR_COST, finalAnvilCost)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ main: io.delilaheve.CustomAnvil
|
||||||
name: CustomAnvil
|
name: CustomAnvil
|
||||||
prefix: "Custom Anvil"
|
prefix: "Custom Anvil"
|
||||||
version: 1.6.0
|
version: 1.6.0
|
||||||
|
folia-supported: true
|
||||||
description: Allow to customise anvil mechanics
|
description: Allow to customise anvil mechanics
|
||||||
api-version: 1.16
|
api-version: 1.16
|
||||||
load: POSTWORLD
|
load: POSTWORLD
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue