Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1c0b8c857 | ||
|
|
0442ccf58f | ||
|
|
1c1a796610 | ||
|
|
eacb243493 | ||
|
|
7bbed31d4e | ||
|
|
58bccf3cd7 | ||
|
|
4502e1e311 | ||
|
|
054a8d5a5e | ||
|
|
dbdd4785ba | ||
|
|
35f800b62a | ||
|
|
bb7c300074 | ||
|
|
b003ec96f7 |
@@ -61,7 +61,7 @@ allprojects {
|
|||||||
maven("https://maven.enginehub.org/repo/")
|
maven("https://maven.enginehub.org/repo/")
|
||||||
|
|
||||||
// FactionsUUID
|
// FactionsUUID
|
||||||
maven("https://ci.ender.zone/plugin/repository/everything/")
|
//maven("https://ci.ender.zone/plugin/repository/everything/")
|
||||||
|
|
||||||
// NoCheatPlus
|
// NoCheatPlus
|
||||||
maven("https://repo.md-5.net/content/repositories/snapshots/")
|
maven("https://repo.md-5.net/content/repositories/snapshots/")
|
||||||
@@ -77,6 +77,9 @@ allprojects {
|
|||||||
|
|
||||||
// LibsDisguises
|
// LibsDisguises
|
||||||
maven("https://repo.md-5.net/content/groups/public/")
|
maven("https://repo.md-5.net/content/groups/public/")
|
||||||
|
|
||||||
|
// FabledSkyblock
|
||||||
|
maven("https://repo.songoda.com/repository/public/")
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.github.benmanes.caffeine.cache.Caffeine;
|
|||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||||
import com.willfp.eco.core.Eco;
|
import com.willfp.eco.core.Eco;
|
||||||
import com.willfp.eco.core.EcoPlugin;
|
import com.willfp.eco.core.EcoPlugin;
|
||||||
|
import com.willfp.eco.core.placeholder.AdditionalPlayer;
|
||||||
import com.willfp.eco.core.placeholder.InjectablePlaceholder;
|
import com.willfp.eco.core.placeholder.InjectablePlaceholder;
|
||||||
import com.willfp.eco.core.placeholder.Placeholder;
|
import com.willfp.eco.core.placeholder.Placeholder;
|
||||||
import com.willfp.eco.core.placeholder.PlaceholderInjectable;
|
import com.willfp.eco.core.placeholder.PlaceholderInjectable;
|
||||||
@@ -11,11 +12,13 @@ import com.willfp.eco.core.placeholder.PlayerPlaceholder;
|
|||||||
import com.willfp.eco.core.placeholder.PlayerStaticPlaceholder;
|
import com.willfp.eco.core.placeholder.PlayerStaticPlaceholder;
|
||||||
import com.willfp.eco.core.placeholder.PlayerlessPlaceholder;
|
import com.willfp.eco.core.placeholder.PlayerlessPlaceholder;
|
||||||
import com.willfp.eco.core.placeholder.StaticPlaceholder;
|
import com.willfp.eco.core.placeholder.StaticPlaceholder;
|
||||||
|
import com.willfp.eco.util.StringUtils;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -23,6 +26,8 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to handle placeholder integrations.
|
* Class to handle placeholder integrations.
|
||||||
@@ -56,11 +61,17 @@ public final class PlaceholderManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<InjectablePlaceholder> getPlaceholderInjections() {
|
public @NotNull
|
||||||
|
List<InjectablePlaceholder> getPlaceholderInjections() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default PlaceholderAPI pattern; brought in for compatibility.
|
||||||
|
*/
|
||||||
|
private static final Pattern PATTERN = Pattern.compile("[%]([^%]+)[%]");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new placeholder integration.
|
* Register a new placeholder integration.
|
||||||
*
|
*
|
||||||
@@ -192,7 +203,45 @@ public final class PlaceholderManager {
|
|||||||
public static String translatePlaceholders(@NotNull final String text,
|
public static String translatePlaceholders(@NotNull final String text,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final PlaceholderInjectable context) {
|
@NotNull final PlaceholderInjectable context) {
|
||||||
|
return translatePlaceholders(text, player, context, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translate all placeholders with respect to a player.
|
||||||
|
*
|
||||||
|
* @param text The text that may contain placeholders to translate.
|
||||||
|
* @param player The player to translate the placeholders with respect to.
|
||||||
|
* @param context The injectable context.
|
||||||
|
* @param additionalPlayers Additional players to translate placeholders for.
|
||||||
|
* @return The text, translated.
|
||||||
|
*/
|
||||||
|
public static String translatePlaceholders(@NotNull final String text,
|
||||||
|
@Nullable final Player player,
|
||||||
|
@NotNull final PlaceholderInjectable context,
|
||||||
|
@NotNull final Collection<AdditionalPlayer> additionalPlayers) {
|
||||||
String processed = text;
|
String processed = text;
|
||||||
|
|
||||||
|
// Prevent running 2 scans if there are no additional players.
|
||||||
|
if (!additionalPlayers.isEmpty()) {
|
||||||
|
List<String> found = findPlaceholdersIn(text);
|
||||||
|
|
||||||
|
for (AdditionalPlayer additionalPlayer : additionalPlayers) {
|
||||||
|
for (String placeholder : found) {
|
||||||
|
String prefix = "%" + additionalPlayer.getIdentifier() + "_";
|
||||||
|
|
||||||
|
if (placeholder.startsWith(prefix)) {
|
||||||
|
processed = processed.replace(
|
||||||
|
placeholder,
|
||||||
|
translatePlaceholders(
|
||||||
|
"%" + StringUtils.removePrefix(prefix, placeholder),
|
||||||
|
additionalPlayer.getPlayer()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (PlaceholderIntegration integration : REGISTERED_INTEGRATIONS) {
|
for (PlaceholderIntegration integration : REGISTERED_INTEGRATIONS) {
|
||||||
processed = integration.translate(processed, player);
|
processed = integration.translate(processed, player);
|
||||||
}
|
}
|
||||||
@@ -214,12 +263,21 @@ public final class PlaceholderManager {
|
|||||||
* @return The placeholders.
|
* @return The placeholders.
|
||||||
*/
|
*/
|
||||||
public static List<String> findPlaceholdersIn(@NotNull final String text) {
|
public static List<String> findPlaceholdersIn(@NotNull final String text) {
|
||||||
List<String> found = new ArrayList<>();
|
Set<String> found = new HashSet<>();
|
||||||
|
|
||||||
|
// Mock PAPI for those without it installed
|
||||||
|
if (REGISTERED_INTEGRATIONS.isEmpty()) {
|
||||||
|
Matcher matcher = PATTERN.matcher(text);
|
||||||
|
while (matcher.find()) {
|
||||||
|
found.add(matcher.group());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (PlaceholderIntegration integration : REGISTERED_INTEGRATIONS) {
|
for (PlaceholderIntegration integration : REGISTERED_INTEGRATIONS) {
|
||||||
found.addAll(integration.findPlaceholdersIn(text));
|
found.addAll(integration.findPlaceholdersIn(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
return found;
|
return new ArrayList<>(found);
|
||||||
}
|
}
|
||||||
|
|
||||||
private record EntryWithPlayer(@NotNull PlayerPlaceholder entry,
|
private record EntryWithPlayer(@NotNull PlayerPlaceholder entry,
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.willfp.eco.core.placeholder;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An additional player with an identifier to parse placeholders for the player.
|
||||||
|
*/
|
||||||
|
public class AdditionalPlayer {
|
||||||
|
/**
|
||||||
|
* The player.
|
||||||
|
*/
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifier.
|
||||||
|
*/
|
||||||
|
private final String identifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new additional player.
|
||||||
|
*
|
||||||
|
* @param player The player.
|
||||||
|
* @param identifier The identifier.
|
||||||
|
*/
|
||||||
|
public AdditionalPlayer(@NotNull final Player player,
|
||||||
|
@NotNull final String identifier) {
|
||||||
|
this.player = player;
|
||||||
|
this.identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the player.
|
||||||
|
*
|
||||||
|
* @return The player.
|
||||||
|
*/
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the identifier.
|
||||||
|
*
|
||||||
|
* @return The identifier.
|
||||||
|
*/
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.willfp.eco.util;
|
package com.willfp.eco.util;
|
||||||
|
|
||||||
|
import com.willfp.eco.core.placeholder.AdditionalPlayer;
|
||||||
import com.willfp.eco.core.placeholder.InjectablePlaceholder;
|
import com.willfp.eco.core.placeholder.InjectablePlaceholder;
|
||||||
import com.willfp.eco.core.placeholder.PlaceholderInjectable;
|
import com.willfp.eco.core.placeholder.PlaceholderInjectable;
|
||||||
import com.willfp.eco.core.placeholder.StaticPlaceholder;
|
import com.willfp.eco.core.placeholder.StaticPlaceholder;
|
||||||
@@ -11,6 +12,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -263,7 +265,8 @@ public final class NumberUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<InjectablePlaceholder> getPlaceholderInjections() {
|
public @NotNull
|
||||||
|
List<InjectablePlaceholder> getPlaceholderInjections() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -282,7 +285,7 @@ public final class NumberUtils {
|
|||||||
public static double evaluateExpression(@NotNull final String expression,
|
public static double evaluateExpression(@NotNull final String expression,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final Iterable<StaticPlaceholder> statics) {
|
@NotNull final Iterable<StaticPlaceholder> statics) {
|
||||||
return crunch.evaluate(expression, player, new PlaceholderInjectable() {
|
return evaluateExpression(expression, player, new PlaceholderInjectable() {
|
||||||
@Override
|
@Override
|
||||||
public void clearInjectedPlaceholders() {
|
public void clearInjectedPlaceholders() {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
@@ -304,13 +307,29 @@ public final class NumberUtils {
|
|||||||
*
|
*
|
||||||
* @param expression The expression.
|
* @param expression The expression.
|
||||||
* @param player The player.
|
* @param player The player.
|
||||||
* @param context The injectable placeholders.
|
* @param context The injectable placeholders.
|
||||||
* @return The value of the expression, or zero if invalid.
|
* @return The value of the expression, or zero if invalid.
|
||||||
*/
|
*/
|
||||||
public static double evaluateExpression(@NotNull final String expression,
|
public static double evaluateExpression(@NotNull final String expression,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final PlaceholderInjectable context) {
|
@NotNull final PlaceholderInjectable context) {
|
||||||
return crunch.evaluate(expression, player, context);
|
return evaluateExpression(expression, player, context, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evaluate an expression with respect to a player (for placeholders).
|
||||||
|
*
|
||||||
|
* @param expression The expression.
|
||||||
|
* @param player The player.
|
||||||
|
* @param context The injectable placeholders.
|
||||||
|
* @param additionalPlayers Additional players to parse placeholders for.
|
||||||
|
* @return The value of the expression, or zero if invalid.
|
||||||
|
*/
|
||||||
|
public static double evaluateExpression(@NotNull final String expression,
|
||||||
|
@Nullable final Player player,
|
||||||
|
@NotNull final PlaceholderInjectable context,
|
||||||
|
@NotNull final Collection<AdditionalPlayer> additionalPlayers) {
|
||||||
|
return crunch.evaluate(expression, player, context, additionalPlayers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -332,14 +351,16 @@ public final class NumberUtils {
|
|||||||
/**
|
/**
|
||||||
* Evaluate an expression.
|
* Evaluate an expression.
|
||||||
*
|
*
|
||||||
* @param expression The expression.
|
* @param expression The expression.
|
||||||
* @param player The player.
|
* @param player The player.
|
||||||
* @param injectable The injectable placeholders.
|
* @param injectable The injectable placeholders.
|
||||||
|
* @param additionalPlayers The additional players.
|
||||||
* @return The value of the expression, or zero if invalid.
|
* @return The value of the expression, or zero if invalid.
|
||||||
*/
|
*/
|
||||||
double evaluate(@NotNull String expression,
|
double evaluate(@NotNull String expression,
|
||||||
@Nullable Player player,
|
@Nullable Player player,
|
||||||
@NotNull PlaceholderInjectable injectable);
|
@NotNull PlaceholderInjectable injectable,
|
||||||
|
@NotNull Collection<AdditionalPlayer> additionalPlayers);
|
||||||
}
|
}
|
||||||
|
|
||||||
private NumberUtils() {
|
private NumberUtils() {
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ dependencies {
|
|||||||
compileOnly 'com.comphenix.protocol:ProtocolLib:5.0.0-SNAPSHOT'
|
compileOnly 'com.comphenix.protocol:ProtocolLib:5.0.0-SNAPSHOT'
|
||||||
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7-SNAPSHOT'
|
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7-SNAPSHOT'
|
||||||
compileOnly 'com.github.TechFortress:GriefPrevention:16.17.1'
|
compileOnly 'com.github.TechFortress:GriefPrevention:16.17.1'
|
||||||
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
|
|
||||||
compileOnly 'com.github.cryptomorin:kingdoms:1.12.3'
|
compileOnly 'com.github.cryptomorin:kingdoms:1.12.3'
|
||||||
compileOnly('com.github.TownyAdvanced:Towny:0.97.2.6') {
|
compileOnly('com.github.TownyAdvanced:Towny:0.97.2.6') {
|
||||||
exclude group: 'com.zaxxer', module: 'HikariCP'
|
exclude group: 'com.zaxxer', module: 'HikariCP'
|
||||||
@@ -42,6 +41,7 @@ dependencies {
|
|||||||
compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:2.4.0'
|
compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:2.4.0'
|
||||||
compileOnly 'com.github.EssentialsX:Essentials:2.18.2'
|
compileOnly 'com.github.EssentialsX:Essentials:2.18.2'
|
||||||
compileOnly 'com.bgsoftware:SuperiorSkyblockAPI:1.8.3'
|
compileOnly 'com.bgsoftware:SuperiorSkyblockAPI:1.8.3'
|
||||||
|
compileOnly 'com.songoda:skyblock:2.3.30'
|
||||||
compileOnly 'com.github.MilkBowl:VaultAPI:1.7'
|
compileOnly 'com.github.MilkBowl:VaultAPI:1.7'
|
||||||
compileOnly 'com.github.WhipDevelopment:CrashClaim:f9cd7d92eb'
|
compileOnly 'com.github.WhipDevelopment:CrashClaim:f9cd7d92eb'
|
||||||
compileOnly 'com.wolfyscript.wolfyutilities:wolfyutilities:3.16.0.0'
|
compileOnly 'com.wolfyscript.wolfyutilities:wolfyutilities:3.16.0.0'
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefCombatLogX
|
|||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefCombatLogXV11
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefCombatLogXV11
|
||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefCrashClaim
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefCrashClaim
|
||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefDeluxeCombat
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefDeluxeCombat
|
||||||
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefFabledSkyBlock
|
||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefFactionsUUID
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefFactionsUUID
|
||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefGriefPrevention
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefGriefPrevention
|
||||||
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefIridiumSkyblock
|
import com.willfp.eco.internal.spigot.integrations.antigrief.AntigriefIridiumSkyblock
|
||||||
@@ -183,7 +184,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
|
|||||||
val tpsProxy = getProxy(TPSProxy::class.java)
|
val tpsProxy = getProxy(TPSProxy::class.java)
|
||||||
ServerUtils.initialize { tpsProxy.getTPS() }
|
ServerUtils.initialize { tpsProxy.getTPS() }
|
||||||
|
|
||||||
NumberUtils.initCrunch { expression, player, context -> evaluateExpression(expression, player, context) }
|
NumberUtils.initCrunch(::evaluateExpression)
|
||||||
|
|
||||||
MenuUtils.initialize { it.openInventory.topInventory.getMenu() }
|
MenuUtils.initialize { it.openInventory.topInventory.getMenu() }
|
||||||
|
|
||||||
@@ -264,6 +265,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
|
|||||||
IntegrationLoader("IridiumSkyblock") { AntigriefManager.register(AntigriefIridiumSkyblock()) },
|
IntegrationLoader("IridiumSkyblock") { AntigriefManager.register(AntigriefIridiumSkyblock()) },
|
||||||
IntegrationLoader("DeluxeCombat") { AntigriefManager.register(AntigriefDeluxeCombat()) },
|
IntegrationLoader("DeluxeCombat") { AntigriefManager.register(AntigriefDeluxeCombat()) },
|
||||||
IntegrationLoader("SuperiorSkyblock2") { AntigriefManager.register(AntigriefSuperiorSkyblock2()) },
|
IntegrationLoader("SuperiorSkyblock2") { AntigriefManager.register(AntigriefSuperiorSkyblock2()) },
|
||||||
|
IntegrationLoader("FabledSkyBlock") { AntigriefManager.register(AntigriefFabledSkyBlock()) },
|
||||||
IntegrationLoader("BentoBox") { AntigriefManager.register(AntigriefBentoBox()) },
|
IntegrationLoader("BentoBox") { AntigriefManager.register(AntigriefBentoBox()) },
|
||||||
IntegrationLoader("WorldGuard") { AntigriefManager.register(AntigriefWorldGuard()) },
|
IntegrationLoader("WorldGuard") { AntigriefManager.register(AntigriefWorldGuard()) },
|
||||||
IntegrationLoader("GriefPrevention") { AntigriefManager.register(AntigriefGriefPrevention()) },
|
IntegrationLoader("GriefPrevention") { AntigriefManager.register(AntigriefGriefPrevention()) },
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.willfp.eco.internal.spigot.integrations.antigrief
|
||||||
|
|
||||||
|
import com.songoda.skyblock.SkyBlock
|
||||||
|
import com.willfp.eco.core.integrations.antigrief.AntigriefIntegration
|
||||||
|
import org.bukkit.Location
|
||||||
|
import org.bukkit.block.Block
|
||||||
|
import org.bukkit.entity.LivingEntity
|
||||||
|
import org.bukkit.entity.Monster
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
|
||||||
|
class AntigriefFabledSkyBlock : AntigriefIntegration {
|
||||||
|
|
||||||
|
override fun getPluginName(): String {
|
||||||
|
return "FabledSkyBlock"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canBreakBlock(player: Player, block: Block): Boolean {
|
||||||
|
|
||||||
|
val skyblock = SkyBlock.getInstance()
|
||||||
|
val island = skyblock.islandManager.getIslandAtLocation(block.location) ?: return true
|
||||||
|
|
||||||
|
if (!player.hasPermission("fabledskyblock.bypass.destroy")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skyblock.permissionManager.hasPermission(island, "Destroy", island.getRole(player))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canCreateExplosion(player: Player, location: Location): Boolean {
|
||||||
|
|
||||||
|
val skyblock = SkyBlock.getInstance()
|
||||||
|
val island = skyblock.islandManager.getIslandAtLocation(location) ?: return true
|
||||||
|
|
||||||
|
if (!player.hasPermission("fabledskyblock.bypass.explosions")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skyblock.permissionManager.hasPermission(island, "Explosions", island.getRole(player))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canPlaceBlock(player: Player, block: Block): Boolean {
|
||||||
|
|
||||||
|
val skyblock = SkyBlock.getInstance()
|
||||||
|
val island = skyblock.islandManager.getIslandAtLocation(block.location) ?: return true
|
||||||
|
|
||||||
|
if (!player.hasPermission("fabledskyblock.bypass.place")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skyblock.permissionManager.hasPermission(island, "Place", island.getRole(player))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canInjure(player: Player, victim: LivingEntity): Boolean {
|
||||||
|
|
||||||
|
val skyblock = SkyBlock.getInstance()
|
||||||
|
val island = SkyBlock.getInstance().islandManager.getIslandAtLocation(victim.location) ?: return true
|
||||||
|
|
||||||
|
if (victim is Player) return skyblock.permissionManager.hasPermission(island, "PvP", island.getRole(player))
|
||||||
|
|
||||||
|
val islandPermission = when (victim) {
|
||||||
|
is Monster -> "MonsterHurting"
|
||||||
|
else -> "MobHurting"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skyblock.permissionManager.hasPermission(island, islandPermission, island.getRole(player))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun canPickupItem(player: Player, location: Location): Boolean {
|
||||||
|
|
||||||
|
val skyblock = SkyBlock.getInstance()
|
||||||
|
val island = SkyBlock.getInstance().islandManager.getIslandAtLocation(location) ?: return true
|
||||||
|
|
||||||
|
if (!player.hasPermission("fabledskyblock.bypass.itempickup")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skyblock.permissionManager.hasPermission(island, "ItemPickup", island.getRole(player))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ import com.massivecraft.factions.FLocation
|
|||||||
import com.massivecraft.factions.FPlayer
|
import com.massivecraft.factions.FPlayer
|
||||||
import com.massivecraft.factions.FPlayers
|
import com.massivecraft.factions.FPlayers
|
||||||
import com.massivecraft.factions.Faction
|
import com.massivecraft.factions.Faction
|
||||||
import com.massivecraft.factions.perms.PermissibleAction
|
import com.massivecraft.factions.perms.PermissibleActions
|
||||||
import com.willfp.eco.core.integrations.antigrief.AntigriefIntegration
|
import com.willfp.eco.core.integrations.antigrief.AntigriefIntegration
|
||||||
import org.bukkit.Location
|
import org.bukkit.Location
|
||||||
import org.bukkit.block.Block
|
import org.bukkit.block.Block
|
||||||
@@ -20,7 +20,7 @@ class AntigriefFactionsUUID : AntigriefIntegration {
|
|||||||
val fplayer: FPlayer = FPlayers.getInstance().getByPlayer(player)
|
val fplayer: FPlayer = FPlayers.getInstance().getByPlayer(player)
|
||||||
val flocation = FLocation(block.location)
|
val flocation = FLocation(block.location)
|
||||||
val faction: Faction = Board.getInstance().getFactionAt(flocation)
|
val faction: Faction = Board.getInstance().getFactionAt(flocation)
|
||||||
return if (!faction.hasAccess(fplayer, PermissibleAction.DESTROY)) {
|
return if (!faction.hasAccess(fplayer, PermissibleActions.DESTROY, flocation)) {
|
||||||
fplayer.isAdminBypassing
|
fplayer.isAdminBypassing
|
||||||
} else true
|
} else true
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ class AntigriefFactionsUUID : AntigriefIntegration {
|
|||||||
val fplayer: FPlayer = FPlayers.getInstance().getByPlayer(player)
|
val fplayer: FPlayer = FPlayers.getInstance().getByPlayer(player)
|
||||||
val flocation = FLocation(block.location)
|
val flocation = FLocation(block.location)
|
||||||
val faction: Faction = Board.getInstance().getFactionAt(flocation)
|
val faction: Faction = Board.getInstance().getFactionAt(flocation)
|
||||||
return if (!faction.hasAccess(fplayer, PermissibleAction.BUILD)) {
|
return if (!faction.hasAccess(fplayer, PermissibleActions.BUILD, flocation)) {
|
||||||
fplayer.isAdminBypassing
|
fplayer.isAdminBypassing
|
||||||
} else true
|
} else true
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@ class AntigriefFactionsUUID : AntigriefIntegration {
|
|||||||
return fplayer.isAdminBypassing
|
return fplayer.isAdminBypassing
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (faction.hasAccess(fplayer, PermissibleAction.DESTROY)) {
|
if (faction.hasAccess(fplayer, PermissibleActions.DESTROY, flocation)) {
|
||||||
return fplayer.isAdminBypassing
|
return fplayer.isAdminBypassing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.willfp.eco.internal.spigot.math
|
|||||||
import com.github.benmanes.caffeine.cache.Cache
|
import com.github.benmanes.caffeine.cache.Cache
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
import com.github.benmanes.caffeine.cache.Caffeine
|
||||||
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager
|
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager
|
||||||
|
import com.willfp.eco.core.placeholder.AdditionalPlayer
|
||||||
import com.willfp.eco.core.placeholder.PlaceholderInjectable
|
import com.willfp.eco.core.placeholder.PlaceholderInjectable
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import redempt.crunch.CompiledExpression
|
import redempt.crunch.CompiledExpression
|
||||||
@@ -13,9 +14,9 @@ import redempt.crunch.functional.EvaluationEnvironment
|
|||||||
private val cache: Cache<String, CompiledExpression> = Caffeine.newBuilder().build()
|
private val cache: Cache<String, CompiledExpression> = Caffeine.newBuilder().build()
|
||||||
private val goToZero = Crunch.compileExpression("0")
|
private val goToZero = Crunch.compileExpression("0")
|
||||||
|
|
||||||
fun evaluateExpression(expression: String, player: Player?, context: PlaceholderInjectable): Double {
|
fun evaluateExpression(expression: String, player: Player?, context: PlaceholderInjectable, additional: Collection<AdditionalPlayer>): Double {
|
||||||
val placeholderValues = PlaceholderManager.findPlaceholdersIn(expression)
|
val placeholderValues = PlaceholderManager.findPlaceholdersIn(expression)
|
||||||
.map { PlaceholderManager.translatePlaceholders(it, player, context) }
|
.map { PlaceholderManager.translatePlaceholders(it, player, context, additional) }
|
||||||
.map { runCatching { FastNumberParsing.parseDouble(it) }.getOrDefault(0.0) }
|
.map { runCatching { FastNumberParsing.parseDouble(it) }.getOrDefault(0.0) }
|
||||||
.toDoubleArray()
|
.toDoubleArray()
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ softdepend:
|
|||||||
- DeluxeCombat
|
- DeluxeCombat
|
||||||
- IridiumSkyblock
|
- IridiumSkyblock
|
||||||
- SuperiorSkyblock2
|
- SuperiorSkyblock2
|
||||||
|
- FabledSkyBlock
|
||||||
- CrashClaim
|
- CrashClaim
|
||||||
- DecentHolograms
|
- DecentHolograms
|
||||||
- MythicMobs
|
- MythicMobs
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
version = 6.38.3
|
version = 6.39.0
|
||||||
plugin-name = eco
|
plugin-name = eco
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
BIN
lib/FactionsUUID.jar
Normal file
BIN
lib/FactionsUUID.jar
Normal file
Binary file not shown.
Reference in New Issue
Block a user