Rename internal CMagicGem implementation

This commit is contained in:
Coldsmiles
2026-10-05 01:46:32 +08:00
parent 953c15e380
commit ff9b6ce4f1
68 changed files with 298 additions and 306 deletions
+4 -4
View File
@@ -1,6 +1,6 @@
# MagicGem → MagicGem Reforged 升级指南 # MagicGem → MagicGem Reforged 升级指南
本文只描述从原版 MagicGem 升级到 MagicGem Reforged 的流程。当前版本不扫描或导入 `plugins/CMagicGem`,也不执行多个重实现目录之间的合并。 本文只描述从原版 MagicGem 升级到 MagicGem Reforged 的流程。当前版本只扫描并导入 `plugins/MagicGem`,不执行多个目录之间的合并。
MagicGem Reforged 面向 Minecraft/Paper 1.21.x(包括 1.21.11),使用 Java 21。它保留原插件的非授权功能,不实现网络授权或机器绑定。 MagicGem Reforged 面向 Minecraft/Paper 1.21.x(包括 1.21.11),使用 Java 21。它保留原插件的非授权功能,不实现网络授权或机器绑定。
@@ -55,12 +55,12 @@ plugins/
```yaml ```yaml
name: MagicGem-Reforged name: MagicGem-Reforged
main: cn.infstar.magicgemreforged.MagicGemReforged main: cn.infstar.magicgem.MagicGem
``` ```
主命令仍然是 `/mgem`,别名仍然是 `/cmgem` 和 `/cmg`。命令兼容不代表旧 JAR 可以同时运行;服务器中只能安装当前 JAR。 主命令仍然是 `/mgem`。命令兼容不代表旧 JAR 可以同时运行;服务器中只能安装当前 JAR。
Java 主类已经是独立的新入口 `MagicGemReforged`。旧入口 `pku.yim.magicgem.MagicGem` 作为兼容父类保留,供依赖原版公开 API 的其他插件继续解析;它不会作为 Paper 的实际入口加载。 Java 主类已经是独立的新入口 `cn.infstar.magicgem.MagicGem`。旧入口 `pku.yim.magicgem.MagicGem` 作为兼容父类保留,供依赖原版公开 API 的其他插件继续解析;它不会作为 Paper 的实际入口加载。
## 第一次启动时的目录迁移 ## 第一次启动时的目录迁移
+1 -1
View File
@@ -17,7 +17,7 @@ plugins/MagicGem → plugins/MagicGem-Reforged
完整的升级顺序、文件处理、物品数据兼容和回滚流程见 [MIGRATION.md](MIGRATION.md)。 完整的升级顺序、文件处理、物品数据兼容和回滚流程见 [MIGRATION.md](MIGRATION.md)。
主命令是 `/mgem`,并提供 `/cmgem` 和 `/cmg` 别名。原版物品中的 `MAGICGEM_NAME`、`MAGICGEM_EMBED` 和 `MAGICGEM_SKILL` 会继续兼容。 主命令是 `/mgem`。原版物品中的 `MAGICGEM_NAME`、`MAGICGEM_EMBED` 和 `MAGICGEM_SKILL` 会继续兼容。
## 命令 ## 命令
+1 -1
View File
@@ -48,7 +48,7 @@
<relocations> <relocations>
<relocation> <relocation>
<pattern>de.tr7zw.changeme.nbtapi</pattern> <pattern>de.tr7zw.changeme.nbtapi</pattern>
<shadedPattern>cn.infstar.cmagicgem.libs.nbtapi</shadedPattern> <shadedPattern>cn.infstar.magicgem.libs.nbtapi</shadedPattern>
</relocation> </relocation>
</relocations> </relocations>
</configuration> </configuration>
@@ -0,0 +1,30 @@
package cn.infstar.magicgem;
/**
* Paper entry point for MagicGem Reforged.
*
* <p>The original {@code pku.yim.magicgem.MagicGem} superclass remains available
* so plugins compiled against the original public API can continue to resolve it.</p>
*/
public final class MagicGem extends pku.yim.magicgem.MagicGem {
public static MagicGem instance;
public static MagicGem getInstance() {
return instance;
}
@Override
public void onEnable() {
instance = this;
super.onEnable();
}
@Override
public void onDisable() {
try {
super.onDisable();
} finally {
if (instance == this) instance = null;
}
}
}
@@ -1,30 +1,30 @@
package cn.infstar.cmagicgem; package cn.infstar.magicgem;
import cn.infstar.cmagicgem.api.event.CMagicReloadEvent; import cn.infstar.magicgem.api.event.MagicReloadEvent;
import cn.infstar.cmagicgem.command.CMagicGemCommand; import cn.infstar.magicgem.command.MagicGemCommand;
import cn.infstar.cmagicgem.condition.ConditionEngine; import cn.infstar.magicgem.condition.ConditionEngine;
import cn.infstar.cmagicgem.config.PluginSettings; import cn.infstar.magicgem.config.PluginSettings;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.expression.Expression; import cn.infstar.magicgem.expression.Expression;
import cn.infstar.cmagicgem.expression.DynamicExpression; import cn.infstar.magicgem.expression.DynamicExpression;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.gem.GemService; import cn.infstar.magicgem.gem.GemService;
import cn.infstar.cmagicgem.gui.GemBrowser; import cn.infstar.magicgem.gui.GemBrowser;
import cn.infstar.cmagicgem.gui.GemGuiManager; import cn.infstar.magicgem.gui.GemGuiManager;
import cn.infstar.cmagicgem.integration.EconomyBridge; import cn.infstar.magicgem.integration.EconomyBridge;
import cn.infstar.cmagicgem.integration.MythicBridge; import cn.infstar.magicgem.integration.MythicBridge;
import cn.infstar.cmagicgem.integration.PlaceholderBridge; import cn.infstar.magicgem.integration.PlaceholderBridge;
import cn.infstar.cmagicgem.integration.PlayerPointsBridge; import cn.infstar.magicgem.integration.PlayerPointsBridge;
import cn.infstar.cmagicgem.integration.ProtectionBridge; import cn.infstar.magicgem.integration.ProtectionBridge;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.item.ItemMatcher; import cn.infstar.magicgem.item.ItemMatcher;
import cn.infstar.cmagicgem.listener.GemUseListener; import cn.infstar.magicgem.listener.GemUseListener;
import cn.infstar.cmagicgem.migration.LegacyDirectoryImporter; import cn.infstar.magicgem.migration.LegacyDirectoryImporter;
import cn.infstar.cmagicgem.reward.RewardEngine; import cn.infstar.magicgem.reward.RewardEngine;
import cn.infstar.cmagicgem.skill.SkillRegistry; import cn.infstar.magicgem.skill.SkillRegistry;
import cn.infstar.cmagicgem.skill.SkillEngine; import cn.infstar.magicgem.skill.SkillEngine;
import cn.infstar.cmagicgem.util.MessageDispatcher; import cn.infstar.magicgem.util.MessageDispatcher;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -32,7 +32,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.util.Objects; import java.util.Objects;
public class CMagicGem extends JavaPlugin { public class MagicGemPlugin extends JavaPlugin {
private volatile PluginSettings settings; private volatile PluginSettings settings;
private GemRegistry gemRegistry; private GemRegistry gemRegistry;
private SkillRegistry skillRegistry; private SkillRegistry skillRegistry;
@@ -81,7 +81,7 @@ public class CMagicGem extends JavaPlugin {
guiManager = new GemGuiManager(this, gemRegistry, gemService, itemCodec, itemMatcher, messages, languages); guiManager = new GemGuiManager(this, gemRegistry, gemService, itemCodec, itemMatcher, messages, languages);
reloadAll(); reloadAll();
CMagicGemCommand command = new CMagicGemCommand(gemRegistry, gemService, itemCodec, gemBrowser, MagicGemCommand command = new MagicGemCommand(gemRegistry, gemService, itemCodec, gemBrowser,
guiManager, skillEngine, messages, languages, this::reloadScope); guiManager, skillEngine, messages, languages, this::reloadScope);
PluginCommand pluginCommand = Objects.requireNonNull(getCommand("mgem")); PluginCommand pluginCommand = Objects.requireNonNull(getCommand("mgem"));
pluginCommand.setExecutor(command); pluginCommand.setExecutor(command);
@@ -121,7 +121,7 @@ public class CMagicGem extends JavaPlugin {
else skillRegistry.clear(); else skillRegistry.clear();
} }
if ((all || gems) && guiManager != null) guiManager.reload(); if ((all || gems) && guiManager != null) guiManager.reload();
if (isEnabled()) getServer().getPluginManager().callEvent(new CMagicReloadEvent()); if (isEnabled()) getServer().getPluginManager().callEvent(new MagicReloadEvent());
} }
protected void onSettingsReloaded(PluginSettings settings) { } protected void onSettingsReloaded(PluginSettings settings) { }
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
@@ -7,7 +7,7 @@ import org.bukkit.event.player.PlayerEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicEquipmentChangeEvent extends PlayerEvent implements Cancellable { public final class MagicEquipmentChangeEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final String slot; private final String slot;
private final ItemStack oldItem; private final ItemStack oldItem;
@@ -15,7 +15,7 @@ public final class CMagicEquipmentChangeEvent extends PlayerEvent implements Can
private final Cause cause; private final Cause cause;
private boolean cancelled; private boolean cancelled;
public CMagicEquipmentChangeEvent(Player player, String slot, ItemStack oldItem, ItemStack newItem, Cause cause) { public MagicEquipmentChangeEvent(Player player, String slot, ItemStack oldItem, ItemStack newItem, Cause cause) {
super(player); super(player);
this.slot = slot; this.slot = slot;
this.oldItem = oldItem == null ? null : oldItem.clone(); this.oldItem = oldItem == null ? null : oldItem.clone();
@@ -1,19 +1,19 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicGemUseEvent extends PlayerEvent implements Cancellable { public final class MagicGemUseEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final GemDefinition gem; private final GemDefinition gem;
private final boolean use; private final boolean use;
private boolean cancelled; private boolean cancelled;
public CMagicGemUseEvent(Player player, GemDefinition gem, boolean use) { public MagicGemUseEvent(Player player, GemDefinition gem, boolean use) {
super(player); super(player);
this.gem = gem; this.gem = gem;
this.use = use; this.use = use;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -7,13 +7,13 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicJumpEvent extends PlayerEvent implements Cancellable { public final class MagicJumpEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private Location from; private Location from;
private Location to; private Location to;
private boolean cancelled; private boolean cancelled;
public CMagicJumpEvent(Player player, Location from, Location to) { public MagicJumpEvent(Player player, Location from, Location to) {
super(player); super(player);
this.from = from.clone(); this.from = from.clone();
this.to = to.clone(); this.to = to.clone();
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerEvent;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicPotionBuffEvent extends PlayerEvent implements Cancellable { public final class MagicPotionBuffEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final LivingEntity target; private final LivingEntity target;
private final PotionEffectType type; private final PotionEffectType type;
@@ -16,7 +16,7 @@ public final class CMagicPotionBuffEvent extends PlayerEvent implements Cancella
private int durationTicks; private int durationTicks;
private boolean cancelled; private boolean cancelled;
public CMagicPotionBuffEvent(Player player, LivingEntity target, PotionEffectType type, public MagicPotionBuffEvent(Player player, LivingEntity target, PotionEffectType type,
int amplifier, int durationTicks) { int amplifier, int durationTicks) {
super(player); super(player);
this.target = target; this.target = target;
@@ -1,13 +1,13 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicReloadEvent extends Event { public final class MagicReloadEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
public CMagicReloadEvent() { public MagicReloadEvent() {
super(false); super(false);
} }
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
@@ -6,13 +6,13 @@ import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicSkillLoadEvent extends Event implements Cancellable { public final class MagicSkillLoadEvent extends Event implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final String name; private final String name;
private final ConfigurationSection config; private final ConfigurationSection config;
private boolean cancelled; private boolean cancelled;
public CMagicSkillLoadEvent(String name, ConfigurationSection config) { public MagicSkillLoadEvent(String name, ConfigurationSection config) {
this.name = name; this.name = name;
this.config = config; this.config = config;
} }
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.api.event; package cn.infstar.magicgem.api.event;
import cn.infstar.cmagicgem.skill.SkillDefinition; import cn.infstar.magicgem.skill.SkillDefinition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@@ -8,13 +8,13 @@ import org.bukkit.event.player.PlayerEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public final class CMagicSkillUseEvent extends PlayerEvent implements Cancellable { public final class MagicSkillUseEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final SkillDefinition skill; private final SkillDefinition skill;
private final ItemStack item; private final ItemStack item;
private boolean cancelled; private boolean cancelled;
public CMagicSkillUseEvent(Player player, SkillDefinition skill, ItemStack item) { public MagicSkillUseEvent(Player player, SkillDefinition skill, ItemStack item) {
super(player); super(player);
this.skill = skill; this.skill = skill;
this.item = item; this.item = item;
@@ -1,15 +1,15 @@
package cn.infstar.cmagicgem.command; package cn.infstar.magicgem.command;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.gem.GemService; import cn.infstar.magicgem.gem.GemService;
import cn.infstar.cmagicgem.gem.GemUseResult; import cn.infstar.magicgem.gem.GemUseResult;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.gui.GemBrowser; import cn.infstar.magicgem.gui.GemBrowser;
import cn.infstar.cmagicgem.gui.GemGuiManager; import cn.infstar.magicgem.gui.GemGuiManager;
import cn.infstar.cmagicgem.skill.SkillEngine; import cn.infstar.magicgem.skill.SkillEngine;
import cn.infstar.cmagicgem.util.MessageDispatcher; import cn.infstar.magicgem.util.MessageDispatcher;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import de.tr7zw.changeme.nbtapi.NBTType; import de.tr7zw.changeme.nbtapi.NBTType;
import de.tr7zw.changeme.nbtapi.iface.ReadableNBT; import de.tr7zw.changeme.nbtapi.iface.ReadableNBT;
@@ -33,7 +33,7 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
public final class CMagicGemCommand implements CommandExecutor, TabCompleter { public final class MagicGemCommand implements CommandExecutor, TabCompleter {
private final GemRegistry registry; private final GemRegistry registry;
private final GemService gemService; private final GemService gemService;
private final ItemCodec itemCodec; private final ItemCodec itemCodec;
@@ -44,7 +44,7 @@ public final class CMagicGemCommand implements CommandExecutor, TabCompleter {
private final MessageDispatcher messages; private final MessageDispatcher messages;
private final LanguageManager languages; private final LanguageManager languages;
public CMagicGemCommand(GemRegistry registry, GemService gemService, ItemCodec itemCodec, GemBrowser browser, public MagicGemCommand(GemRegistry registry, GemService gemService, ItemCodec itemCodec, GemBrowser browser,
GemGuiManager guiManager, SkillEngine skillEngine, MessageDispatcher messages, GemGuiManager guiManager, SkillEngine skillEngine, MessageDispatcher messages,
LanguageManager languages, Consumer<String> reload) { LanguageManager languages, Consumer<String> reload) {
this.registry = registry; this.registry = registry;
@@ -1,18 +1,16 @@
package cn.infstar.cmagicgem.command; package cn.infstar.magicgem.command;
import java.util.Locale; import java.util.Locale;
import java.util.function.Predicate; import java.util.function.Predicate;
/** Keeps the legacy MagicGem admin node's "all permissions" behavior. */ /** Applies the MagicGem command permission hierarchy. */
final class PermissionPolicy { final class PermissionPolicy {
private PermissionPolicy() { } private PermissionPolicy() { }
static boolean allows(String permission, Predicate<String> hasPermission) { static boolean allows(String permission, Predicate<String> hasPermission) {
String requested = permission.toLowerCase(Locale.ROOT); String requested = permission.toLowerCase(Locale.ROOT);
boolean admin = hasPermission.test("magicgem.command.admin") boolean admin = hasPermission.test("magicgem.command.admin");
|| hasPermission.test("cmagicgem.command.admin");
if (admin) return true; if (admin) return true;
return hasPermission.test("magicgem.command." + requested) return hasPermission.test("magicgem.command." + requested);
|| hasPermission.test("cmagicgem.command." + requested);
} }
} }
@@ -1,9 +1,9 @@
package cn.infstar.cmagicgem.condition; package cn.infstar.magicgem.condition;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.expression.DynamicExpression; import cn.infstar.magicgem.expression.DynamicExpression;
import cn.infstar.cmagicgem.item.ItemMatcher; import cn.infstar.magicgem.item.ItemMatcher;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.config; package cn.infstar.magicgem.config;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.config; package cn.infstar.magicgem.config;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.dsl; package cn.infstar.magicgem.dsl;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.dsl; package cn.infstar.magicgem.dsl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@@ -1,7 +1,7 @@
package cn.infstar.cmagicgem.expression; package cn.infstar.magicgem.expression;
import cn.infstar.cmagicgem.integration.PlaceholderBridge; import cn.infstar.magicgem.integration.PlaceholderBridge;
import cn.infstar.cmagicgem.util.EnchantmentResolver; import cn.infstar.magicgem.util.EnchantmentResolver;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.expression; package cn.infstar.magicgem.expression;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import org.bukkit.Material; import org.bukkit.Material;
import java.util.List; import java.util.List;
@@ -1,9 +1,9 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.util.MaterialResolver; import cn.infstar.magicgem.util.MaterialResolver;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
@@ -1,15 +1,15 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import cn.infstar.cmagicgem.api.event.CMagicGemUseEvent; import cn.infstar.magicgem.api.event.MagicGemUseEvent;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.condition.ConditionEngine; import cn.infstar.magicgem.condition.ConditionEngine;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.expression.DynamicExpression; import cn.infstar.magicgem.expression.DynamicExpression;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.item.ItemMatcher; import cn.infstar.magicgem.item.ItemMatcher;
import cn.infstar.cmagicgem.reward.RewardContext; import cn.infstar.magicgem.reward.RewardContext;
import cn.infstar.cmagicgem.reward.RewardEngine; import cn.infstar.magicgem.reward.RewardEngine;
import cn.infstar.cmagicgem.reward.RewardException; import cn.infstar.magicgem.reward.RewardException;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -47,7 +47,7 @@ public final class GemService {
} }
public GemUseResult use(Player player, GemDefinition requested, ItemStack target) { public GemUseResult use(Player player, GemDefinition requested, ItemStack target) {
CMagicGemUseEvent event = new CMagicGemUseEvent(player, requested, true); MagicGemUseEvent event = new MagicGemUseEvent(player, requested, true);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) return GemUseResult.rejected(target, if (event.isCancelled()) return GemUseResult.rejected(target,
languages.text("cmagic.use_cancelled", "&c宝石使用已被其他插件取消")); languages.text("cmagic.use_cancelled", "&c宝石使用已被其他插件取消"));
@@ -157,7 +157,7 @@ public final class GemService {
if (found.isEmpty()) return GemUseResult.rejected(target, if (found.isEmpty()) return GemUseResult.rejected(target,
languages.text("cmagic.gem_not_found", "&c未知宝石: {gem}", "gem", gemName)); languages.text("cmagic.gem_not_found", "&c未知宝石: {gem}", "gem", gemName));
GemDefinition gem = found.get(); GemDefinition gem = found.get();
CMagicGemUseEvent event = new CMagicGemUseEvent(player, gem, false); MagicGemUseEvent event = new MagicGemUseEvent(player, gem, false);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) return GemUseResult.rejected(target, if (event.isCancelled()) return GemUseResult.rejected(target,
languages.text("cmagic.remove_cancelled", "&c宝石拆卸已被其他插件取消")); languages.text("cmagic.remove_cancelled", "&c宝石拆卸已被其他插件取消"));
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import java.util.Locale; import java.util.Locale;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.Deque; import java.util.Deque;
@@ -1,9 +1,9 @@
package cn.infstar.cmagicgem.gui; package cn.infstar.magicgem.gui;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -1,14 +1,14 @@
package cn.infstar.cmagicgem.gui; package cn.infstar.magicgem.gui;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.gem.GemService; import cn.infstar.magicgem.gem.GemService;
import cn.infstar.cmagicgem.gem.GemType; import cn.infstar.magicgem.gem.GemType;
import cn.infstar.cmagicgem.gem.GemUseResult; import cn.infstar.magicgem.gem.GemUseResult;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.item.ItemMatcher; import cn.infstar.magicgem.item.ItemMatcher;
import cn.infstar.cmagicgem.util.MessageDispatcher; import cn.infstar.magicgem.util.MessageDispatcher;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gui; package cn.infstar.magicgem.gui;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import de.tr7zw.changeme.nbtapi.iface.ReadWriteNBT; import de.tr7zw.changeme.nbtapi.iface.ReadWriteNBT;
@@ -54,7 +54,7 @@ public final class MMOItemsBridge {
copy.mergeCompound(nbt); copy.mergeCompound(nbt);
for (String key : new ArrayList<>(copy.getKeys())) { for (String key : new ArrayList<>(copy.getKeys())) {
String normalized = key.toUpperCase(Locale.ROOT); String normalized = key.toUpperCase(Locale.ROOT);
if (!normalized.startsWith("CMAGICGEM_") && !normalized.equals("MYTHIC_TYPE")) copy.removeKey(key); if (!normalized.startsWith("MAGICGEM_REFORGED_") && !normalized.equals("MYTHIC_TYPE")) copy.removeKey(key);
} }
return copy; return copy;
}); });
@@ -1,12 +1,12 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.Location; import org.bukkit.Location;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -128,8 +128,8 @@ public final class MythicBridge {
Plugin dependency = plugin.getServer().getPluginManager().getPlugin("MythicMobs"); Plugin dependency = plugin.getServer().getPluginManager().getPlugin("MythicMobs");
if (dependency == null || !dependency.isEnabled()) return; if (dependency == null || !dependency.isEnabled()) return;
String adapter = hasClass(dependency, "io.lumine.mythic.bukkit.MythicBukkit") String adapter = hasClass(dependency, "io.lumine.mythic.bukkit.MythicBukkit")
? "cn.infstar.cmagicgem.integration.mythic.Mythic5Adapter" ? "cn.infstar.magicgem.integration.mythic.Mythic5Adapter"
: "cn.infstar.cmagicgem.integration.mythic.Mythic4Adapter"; : "cn.infstar.magicgem.integration.mythic.Mythic4Adapter";
try { try {
Class<?> type = Class.forName(adapter, true, plugin.getClass().getClassLoader()); Class<?> type = Class.forName(adapter, true, plugin.getClass().getClassLoader());
Object instance = type.getConstructor(JavaPlugin.class, GemRegistry.class, ItemCodec.class, Object instance = type.getConstructor(JavaPlugin.class, GemRegistry.class, ItemCodec.class,
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.integration; package cn.infstar.magicgem.integration;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -1,11 +1,11 @@
package cn.infstar.cmagicgem.integration.mythic; package cn.infstar.magicgem.integration.mythic;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.integration.MythicBridge.MythicDeathHandler; import cn.infstar.magicgem.integration.MythicBridge.MythicDeathHandler;
import cn.infstar.cmagicgem.integration.MythicBridge.InlineMechanicExecutor; import cn.infstar.magicgem.integration.MythicBridge.InlineMechanicExecutor;
import cn.infstar.cmagicgem.integration.ProtectionBridge; import cn.infstar.magicgem.integration.ProtectionBridge;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import io.lumine.xikage.mythicmobs.adapters.AbstractEntity; import io.lumine.xikage.mythicmobs.adapters.AbstractEntity;
import io.lumine.xikage.mythicmobs.adapters.AbstractItemStack; import io.lumine.xikage.mythicmobs.adapters.AbstractItemStack;
import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter; import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter;
@@ -1,11 +1,11 @@
package cn.infstar.cmagicgem.integration.mythic; package cn.infstar.magicgem.integration.mythic;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.integration.MythicBridge.MythicDeathHandler; import cn.infstar.magicgem.integration.MythicBridge.MythicDeathHandler;
import cn.infstar.cmagicgem.integration.MythicBridge.InlineMechanicExecutor; import cn.infstar.magicgem.integration.MythicBridge.InlineMechanicExecutor;
import cn.infstar.cmagicgem.integration.ProtectionBridge; import cn.infstar.magicgem.integration.ProtectionBridge;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import io.lumine.mythic.api.adapters.AbstractEntity; import io.lumine.mythic.api.adapters.AbstractEntity;
import io.lumine.mythic.api.adapters.AbstractItemStack; import io.lumine.mythic.api.adapters.AbstractItemStack;
import io.lumine.mythic.api.config.MythicLineConfig; import io.lumine.mythic.api.config.MythicLineConfig;
@@ -1,10 +1,10 @@
package cn.infstar.cmagicgem.item; package cn.infstar.magicgem.item;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.migration.LegacyItemMigrator; import cn.infstar.magicgem.migration.LegacyItemMigrator;
import cn.infstar.cmagicgem.util.PotionTypes; import cn.infstar.magicgem.util.PotionTypes;
import cn.infstar.cmagicgem.util.MaterialResolver; import cn.infstar.magicgem.util.MaterialResolver;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.item; package cn.infstar.magicgem.item;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@@ -1,13 +1,13 @@
package cn.infstar.cmagicgem.listener; package cn.infstar.magicgem.listener;
import cn.infstar.cmagicgem.config.PluginSettings; import cn.infstar.magicgem.config.PluginSettings;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemService; import cn.infstar.magicgem.gem.GemService;
import cn.infstar.cmagicgem.gem.GemType; import cn.infstar.magicgem.gem.GemType;
import cn.infstar.cmagicgem.gem.GemUseResult; import cn.infstar.magicgem.gem.GemUseResult;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.gui.GemWorkbenchHolder; import cn.infstar.magicgem.gui.GemWorkbenchHolder;
import cn.infstar.cmagicgem.util.MessageDispatcher; import cn.infstar.magicgem.util.MessageDispatcher;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.migration; package cn.infstar.magicgem.migration;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -1,7 +1,7 @@
package cn.infstar.cmagicgem.migration; package cn.infstar.magicgem.migration;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import de.tr7zw.changeme.nbtapi.NBTType; import de.tr7zw.changeme.nbtapi.NBTType;
import de.tr7zw.changeme.nbtapi.iface.ReadableNBT; import de.tr7zw.changeme.nbtapi.iface.ReadableNBT;
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.reward; package cn.infstar.magicgem.reward;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -1,22 +1,22 @@
package cn.infstar.cmagicgem.reward; package cn.infstar.magicgem.reward;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.expression.DynamicExpression; import cn.infstar.magicgem.expression.DynamicExpression;
import cn.infstar.cmagicgem.gem.GemDefinition; import cn.infstar.magicgem.gem.GemDefinition;
import cn.infstar.cmagicgem.gem.GemRegistry; import cn.infstar.magicgem.gem.GemRegistry;
import cn.infstar.cmagicgem.integration.EconomyBridge; import cn.infstar.magicgem.integration.EconomyBridge;
import cn.infstar.cmagicgem.integration.MythicBridge; import cn.infstar.magicgem.integration.MythicBridge;
import cn.infstar.cmagicgem.integration.MMOItemsBridge; import cn.infstar.magicgem.integration.MMOItemsBridge;
import cn.infstar.cmagicgem.integration.PlaceholderBridge; import cn.infstar.magicgem.integration.PlaceholderBridge;
import cn.infstar.cmagicgem.integration.PlayerPointsBridge; import cn.infstar.magicgem.integration.PlayerPointsBridge;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.item.ItemMatcher; import cn.infstar.magicgem.item.ItemMatcher;
import cn.infstar.cmagicgem.skill.SkillDefinition; import cn.infstar.magicgem.skill.SkillDefinition;
import cn.infstar.cmagicgem.skill.SkillRegistry; import cn.infstar.magicgem.skill.SkillRegistry;
import cn.infstar.cmagicgem.util.PotionTypes; import cn.infstar.magicgem.util.PotionTypes;
import cn.infstar.cmagicgem.util.MaterialResolver; import cn.infstar.magicgem.util.MaterialResolver;
import cn.infstar.cmagicgem.util.EnchantmentResolver; import cn.infstar.magicgem.util.EnchantmentResolver;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
@@ -482,7 +482,7 @@ public final class RewardEngine {
private void rewardLimit(RewardContext context, Directive directive) throws RewardException { private void rewardLimit(RewardContext context, Directive directive) throws RewardException {
int limit = directive.intArgument(0, "limit"); int limit = directive.intArgument(0, "limit");
if (limit <= 0) return; if (limit <= 0) return;
String key = "CMAGICGEM_LIMIT_" + Integer.toUnsignedString(directive.source().hashCode(), 36); String key = "MAGICGEM_REFORGED_LIMIT_" + Integer.toUnsignedString(directive.source().hashCode(), 36);
int current = NBT.get(context.item(), nbt -> { return nbt.hasTag(key) ? nbt.getInteger(key) : 0; }); int current = NBT.get(context.item(), nbt -> { return nbt.hasTag(key) ? nbt.getInteger(key) : 0; });
if (!context.removal() && current >= limit) throw new RewardException("该奖励已达到次数上限"); if (!context.removal() && current >= limit) throw new RewardException("该奖励已达到次数上限");
int changedCount = context.removal() ? Math.max(0, current - 1) : current + 1; int changedCount = context.removal() ? Math.max(0, current - 1) : current + 1;
@@ -622,7 +622,7 @@ public final class RewardEngine {
? new ArrayList<>(meta.getLore()) : new ArrayList<>(); ? new ArrayList<>(meta.getLore()) : new ArrayList<>();
List<String> nbtSkills = itemCodec.skills(changed); List<String> nbtSkills = itemCodec.skills(changed);
String requested = directive.argument("", "name", "skill", "s"); String requested = directive.argument("", "name", "skill", "s");
String snapshotKey = "CMAGICGEM_HIDDEN_SKILL_LORE"; String snapshotKey = "MAGICGEM_REFORGED_HIDDEN_SKILL_LORE";
JsonObject snapshots; JsonObject snapshots;
try { try {
String encoded = NBT.get(changed, nbt -> nbt.hasTag(snapshotKey) ? nbt.getString(snapshotKey) : "{}"); String encoded = NBT.get(changed, nbt -> nbt.hasTag(snapshotKey) ? nbt.getString(snapshotKey) : "{}");
@@ -789,7 +789,7 @@ public final class RewardEngine {
String mode = directive.argument("RIGHT_CLICK", "mode"); String mode = directive.argument("RIGHT_CLICK", "mode");
if (id.isBlank()) throw new RewardException("MMOAbility 缺少 id"); if (id.isBlank()) throw new RewardException("MMOAbility 缺少 id");
String abilityKey = "MMOITEMS_ABILITY"; String abilityKey = "MMOITEMS_ABILITY";
String marker = "CMAGICGEM_MMO_" + Integer.toUnsignedString(directive.source().hashCode(), 36); String marker = "MAGICGEM_REFORGED_MMO_" + Integer.toUnsignedString(directive.source().hashCode(), 36);
String snapshotKey = marker + "_SNAPSHOT"; String snapshotKey = marker + "_SNAPSHOT";
ItemStack changed = context.item().clone(); ItemStack changed = context.item().clone();
String encoded = NBT.get(changed, nbt -> { return nbt.hasTag(abilityKey) ? nbt.getString(abilityKey) : "[]"; }); String encoded = NBT.get(changed, nbt -> { return nbt.hasTag(abilityKey) ? nbt.getString(abilityKey) : "[]"; });
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.reward; package cn.infstar.magicgem.reward;
public final class RewardException extends Exception { public final class RewardException extends Exception {
public RewardException(String message) { public RewardException(String message) {
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -1,21 +1,21 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.api.event.CMagicEquipmentChangeEvent; import cn.infstar.magicgem.api.event.MagicEquipmentChangeEvent;
import cn.infstar.cmagicgem.api.event.CMagicJumpEvent; import cn.infstar.magicgem.api.event.MagicJumpEvent;
import cn.infstar.cmagicgem.api.event.CMagicPotionBuffEvent; import cn.infstar.magicgem.api.event.MagicPotionBuffEvent;
import cn.infstar.cmagicgem.api.event.CMagicSkillUseEvent; import cn.infstar.magicgem.api.event.MagicSkillUseEvent;
import cn.infstar.cmagicgem.condition.ConditionEngine; import cn.infstar.magicgem.condition.ConditionEngine;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.expression.DynamicExpression; import cn.infstar.magicgem.expression.DynamicExpression;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import cn.infstar.cmagicgem.integration.MythicBridge; import cn.infstar.magicgem.integration.MythicBridge;
import cn.infstar.cmagicgem.integration.ProtectionBridge; import cn.infstar.magicgem.integration.ProtectionBridge;
import cn.infstar.cmagicgem.reward.RewardContext; import cn.infstar.magicgem.reward.RewardContext;
import cn.infstar.cmagicgem.reward.RewardEngine; import cn.infstar.magicgem.reward.RewardEngine;
import cn.infstar.cmagicgem.reward.RewardException; import cn.infstar.magicgem.reward.RewardException;
import cn.infstar.cmagicgem.util.MessageDispatcher; import cn.infstar.magicgem.util.MessageDispatcher;
import cn.infstar.cmagicgem.util.PotionTypes; import cn.infstar.magicgem.util.PotionTypes;
import de.tr7zw.changeme.nbtapi.NBT; import de.tr7zw.changeme.nbtapi.NBT;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@@ -191,7 +191,7 @@ public final class SkillEngine implements Listener {
tip(player, skill.failTip()); tip(player, skill.failTip());
return; return;
} }
CMagicSkillUseEvent useEvent = new CMagicSkillUseEvent(player, skill, item); MagicSkillUseEvent useEvent = new MagicSkillUseEvent(player, skill, item);
Bukkit.getPluginManager().callEvent(useEvent); Bukkit.getPluginManager().callEvent(useEvent);
if (useEvent.isCancelled()) return; if (useEvent.isCancelled()) return;
boolean executed = false; boolean executed = false;
@@ -304,7 +304,7 @@ public final class SkillEngine implements Listener {
int refresh = Math.max(0, (int) Math.round(value(mechanic.argument("0", "refresh"), player, item) * 20)); int refresh = Math.max(0, (int) Math.round(value(mechanic.argument("0", "refresh"), player, item) * 20));
PotionEffect old = living.getPotionEffect(type); PotionEffect old = living.getPotionEffect(type);
if (old != null && (old.getAmplifier() > level - 1 || old.getDuration() > refresh)) return; if (old != null && (old.getAmplifier() > level - 1 || old.getDuration() > refresh)) return;
CMagicPotionBuffEvent event = new CMagicPotionBuffEvent(player, living, type, level - 1, duration); MagicPotionBuffEvent event = new MagicPotionBuffEvent(player, living, type, level - 1, duration);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) living.addPotionEffect(new PotionEffect(type, event.getDurationTicks(), if (!event.isCancelled()) living.addPotionEffect(new PotionEffect(type, event.getDurationTicks(),
event.getAmplifier(), true, true, true), true); event.getAmplifier(), true, true, true), true);
@@ -392,17 +392,17 @@ public final class SkillEngine implements Listener {
String tag = mechanic.argument("default", "tag"); String tag = mechanic.argument("default", "tag");
long count; long count;
if (mechanic.booleanArgument(false, "persist", "p")) { if (mechanic.booleanArgument(false, "persist", "p")) {
String key = "cmagicgem_counter_" + Integer.toHexString(tag.hashCode()); String key = "magicgem_reforged_counter_" + Integer.toHexString(tag.hashCode());
count = NBT.get(item, nbt -> { return nbt.hasTag(key) ? nbt.getLong(key) + 1 : 1L; }); count = NBT.get(item, nbt -> { return nbt.hasTag(key) ? nbt.getLong(key) + 1 : 1L; });
long stored = count; long stored = count;
NBT.modify(item, nbt -> { nbt.setLong(key, stored); }); NBT.modify(item, nbt -> { nbt.setLong(key, stored); });
} else { } else {
String itemId = NBT.get(item, nbt -> nbt.hasTag("CMAGICGEM_RUNTIME_ID") String itemId = NBT.get(item, nbt -> nbt.hasTag("MAGICGEM_REFORGED_RUNTIME_ID")
? nbt.getString("CMAGICGEM_RUNTIME_ID") : ""); ? nbt.getString("MAGICGEM_REFORGED_RUNTIME_ID") : "");
if (itemId.isBlank()) { if (itemId.isBlank()) {
itemId = UUID.randomUUID().toString(); itemId = UUID.randomUUID().toString();
String generated = itemId; String generated = itemId;
NBT.modify(item, nbt -> { nbt.setString("CMAGICGEM_RUNTIME_ID", generated); }); NBT.modify(item, nbt -> { nbt.setString("MAGICGEM_REFORGED_RUNTIME_ID", generated); });
} }
String key = player.getUniqueId() + ":" + itemId + ':' + slot + ':' String key = player.getUniqueId() + ":" + itemId + ':' + slot + ':'
+ Integer.toUnsignedString(mechanic.source().hashCode(), 36) + ':' + tag; + Integer.toUnsignedString(mechanic.source().hashCode(), 36) + ':' + tag;
@@ -634,7 +634,7 @@ public final class SkillEngine implements Listener {
public void onJump(PlayerJumpEvent event) { public void onJump(PlayerJumpEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (debuffed(player, "JUMP")) { event.setCancelled(true); return; } if (debuffed(player, "JUMP")) { event.setCancelled(true); return; }
CMagicJumpEvent jump = new CMagicJumpEvent(player, event.getFrom(), event.getTo()); MagicJumpEvent jump = new MagicJumpEvent(player, event.getFrom(), event.getTo());
Bukkit.getPluginManager().callEvent(jump); Bukkit.getPluginManager().callEvent(jump);
if (jump.isCancelled()) { event.setCancelled(true); return; } if (jump.isCancelled()) { event.setCancelled(true); return; }
trigger(player, TriggerType.JUMP, List.of(), null, jump.getTo(), event); trigger(player, TriggerType.JUMP, List.of(), null, jump.getTo(), event);
@@ -764,23 +764,23 @@ public final class SkillEngine implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onArmorChange(PlayerArmorChangeEvent event) { public void onArmorChange(PlayerArmorChangeEvent event) {
equipmentChange(event.getPlayer(), event.getSlotType().name().toLowerCase(Locale.ROOT), equipmentChange(event.getPlayer(), event.getSlotType().name().toLowerCase(Locale.ROOT),
event.getOldItem(), event.getNewItem(), CMagicEquipmentChangeEvent.Cause.ARMOR, event); event.getOldItem(), event.getNewItem(), MagicEquipmentChangeEvent.Cause.ARMOR, event);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onHeld(PlayerItemHeldEvent event) { public void onHeld(PlayerItemHeldEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
equipmentChange(player, "mainhand", player.getInventory().getItem(event.getPreviousSlot()), equipmentChange(player, "mainhand", player.getInventory().getItem(event.getPreviousSlot()),
player.getInventory().getItem(event.getNewSlot()), CMagicEquipmentChangeEvent.Cause.HELD, event); player.getInventory().getItem(event.getNewSlot()), MagicEquipmentChangeEvent.Cause.HELD, event);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onSwap(PlayerSwapHandItemsEvent event) { public void onSwap(PlayerSwapHandItemsEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
equipmentChange(player, "mainhand", player.getInventory().getItemInMainHand(), event.getMainHandItem(), equipmentChange(player, "mainhand", player.getInventory().getItemInMainHand(), event.getMainHandItem(),
CMagicEquipmentChangeEvent.Cause.SWAP, event); MagicEquipmentChangeEvent.Cause.SWAP, event);
equipmentChange(player, "offhand", player.getInventory().getItemInOffHand(), event.getOffHandItem(), equipmentChange(player, "offhand", player.getInventory().getItemInOffHand(), event.getOffHandItem(),
CMagicEquipmentChangeEvent.Cause.SWAP, event); MagicEquipmentChangeEvent.Cause.SWAP, event);
} }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@@ -793,10 +793,10 @@ public final class SkillEngine implements Listener {
ItemStack currentOffHand = snapshot(player.getInventory().getItemInOffHand()); ItemStack currentOffHand = snapshot(player.getInventory().getItemInOffHand());
if (!sameItem(mainHand, currentMainHand)) if (!sameItem(mainHand, currentMainHand))
equipmentChange(player, "mainhand", mainHand, currentMainHand, equipmentChange(player, "mainhand", mainHand, currentMainHand,
CMagicEquipmentChangeEvent.Cause.INVENTORY, event); MagicEquipmentChangeEvent.Cause.INVENTORY, event);
if (!sameItem(offHand, currentOffHand)) if (!sameItem(offHand, currentOffHand))
equipmentChange(player, "offhand", offHand, currentOffHand, equipmentChange(player, "offhand", offHand, currentOffHand,
CMagicEquipmentChangeEvent.Cause.INVENTORY, event); MagicEquipmentChangeEvent.Cause.INVENTORY, event);
}); });
} }
@@ -804,7 +804,7 @@ public final class SkillEngine implements Listener {
public void onBreak(PlayerItemBreakEvent event) { public void onBreak(PlayerItemBreakEvent event) {
if (isArmor(event.getBrokenItem().getType())) return; if (isArmor(event.getBrokenItem().getType())) return;
equipmentChange(event.getPlayer(), slotFor(event.getPlayer(), event.getBrokenItem()), event.getBrokenItem(), equipmentChange(event.getPlayer(), slotFor(event.getPlayer(), event.getBrokenItem()), event.getBrokenItem(),
null, CMagicEquipmentChangeEvent.Cause.BREAK, event); null, MagicEquipmentChangeEvent.Cause.BREAK, event);
} }
@EventHandler @EventHandler
@@ -828,8 +828,8 @@ public final class SkillEngine implements Listener {
} }
private void equipmentChange(Player player, String slot, ItemStack oldItem, ItemStack newItem, private void equipmentChange(Player player, String slot, ItemStack oldItem, ItemStack newItem,
CMagicEquipmentChangeEvent.Cause cause, Event source) { MagicEquipmentChangeEvent.Cause cause, Event source) {
CMagicEquipmentChangeEvent event = new CMagicEquipmentChangeEvent(player, slot, oldItem, newItem, cause); MagicEquipmentChangeEvent event = new MagicEquipmentChangeEvent(player, slot, oldItem, newItem, cause);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) return; if (event.isCancelled()) return;
if (oldItem != null && !oldItem.getType().isAir()) if (oldItem != null && !oldItem.getType().isAir())
@@ -1,8 +1,8 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.api.event.CMagicSkillLoadEvent; import cn.infstar.magicgem.api.event.MagicSkillLoadEvent;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -53,7 +53,7 @@ public final class SkillRegistry {
ConfigurationSection section = yaml.getConfigurationSection(key); ConfigurationSection section = yaml.getConfigurationSection(key);
if (section == null) continue; if (section == null) continue;
try { try {
CMagicSkillLoadEvent event = new CMagicSkillLoadEvent(key, section); MagicSkillLoadEvent event = new MagicSkillLoadEvent(key, section);
plugin.getServer().getPluginManager().callEvent(event); plugin.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) loaded.put(key.toLowerCase(Locale.ROOT), parse(key, event.getConfig())); if (!event.isCancelled()) loaded.put(key.toLowerCase(Locale.ROOT), parse(key, event.getConfig()));
} }
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import java.util.Locale; import java.util.Locale;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.util; package cn.infstar.magicgem.util;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.Registry; import org.bukkit.Registry;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.util; package cn.infstar.magicgem.util;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@@ -1,10 +1,10 @@
package cn.infstar.cmagicgem.util; package cn.infstar.magicgem.util;
import cn.infstar.cmagicgem.config.LanguageManager; import cn.infstar.magicgem.config.LanguageManager;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.integration.PlaceholderBridge; import cn.infstar.magicgem.integration.PlaceholderBridge;
import cn.infstar.cmagicgem.item.ItemCodec; import cn.infstar.magicgem.item.ItemCodec;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.kyori.adventure.title.Title; import net.kyori.adventure.title.Title;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.util; package cn.infstar.magicgem.util;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.Registry; import org.bukkit.Registry;
@@ -1,27 +0,0 @@
package cn.infstar.magicgemreforged;
import pku.yim.magicgem.MagicGem;
/** Paper entry point for MagicGem Reforged. The superclass keeps the original public API available. */
public final class MagicGemReforged extends MagicGem {
public static MagicGemReforged instance;
public static MagicGemReforged getInstance() {
return instance;
}
@Override
public void onEnable() {
instance = this;
super.onEnable();
}
@Override
public void onDisable() {
try {
super.onDisable();
} finally {
if (instance == this) instance = null;
}
}
}
+3 -3
View File
@@ -1,12 +1,12 @@
package pku.yim.magicgem; package pku.yim.magicgem;
import cn.infstar.cmagicgem.CMagicGem; import cn.infstar.magicgem.MagicGemPlugin;
import cn.infstar.cmagicgem.config.PluginSettings; import cn.infstar.magicgem.config.PluginSettings;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
/** Compatibility base class retained for plugins compiled against the original MagicGem API. */ /** Compatibility base class retained for plugins compiled against the original MagicGem API. */
public class MagicGem extends CMagicGem { public class MagicGem extends MagicGemPlugin {
public static MagicGem instance; public static MagicGem instance;
public static boolean placeholderapi; public static boolean placeholderapi;
public static boolean MMCorMMA; public static boolean MMCorMMA;
+1 -8
View File
@@ -1,7 +1,7 @@
name: MagicGem-Reforged name: MagicGem-Reforged
version: '${version}' version: '${version}'
description: MagicGem Reforged for Paper 1.21.x description: MagicGem Reforged for Paper 1.21.x
main: cn.infstar.magicgemreforged.MagicGemReforged main: cn.infstar.magicgem.MagicGem
api-version: '1.21' api-version: '1.21'
authors: [ Coldsmile_7 ] authors: [ Coldsmile_7 ]
softdepend: [PlaceholderAPI, Vault, PlayerPoints, MythicMobs, MMOItems, MythicArtifacts, MythicCrucible, Residence, PvPManager, EcoEnchants, GoldenEnchants] softdepend: [PlaceholderAPI, Vault, PlayerPoints, MythicMobs, MMOItems, MythicArtifacts, MythicCrucible, Residence, PvPManager, EcoEnchants, GoldenEnchants]
@@ -9,14 +9,7 @@ commands:
mgem: mgem:
description: MagicGem Reforged main command description: MagicGem Reforged main command
usage: /mgem help usage: /mgem help
aliases: [cmgem, cmg]
permissions: permissions:
cmagicgem.command.admin:
default: op
cmagicgem.command.view:
default: op
cmagicgem.command.embed:
default: op
magicgem.command.admin: magicgem.command.admin:
default: op default: op
magicgem.command.view: magicgem.command.view:
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.api; package cn.infstar.magicgem.api;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import pku.yim.magicgem.api.PlayerSlotType; import pku.yim.magicgem.api.PlayerSlotType;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.command; package cn.infstar.magicgem.command;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.dsl; package cn.infstar.magicgem.dsl;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.expression; package cn.infstar.magicgem.expression;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.gem; package cn.infstar.magicgem.gem;
import org.bukkit.Material; import org.bukkit.Material;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.migration; package cn.infstar.magicgem.migration;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.api.io.TempDir;
@@ -1,4 +1,4 @@
package cn.infstar.cmagicgem.reward; package cn.infstar.magicgem.reward;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -1,8 +1,8 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.dsl.Directive; import cn.infstar.magicgem.dsl.Directive;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import cn.infstar.cmagicgem.reward.RewardEngine; import cn.infstar.magicgem.reward.RewardEngine;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -27,11 +27,9 @@ class BundledConfigurationTest {
YamlConfiguration descriptor = YamlConfiguration.loadConfiguration(new File("src/main/resources/plugin.yml")); YamlConfiguration descriptor = YamlConfiguration.loadConfiguration(new File("src/main/resources/plugin.yml"));
assertTrue(descriptor.getString("name").equalsIgnoreCase("MagicGem-Reforged")); assertTrue(descriptor.getString("name").equalsIgnoreCase("MagicGem-Reforged"));
assertTrue(descriptor.getString("main").equals("cn.infstar.magicgemreforged.MagicGemReforged")); assertTrue(descriptor.getString("main").equals("cn.infstar.magicgem.MagicGem"));
assertNotNull(descriptor.getConfigurationSection("commands.mgem")); assertNotNull(descriptor.getConfigurationSection("commands.mgem"));
assertTrue(descriptor.getStringList("commands.mgem.aliases").contains("cmg")); assertTrue(descriptor.getStringList("commands.mgem.aliases").isEmpty());
assertTrue(descriptor.getStringList("commands.mgem.aliases").contains("cmgem"));
assertNull(descriptor.getConfigurationSection("commands.cmgem"));
assertNull(descriptor.getConfigurationSection("commands.magicgem")); assertNull(descriptor.getConfigurationSection("commands.magicgem"));
assertNotNull(descriptor.getConfigurationSection("permissions.magicgem.command.admin")); assertNotNull(descriptor.getConfigurationSection("permissions.magicgem.command.admin"));
assertNotNull(descriptor.getConfigurationSection("permissions.magicgem.command.view")); assertNotNull(descriptor.getConfigurationSection("permissions.magicgem.command.view"));
@@ -1,6 +1,6 @@
package cn.infstar.cmagicgem.skill; package cn.infstar.magicgem.skill;
import cn.infstar.cmagicgem.dsl.DirectiveParser; import cn.infstar.magicgem.dsl.DirectiveParser;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;