Skip to content
Open
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
6 changes: 3 additions & 3 deletions NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ The project includes software developed by third parties. For their full license
- Licensed by: **Slikey**
- License: **MIT License** (See `3rd_party_licenses/LICENSE-MIT`)

- Annotation Command Framework (ACF):
- Repository: `Chronoken/EffectLib`
- Licensed by: **Daniel Ennis and Contributors**
- Cloud Command Framework:
- Repository: `Incendo/cloud`
- Licensed by: **Alexander Söderberg**
- License: **MIT License** (See `3rd_party_licenses/LICENSE-MIT`)

- bStats:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ public void apply(Project target) {
"https://repo.dmulloy2.net/nexus/repository/public/",
"https://repo.md-5.net/content/repositories/releases/",
"https://repo.papermc.io/repository/maven-public/",
"https://repo.aikar.co/content/groups/aikar/",
"https://oss.sonatype.org/content/repositories/central",
"https://oss.sonatype.org/content/repositories/snapshots",
"https://hub.spigotmc.org/nexus/content/repositories/snapshots/",
Expand Down
10 changes: 7 additions & 3 deletions core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ dependencies {
shadow("org.apache.commons:commons-math4-core:4.0-beta1")
shadow("com.github.ben-manes.caffeine:caffeine:3.2.1")
shadow("com.github.Chronoken:EffectLib:753da6c")
shadow("co.aikar:acf-paper:0.5.1-SNAPSHOT")
shadow("org.incendo:cloud-paper:2.0.0-beta.13")
shadow("org.incendo:cloud-minecraft-extras:2.0.0-beta.13")
shadow("org.incendo:cloud-processors-requirements:1.0.0-rc.1")
shadow("org.bstats:bstats-bukkit:3.0.2")
shadow("com.github.ezylang:EvalEx:0dcb042")

Expand Down Expand Up @@ -53,8 +55,10 @@ shadowJar {
relocate("com.github.benmanes.caffeine", "com.nisovin.magicspells.shaded.com.github.benmanes.caffeine")
relocate("org.apache.commons.math4", "com.nisovin.magicspells.shaded.org.apache.commons.math4")
relocate("de.slikey.effectlib", "com.nisovin.magicspells.shaded.effectlib")
relocate("co.aikar.commands", "com.nisovin.magicspells.shaded.acf")
relocate("co.aikar.locales", "com.nisovin.magicspells.shaded.locales")
relocate("org.incendo.cloud", "com.nisovin.magicspells.shaded.cloud")
relocate("io.leangen.geantyref", "com.nisovin.magicspells.shaded.geantyref")
relocate("xyz.jpenilla.reflectionremapper", "com.nisovin.magicspells.shaded.reflectionremapper")
relocate("net.fabricmc.mappingio", "com.nisovin.magicspells.shaded.mappingio")
relocate("org.bstats", "com.nisovin.magicspells.shaded.bstats")
relocate("de.slikey.exp4j", "com.nisovin.magicspells.shaded.exp4j")
relocate("com.ezylang.evalex", "com.nisovin.magicspells.shaded.evalex")
Expand Down
146 changes: 84 additions & 62 deletions core/src/main/java/com/nisovin/magicspells/MagicSpells.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.nisovin.magicspells;

import org.jetbrains.annotations.NotNull;

import java.io.*;

import java.util.*;
Expand All @@ -25,17 +27,15 @@
import com.google.common.collect.SetMultimap;
import com.google.common.collect.LinkedHashMultimap;

import net.kyori.adventure.text.format.NamedTextColor;

import de.slikey.effectlib.EffectManager;

import org.bstats.bukkit.Metrics;
import org.bstats.charts.SimplePie;
import org.bstats.charts.AdvancedPie;
import org.bstats.charts.DrilldownPie;

import org.jetbrains.annotations.NotNull;

import co.aikar.commands.PaperCommandManager;

import org.bukkit.*;
import org.bukkit.event.Event;
import org.bukkit.entity.Entity;
Expand All @@ -53,6 +53,11 @@
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.configuration.ConfigurationSection;

import io.papermc.paper.command.brigadier.CommandSourceStack;

import org.incendo.cloud.paper.PaperCommandManager;
import org.incendo.cloud.execution.ExecutionCoordinator;

import me.clip.placeholderapi.PlaceholderAPI;

import com.nisovin.magicspells.util.*;
Expand All @@ -64,16 +69,15 @@
import com.nisovin.magicspells.mana.ManaHandler;
import com.nisovin.magicspells.variables.Variable;
import com.nisovin.magicspells.spells.PassiveSpell;
import com.nisovin.magicspells.commands.MagicCommand;
import com.nisovin.magicspells.util.compat.EventUtil;
import com.nisovin.magicspells.commands.MagicCommands;
import com.nisovin.magicspells.storage.StorageHandler;
import com.nisovin.magicspells.util.prompt.PromptType;
import com.nisovin.magicspells.util.compat.CompatBasics;
import com.nisovin.magicspells.zones.NoMagicZoneManager;
import com.nisovin.magicspells.spelleffects.SpellEffect;
import com.nisovin.magicspells.util.magicitems.MagicItem;
import com.nisovin.magicspells.castmodifiers.ModifierSet;
import com.nisovin.magicspells.commands.CommandHelpFilter;
import com.nisovin.magicspells.util.magicitems.MagicItems;
import com.nisovin.magicspells.util.recipes.CustomRecipes;
import com.nisovin.magicspells.util.ai.CustomGoalsManager;
Expand Down Expand Up @@ -141,7 +145,7 @@ public class MagicSpells extends JavaPlugin {
private NoMagicZoneManager zoneManager;
private CleanserManager cleanserManager;
private CustomGoalsManager customGoalsManager;
private PaperCommandManager commandManager;
private PaperCommandManager<CommandSourceStack> commandManager;
private ExperienceBarManager expBarManager;

private ExpressionDictionary expressionDictionary;
Expand Down Expand Up @@ -212,7 +216,8 @@ public class MagicSpells extends JavaPlugin {

private long lastReloadTime = 0;

private ChatColor textColor;
private NamedTextColor textColor;
private String textFormat;

private double losRaySize;
private boolean losIgnorePassableBlocks;
Expand All @@ -238,45 +243,8 @@ public class MagicSpells extends JavaPlugin {
@Override
public void onEnable() {
load();

Metrics metrics = new Metrics(this, 892);

metrics.addCustomChart(new DrilldownPie("spells", () -> {
Map<String, Map<String, Integer>> map = new HashMap<>();
if (spells == null) return map;

for (Spell spell : spells.values()) {
String name = spell.getClass().getName();
if (!name.startsWith("com.nisovin.magicspells.spells")) continue;
name = name.replace("com.nisovin.magicspells.spells.", "");

String[] typeSplit = name.split("\\.", 2);
String formalPackage = typeSplit[0].substring(0, 1).toUpperCase() + typeSplit[0].substring(1);

String spellPackage = (typeSplit.length == 1 ? "General" : formalPackage) + " Spells";
String spellClass = typeSplit.length == 1 ? typeSplit[0] : typeSplit[1];

map.computeIfAbsent(spellPackage, key -> new HashMap<>());
map.get(spellPackage).compute(spellClass, (k, v) -> (v == null ? 0 : v) + 1);
}
return map;
}));
metrics.addCustomChart(new AdvancedPie("passive_listeners", () -> {
IntMap<String> map = new IntMap<>();
if (spells == null) return map;

for (Spell spell : spells.values()) {
if (!spell.getClass().getName().startsWith("com.nisovin.magicspells.spells")) continue;
if (!(spell instanceof PassiveSpell passiveSpell)) continue;

for (PassiveListener listener : passiveSpell.getPassiveListeners()) {
String name = listener.getClass().getSimpleName();
map.increment(name.substring(0, name.lastIndexOf("Listener")));
}
}
return map;
}));
metrics.addCustomChart(new SimplePie("reload_time", () -> "<" + (lastReloadTime - lastReloadTime % 500 + 500) + " ms"));
initMetrics();
initCommands();
}

public void load() {
Expand All @@ -287,8 +255,6 @@ public void load() {
effectManager = new EffectManager(this);
effectManager.enableDebug(debug);

commandManager = new PaperCommandManager(plugin);

// Create storage stuff
spells = new HashMap<>();
spellNames = new HashMap<>();
Expand Down Expand Up @@ -334,7 +300,6 @@ public void load() {
enableErrorLogging = config.getBoolean(path + "enable-error-logging", true);
errorLogLimit = config.getInt(path + "error-log-limit", -1);
enableProfiling = config.getBoolean(path + "enable-profiling", false);
textColor = ChatColor.getByChar(config.getString(path + "text-color", ChatColor.DARK_AQUA.getChar() + ""));
broadcastRange = config.getInt(path + "broadcast-range", 20);
effectlibInstanceLimit = config.getInt(path + "effectlib-instance-limit", 20000);

Expand Down Expand Up @@ -405,6 +370,9 @@ public void load() {
}
}

textColor = Util.getLegacyColor(config.getString("text-color", null), NamedTextColor.DARK_AQUA);
textFormat = config.getString("text-format", "<" + textColor + "><text></" + textColor + ">");

soundFailOnCooldown = config.getString(path + "sound-on-cooldown", null);
soundFailMissingReagents = config.getString(path + "sound-missing-reagents", null);

Expand Down Expand Up @@ -570,12 +538,6 @@ public void load() {
magicLogger = new MagicLogger(this);
}

// Register commands
commandManager.enableUnstableAPI("help");
commandManager.registerCommand(new MagicCommand());
commandManager.setValidNamePredicate(string -> true);
CommandHelpFilter.mapPerms();

// Setup profiling
if (enableProfiling) {
profilingTotalTime = new HashMap<>();
Expand All @@ -588,6 +550,55 @@ public void load() {
Bukkit.getScheduler().runTaskLater(this, this::loadExternalData, 1);
}

private void initMetrics() {
Metrics metrics = new Metrics(this, 892);

metrics.addCustomChart(new DrilldownPie("spells", () -> {
Map<String, Map<String, Integer>> map = new HashMap<>();
if (spells == null) return map;

for (Spell spell : spells.values()) {
String name = spell.getClass().getName();
if (!name.startsWith("com.nisovin.magicspells.spells")) continue;
name = name.replace("com.nisovin.magicspells.spells.", "");

String[] typeSplit = name.split("\\.", 2);
String formalPackage = typeSplit[0].substring(0, 1).toUpperCase() + typeSplit[0].substring(1);

String spellPackage = (typeSplit.length == 1 ? "General" : formalPackage) + " Spells";
String spellClass = typeSplit.length == 1 ? typeSplit[0] : typeSplit[1];

map.computeIfAbsent(spellPackage, key -> new HashMap<>());
map.get(spellPackage).compute(spellClass, (k, v) -> (v == null ? 0 : v) + 1);
}
return map;
}));
metrics.addCustomChart(new AdvancedPie("passive_listeners", () -> {
IntMap<String> map = new IntMap<>();
if (spells == null) return map;

for (Spell spell : spells.values()) {
if (!spell.getClass().getName().startsWith("com.nisovin.magicspells.spells")) continue;
if (!(spell instanceof PassiveSpell passiveSpell)) continue;

for (PassiveListener listener : passiveSpell.getPassiveListeners()) {
String name = listener.getClass().getSimpleName();
map.increment(name.substring(0, name.lastIndexOf("Listener")));
}
}
return map;
}));
metrics.addCustomChart(new SimplePie("reload_time", () -> "<" + (lastReloadTime - lastReloadTime % 500 + 500) + " ms"));
}

private void initCommands() {
commandManager = PaperCommandManager.builder()
.executionCoordinator(ExecutionCoordinator.simpleCoordinator())
.buildOnEnable(this);

MagicCommands.register(commandManager);
}

private void initializeSpells() {
log("Initializing spells...");

Expand Down Expand Up @@ -932,9 +943,7 @@ private void initPermissions() {
permissions.add(new Permission(Perm.COMMAND_VARIABLE_SHOW.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_VARIABLE_MODIFY.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_MAGIC_ITEM.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_UTIL_DOWNLOAD.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_UTIL_UPDATE.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_UTIL_SAVE_SKIN.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_UTIL_LIST_GOALS.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_PROFILE_REPORT.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_DEBUG.getNode(), PermissionDefault.OP));
permissions.add(new Permission(Perm.COMMAND_TASKINFO.getNode(), PermissionDefault.OP));
Expand Down Expand Up @@ -1077,10 +1086,19 @@ public static Spellbook getSpellbook(Player player) {
return plugin.spellbooks.computeIfAbsent(player.getUniqueId(), uuid -> new Spellbook(player));
}

@Deprecated(forRemoval = true)
public static ChatColor getTextColor() {
return ChatColor.valueOf(plugin.textColor.toString().toUpperCase());
}

public static NamedTextColor getLegacyTextColor() {
return plugin.textColor;
}

public static String getTextFormat() {
return plugin.textFormat;
}

/**
* Gets a list of blocks that are considered transparent
* @return set of block types
Expand Down Expand Up @@ -1246,6 +1264,10 @@ public static int getDebugLevelOriginal() {
return plugin.debugLevelOriginal;
}

public static int getDebugLevel() {
return plugin.debugLevel;
}

public static int getErrorLogLimit() {
return plugin.errorLogLimit;
}
Expand Down Expand Up @@ -1584,7 +1606,7 @@ public static void sendMessage(String message, LivingEntity recipient, SpellData

message = doReplacements(message, recipient, data, replacements);

recipient.sendMessage(Util.getMiniMessage(getTextColor() + message));
recipient.sendMessage(Util.getMessageText(message));
}

private static final Pattern chatVarMatchPattern = Pattern.compile("%var:(\\w+)(?::(\\d+))?%", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Expand Down Expand Up @@ -1898,13 +1920,13 @@ public static boolean requireReplacement(String message) {
public static String getTargetName(Entity target) {
if (target instanceof Player) return target.getName();

if (target.customName() != null) return Util.getStrictStringFromComponent(target.customName());
if (target.customName() != null) return Util.getStrictString(target.customName());

EntityType type = target.getType();
String name = plugin.entityNames.get(type);
if (name != null) return name;

return Util.getStrictStringFromComponent(target.name());
return Util.getStrictString(target.name());
}

public static void registerEvents(final Listener listener) {
Expand Down
16 changes: 11 additions & 5 deletions core/src/main/java/com/nisovin/magicspells/Perm.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.nisovin.magicspells;

import org.jetbrains.annotations.NotNull;

import org.bukkit.permissions.Permissible;

public enum Perm {
import org.incendo.cloud.permission.Permission;

public enum Perm implements Permission {

SILENT("magicspells.silent"),
NO_REAGENTS("magicspells.noreagents"),
Expand Down Expand Up @@ -36,9 +40,6 @@ public enum Perm {
COMMAND_VARIABLE_SHOW("magicspells.command.variable.show"),
COMMAND_VARIABLE_MODIFY("magicspells.command.variable.modify"),
COMMAND_MAGIC_ITEM("magicspells.command.magicitem"),
COMMAND_UTIL_DOWNLOAD("magicspells.command.util.download"),
COMMAND_UTIL_UPDATE("magicspells.command.util.update"),
COMMAND_UTIL_SAVE_SKIN("magicspells.command.util.saveskin"),
COMMAND_UTIL_LIST_GOALS("magicspells.command.util.listgoals"),
COMMAND_PROFILE_REPORT("magicspells.command.profilereport"),
COMMAND_DEBUG("magicspells.command.debug"),
Expand Down Expand Up @@ -99,5 +100,10 @@ public boolean has(Permissible permissible, Spell spell) {
if (requiresNode() && !permissible.hasPermission(getNode(spell))) return false;
return true;
}


@Override
public @NotNull String permissionString() {
return node;
}

}
Loading