Update for 1.5.10 release.

* Fix ClaimBlockTask prematurely exiting if a player had max claim blocks.
* Fix TaxApplyTask not pulling funds from claim bank first.
* Fix ClaimContextCalculator overwriting option claim contexts.
* Fix player option commands running during a command causing a loop.
* Fix player-command-enter running command from subclaim.
* Fix player-command-exit running command to subclaim.
* Fix player contexts not being added in all cases where a player is involved.
* Fix flag definitions not accepting any context.
* Fix elytra enter-claim bypass.
* Add 'claim-create-radius-limit' to global config.
* Add Simplified Chinese language support (zh_CN).
* Add enter-claim flag permission check on player login.
* Add enter/exit-claim support for player respawns. If denied, GD will respawn player back in source claim in a safe location.
* Add TE NBT id support for mods such as gregtech.
* (Hybrid) Fix mohist EntityType mod registration.
* (Hybrid/Sponge) Add TE NBT id support for mods such as gregtech. See new setting 'tile-id-nbt-map' under mod category in global.conf
* (Sponge) Add 'interact-item-force-list' to global config. Used to force interact-item flag checks when a player left/right-clicks with an item in hand.
* (Sponge) Add check to prevent re-registration of worlds.
* (Sponge) Add workaround during collisions when user is wrapped in ProjectileSource.
* (Sponge) Add EntityThrowable support for getEntityOwner.
* (Sponge) Add method to get internal DamageSource type name.
* (Sponge) Fix NPE when cancelling claim with '/claimrent cancel'
* (Sponge) Fix wrong block being checked during bucket interactions such as lava and water.
* (Sponge) Fix block-pre not handing certain mod permission checks such as AE2 cables.
* (Sponge) Fix 'block-id-convert-list' feature not using correct id during player interactions.
* (Sponge) Fix item-pickup flag not checking trust.
This commit is contained in:
bloodshot 2021-02-05 18:06:14 -05:00
parent ad31466bb1
commit e281231d87
64 changed files with 1065 additions and 800 deletions

View File

@ -104,6 +104,7 @@ sourceSets {
dependencies {
compileOnly(project(path: ":GriefDefenderAPI"))
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
compile project (':common')
compileOnly "com.griefdefender:adapter:$adapterVersion"
compileOnly "com.griefdefender:reflect-helper:1.0"
@ -118,9 +119,9 @@ dependencies {
compileOnly "net.ess3:EssentialsX:2.17.1"
compileOnly "net.milkbowl.vault:VaultAPI:1.7"
compileOnly "us.dynmap:dynmap-api:3.0-SNAPSHOT"
compileOnly "com.github.lucko:luckperms:master-SNAPSHOT"
compileOnly "com.github.slimefun:slimefun4:master-SNAPSHOT"
compileOnly "com.github.thebusybiscuit:cs-corelib:master-SNAPSHOT"
compileOnly "com.github.lucko:luckperms:v5.2"
//compileOnly "com.github.slimefun:slimefun4:master-SNAPSHOT"
//compileOnly "com.github.thebusybiscuit:cs-corelib:master-SNAPSHOT"
// Libs
compileOnly "aopalliance:aopalliance:1.0"
compileOnly "co.aikar:acf-core:0.5.0-SNAPSHOT"
@ -145,10 +146,10 @@ dependencies {
compileOnly "org.jetbrains:annotations:17.0.0"
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"
compileOnly "org.ow2.asm:asm-debug-all:5.2"
compileOnly "org.spongepowered:configurate-core:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-gson:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-hocon:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-yaml:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-core:3.7.2"
compileOnly "org.spongepowered:configurate-gson:3.7.2"
compileOnly "org.spongepowered:configurate-hocon:3.7.2"
compileOnly "org.spongepowered:configurate-yaml:3.7.2"
compileOnly "net.kyori:event-api:3.0.0"
compileOnly "net.kyori:event-method:3.0.0"
compileOnly "net.kyori:event-method-asm:3.0.0"

View File

@ -114,6 +114,7 @@ public class GDPlayerData implements PlayerData {
public boolean townChat = false;
public boolean lockPlayerDeathDrops = false;
public boolean trappedRequest = false;
public boolean runningPlayerCommands = false;
public List<Component> chatLines = new ArrayList<>();
public Instant recordChatTimestamp;
public Instant commandInputTimestamp;

View File

@ -278,7 +278,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
boolean isAdmin = false;
final Player player = src.getOnlinePlayer();
final GDPlayerData playerData = src.getInternalPlayerData();
final boolean isTaxEnabled = GriefDefenderPlugin.getActiveConfig(player.getWorld()).getConfig().economy.taxSystem;
final boolean isTaxEnabled = GriefDefenderPlugin.getGlobalConfig().getConfig().economy.taxSystem;
if (player.hasPermission(GDPermissions.DELETE_CLAIM_ADMIN)) {
isAdmin = true;
}
@ -385,7 +385,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
overrideContexts.add(claim.getOverrideClaimContext());
Map<String, OptionData> filteredContextMap = new HashMap<>();
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(claim.getDefaultTypeContext()) || (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT)))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
@ -422,7 +422,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
}
}
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
@ -431,11 +431,11 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
}
if (displayType != MenuType.DEFAULT) {
if (claim.isTown() || isAdmin) {
//if (claim.isTown() || isAdmin) {
if (contextSet.contains(claim.getContext())) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.CLAIM, mapEntry.getValue());
}
}
//}
if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue());
}
@ -453,7 +453,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
Collections.reverse(inheritParents);
for (Claim current : inheritParents) {
GDClaim currentClaim = (GDClaim) current;
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(currentClaim.getContext())) {
inheritPermissionMap.put(mapEntry.getKey(), new ClaimClickData(currentClaim, mapEntry.getValue()));
@ -519,10 +519,10 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
paginationList.sendTo(player, activePage);
}
private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> filteredContextMap, Set<Context> contexts, MenuType type, Map<String, String> permissions) {
private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> filteredContextMap, Set<Context> contexts, MenuType type, Map<String, List<String>> permissions) {
final Player player = src.getOnlinePlayer();
final GDPlayerData playerData = src.getInternalPlayerData();
for (Map.Entry<String, String> permissionEntry : permissions.entrySet()) {
for (Map.Entry<String, List<String>> permissionEntry : permissions.entrySet()) {
final Option option = OptionRegistryModule.getInstance().getById(permissionEntry.getKey()).orElse(null);
if (option == null) {
continue;
@ -545,10 +545,21 @@ private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> f
}
}
final OptionData optionData = filteredContextMap.get(permissionEntry.getKey());
String optionValue = permissionEntry.getValue().get(0);
if (option.multiValued()) {
optionValue = "";
for (String entry : permissionEntry.getValue()) {
if (optionValue.isEmpty()) {
optionValue += entry;
} else {
optionValue = optionValue + "\\|" + entry;
}
}
}
if (optionData != null) {
optionData.addContexts(option, permissionEntry.getValue(), type, contexts);
optionData.addContexts(option, optionValue, type, contexts);
} else {
filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, permissionEntry.getValue(), type, contexts));
filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, optionValue, type, contexts));
}
}
}

View File

@ -89,6 +89,13 @@ public void execute(Player player, int radius, @Optional String type) {
return;
}
final int radiusLimit = GriefDefenderPlugin.getGlobalConfig().getConfig().claim.claimCreateRadiusLimit;
if (radius > radiusLimit) {
GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_RESULT,
ImmutableMap.of("reason", "Radius exceeds limit of " + radiusLimit + ".")));
return;
}
final Vector3i lesserBoundary = new Vector3i(
location.getBlockX() - radius,
minClaimLevel,

View File

@ -46,6 +46,7 @@
import com.griefdefender.configuration.MessageStorage;
import com.griefdefender.economy.GDPaymentTransaction;
import com.griefdefender.permission.GDPermissions;
import com.griefdefender.task.TaxApplyTask;
import com.griefdefender.util.EconomyUtil;
import java.time.Instant;
@ -104,6 +105,10 @@ public void execute(Player player, String[] args) throws CommandException {
message = MessageCache.getInstance().TAX_NO_BALANCE;
}
GriefDefenderPlugin.sendMessage(player, message);
} else if (command.equalsIgnoreCase("force")) {
if (playerData.ignoreClaims || player.hasPermission(GDPermissions.COMMAND_CLAIM_TAX_FORCE)) {
TaxApplyTask.handleClaimTax(claim, playerData, claim.isInTown());
}
} else if (command.equalsIgnoreCase("pay")) {
final double taxBalance = claim.getEconomyData().getTaxBalance();
if (taxBalance <= 0 || amount <= 0) {

View File

@ -45,14 +45,12 @@
import com.griefdefender.permission.GDPermissionManager;
import com.griefdefender.permission.GDPermissions;
import com.griefdefender.permission.option.GDOptions;
import com.griefdefender.util.SafeTeleportHelper;
import com.griefdefender.util.PlayerUtil;
import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@CommandAlias("%griefdefender")
@ -108,34 +106,7 @@ public void execute(Player player) {
return;
}
final int minClaimLevel = claim.getOwnerMinClaimLevel();
double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65);
if (claim.isCuboid()) {
claimY = claim.lesserBoundaryCorner.getY();
}
final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1);
final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1);
Location claimCorner = null;
switch (randomCorner) {
case 1: // SW
claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 2: // NW
claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random);
case 3: // SE
claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 4: // NE
claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random);
}
final Location safeLocation = SafeTeleportHelper.getInstance().getSafeLocation(claimCorner, 64, 16, 2).orElse(null);
if (safeLocation != null) {
playerData.teleportLocation = safeLocation;
} else {
// If no safe location was found, fall back to corner
playerData.teleportLocation = claimCorner;
}
playerData.teleportLocation = PlayerUtil.getInstance().getSafeClaimLocation(claim);
int teleportDelay = 0;
if (GDOptions.PLAYER_TELEPORT_DELAY) {
teleportDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.PLAYER_TELEPORT_DELAY, claim);

View File

@ -50,6 +50,8 @@ public class ClaimCategory extends ConfigCategory {
+ "\nNote: If in economy-mode, use setting 'use-claim-block-task' under economy category."
+ "\nNote: To configure amount accrued, see 'blocks-accrued-per-hour' option at https://github.com/bloodmc/GriefDefender/wiki/Options-(Meta)#global-options")
public boolean claimBlockTask = true;
@Setting(value = "claim-create-radius-limit", comment = "The radius limit for the /claimcreate command. (Default: 256)")
public int claimCreateRadiusLimit = 256;
@Setting(value = "piston-protection-in-claims", comment = "Whether piston protection should be enabled within claims. Note: This does not affect pistons crossing into another claim, that is always protected. This only determines whether or not GD should process pistons if it doesn't cross into another claim.")
public boolean pistonProtectionInClaims = false;
@Setting(value = "auto-chest-claim-block-radius", comment = "Radius used (in blocks) for auto-created claim when a chest is placed. Set to -1 to disable chest claim creation.")

View File

@ -55,8 +55,12 @@ public class ModCategory {
@Setting(value = "block-id-convert-list", comment = "Used to override generic block id's to their actual id during TE and item usage if available. Add the target block id to list if you want to force a conversion when detected."
+ "\nNote: This is useful for mods such as IC2 which uses the generic id 'ic2:te' for its multi-block.")
public List<String> blockIdConvertList = new ArrayList<>();
@Setting(value = "tile-id-nbt-map", comment = "Used to override generic tileentity id's to their actual id during TE usage. Add the target TE id as key and NBT key where ID is stored as value."
+ "\nNote: This is useful for mods such as Gregtech which uses the generic id 'gregtech:machine' for its TE and NBT key 'MetaId' to store the actual ID.")
public Map<String, String> tileIdNbtMap = new HashMap<>();
public ModCategory() {
this.blockIdConvertList.add("gregtech:machine");
this.blockIdConvertList.add("ic2:te");
this.fakePlayerIdentifiers.add("41C82C87-7AfB-4024-BA57-13D2C99CAE77"); // Forge FakePlayer
this.fakePlayerIdentifiers.add("BFC3377F-C3C9-3382-9DA6-79B50A9AFE57"); // OpenMods
@ -67,6 +71,7 @@ public ModCategory() {
this.modIdMap.put("net.minecraftforge.*", "forge");
this.modIdMap.put("openblocks.*", "openblocks");
this.modIdMap.put("openmods.*", "openmods");
this.tileIdNbtMap.put("gregtech:machine", "MetaId");
}
public boolean isFakePlayer(Player player) {
@ -98,4 +103,8 @@ public String getModId(String clazz) {
}
return null;
}
public String getNbtKey(String tileId) {
return this.tileIdNbtMap.get(tileId);
}
}

View File

@ -86,8 +86,8 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
Set<Context> flagContexts = new HashSet<>();
for (String part : parts) {
String[] split = part.split("=");
String key = split[0];
String value = split[1];
String key = split[0].toLowerCase();
String value = split[1].toLowerCase();
// Handle linked Flag
if (key.equalsIgnoreCase("flag")) {
final String flagName = value;
@ -108,11 +108,6 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
}
flagContexts.add(new Context(key, value));
break;
case "used_item":
case "item_name":
case ContextKeys.STATE:
flagContexts.add(new Context(key, value));
break;
case "server":
case "world":
case ContextKeys.CLAIM_DEFAULT:
@ -120,7 +115,8 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
// gd_claim contexts should always be set at the definition level
throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.\nContext '" + key + "' can only be used for the definition.");
default:
throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.");
flagContexts.add(new Context(key, value));
break;
}
}
}

View File

@ -41,6 +41,7 @@
import org.bukkit.entity.Vehicle;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import com.flowpowered.math.vector.Vector3i;
@ -68,6 +69,7 @@
import com.griefdefender.configuration.MessageStorage;
import com.griefdefender.event.GDBorderClaimEvent;
import com.griefdefender.internal.registry.ItemTypeRegistryModule;
import com.griefdefender.internal.util.NMSUtil;
import com.griefdefender.internal.util.VecHelper;
import com.griefdefender.permission.GDPermissionManager;
import com.griefdefender.permission.GDPermissionUser;
@ -109,11 +111,12 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat
final Vector3i fromPos = VecHelper.toVector3i(fromLocation);
final Vector3i toPos = VecHelper.toVector3i(toLocation);
final Player player = targetEntity instanceof Player ? (Player) targetEntity : null;
final GDPermissionUser user = player != null ? PermissionHolderCache.getInstance().getOrCreateUser(player) : null;
if (fromPos.equals(toPos)) {
return true;
}
final Player player = targetEntity instanceof Player ? (Player) targetEntity : null;
final GDPermissionUser user = player != null ? PermissionHolderCache.getInstance().getOrCreateUser(player) : null;
if (user != null) {
if (user.getOnlinePlayer() == null) {
// Most likely NPC, ignore
@ -188,6 +191,10 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat
if (player != null && cancelMessage != null) {
TextAdapter.sendComponent(player, cancelMessage);
}
if (event instanceof PlayerRespawnEvent) {
((PlayerRespawnEvent) event).setRespawnLocation(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim));
}
GDTimings.ENTITY_MOVE_EVENT.stopTiming();
return false;
} else {
final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix;
@ -232,15 +239,21 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat
} else {
playerData.inTown = false;
}
if (player != null) {
if (player != null && user.getOnlinePlayer() != null) {
this.checkPlayerFlight(user, fromClaim, toClaim);
this.checkPlayerFlySpeed(user, fromClaim, toClaim);
this.checkPlayerGameMode(user, fromClaim, toClaim);
this.checkPlayerGodMode(user, fromClaim, toClaim);
this.checkPlayerWalkSpeed(user, fromClaim, toClaim);
this.checkPlayerWeather(user, fromClaim, toClaim, false);
this.runPlayerCommands(fromClaim, user, false);
this.runPlayerCommands(toClaim, user, true);
// Exit command - Don't run if to claim is child of from claim
if (!toClaim.isParent(fromClaim)) {
this.runPlayerCommands(fromClaim, user, false);
}
// Enter command - Don't run if to claim is parent of from claim
if (!fromClaim.isParent(toClaim)) {
this.runPlayerCommands(toClaim, user, true);
}
}
}
@ -291,6 +304,9 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat
if (event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
if (event instanceof PlayerRespawnEvent) {
((PlayerRespawnEvent) event).setRespawnLocation(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim));
}
GDTimings.ENTITY_MOVE_EVENT.stopTiming();
return false;
}
@ -340,15 +356,21 @@ public boolean onEntityMove(Event event, Location fromLocation, Location toLocat
playerData.inTown = false;
}
if (player != null) {
if (player != null && user.getOnlinePlayer() != null) {
this.checkPlayerFlight(user, fromClaim, toClaim);
this.checkPlayerFlySpeed(user, fromClaim, toClaim);
this.checkPlayerGameMode(user, fromClaim, toClaim);
this.checkPlayerGodMode(user, fromClaim, toClaim);
this.checkPlayerWalkSpeed(user, fromClaim, toClaim);
this.checkPlayerWeather(user, fromClaim, toClaim, false);
this.runPlayerCommands(fromClaim, user, false);
this.runPlayerCommands(toClaim, user, true);
// Exit command - Don't run if to claim is child of from claim
if (!toClaim.isParent(fromClaim)) {
this.runPlayerCommands(fromClaim, user, false);
}
// Enter command - Don't run if to claim is parent of from claim
if (!fromClaim.isParent(toClaim)) {
this.runPlayerCommands(toClaim, user, true);
}
}
}
}
@ -371,7 +393,11 @@ private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean ent
if (!GDOptions.PLAYER_COMMAND_ENTER && !GDOptions.PLAYER_COMMAND_EXIT) {
return;
}
if (user.getInternalPlayerData().runningPlayerCommands) {
return;
}
user.getInternalPlayerData().runningPlayerCommands = true;
List<String> rawCommandList = new ArrayList<>();
Set<Context> contexts = new HashSet<>();
if (player.getUniqueId().equals(claim.getOwnerUniqueId())) {
@ -404,6 +430,7 @@ private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean ent
if (rawCommandList != null) {
runCommand(claim, player, rawCommandList, false);
}
user.getInternalPlayerData().runningPlayerCommands = false;
}
private void runCommand(GDClaim claim, Player player, List<String> rawCommandList, boolean runAsConsole) {
@ -418,6 +445,10 @@ private void runCommand(GDClaim claim, Player player, List<String> rawCommandLis
String args = command.replace(baseCommand + " ", "");
baseCommand = baseCommand.replace("\\", "").replace("/", "");
args = args.replace("%player%", player.getName());
// Handle WorldEdit commands
if (command.startsWith("//") && !baseCommand.startsWith("/")) {
baseCommand = "/" + baseCommand;
}
if (runAsConsole) {
CommandHelper.executeCommand(Bukkit.getConsoleSender(), baseCommand, args);
} else {
@ -504,7 +535,7 @@ private void checkPlayerGodMode(GDPermissionUser user, GDClaim fromClaim, GDClai
return;
}
final Player player = user.getOnlinePlayer();
if (player == null || !player.isInvulnerable()) {
if (player == null || !NMSUtil.getInstance().isInvulnerable(player)) {
// Most likely Citizens NPC
return;
}

View File

@ -217,6 +217,9 @@ public void onPlayerJoin(PlayerJoinEvent event) {
if (claim.isInTown()) {
playerData.inTown = true;
}
if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, player.getLocation(), claim, Flags.ENTER_CLAIM, player, player, player, true) == Tristate.FALSE) {
player.teleport(PlayerUtil.getInstance().getSafeClaimLocation(claim));
}
GDTimings.PLAYER_JOIN_EVENT.stopTiming();
}
@ -258,6 +261,14 @@ public void onPlayerRespawn(PlayerRespawnEvent event) {
final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId());
playerData.lastPvpTimestamp = null;
if (playerData.ignoreClaims || player.hasPermission(GDPermissions.COMMAND_DELETE_ADMIN_CLAIMS)) {
return;
}
final Location sourceLocation = player.getLocation();
final Location destination = event.getRespawnLocation();
// Handle BorderClaimEvent
CommonEntityEventHandler.getInstance().onEntityMove(event, sourceLocation, destination, player);
}
@EventHandler(priority = EventPriority.LOWEST)

View File

@ -206,10 +206,18 @@ public Tristate getFinalPermission(Event event, Location location, Set<Context>
if (source instanceof Player && flag != Flags.COLLIDE_BLOCK && flag != Flags.COLLIDE_ENTITY) {
this.addPlayerContexts((Player) source, contexts, flag);
}
if (!(source instanceof Player) && target instanceof Player && user != null && user.getOnlinePlayer() != null && !user.getUniqueId().equals(((Player) target).getUniqueId())) {
// add source player context
// this allows users to block all pvp actions when direct source isn't a player
contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer())));
if (!(source instanceof Player) && user != null && user.getOnlinePlayer() != null) {
boolean addPlayerContext = false;
if (!(target instanceof Player)) {
addPlayerContext = true;
} else if (!user.getUniqueId().equals(((Player) target).getUniqueId())) {
addPlayerContext = true;
}
if (addPlayerContext) {
// add source player context
// this allows users to block all pvp actions when direct source isn't a player
contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer())));
}
}
if (source instanceof Block && event instanceof EntityChangeBlockEvent && flag == Flags.BLOCK_MODIFY) {
final EntityChangeBlockEvent entityChangeBlockEvent = (EntityChangeBlockEvent) event;
@ -727,7 +735,7 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
}
String id = BlockTypeRegistryModule.getInstance().getNMSKey(block);
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block);
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block.getLocation());
if (tileType != null) {
id = tileType.getId();
}
@ -752,7 +760,7 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
}
String id = BlockTypeRegistryModule.getInstance().getNMSKey(blockstate);
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block);
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(block.getLocation());
if (tileType != null) {
id = tileType.getId();
}
@ -851,9 +859,15 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
String id = ItemTypeRegistryModule.getInstance().getNMSKey(itemstack);
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final String itemName = NMSUtil.getInstance().getItemName(itemstack);
final String itemName = NMSUtil.getInstance().getItemName(itemstack, id);
if (itemName != null) {
id = itemName;
if (!itemName.contains(":")) {
final int index = id.indexOf(":");
final String modId = id.substring(0, index);
id = modId + ":" + itemName;
} else {
id = itemName;
}
}
}
if (this.isObjectIdBanned(claim, id, BanType.ITEM)) {

View File

@ -160,6 +160,7 @@ public class GDPermissions {
public static final String COMMAND_CLAIM_PERMISSION_PLAYER = "griefdefender.admin.claim.command.permission-player";
public static final String COMMAND_CLAIM_RESERVE = "griefdefender.admin.claim.command.reserve-name";
public static final String COMMAND_CLAIM_SCHEMATIC = "griefdefender.admin.claim.command.schematic";
public static final String COMMAND_CLAIM_TAX_FORCE = "griefdefender.admin.claim.command.claim.tax.force";
public static final String COMMAND_IGNORE_CLAIMS = "griefdefender.admin.claim.command.ignore.base";
public static final String COMMAND_DELETE_CLAIM_BASE = "griefdefender.admin.claim.command.delete.base";
public static final String COMMAND_DELETE_CLAIMS = "griefdefender.admin.claim.command.delete-claims";

View File

@ -387,8 +387,8 @@ private void clearPermission(UUID claimUniqueId, GDPermissionHolder holder) {
}
}
}
Map<Set<Context>, Map<String, String>> optionMap = this.getPermanentOptions(holder);
for (Entry<Set<Context>, Map<String, String>> mapEntry : optionMap.entrySet()) {
Map<Set<Context>, Map<String, List<String>>> optionMap = this.getPermanentOptions(holder);
for (Entry<Set<Context>, Map<String, List<String>>> mapEntry : optionMap.entrySet()) {
for (Context context : mapEntry.getKey()) {
if (context.getKey().equalsIgnoreCase("gd_claim") && context.getValue().equalsIgnoreCase(claimUniqueId.toString())) {
this.clearPermissions(holder, mapEntry.getKey());
@ -440,7 +440,7 @@ public Map<String, Boolean> getPermissions(GDPermissionHolder holder, Set<Contex
return cachedData.getPermissionMap();
}
public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
public Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
ImmutableContextSet set = this.getLPContexts(contexts).immutableCopy();
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
@ -450,9 +450,9 @@ public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> co
final QueryOptions query = QueryOptions.builder(QueryMode.CONTEXTUAL).option(DataQueryOrderFunction.KEY, DEFAULT_DATA_QUERY_ORDER).context(set).build();
CachedMetaData cachedData = permissionHolder.getCachedData().getMetaData(query);
// TODO
Map<String, String> metaMap = new HashMap<>();
Map<String, List<String>> metaMap = new HashMap<>();
for (Map.Entry<String, List<String>> mapEntry : cachedData.getMeta().entrySet()) {
metaMap.put(mapEntry.getKey(), mapEntry.getValue().get(0));
metaMap.put(mapEntry.getKey(), mapEntry.getValue());
}
return metaMap;
}
@ -543,14 +543,14 @@ public Map<Set<Context>, Map<String, Boolean>> getTransientPermissions(GDPermiss
return transientPermissionMap;
}
public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.data().toCollection();
Map<Set<Context>, Map<String, String>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, String>>(CONTEXT_COMPARATOR);
Map<Set<Context>, Map<String, List<String>>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, List<String>>>(CONTEXT_COMPARATOR);
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
@ -558,26 +558,35 @@ public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHo
final MetaNode metaNode = (MetaNode) node;
final Set<Context> contexts = getGPContexts(node.getContexts());
Map<String, String> metaEntry = permanentPermissionMap.get(contexts);
Map<String, List<String>> metaEntry = permanentPermissionMap.get(contexts);
if (metaEntry == null) {
metaEntry = new HashMap<>();
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
final List<String> values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
permanentPermissionMap.put(contexts, metaEntry);
} else {
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
List<String> values = metaEntry.get(metaNode.getMetaKey());
if (values == null) {
values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
} else {
values.add(metaNode.getMetaValue());
}
}
}
return permanentPermissionMap;
}
public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.transientData().toCollection();
Map<Set<Context>, Map<String, String>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, String>>(CONTEXT_COMPARATOR);
Map<Set<Context>, Map<String, List<String>>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, List<String>>>(CONTEXT_COMPARATOR);
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
@ -585,64 +594,27 @@ public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHo
final MetaNode metaNode = (MetaNode) node;
final Set<Context> contexts = getGPContexts(node.getContexts());
Map<String, String> metaEntry = permanentPermissionMap.get(contexts);
Map<String, List<String>> metaEntry = permanentPermissionMap.get(contexts);
if (metaEntry == null) {
metaEntry = new HashMap<>();
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
final List<String> values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
permanentPermissionMap.put(contexts, metaEntry);
} else {
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
List<String> values = metaEntry.get(metaNode.getMetaKey());
if (values == null) {
values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
} else {
values.add(metaNode.getMetaValue());
}
}
}
return permanentPermissionMap;
}
public Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.data().toCollection();
final Map<String, String> options = new HashMap<>();
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
}
final MetaNode metaNode = (MetaNode) node;
if (contexts == null) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
} else if (getGPContexts(node.getContexts()).containsAll(contexts)) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
}
}
return options;
}
public Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.transientData().toCollection();
final Map<String, String> options = new HashMap<>();
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
}
final MetaNode metaNode = (MetaNode) node;
if (contexts == null) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
} else if (getGPContexts(node.getContexts()).containsAll(contexts)) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
}
}
return options;
}
public Map<Set<Context>, Map<String, Boolean>> getAllPermissions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {

View File

@ -138,21 +138,24 @@ public enum PermissionDataType {
* Clears all permissions that contain {@link Context}
* from passed holder.
*
* @param claim The claim
* @param holder The holder
* @param context The context
*/
void clearPermissions(GDPermissionHolder holder, Context context);
/**
* Clears all permissions that contain {@link Context}'s
* from passed player.
* from passed holder.
*
* @param claim The claim
* @param holder The holder
* @param contexts The contexts
*/
void clearPermissions(GDPermissionHolder holder, Set<Context> contexts);
/**
* Checks if holder has permission.
*
* @param holder The holder
* @param permission The permission
* @return whether the holder has permission
*/
@ -174,7 +177,7 @@ public enum PermissionDataType {
* @param contexts The contexts required
* @return An immutable map of cached options or empty if none.
*/
Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts);
Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts);
/**
* Gets all persisted permissions.
@ -205,7 +208,7 @@ public enum PermissionDataType {
* @param holder The holder
* @return An immutable map of persisted options or empty if none.
*/
Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder);
Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder);
/**
* Gets all transient options with associated contexts of holder.
@ -213,23 +216,7 @@ public enum PermissionDataType {
* @param holder The holder
* @return An immutable map of transient options or empty if none.
*/
Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder);
/**
* Gets all persisted options and associated values of holder.
*
* @param holder The holder
* @return An immutable map of persisted options or empty if none.
*/
Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts);
/**
* Gets all transient options and associated values of holder.
*
* @param holder The holder
* @return An immutable map of transient options or empty if none.
*/
Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts);
Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder);
/**
* Gets all persisted permissions, including inherited nodes, with associated contexts of holder.

View File

@ -346,8 +346,9 @@ public Map<String, Boolean> getPermissions(GDPermissionHolder holder, Set<Contex
}
@Override
public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
return holderToPEXSubject(holder).getOptions(contextsGDToPEX(contexts));
public Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
//return holderToPEXSubject(holder).getOptions(contextsGDToPEX(contexts));
return new HashMap<>();
}
@Override
@ -367,23 +368,15 @@ public Map<Set<Context>, Map<String, Boolean>> getTransientPermissions(GDPermiss
}
@Override
public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder) {
return tKeys(holderToPEXSubject(holder).data().get().getAllOptions());
public Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder) {
//return tKeys(holderToPEXSubject(holder).data().get().getAllOptions());
return new HashMap<>();
}
@Override
public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder) {
return tKeys(holderToPEXSubject(holder).transientData().get().getAllOptions());
}
@Override
public Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts) {
return holderToPEXSubject(holder).data().get().getOptions(contextsGDToPEX(contexts));
}
@Override
public Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts) {
return holderToPEXSubject(holder).transientData().get().getOptions(contextsGDToPEX(contexts));
public Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder) {
//return tKeys(holderToPEXSubject(holder).transientData().get().getAllOptions());
return new HashMap<>();
}
@Override

View File

@ -431,8 +431,8 @@ private void setDefaultFlags(Set<Context> contexts, Map<String, Boolean> default
}
private void setDefaultOptions(Set<Context> contexts, Map<String, String> defaultOptions) {
final Map<Set<Context>, Map<String, String>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER);
final Map<String, String> options = permanentOptions.get(contexts);
final Map<Set<Context>, Map<String, List<String>>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER);
final Map<String, List<String>> options = permanentOptions.get(contexts);
GriefDefenderPlugin.getInstance().executor.execute(() -> {
for (Map.Entry<String, String> optionEntry : defaultOptions.entrySet()) {
final Option option = OptionRegistryModule.getInstance().getById(optionEntry.getKey()).orElse(null);
@ -446,7 +446,7 @@ private void setDefaultOptions(Set<Context> contexts, Map<String, String> defaul
// Transient options are checked first so we must ignore setting if a persisted option exists
boolean foundPersisted = false;
if (options != null) {
for (Entry<String, String> mapEntry : options.entrySet()) {
for (Entry<String, List<String>> mapEntry : options.entrySet()) {
if (mapEntry.getKey().equalsIgnoreCase(option.getPermission())) {
foundPersisted = true;
break;

View File

@ -109,6 +109,10 @@ public void loadClaimTemplates() {
}
public void registerWorld(World world) {
if (this.claimWorldManagers.get(world.getUID()) != null) {
return;
}
Environment dimType = world.getEnvironment();
final String worldName = world.getName().toLowerCase();
final String dimName = dimType.name().toLowerCase();

View File

@ -79,7 +79,7 @@ public void run() {
if ((currentTotal + accruedBlocks) > playerData.getMaxAccruedClaimBlocks()) {
playerData.setAccruedClaimBlocks(playerData.getMaxAccruedClaimBlocks());
playerData.lastAfkCheckLocation = player.getLocation();
return;
continue;
}
playerData.setAccruedClaimBlocks(playerData.getAccruedClaimBlocks() + accruedBlocks);

View File

@ -36,9 +36,7 @@
import com.griefdefender.cache.PermissionHolderCache;
import com.griefdefender.claim.GDClaim;
import com.griefdefender.claim.GDClaimManager;
import com.griefdefender.configuration.GriefDefenderConfig;
import com.griefdefender.economy.GDPaymentTransaction;
import com.griefdefender.event.GDCauseStackManager;
import com.griefdefender.event.GDTaxClaimEvent;
import com.griefdefender.permission.GDPermissionManager;
import com.griefdefender.permission.GDPermissionUser;
@ -61,10 +59,10 @@
public class TaxApplyTask extends BukkitRunnable {
Economy economy;
private static Economy economy;
public TaxApplyTask() {
this.economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi();
economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi();
int taxHour = GriefDefenderPlugin.getGlobalConfig().getConfig().economy.taxApplyHour;
long delay = TaskUtil.computeDelay(taxHour, 0, 0);
this.runTaskTimer(GDBootstrap.getInstance(), delay, 1728000L);
@ -73,8 +71,8 @@ public TaxApplyTask() {
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public void run() {
if (this.economy == null) {
this.economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi();
if (economy == null) {
economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi();
}
for (World world : Bukkit.getWorlds()) {
if (!GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUID())) {
@ -123,7 +121,7 @@ public void run() {
}
}
private void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTown) {
public static void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTown) {
final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(playerData.getUniqueId());
final OfflinePlayer player = user.getOfflinePlayer();
double taxRate = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Double.class), user, Options.TAX_RATE, claim);
@ -136,7 +134,7 @@ private void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTo
final double taxBalance = claim.getEconomyData().getTaxBalance();
taxRate = event.getTaxRate();
taxOwed = taxBalance + (claim.getClaimBlocks() * taxRate);
final EconomyResponse response = EconomyUtil.getInstance().withdrawFunds(player, taxOwed);
final EconomyResponse response = EconomyUtil.getInstance().withdrawTax(claim, player, taxOwed);
if (!response.transactionSuccess()) {
final Instant localNow = Instant.now();
Instant taxPastDueDate = claim.getEconomyData().getTaxPastDueDate();
@ -170,7 +168,7 @@ private void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTo
.getEconomyData()
.addPaymentTransaction(new GDPaymentTransaction(TransactionType.TAX, TransactionResultType.SUCCESS, Instant.now(), taxOwed));
if (town.getEconomyAccountId().isPresent()) {
this.economy.bankDeposit(town.getEconomyAccountId().get().toString(), taxOwed);
economy.bankDeposit(town.getEconomyAccountId().get().toString(), taxOwed);
}
}
claim.getData().save();

View File

@ -104,6 +104,31 @@ public static EconomyUtil getInstance() {
instance = new EconomyUtil();
}
public EconomyResponse withdrawTax(GDClaim claim, OfflinePlayer player, double taxOwed) {
if (GriefDefenderPlugin.getGlobalConfig().getConfig().economy.bankSystem) {
final EconomyResponse balanceResponse = this.vaultProvider.getApi().bankBalance(claim.getUniqueId().toString());
if (balanceResponse.transactionSuccess() && balanceResponse.balance > 0) {
EconomyResponse withdrawResponse = null;
if (taxOwed == balanceResponse.balance || balanceResponse.balance > taxOwed) {
withdrawResponse = this.vaultProvider.getApi().bankWithdraw(claim.getUniqueId().toString(), taxOwed);
if (withdrawResponse.transactionSuccess()) {
claim.getData().getEconomyData().addPaymentTransaction(
new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, player.getUniqueId(), Instant.now(), taxOwed));
return withdrawResponse;
}
} else {
withdrawResponse = this.vaultProvider.getApi().bankWithdraw(claim.getUniqueId().toString(), balanceResponse.balance);
if (withdrawResponse.transactionSuccess()) {
taxOwed -= balanceResponse.balance;
claim.getData().getEconomyData().addPaymentTransaction(
new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, player.getUniqueId(), Instant.now(), balanceResponse.balance));
}
}
}
}
return this.withdrawFunds(player, taxOwed);
}
public EconomyResponse withdrawFunds(OfflinePlayer player, double funds) {
final Double balance = this.vaultProvider.getApi().getBalance(player);
if (funds < 0) {

View File

@ -98,7 +98,7 @@ public void addActiveContexts(Set<Context> contexts, GDPermissionHolder permissi
}
public void addActiveContexts(Set<Context> contexts, GDPermissionHolder permissionHolder, GDPlayerData playerData, Claim claim) {
PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, null, null);
PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, playerData, claim);
}
public boolean containsDefaultContext(Set<Context> contexts) {
@ -145,7 +145,7 @@ public Map<String, Boolean> getPermissions(GDPermissionHolder holder, Set<Contex
return PERMISSION_PROVIDER.getPermissions(holder, contexts);
}
public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
public Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getOptions(holder, contexts);
}
@ -161,22 +161,14 @@ public Map<Set<Context>, Map<String, Boolean>> getTransientPermissions(GDPermiss
return PERMISSION_PROVIDER.getTransientPermissions(holder);
}
public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getPermanentOptions(holder);
}
public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getTransientOptions(holder);
}
public Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getPermanentOptions(holder, contexts);
}
public Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getTransientOptions(holder, contexts);
}
public Map<Set<Context>, Map<String, Boolean>> getAllPermissions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getAllPermissions(holder);
}

View File

@ -75,6 +75,7 @@
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -373,4 +374,34 @@ public GDClaim findNearbyClaim(Player player, GDPlayerData playerData, int maxDi
return claim;
}
public Location getSafeClaimLocation(GDClaim claim) {
final int minClaimLevel = claim.getOwnerMinClaimLevel();
double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65);
if (claim.isCuboid()) {
claimY = claim.lesserBoundaryCorner.getY();
}
final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1);
final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1);
Location claimCorner = null;
switch (randomCorner) {
case 1: // SW
claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 2: // NW
claimCorner = new Location(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random);
case 3: // SE
claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 4: // NE
claimCorner = new Location(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random);
}
final Location safeLocation = SafeTeleportHelper.getInstance().getSafeLocation(claimCorner, 64, 16, 2).orElse(null);
if (safeLocation != null) {
return safeLocation;
}
// If no safe location was found, fall back to corner
return claimCorner;
}
}

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.12.2",
"sha1": "a2dc91c2f88c19743fd0ae0a56fd5a66807be23b",
"path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210101.002548-59.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210101.002548-59.jar"
"sha1": "9350289c71b1bf1e285dc15a3b4f2009023db3ae",
"path": "com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210111.053602-65.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.12.2-SNAPSHOT/adapter-1.12.2-20210111.053602-65.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -42,21 +42,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -146,32 +146,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.13.2",
"sha1": "909b2226df074a8a557eff3807527704dfcc7c1a",
"path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210101.002246-57.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210101.002246-57.jar"
"sha1": "854b3e6b5d94b5d4b9f0392858123041c860f836",
"path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210111.053702-60.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20210111.053702-60.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.14.2",
"sha1": "d23791e720f7f225c469d10cbde04ea972f8f725",
"path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210101.004044-57.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210101.004044-57.jar"
"sha1": "6f638a64099128bae726b0a644f49338399bd958",
"path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210111.053844-59.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20210111.053844-59.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.14.3",
"sha1": "b583a2b1478f6cceddd73f7537c567dddef88269",
"path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210101.001718-59.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210101.001718-59.jar"
"sha1": "1bf95706a45fce471714ef8733816f648243837f",
"path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210111.054136-60.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20210111.054136-60.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.14.4",
"sha1": "f198c2d3284df26b37f8bebde06c52c25adc497f",
"path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210101.001540-57.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210101.001540-57.jar"
"sha1": "1744b2962c74912b6c0745d75550ca374a2c0d81",
"path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210111.054342-58.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20210111.054342-58.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.15.2",
"sha1": "4130d6349f5d666bca4bb7663debb3ee0facbfaa",
"path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210101.001123-40.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210101.001123-40.jar"
"sha1": "77a4e2d849d26c2b4c888f35f5b2b9d1de17b1ec",
"path": "com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210111.054736-41.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15.2-SNAPSHOT/adapter-1.15.2-20210111.054736-41.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.15",
"sha1": "278cacea6b2e11f208085e95bc3e5cae23cb47e6",
"path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210101.001354-40.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210101.001354-40.jar"
"sha1": "b35127c49c436ad710313369bc35c91977b647a4",
"path": "com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210111.054552-41.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.15-SNAPSHOT/adapter-1.15-20210111.054552-41.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.16.1",
"sha1": "35ca9f23b6258d4d519657c38a33861734312cba",
"path": "com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210101.000900-21.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210101.000900-21.jar"
"sha1": "3d638213ae52c0a55749d8e0764afab33e53e8f4",
"path": "com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210111.055030-22.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.1-SNAPSHOT/adapter-1.16.1-20210111.055030-22.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.16.2",
"sha1": "2120729220d0a9d834398759a8bd5b85aaae0908",
"path": "com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210101.000516-14.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210101.000516-14.jar"
"sha1": "9c7386be3b14d87500375005b68d4a7c1d947afb",
"path": "com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210111.055250-15.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.2-SNAPSHOT/adapter-1.16.2-20210111.055250-15.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.16.4",
"sha1": "839c9998f0baf77155a7adf3a693117649253b8d",
"path": "com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210101.000151-15.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210101.000151-15.jar"
"sha1": "0b477824841be8d813b591b9ab46cb40f78ce4db",
"path": "com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210111.055442-16.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.16.4-SNAPSHOT/adapter-1.16.4-20210111.055442-16.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -48,21 +48,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -152,32 +152,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter:1.8.8",
"sha1": "f26ea115bb8b504e4ec448a16008f1ec46d0f1d3",
"path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210101.002757-57.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210101.002757-57.jar"
"sha1": "027d23621f322901c6a2e0ed9876f5e03f22505f",
"path": "com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210111.053523-62.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.8.8-SNAPSHOT/adapter-1.8.8-20210111.053523-62.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -42,21 +42,21 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "d640d058f08da1be6b4483ac7a665d0b4bb22044",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190617.211117-148.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-bukkit:0.5.0-SNAPSHOT",
"sha1": "0af5d53de31ebf4e19100cc0654b88cc9c9c07fb",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20190607.112608-152.jar"
"sha1": "c6af96c6bddccfcbb9f71a54c21499d21c0b0c95",
"path": "co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-bukkit/0.5.0-SNAPSHOT/acf-bukkit-0.5.0-20200925.132015-173.jar"
},
{
"name": "co.aikar:acf-paper:0.5.0-SNAPSHOT",
"sha1": "5df2f2f0c7190f4b867af20ff57f9fde012a4e2c",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20190607.112622-147.jar"
"sha1": "f9ceedfcec233886f7d658adfa0a0c708825aa60",
"path": "co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-paper/0.5.0-SNAPSHOT/acf-paper-0.5.0-20200925.132021-168.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -146,32 +146,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",

View File

@ -3,5 +3,6 @@ main: com.griefdefender.GDBootstrap
softdepend: [dynmap, PlaceholderAPI, WorldEdit, WorldGuard, Vault]
depend: [LuckPerms]
load: STARTUP
version: '1.5.9'
loadafter: [EliteEnchantments]
version: '1.5.10'
api-version: 1.13

View File

@ -72,11 +72,11 @@ GriefDefender {
trapped="Teleportuje w bezpieczne miejsce w przypadku utknięcia."
trust-access="Pozwala graczowi na interakcje z działką poza schowkami i ekwipunkiem."
trust-container="Pozwala graczowi na interakcje z działką, w tym ze schowkami i ekwipunkiem."
trust-group="Zezwala grupie na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-group-all="Zezwala grupie na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-group="Zezwala grupie na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-group-all="Zezwala grupie na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-list="Zarządzanie zaufanymi osobami dla działki, na której stoisz."
trust-player="Zezwala graczowi na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-player-all="Zezwala graczowi na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Pojemnik): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-player="Zezwala graczowi na dostęp do działki.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
trust-player-all="Zezwala graczowi na dostęp do WSZYSTKICH działek.\nAccessor (Gość): Interakcje z blokami bez dostępu do pojemników.\nContainer (Magazynier): Dodatkowy dostęp do skrzyń i innych pojemników.\nBuilder (Budowniczy): Możliwość stawiania i niszczenia bloków.\nManager (Manager): Dodatkowa możliwość zmiany ustawień działki."
untrust-group="Usuwa grupę z listy dostępu do działki."
untrust-group-all="Usuwa grupę z list dostępu do wszystkich działek."
untrust-player="Usuwa gracza z listy dostępu do działki."
@ -515,7 +515,7 @@ GriefDefender {
flag-ui-override-no-permission="Ta flaga została nadpisana przez administratora i &n&cNIE MOŻE&f być zmieniona."
flag-ui-override-permission="&fFlaga &r{flag}&f jest obecnie &cnadpisana&f przez administratora.\nKliknij aby usunąć."
flag-ui-return-flags="Powrót do flag"
label-accessors=Goście
label-accessors=Gość
label-all=Wszystko
label-area=Obszar
label-available=Dostępne
@ -527,7 +527,7 @@ GriefDefender {
label-children=dziedziczące
label-claim=Działka
label-confirm=Potwierdź
label-containers=Pojemniki
label-containers=Magazynier
label-context=Kontekst
label-created=Stworzone
label-day=Dzień
@ -804,7 +804,7 @@ GriefDefender {
title-builder=BUDOWNICZY
title-buy=KUP
title-claim=DZIAŁKA
title-container=POJEMNIK
title-container=MAGAZYNIER
title-default=DOMYŚLNE
title-group=GROUP
title-inherit=DZIEDZICZENIE
@ -828,7 +828,7 @@ GriefDefender {
trust-click-show-list="Kliknij aby wyświetlić zaufanych graczy i grupy."
trust-grant="&6{target} &aotrzymuje permisję {type}&a na obecnej działce."
trust-individual-all-claims="&6{player}&a ma teraz pełny dostęp do wszystkich Twoich działek. Aby wycofać te permisje na WSZYSTKICH działkach, użyj komendy &f/untrustall&a."
trust-invalid="&cNiewłaściwy typ 'trust'.\nDostępne typy to : accessor (Gość), builder (Budowniczy), container (Pojemnik), and manager (Manager)."
trust-invalid="&cNiewłaściwy typ 'trust'.\nDostępne typy to : accessor (Gość), builder (Budowniczy), container (Magazynier), oraz manager (Manager)."
trust-list-header="Sprecyzowane permisje są tu:"
trust-no-claims="&cNie masz działek, żeby nadać permisje."
trust-plugin-cancel="&cNie można nadać praw {target}&c. Plugin odmówił."

View File

@ -854,4 +854,4 @@ GriefDefender {
untrust-self="&c您不能移除自己的信任权限。"
visual-update-in-progress="&a更新领地选区可视化效果。还需等待 &6{count}&a 个方块的效果渲染。请稍作等待。"
}
}
}

View File

@ -2,14 +2,14 @@
name=GriefDefender
group=com.griefdefender
url=https://github.com/bloodmc/GriefDefender
version=1.5.9
version=1.5.10
apiVersion=1.0.0-20201225.034857-27
# Bukkit
adapterVersion=1.16.4-20210101.000151-15
adapterVersion=1.16.4-20210111.055442-16
spigotVersion=1.16.4-R0.1-SNAPSHOT
# Sponge
adapterSpongeVersion=1.12.2-20210101.010513-16
commonVersion=1.12.2-7.1.7-SNAPSHOT
adapterSpongeVersion=1.12.2-20210115.020835-20
commonVersion=1.12.2-7.3.0
minecraftVersion=1.12.2
mcpMappings=snapshot_20180808

View File

@ -115,11 +115,12 @@ sourceSets {
dependencies {
compileOnly(project(path: ":GriefDefenderAPI"))
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
compile project (':common')
compileOnly "com.griefdefender:adapter-sponge:$adapterSpongeVersion"
compileOnly "com.griefdefender:reflect-helper:1.0"
// Sponge
apiCompile "org.spongepowered:spongeapi:$apiVersion"
//apiCompile "org.spongepowered:spongeapi:$apiVersion"
compileOnly ("org.spongepowered:spongecommon:$commonVersion:dev") {
exclude module: 'testplugins'
@ -128,10 +129,10 @@ dependencies {
compileOnly ("io.github.nucleuspowered:nucleus-api:1.14.1-S7.1"){
exclude module: 'spongeapi'
}
compile "com.github.rojo8399:PlaceholderAPI:4.5.1"
compile "com.github.bloodmc:mcclans-api:develop-SNAPSHOT"
//compile "com.github.randombyte-developer:PlaceholderAPI:4.5.1"
//compile "com.github.bloodmc:mcclans-api:develop-SNAPSHOT"
compileOnly "com.sk89q.worldedit:worldedit-core:6.1.4-SNAPSHOT"
compileOnly "com.github.lucko:luckperms:master-SNAPSHOT"
compileOnly "com.github.lucko:luckperms:v5.2"
compileOnly "us.dynmap:dynmap-api:3.0-SNAPSHOT"
// required for bootstrap
@ -156,10 +157,10 @@ dependencies {
compileOnly "org.jetbrains:annotations:17.0.0"
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"
compileOnly "org.ow2.asm:asm-debug-all:5.2"
compileOnly "org.spongepowered:configurate-core:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-gson:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-hocon:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-yaml:3.7-SNAPSHOT"
compileOnly "org.spongepowered:configurate-core:3.7.2"
compileOnly "org.spongepowered:configurate-gson:3.7.2"
compileOnly "org.spongepowered:configurate-hocon:3.7.2"
compileOnly "org.spongepowered:configurate-yaml:3.7.2"
compileOnly "net.kyori:event-api:3.0.0"
compileOnly "net.kyori:event-method:3.0.0"
compileOnly "net.kyori:event-method-asm:3.0.0"

View File

@ -116,6 +116,7 @@ public class GDPlayerData implements PlayerData {
public boolean townChat = false;
public boolean lockPlayerDeathDrops = false;
public boolean trappedRequest = false;
public boolean runningPlayerCommands = false;
public List<Component> chatLines = new ArrayList<>();
public Instant recordChatTimestamp;
public Instant commandInputTimestamp;

View File

@ -384,7 +384,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
overrideContexts.add(claim.getOverrideClaimContext());
Map<String, OptionData> filteredContextMap = new HashMap<>();
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getTransientOptions(GriefDefenderPlugin.GD_OPTION_HOLDER).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(claim.getDefaultTypeContext()) || (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT)))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
@ -421,7 +421,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
}
}
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(ClaimContexts.GLOBAL_DEFAULT_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_DEFAULT_CONTEXT))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
@ -430,11 +430,11 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.DEFAULT, mapEntry.getValue());
}
if (displayType != MenuType.DEFAULT) {
if (claim.isTown() || isAdmin) {
//if (claim.isTown() || isAdmin) {
if (contextSet.contains(claim.getContext())) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.CLAIM, mapEntry.getValue());
}
}
//}
if (contextSet.contains(ClaimContexts.GLOBAL_OVERRIDE_CONTEXT) || (!claim.isWilderness() && contextSet.contains(ClaimContexts.USER_OVERRIDE_CONTEXT))) {
this.addFilteredContexts(src, filteredContextMap, contextSet, MenuType.OVERRIDE, mapEntry.getValue());
}
@ -452,7 +452,7 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
Collections.reverse(inheritParents);
for (Claim current : inheritParents) {
GDClaim currentClaim = (GDClaim) current;
for (Map.Entry<Set<Context>, Map<String, String>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
for (Map.Entry<Set<Context>, Map<String, List<String>>> mapEntry : PermissionUtil.getInstance().getPermanentOptions(this.subject).entrySet()) {
final Set<Context> contextSet = mapEntry.getKey();
if (contextSet.contains(currentClaim.getContext())) {
inheritPermissionMap.put(mapEntry.getKey(), new ClaimClickData(currentClaim, mapEntry.getValue()));
@ -518,10 +518,10 @@ protected void showOptionPermissions(GDPermissionUser src, GDClaim claim, MenuTy
paginationList.sendTo(player, activePage);
}
private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> filteredContextMap, Set<Context> contexts, MenuType type, Map<String, String> permissions) {
private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> filteredContextMap, Set<Context> contexts, MenuType type, Map<String, List<String>> permissions) {
final Player player = src.getOnlinePlayer();
final GDPlayerData playerData = src.getInternalPlayerData();
for (Map.Entry<String, String> permissionEntry : permissions.entrySet()) {
for (Map.Entry<String, List<String>> permissionEntry : permissions.entrySet()) {
final Option option = OptionRegistryModule.getInstance().getById(permissionEntry.getKey()).orElse(null);
if (option == null) {
continue;
@ -544,10 +544,21 @@ private void addFilteredContexts(GDPermissionUser src, Map<String, OptionData> f
}
}
final OptionData optionData = filteredContextMap.get(permissionEntry.getKey());
String optionValue = permissionEntry.getValue().get(0);
if (option.multiValued()) {
optionValue = "";
for (String entry : permissionEntry.getValue()) {
if (optionValue.isEmpty()) {
optionValue += entry;
} else {
optionValue = optionValue + "\\|" + entry;
}
}
}
if (optionData != null) {
optionData.addContexts(option, permissionEntry.getValue(), type, contexts);
optionData.addContexts(option, optionValue, type, contexts);
} else {
filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, permissionEntry.getValue(), type, contexts));
filteredContextMap.put(permissionEntry.getKey(), new OptionData(option, optionValue, type, contexts));
}
}
}

View File

@ -88,6 +88,13 @@ public void execute(Player player, int radius, @Optional String type) {
return;
}
final int radiusLimit = GriefDefenderPlugin.getGlobalConfig().getConfig().claim.claimCreateRadiusLimit;
if (radius > radiusLimit) {
GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_RESULT,
ImmutableMap.of("reason", "Radius exceeds limit of " + radiusLimit + ".")));
return;
}
final Vector3i lesserBoundary = new Vector3i(
location.getBlockX() - radius,
minClaimLevel,

View File

@ -33,6 +33,8 @@
import co.aikar.commands.annotation.Optional;
import co.aikar.commands.annotation.Subcommand;
import co.aikar.commands.annotation.Syntax;
import com.flowpowered.math.vector.Vector3i;
import com.google.common.collect.ImmutableMap;
import com.griefdefender.GDPlayerData;
import com.griefdefender.GriefDefenderPlugin;
@ -45,6 +47,7 @@
import com.griefdefender.claim.GDClaimManager;
import com.griefdefender.configuration.MessageStorage;
import com.griefdefender.internal.pagination.PaginationList;
import com.griefdefender.internal.util.VecHelper;
import com.griefdefender.permission.GDPermissionUser;
import com.griefdefender.permission.GDPermissions;
import com.griefdefender.text.action.GDCallbackHolder;
@ -61,6 +64,8 @@
import net.kyori.text.format.TextColor;
import net.kyori.text.format.TextDecoration;
import net.kyori.text.serializer.plain.PlainComponentSerializer;
import org.spongepowered.api.block.tileentity.Sign;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.economy.account.Account;
@ -127,8 +132,13 @@ public void execute(Player player, @Optional String[] args) {
}
return;
}
EconomyUtil.getInstance().rentCancelConfirmation(player, claim, null);
Sign sign = null;
final Vector3i signPos = claim.getEconomyData().getRentSignPosition();
if (signPos != null) {
sign = SignUtil.getSign(VecHelper.toLocation(player.getWorld(), signPos));
}
EconomyUtil.getInstance().rentCancelConfirmation(player, claim, sign);
return;
} else if (subCommand.equalsIgnoreCase("clearbalance")) {
if (args.length != 2) {

View File

@ -45,18 +45,15 @@
import com.griefdefender.permission.GDPermissionManager;
import com.griefdefender.permission.GDPermissions;
import com.griefdefender.permission.option.GDOptions;
import com.griefdefender.util.PlayerUtil;
import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.ThreadLocalRandom;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.living.player.gamemode.GameMode;
import org.spongepowered.api.entity.living.player.gamemode.GameModes;
import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;
@CommandAlias("%griefdefender")
@CommandPermission(GDPermissions.COMMAND_TRAPPED)
@ -111,34 +108,7 @@ public void execute(Player player) {
return;
}
final int minClaimLevel = claim.getOwnerMinClaimLevel();
double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65);
if (claim.isCuboid()) {
claimY = claim.lesserBoundaryCorner.getY();
}
final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1);
final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1);
Location<World> claimCorner = null;
switch (randomCorner) {
case 1: // SW
claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 2: // NW
claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random);
case 3: // SE
claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 4: // NE
claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random);
}
final Location<World> safeLocation = Sponge.getTeleportHelper().getSafeLocation(claimCorner, 64, 16, 2).orElse(null);
if (safeLocation != null) {
playerData.teleportLocation = safeLocation;
} else {
// If no safe location was found, fall back to corner
playerData.teleportLocation = claimCorner;
}
playerData.teleportLocation = PlayerUtil.getInstance().getSafeClaimLocation(claim);
int teleportDelay = 0;
if (GDOptions.PLAYER_TELEPORT_DELAY) {
teleportDelay = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.PLAYER_TELEPORT_DELAY, claim);

View File

@ -50,6 +50,8 @@ public class ClaimCategory extends ConfigCategory {
+ "\nNote: If in economy-mode, use setting 'use-claim-block-task' under economy category."
+ "\nNote: To configure amount accrued, see 'blocks-accrued-per-hour' option at https://github.com/bloodmc/GriefDefender/wiki/Options-(Meta)#global-options")
public boolean claimBlockTask = true;
@Setting(value = "claim-create-radius-limit", comment = "The radius limit for the /claimcreate command. (Default: 256)")
public int claimCreateRadiusLimit = 256;
@Setting(value = "worldedit-schematics", comment = "Whether to use WorldEdit for schematics. Default: false"
+ "\nNote: If you were using schematics in older GD/GP versions and want old schematics to work then you should keep this setting disabled.")
public boolean useWorldEditSchematics = false;

View File

@ -25,7 +25,11 @@
package com.griefdefender.configuration.category;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
@ -36,9 +40,22 @@ public class ModCategory {
@Setting(value = "block-id-convert-list", comment = "Used to override generic block id's to their actual id during TE and item usage if available. Add the target block id to list if you want to force a conversion when detected."
+ "\nNote: This is useful for mods such as IC2 which uses the generic id 'ic2:te' for its multi-block.")
public List<String> blockIdConvertList = new ArrayList<>();
@Setting(value = "tile-id-nbt-map", comment = "Used to override generic tileentity id's to their actual id during TE usage. Add the target TE id as key and NBT key where ID is stored as value."
+ "\nNote: This is useful for mods such as Gregtech which uses the generic id 'gregtech:machine' for its TE and NBT key 'MetaId' to store the actual ID.")
public Map<String, String> tileIdNbtMap = new HashMap<>();
@Setting(value = "item-interact-force-list", comment = "Used to force interact-item flag checks when a player left/right-clicks with an item in hand."
+ "\nBy default, GD will only check interact-item flags when the item is used."
+ "\nTo force an item, add the item 'modid:name' to list."
+ "\nNote: Names support wildcards '?' and '*' by using Apache's wildcard matcher."
+ "\nThe wildcard '?' represents a single character."
+ "\nThe wildcard '*' represents zero or more characters."
+ "\nFor more information on usage, see https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String,%20java.lang.String)")
public List<String> itemInteractForceList = new ArrayList<>();
public ModCategory() {
this.blockIdConvertList.add("gregtech:machine");
this.blockIdConvertList.add("ic2:te");
this.tileIdNbtMap.put("gregtech:machine", "MetaId");
}
public boolean convertBlockId(String id) {
@ -47,4 +64,17 @@ public boolean convertBlockId(String id) {
}
return false;
}
public String getNbtKey(String tileId) {
return this.tileIdNbtMap.get(tileId);
}
public boolean forceItemInteract(String id) {
for (String str : this.itemInteractForceList) {
if (FilenameUtils.wildcardMatch(id, str)) {
return true;
}
}
return false;
}
}

View File

@ -86,8 +86,8 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
Set<Context> flagContexts = new HashSet<>();
for (String part : parts) {
String[] split = part.split("=");
String key = split[0];
String value = split[1];
String key = split[0].toLowerCase();
String value = split[1].toLowerCase();
// Handle linked Flag
if (key.equalsIgnoreCase("flag")) {
final String flagName = value;
@ -108,11 +108,6 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
}
flagContexts.add(new Context(key, value));
break;
case "used_item":
case "item_name":
case ContextKeys.STATE:
flagContexts.add(new Context(key, value));
break;
case "server":
case "world":
case ContextKeys.CLAIM_DEFAULT:
@ -120,7 +115,8 @@ public FlagDefinition deserialize(TypeToken<?> type, ConfigurationNode node) thr
// gd_claim contexts should always be set at the definition level
throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.\nContext '" + key + "' can only be used for the definition.");
default:
throw new ObjectMappingException("Invalid context '" + key + "' with value '" + value + "'.");
flagContexts.add(new Context(key, value));
break;
}
}
}

View File

@ -217,12 +217,6 @@ public void onBlockPre(ChangeBlockEvent.Pre event) {
return;
}
if (source instanceof Player && !hasFakePlayer && tileEntity == null) {
// handle in normal events
GDTimings.BLOCK_PRE_EVENT.stopTimingIfSync();
return;
}
if (sourceLocation != null) {
GDPlayerData playerData = null;
if (user != null) {
@ -790,29 +784,6 @@ public void onBlockPlace(ChangeBlockEvent.Place event) {
return;
}
// handle ice form/melt
if (event.getTransactions().size() == 1) {
final BlockSnapshot sourceBlock = event.getTransactions().get(0).getOriginal();
final BlockSnapshot targetBlock = event.getTransactions().get(0).getFinal();
if (NMSUtil.getInstance().isBlockWater(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockIce(targetBlock.getState().getType())) {
final Location<World> loc = targetBlock.getLocation().get();
final GDClaim claim = this.dataStore.getClaimAt(loc);
final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, (Player) null, true);
if (result == Tristate.FALSE) {
event.setCancelled(true);
}
return;
} else if (NMSUtil.getInstance().isBlockIce(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockWater(targetBlock.getState().getType())) {
final Location<World> loc = targetBlock.getLocation().get();
final GDClaim claim = this.dataStore.getClaimAt(loc);
final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, (Player) null, true);
if (result == Tristate.FALSE) {
event.setCancelled(true);
}
return;
}
}
ItemStackSnapshot itemSnapshot = event.getContext().get(EventContextKeys.USED_ITEM).orElse(null);
if (itemSnapshot != null) {
if (itemSnapshot.getType().equals(ItemTypes.BUCKET)) {
@ -824,6 +795,29 @@ public void onBlockPlace(ChangeBlockEvent.Place event) {
GDClaim sourceClaim = null;
LocatableBlock locatable = null;
final User user = CauseContextHelper.getEventUser(event);
// handle ice form/melt
if (!(event.getCause().root() instanceof Entity) && event.getTransactions().size() == 1) {
final BlockSnapshot sourceBlock = event.getTransactions().get(0).getOriginal();
final BlockSnapshot targetBlock = event.getTransactions().get(0).getFinal();
if (NMSUtil.getInstance().isBlockWater(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockIce(targetBlock.getState().getType())) {
final Location<World> loc = targetBlock.getLocation().get();
final GDClaim claim = this.dataStore.getClaimAt(loc);
final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, user, true);
if (result == Tristate.FALSE) {
event.setCancelled(true);
}
return;
} else if (NMSUtil.getInstance().isBlockIce(sourceBlock.getState().getType()) && NMSUtil.getInstance().isBlockWater(targetBlock.getState().getType())) {
final Location<World> loc = targetBlock.getLocation().get();
final GDClaim claim = this.dataStore.getClaimAt(loc);
final Tristate result = GDPermissionManager.getInstance().getFinalPermission(event, loc, claim, Flags.BLOCK_MODIFY, sourceBlock, targetBlock, user, true);
if (result == Tristate.FALSE) {
event.setCancelled(true);
}
return;
}
}
if (source instanceof LocatableBlock) {
locatable = (LocatableBlock) source;
if (user != null && user instanceof Player) {

View File

@ -35,11 +35,15 @@
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.Item;
import org.spongepowered.api.entity.Transform;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.living.player.gamemode.GameMode;
import org.spongepowered.api.entity.living.player.gamemode.GameModes;
import org.spongepowered.api.entity.projectile.Projectile;
import org.spongepowered.api.event.Cancellable;
import org.spongepowered.api.event.Event;
import org.spongepowered.api.event.entity.MoveEntityEvent;
import org.spongepowered.api.event.entity.living.humanoid.player.RespawnPlayerEvent;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.world.Location;
@ -103,11 +107,15 @@ public CommonEntityEventHandler() {
this.storage = GriefDefenderPlugin.getInstance().dataStore;
}
public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation, Location<World> toLocation, Entity targetEntity){
public boolean onEntityMove(Event event, Location<World> fromLocation, Location<World> toLocation, Entity targetEntity){
if (targetEntity instanceof Item || targetEntity instanceof Projectile) {
return true;
}
if ((!GDFlags.ENTER_CLAIM && !GDFlags.EXIT_CLAIM) || fromLocation.getBlockPosition().equals(toLocation.getBlockPosition())) {
return true;
}
Player player = null;
GDPermissionUser user = null;
boolean onMount = false;
@ -127,9 +135,6 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
}
}
}
if ((!GDFlags.ENTER_CLAIM && !GDFlags.EXIT_CLAIM) || fromLocation.getBlockPosition().equals(toLocation.getBlockPosition())) {
return true;
}
if (user != null) {
if (user.getInternalPlayerData().trappedRequest) {
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_TRAPPED_CANCEL_MOVE);
@ -137,6 +142,11 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
user.getInternalPlayerData().teleportDelay = 0;
}
}
if (player != null && user != null) {
if (event instanceof MoveEntityEvent.Teleport && user.getInternalPlayerData().runningPlayerCommands) {
return true;
}
}
World world = targetEntity.getWorld();
if (!GriefDefenderPlugin.getInstance().claimsEnabledForWorld(world.getUniqueId())) {
@ -168,27 +178,32 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
// enter
if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, toLocation, toClaim, Flags.ENTER_CLAIM, targetEntity, targetEntity, user) == Tristate.FALSE) {
gpEvent.cancelled(true);
if (event != null) {
event.setCancelled(true);
if (event != null && event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
}
// exit
if (GDFlags.EXIT_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, fromLocation, fromClaim, Flags.EXIT_CLAIM, targetEntity, targetEntity, user) == Tristate.FALSE) {
gpEvent.cancelled(true);
if (event != null) {
event.setCancelled(true);
if (event != null && event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
}
GriefDefender.getEventManager().post(gpEvent);
if (gpEvent.cancelled()) {
if (event != null) {
event.setCancelled(true);
if (event != null && event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) {
targetEntity.remove();
}
if (event instanceof RespawnPlayerEvent) {
// Respawn player in safe location in source claim
((RespawnPlayerEvent) event).setToTransform(new Transform<World>(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim)));
}
GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync();
return false;
}
}
@ -237,10 +252,11 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
GDBorderClaimEvent gpEvent = new GDBorderClaimEvent(targetEntity, fromClaim, toClaim);
if (user != null && toClaim.isUserTrusted(user, TrustTypes.ACCESSOR)) {
final GDPlayerData playerData = user.getInternalPlayerData();
GriefDefender.getEventManager().post(gpEvent);
if (gpEvent.cancelled()) {
event.setCancelled(true);
if (event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) {
targetEntity.remove();
}
@ -248,6 +264,11 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
if (player != null && cancelMessage != null) {
TextAdapter.sendComponent(player, cancelMessage);
}
if (event instanceof RespawnPlayerEvent) {
// Respawn player in safe location in source claim
((RespawnPlayerEvent) event).setToTransform(new Transform<World>(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim)));
}
GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync();
return false;
} else {
final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix;
@ -294,8 +315,14 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
this.checkPlayerGodMode(user, fromClaim, toClaim);
this.checkPlayerWalkSpeed(user, fromClaim, toClaim);
this.checkPlayerWeather(user, fromClaim, toClaim, false);
this.runPlayerCommands(fromClaim, user, false);
this.runPlayerCommands(toClaim, user, true);
// Exit command - Don't run if to claim is child of from claim
if (!toClaim.isParent(fromClaim)) {
this.runPlayerCommands(fromClaim, user, false);
}
// Enter command - Don't run if to claim is parent of from claim
if (!fromClaim.isParent(toClaim)) {
this.runPlayerCommands(toClaim, user, true);
}
}
}
@ -335,10 +362,16 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
TextAdapter.sendComponent(player, cancelMessage);
}
event.setCancelled(true);
if (event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
}
if (!(targetEntity instanceof Player) && EntityUtils.getOwnerUniqueId(targetEntity) == null) {
targetEntity.remove();
}
if (event instanceof RespawnPlayerEvent) {
// Respawn player in safe location in source claim
((RespawnPlayerEvent) event).setToTransform(new Transform<World>(PlayerUtil.getInstance().getSafeClaimLocation(fromClaim)));
}
GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync();
return false;
}
@ -346,20 +379,22 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
if (player != null) {
if (GDFlags.ENTITY_RIDING && onMount) {
if (GDPermissionManager.getInstance().getFinalPermission(event, targetEntity.getLocation(), toClaim, Flags.ENTITY_RIDING, player, targetEntity, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
event.setCancelled(true);
Location<World> safeLocation = Sponge.getGame().getTeleportHelper()
.getSafeLocation(fromLocation, 80, 0)
.orElseGet(() -> Sponge.getGame().getTeleportHelper()
.getSafeLocation(fromLocation, 80, 6)
.orElse(world.getSpawnLocation())
);
targetEntity.getBaseVehicle().clearPassengers();
player.setTransform(player.getTransform().setLocation(safeLocation));
GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync();
return false;
if (event instanceof Cancellable) {
((Cancellable) event).setCancelled(true);
Location<World> safeLocation = Sponge.getGame().getTeleportHelper()
.getSafeLocation(fromLocation, 80, 0)
.orElseGet(() -> Sponge.getGame().getTeleportHelper()
.getSafeLocation(fromLocation, 80, 6)
.orElse(world.getSpawnLocation())
);
targetEntity.getBaseVehicle().clearPassengers();
player.setTransform(player.getTransform().setLocation(safeLocation));
GDTimings.ENTITY_MOVE_EVENT.stopTimingIfSync();
return false;
}
}
}
final GDPlayerData playerData = user.getInternalPlayerData();
final boolean showGpPrefix = GriefDefenderPlugin.getGlobalConfig().getConfig().message.enterExitShowGdPrefix;
Component welcomeMessage = gpEvent.getEnterMessage().orElse(null);
if (welcomeMessage != null && !welcomeMessage.equals(TextComponent.empty()) && !fromClaim.isParent(toClaim)) {
@ -404,8 +439,14 @@ public boolean onEntityMove(MoveEntityEvent event, Location<World> fromLocation,
this.checkPlayerGodMode(user, fromClaim, toClaim);
this.checkPlayerWalkSpeed(user, fromClaim, toClaim);
this.checkPlayerWeather(user, fromClaim, toClaim, false);
this.runPlayerCommands(fromClaim, user, false);
this.runPlayerCommands(toClaim, user, true);
// Exit command - Don't run if to claim is child of from claim
if (!toClaim.isParent(fromClaim)) {
this.runPlayerCommands(fromClaim, user, false);
}
// Enter command - Don't run if to claim is parent of from claim
if (!fromClaim.isParent(toClaim)) {
this.runPlayerCommands(toClaim, user, true);
}
}
}
}
@ -428,7 +469,11 @@ private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean ent
if (!GDOptions.PLAYER_COMMAND_ENTER && !GDOptions.PLAYER_COMMAND_EXIT) {
return;
}
if (user.getInternalPlayerData().runningPlayerCommands) {
return;
}
user.getInternalPlayerData().runningPlayerCommands = true;
List<String> rawCommandList = new ArrayList<>();
Set<Context> contexts = new HashSet<>();
if (player.getUniqueId().equals(claim.getOwnerUniqueId())) {
@ -461,6 +506,7 @@ private void runPlayerCommands(GDClaim claim, GDPermissionUser user, boolean ent
if (rawCommandList != null) {
runCommand(claim, player, rawCommandList, false);
}
user.getInternalPlayerData().runningPlayerCommands = false;
}
private void runCommand(GDClaim claim, Player player, List<String> rawCommandList, boolean runAsConsole) {
@ -475,6 +521,10 @@ private void runCommand(GDClaim claim, Player player, List<String> rawCommandLis
String args = command.replace(baseCommand + " ", "");
baseCommand = baseCommand.replace("\\", "").replace("/", "");
args = args.replace("%player%", player.getName());
// Handle WorldEdit commands
if (command.startsWith("//") && !baseCommand.startsWith("/")) {
baseCommand = "/" + baseCommand;
}
if (runAsConsole) {
CommandHelper.executeCommand(Sponge.getServer().getConsole(), baseCommand, args);
} else {

View File

@ -392,6 +392,17 @@ public boolean test(Entity entity) {
}
}
if (user == null) {
final UUID uuid = NMSUtil.getInstance().getEntityOwnerUUID(entity);
if (uuid != null) {
final GDPermissionUser gdUser = PermissionHolderCache.getInstance().getOrCreateUser(uuid);
if (GDPermissionManager.getInstance().getFinalPermission(event, entity.getLocation(), targetClaim, flag, actualSource, entity, gdUser, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
return false;
}
return true;
}
}
if (GDPermissionManager.getInstance().getFinalPermission(event, entity.getLocation(), targetClaim, flag, actualSource, entity, user, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
return false;
}

View File

@ -58,6 +58,8 @@
import com.griefdefender.internal.provider.GDWorldEditProvider;
import com.griefdefender.internal.registry.BlockTypeRegistryModule;
import com.griefdefender.internal.registry.GDBlockType;
import com.griefdefender.internal.registry.GDTileType;
import com.griefdefender.internal.registry.TileEntityTypeRegistryModule;
import com.griefdefender.internal.util.BlockUtil;
import com.griefdefender.internal.util.NMSUtil;
import com.griefdefender.internal.visual.GDClaimVisual;
@ -81,12 +83,14 @@
import net.kyori.text.serializer.gson.GsonComponentSerializer;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockSnapshot;
import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.block.tileentity.Sign;
import org.spongepowered.api.block.tileentity.TileEntity;
import org.spongepowered.api.command.CommandMapping;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.data.property.block.MatterProperty;
import org.spongepowered.api.data.type.HandType;
import org.spongepowered.api.data.type.HandTypes;
import org.spongepowered.api.entity.Entity;
@ -135,8 +139,6 @@
import org.spongepowered.api.text.channel.type.FixedMessageChannel;
import org.spongepowered.api.text.format.TextColors;
import org.spongepowered.api.text.serializer.TextSerializers;
import org.spongepowered.api.util.blockray.BlockRay;
import org.spongepowered.api.util.blockray.BlockRayHit;
import org.spongepowered.api.world.Chunk;
import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;
@ -481,6 +483,9 @@ public void onPlayerJoin(ClientConnectionEvent.Join event) {
if (claim.isInTown()) {
playerData.inTown = true;
}
if (GDFlags.ENTER_CLAIM && GDPermissionManager.getInstance().getFinalPermission(event, player.getLocation(), claim, Flags.ENTER_CLAIM, player, player, player, true) == Tristate.FALSE) {
player.setLocation(PlayerUtil.getInstance().getSafeClaimLocation(claim));
}
GDTimings.PLAYER_JOIN_EVENT.stopTimingIfSync();
}
@ -573,6 +578,14 @@ public void onPlayerRespawn(RespawnPlayerEvent event) {
final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(event.getTargetEntity().getWorld(), event.getTargetEntity().getUniqueId());
playerData.lastPvpTimestamp = null;
if (playerData.ignoreClaims || event.getTargetEntity().hasPermission(GDPermissions.COMMAND_DELETE_ADMIN_CLAIMS)) {
return;
}
final Location<World> sourceLocation = event.getFromTransform().getLocation();
final Location<World> destination = event.getToTransform().getLocation();
// Handle BorderClaimEvent
CommonEntityEventHandler.getInstance().onEntityMove(event, sourceLocation, destination, event.getTargetEntity());
}
@Listener(order = Order.FIRST, beforeModifications = true)
@ -910,7 +923,7 @@ public void onPlayerPickupItem(ChangeInventoryEvent.Pickup.Pre event, @Root Play
GDPlayerData playerData = this.dataStore.getOrCreatePlayerData(world, player.getUniqueId());
Location<World> location = player.getLocation();
GDClaim claim = this.dataStore.getClaimAtPlayer(playerData, location);
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, Flags.ITEM_PICKUP, player, event.getTargetEntity(), player, true) == Tristate.FALSE) {
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, Flags.ITEM_PICKUP, player, event.getTargetEntity(), player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
event.setCancelled(true);
}
@ -1032,7 +1045,7 @@ public void onPlayerInteractBlockPrimary(InteractBlockEvent.Primary.MainHand eve
final HandType handType = event.getHandType();
final ItemStack itemInHand = player.getItemInHand(handType).orElse(ItemStack.empty());
if (handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) {
if (PlayerUtil.getInstance().forceItemInteract(itemInHand.getType(), player) && handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) {
event.setCancelled(true);
return;
}
@ -1126,7 +1139,7 @@ public void onPlayerInteractBlockSecondary(InteractBlockEvent.Secondary event) {
final HandType handType = event.getHandType();
final ItemStack itemInHand = player.getItemInHand(handType).orElse(ItemStack.empty());
if (handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) {
if (PlayerUtil.getInstance().forceItemInteract(itemInHand.getType(), player) && handleItemInteract(event, player, player.getWorld(), itemInHand).isCancelled()) {
event.setCancelled(true);
return;
}
@ -1246,11 +1259,10 @@ public InteractEvent handleItemInteract(HandInteractEvent event, Player player,
final BlockSnapshot blockSnapshot = context.get(EventContextKeys.BLOCK_HIT).orElse(BlockSnapshot.NONE);
final Vector3d interactPoint = event.getInteractionPoint().orElse(null);
final Entity entity = context.get(EventContextKeys.ENTITY_HIT).orElse(null);
final Location<World> location = entity != null ? entity.getLocation()
Location<World> location = entity != null ? entity.getLocation()
: blockSnapshot != BlockSnapshot.NONE ? blockSnapshot.getLocation().get()
: interactPoint != null ? new Location<World>(world, interactPoint)
: player.getLocation();
final GDClaim claim = this.dataStore.getClaimAt(location);
: null;
final Flag flag = primaryEvent ? Flags.INTERACT_ITEM_PRIMARY : Flags.INTERACT_ITEM_SECONDARY;
@ -1267,6 +1279,23 @@ public InteractEvent handleItemInteract(HandInteractEvent event, Player player,
return event;
}
final boolean isItemBucket = !itemInHand.isEmpty() && itemInHand.getType().equals(ItemTypes.BUCKET);
BlockState blockHit = blockSnapshot != BlockSnapshot.NONE ? blockSnapshot.getState() : null;
if (location == null) {
if (isItemBucket) {
final int distance = NMSUtil.getInstance().getPlayerBlockReachDistance(player);
location = BlockUtil.getInstance().getTargetBlock(player, playerData, distance, true).orElse(null);
if (location != null) {
blockHit = location.getBlock();
} else {
location = player.getLocation();
}
} else {
location = player.getLocation();
}
}
final GDClaim claim = this.dataStore.getClaimAt(location);
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, player, itemInHand, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM,
ImmutableMap.of(
@ -1282,12 +1311,19 @@ public InteractEvent handleItemInteract(HandInteractEvent event, Player player,
return event;
}
if (blockSnapshot != null && blockSnapshot.getState().getType() != BlockTypes.AIR) {
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, itemInHand, blockSnapshot, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
if (blockHit != null && blockHit.getType() != BlockTypes.AIR) {
TrustType trustType = TrustTypes.ACCESSOR;
if (isItemBucket) {
final MatterProperty matterProperty = blockHit.getProperty(MatterProperty.class).orElse(null);
if (matterProperty != null && matterProperty.getValue() == MatterProperty.Matter.LIQUID) {
trustType = TrustTypes.BUILDER;
}
}
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim, flag, itemInHand, blockHit, player, trustType, true) == Tristate.FALSE) {
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK,
ImmutableMap.of(
"item", itemInHand.getType().getId(),
"block", blockSnapshot.getState().getType().getId()));
"block", blockHit.getType().getId()));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
if (event instanceof InteractBlockEvent.Secondary) {
((InteractBlockEvent.Secondary) event).setUseItemResult(SpongeUtil.getSpongeTristate(Tristate.FALSE));
@ -1298,11 +1334,11 @@ public InteractEvent handleItemInteract(HandInteractEvent event, Player player,
return event;
}
if (!itemInHand.isEmpty() && itemInHand.getType().equals(ItemTypes.BUCKET)) {
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim,Flags.INTERACT_BLOCK_SECONDARY, itemInHand, blockSnapshot, player, TrustTypes.ACCESSOR, true) == Tristate.FALSE) {
if (GDPermissionManager.getInstance().getFinalPermission(event, location, claim,Flags.INTERACT_BLOCK_SECONDARY, itemInHand, blockHit, player, trustType, true) == Tristate.FALSE) {
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK,
ImmutableMap.of(
"item", itemInHand.getType().getId(),
"block", blockSnapshot.getState().getType().getId()));
"block", blockHit.getType().getId()));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
event.setCancelled(true);
lastInteractItemCancelled = true;
@ -2036,16 +2072,30 @@ private void sendInteractBlockDenyMessage(ItemStack playerItem, BlockSnapshot bl
if (playerData != null && claim.getData() != null && claim.getData().isExpired() /*&& GriefDefenderPlugin.getActiveConfig(player.getWorld().getProperties()).getConfig().claim.bankTaxSystem*/) {
playerData.sendTaxExpireMessage(player, claim);
} else if (playerItem == null || playerItem == ItemTypes.NONE || playerItem.isEmpty()) {
String blockId = blockSnapshot.getState().getType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(blockId)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot.getLocation().orElse(null));
if (tileType != null) {
blockId = tileType.getId();
}
}
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_BLOCK,
ImmutableMap.of(
"player", claim.getOwnerName(),
"block", blockSnapshot.getState().getType().getId()));
"block", blockId));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
} else {
String blockId = blockSnapshot.getState().getType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(blockId)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot.getLocation().orElse(null));
if (tileType != null) {
blockId = tileType.getId();
}
}
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.PERMISSION_INTERACT_ITEM_BLOCK,
ImmutableMap.of(
"item", playerItem.getType().getId(),
"block", blockSnapshot.getState().getType().getId()));
"block", blockId));
GriefDefenderPlugin.sendClaimDenyMessage(claim, player, message);
}
if (handType == HandTypes.MAIN_HAND) {

View File

@ -100,6 +100,7 @@
import org.spongepowered.api.event.block.NotifyNeighborBlockEvent;
import org.spongepowered.api.event.cause.EventContextKey;
import org.spongepowered.api.event.cause.EventContextKeys;
import org.spongepowered.api.event.cause.entity.damage.DamageTypes;
import org.spongepowered.api.event.cause.entity.damage.source.DamageSource;
import org.spongepowered.api.event.cause.entity.damage.source.EntityDamageSource;
import org.spongepowered.api.item.ItemType;
@ -265,10 +266,18 @@ public Tristate getFinalPermission(Event event, Location<World> location, Set<Co
if (source instanceof Player && !isFakePlayer && flag != Flags.COLLIDE_BLOCK && flag != Flags.COLLIDE_ENTITY) {
this.addPlayerContexts((Player) source, contexts);
}
if (!(source instanceof Player) && target instanceof Player && user != null && user.getOnlinePlayer() != null && !user.getUniqueId().equals(((Player) target).getUniqueId())) {
// add source player context
// this allows users to block all pvp actions when direct source isn't a player
contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer())));
if (!(source instanceof Player) && user != null && user.getOnlinePlayer() != null) {
boolean addPlayerContext = false;
if (!(target instanceof Player)) {
addPlayerContext = true;
} else if (!user.getUniqueId().equals(((Player) target).getUniqueId())) {
addPlayerContext = true;
}
if (addPlayerContext) {
// add source player context
// this allows users to block all pvp actions when direct source isn't a player
contexts.add(new Context(ContextKeys.SOURCE, this.getPermissionIdentifier(user.getOnlinePlayer())));
}
}
final Set<Context> sourceContexts = this.getPermissionContexts((GDClaim) claim, source, true);
@ -709,7 +718,17 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
if (obj != null) {
if (obj instanceof Item) {
final String id = ((Item) obj).getItemType().getId();
final Item item = ((Item) obj);
String id = item.getItemType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final int index = id.indexOf(":");
final String modId = id.substring(0, index);
id = modId + ":" + NMSUtil.getInstance().getItemName(item);
}
final String itemMeta = NMSUtil.getInstance().getItemStackMeta((Item) obj);
if (itemMeta != null) {
contexts.add(new Context("meta", itemMeta));
}
return populateEventSourceTargetContext(contexts, id, isSource);
} else if (obj instanceof Entity) {
final Entity targetEntity = (Entity) obj;
@ -751,29 +770,34 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
} else if (obj instanceof BlockSnapshot) {
final BlockSnapshot blockSnapshot = (BlockSnapshot) obj;
final BlockState blockstate = blockSnapshot.getState();
final Location<World> location = blockSnapshot.getLocation().orElse(null);
String id = blockstate.getType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(blockSnapshot);
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(location);
if (tileType != null) {
id = tileType.getId();
if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) {
return null;
}
return this.populateEventSourceTargetContext(contexts, id, isSource);
}
}
return this.getPermissionContexts(claim, blockstate, isSource);
} else if (obj instanceof BlockState) {
final BlockState blockstate = (BlockState) obj;
if (this.isObjectIdBanned(claim, blockstate.getType().getId(), BanType.BLOCK)) {
return null;
}
final String id = blockstate.getType().getId();
this.addBlockContexts(contexts, blockstate.getType(), isSource);
this.addBlockPropertyContexts(contexts, blockstate);
if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) {
return null;
}
this.addBlockContexts(contexts, blockstate.getType(), isSource);
this.addBlockPropertyContexts(contexts, blockstate);
return populateEventSourceTargetContext(contexts, id, isSource);
} else if (obj instanceof BlockState) {
final BlockState blockstate = (BlockState) obj;
String id = blockstate.getType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
final GDTileType tileType = TileEntityTypeRegistryModule.getInstance().getByBlock(this.eventLocation);
if (tileType != null) {
id = tileType.getId();
}
}
if (this.isObjectIdBanned(claim, id, BanType.BLOCK)) {
return null;
}
this.addBlockContexts(contexts, blockstate.getType(), isSource);
this.addBlockPropertyContexts(contexts, blockstate);
return populateEventSourceTargetContext(contexts, id, isSource);
} else if (obj instanceof LocatableBlock) {
final LocatableBlock locatableBlock = (LocatableBlock) obj;
@ -850,7 +874,9 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
String id = itemstack.getType().getId();
if (GriefDefenderPlugin.getGlobalConfig().getConfig().mod.convertBlockId(id)) {
id = NMSUtil.getInstance().getItemName(itemstack);
final int index = id.indexOf(":");
final String modId = id.substring(0, index);
id = modId + ":" + NMSUtil.getInstance().getItemName(itemstack);
}
if (this.isObjectIdBanned(claim, id, BanType.ITEM)) {
return null;
@ -900,6 +926,9 @@ public Set<Context> getPermissionContexts(GDClaim claim, Object obj, boolean isS
} else if (obj instanceof DamageSource) {
final DamageSource damageSource = (DamageSource) obj;
String id = damageSource.getType().getId();
if (damageSource.getType() == DamageTypes.CUSTOM) {
id = NMSUtil.getInstance().getDamageSourceId(damageSource);
}
if (!id.contains(":")) {
id = "minecraft:" + id;
}

View File

@ -387,8 +387,8 @@ private void clearPermission(UUID claimUniqueId, GDPermissionHolder holder) {
}
}
}
Map<Set<Context>, Map<String, String>> optionMap = this.getPermanentOptions(holder);
for (Entry<Set<Context>, Map<String, String>> mapEntry : optionMap.entrySet()) {
Map<Set<Context>, Map<String, List<String>>> optionMap = this.getPermanentOptions(holder);
for (Entry<Set<Context>, Map<String, List<String>>> mapEntry : optionMap.entrySet()) {
for (Context context : mapEntry.getKey()) {
if (context.getKey().equalsIgnoreCase("gd_claim") && context.getValue().equalsIgnoreCase(claimUniqueId.toString())) {
this.clearPermissions(holder, mapEntry.getKey());
@ -435,7 +435,7 @@ public Map<String, Boolean> getPermissions(GDPermissionHolder holder, Set<Contex
return cachedData.getPermissionMap();
}
public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
public Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
ImmutableContextSet set = this.getLPContexts(contexts).immutableCopy();
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
@ -445,9 +445,9 @@ public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> co
final QueryOptions query = QueryOptions.builder(QueryMode.CONTEXTUAL).option(DataQueryOrderFunction.KEY, DEFAULT_DATA_QUERY_ORDER).context(set).build();
CachedMetaData cachedData = permissionHolder.getCachedData().getMetaData(query);
// TODO
Map<String, String> metaMap = new HashMap<>();
Map<String, List<String>> metaMap = new HashMap<>();
for (Map.Entry<String, List<String>> mapEntry : cachedData.getMeta().entrySet()) {
metaMap.put(mapEntry.getKey(), mapEntry.getValue().get(0));
metaMap.put(mapEntry.getKey(), mapEntry.getValue());
}
return metaMap;
}
@ -538,14 +538,14 @@ public Map<Set<Context>, Map<String, Boolean>> getTransientPermissions(GDPermiss
return transientPermissionMap;
}
public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.data().toCollection();
Map<Set<Context>, Map<String, String>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, String>>(CONTEXT_COMPARATOR);
Map<Set<Context>, Map<String, List<String>>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, List<String>>>(CONTEXT_COMPARATOR);
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
@ -553,26 +553,35 @@ public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHo
final MetaNode metaNode = (MetaNode) node;
final Set<Context> contexts = getGPContexts(node.getContexts());
Map<String, String> metaEntry = permanentPermissionMap.get(contexts);
Map<String, List<String>> metaEntry = permanentPermissionMap.get(contexts);
if (metaEntry == null) {
metaEntry = new HashMap<>();
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
final List<String> values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
permanentPermissionMap.put(contexts, metaEntry);
} else {
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
List<String> values = metaEntry.get(metaNode.getMetaKey());
if (values == null) {
values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
} else {
values.add(metaNode.getMetaValue());
}
}
}
return permanentPermissionMap;
}
public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.transientData().toCollection();
Map<Set<Context>, Map<String, String>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, String>>(CONTEXT_COMPARATOR);
Map<Set<Context>, Map<String, List<String>>> permanentPermissionMap = new TreeMap<Set<Context>, Map<String, List<String>>>(CONTEXT_COMPARATOR);
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
@ -580,64 +589,27 @@ public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHo
final MetaNode metaNode = (MetaNode) node;
final Set<Context> contexts = getGPContexts(node.getContexts());
Map<String, String> metaEntry = permanentPermissionMap.get(contexts);
Map<String, List<String>> metaEntry = permanentPermissionMap.get(contexts);
if (metaEntry == null) {
metaEntry = new HashMap<>();
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
final List<String> values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
permanentPermissionMap.put(contexts, metaEntry);
} else {
metaEntry.put(metaNode.getMetaKey(), metaNode.getMetaValue());
List<String> values = metaEntry.get(metaNode.getMetaKey());
if (values == null) {
values = new ArrayList<>();
values.add(metaNode.getMetaValue());
metaEntry.put(metaNode.getMetaKey(), values);
} else {
values.add(metaNode.getMetaValue());
}
}
}
return permanentPermissionMap;
}
public Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.data().toCollection();
final Map<String, String> options = new HashMap<>();
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
}
final MetaNode metaNode = (MetaNode) node;
if (contexts == null) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
} else if (getGPContexts(node.getContexts()).containsAll(contexts)) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
}
}
return options;
}
public Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {
return new HashMap<>();
}
final Collection<Node> nodes = permissionHolder.transientData().toCollection();
final Map<String, String> options = new HashMap<>();
for (Node node : nodes) {
if (node.getType() != NodeType.META) {
continue;
}
final MetaNode metaNode = (MetaNode) node;
if (contexts == null) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
} else if (getGPContexts(node.getContexts()).containsAll(contexts)) {
options.put(metaNode.getMetaKey(), metaNode.getMetaValue());
}
}
return options;
}
public Map<Set<Context>, Map<String, Boolean>> getAllPermissions(GDPermissionHolder holder) {
final PermissionHolder permissionHolder = this.getLuckPermsHolder(holder);
if (permissionHolder == null) {

View File

@ -174,7 +174,7 @@ public enum PermissionDataType {
* @param contexts The contexts required
* @return An immutable map of cached options or empty if none.
*/
Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts);
Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts);
/**
* Gets all persisted permissions.
@ -205,7 +205,7 @@ public enum PermissionDataType {
* @param holder The holder
* @return An immutable map of persisted options or empty if none.
*/
Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder);
Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder);
/**
* Gets all transient options with associated contexts of holder.
@ -213,23 +213,7 @@ public enum PermissionDataType {
* @param holder The holder
* @return An immutable map of transient options or empty if none.
*/
Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder);
/**
* Gets all persisted options and associated values of holder.
*
* @param holder The holder
* @return An immutable map of persisted options or empty if none.
*/
Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts);
/**
* Gets all transient options and associated values of holder.
*
* @param holder The holder
* @return An immutable map of transient options or empty if none.
*/
Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts);
Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder);
/**
* Gets all persisted permissions, including inherited nodes, with associated contexts of holder.

View File

@ -433,8 +433,8 @@ private void setDefaultFlags(Set<Context> contexts, Map<String, Boolean> default
}
private void setDefaultOptions(Set<Context> contexts, Map<String, String> defaultOptions) {
final Map<Set<Context>, Map<String, String>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER);
final Map<String, String> options = permanentOptions.get(contexts);
final Map<Set<Context>, Map<String, List<String>>> permanentOptions = PermissionUtil.getInstance().getPermanentOptions(GriefDefenderPlugin.DEFAULT_HOLDER);
final Map<String, List<String>> options = permanentOptions.get(contexts);
GriefDefenderPlugin.getInstance().executor.execute(() -> {
for (Map.Entry<String, String> optionEntry : defaultOptions.entrySet()) {
final Option option = OptionRegistryModule.getInstance().getById(optionEntry.getKey()).orElse(null);
@ -448,7 +448,7 @@ private void setDefaultOptions(Set<Context> contexts, Map<String, String> defaul
// Transient options are checked first so we must ignore setting if a persisted option exists
boolean foundPersisted = false;
if (options != null) {
for (Entry<String, String> mapEntry : options.entrySet()) {
for (Entry<String, List<String>> mapEntry : options.entrySet()) {
if (mapEntry.getKey().equalsIgnoreCase(option.getPermission())) {
foundPersisted = true;
break;

View File

@ -119,6 +119,10 @@ public void loadClaimTemplates() {
}
public void registerWorld(World world) {
if (this.claimWorldManagers.get(world.getUniqueId()) != null) {
return;
}
final UUID worldUniqueId = world.getUniqueId();
DimensionType dimType = world.getProperties().getDimensionType();
String[] parts = dimType.getId().split(":");

View File

@ -66,7 +66,7 @@ public void run() {
if (GriefDefenderPlugin.getInstance().isEconomyModeEnabled()) {
final Account playerAccount = GriefDefenderPlugin.getInstance().economyService.get().getOrCreateAccount(player.getUniqueId()).orElse(null);
if (playerAccount == null) {
return;
continue;
}
final Currency defaultCurrency = GriefDefenderPlugin.getInstance().economyService.get().getDefaultCurrency();
@ -76,7 +76,7 @@ public void run() {
if ((currentTotal + accruedBlocks) > playerData.getMaxAccruedClaimBlocks()) {
playerData.setAccruedClaimBlocks(playerData.getMaxAccruedClaimBlocks());
playerData.lastAfkCheckLocation = player.getLocation();
return;
continue;
}
playerData.setAccruedClaimBlocks(playerData.getAccruedClaimBlocks() + accruedBlocks);

View File

@ -105,9 +105,11 @@ public void run() {
}
final Set<Claim> children = claim.getChildren(true);
for (Claim child : children) {
for (UUID uuid : child.getEconomyData().getRenters()) {
final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(uuid);
handleClaimRent((GDClaim) child, user);
if (child.getEconomyData().isRented()) {
for (UUID uuid : child.getEconomyData().getRenters()) {
final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(uuid);
handleClaimRent((GDClaim) child, user);
}
}
}
}

View File

@ -126,7 +126,7 @@ private void handleClaimTax(GDClaim claim, GDPlayerData playerData, boolean inTo
final double taxBalance = claim.getEconomyData().getTaxBalance();
taxRate = event.getTaxRate();
taxOwed = taxBalance + (claim.getClaimBlocks() * taxRate);
final TransactionResult result = EconomyUtil.withdrawFunds(user.getUniqueId(), taxOwed);
final TransactionResult result = EconomyUtil.getInstance().withdrawTax(claim, user.getUniqueId(), taxOwed);
if (result.getResult() != ResultType.SUCCESS) {
final Instant localNow = Instant.now();
Instant taxPastDueDate = claim.getEconomyData().getTaxPastDueDate();

View File

@ -43,6 +43,7 @@
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.living.Living;
import org.spongepowered.api.entity.living.player.User;
import org.spongepowered.api.entity.projectile.source.ProjectileSource;
import org.spongepowered.api.event.Event;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.EventContext;
@ -75,8 +76,15 @@ public static User getEventUser(Event event) {
if (cause != null) {
user = cause.first(User.class).orElse(null);
if (user == null) {
// check for FakePlayer in context
user = cause.getContext().get(EventContextKeys.FAKE_PLAYER).orElse(null);
// check projectile source
final ProjectileSource projectileSource = cause.getContext().get(EventContextKeys.PROJECTILE_SOURCE).orElse(null);
if (projectileSource != null && projectileSource instanceof User) {
user = (User) projectileSource;
}
if (user == null) {
// check for FakePlayer in context
user = cause.getContext().get(EventContextKeys.FAKE_PLAYER).orElse(null);
}
}
if (user != null && user instanceof Entity && NMSUtil.getInstance().isFakePlayer((Entity) user)) {
fakePlayer = user;

View File

@ -71,6 +71,7 @@
import org.spongepowered.api.entity.living.monster.Monster;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.economy.Currency;
import org.spongepowered.api.service.economy.EconomyService;
import org.spongepowered.api.service.economy.account.Account;
import org.spongepowered.api.service.economy.transaction.ResultType;
import org.spongepowered.api.service.economy.transaction.TransactionResult;
@ -92,6 +93,7 @@
public class EconomyUtil {
private final EconomyService economyService = GriefDefenderPlugin.getInstance().economyService.orElse(null);
private static EconomyUtil instance;
public static EconomyUtil getInstance() {
@ -102,6 +104,35 @@ public static EconomyUtil getInstance() {
instance = new EconomyUtil();
}
public TransactionResult withdrawTax(GDClaim claim, UUID playerUniqueId, double taxOwed) {
if (GriefDefenderPlugin.getGlobalConfig().getConfig().economy.bankSystem) {
final Account bankAccount = this.economyService.getOrCreateAccount(claim.getUniqueId().toString()).orElse(null);
if (bankAccount != null) {
final Currency defaultCurrency = GriefDefenderPlugin.getInstance().economyService.get().getDefaultCurrency();
final double bankBalance = bankAccount.getBalance(defaultCurrency).doubleValue();
if (bankBalance > 0) {
TransactionResult withdrawResponse = null;
if (taxOwed == bankBalance || bankBalance > taxOwed) {
withdrawResponse = bankAccount.withdraw(defaultCurrency, BigDecimal.valueOf(taxOwed), Sponge.getCauseStackManager().getCurrentCause());
if (withdrawResponse.getResult() == ResultType.SUCCESS) {
claim.getData().getEconomyData().addPaymentTransaction(
new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, playerUniqueId, Instant.now(), taxOwed));
return withdrawResponse;
}
} else {
withdrawResponse = bankAccount.withdraw(defaultCurrency, BigDecimal.valueOf(bankBalance), Sponge.getCauseStackManager().getCurrentCause());
if (withdrawResponse.getResult() == ResultType.SUCCESS) {
taxOwed -= bankBalance;
claim.getData().getEconomyData().addPaymentTransaction(
new GDPaymentTransaction(TransactionType.BANK_WITHDRAW, TransactionResultType.SUCCESS, playerUniqueId, Instant.now(), bankBalance));
}
}
}
}
}
return withdrawFunds(playerUniqueId, taxOwed);
}
public void economyCreateClaimConfirmation(Player player, GDPlayerData playerData, int height, Vector3i point1, Vector3i point2, ClaimType claimType, boolean cuboid, Claim parent) {
GDClaim claim = new GDClaim(player.getWorld(), point1, point2, claimType, player.getUniqueId(), cuboid);
claim.parent = (GDClaim) parent;

View File

@ -96,7 +96,7 @@ public void addActiveContexts(Set<Context> contexts, GDPermissionHolder permissi
}
public void addActiveContexts(Set<Context> contexts, GDPermissionHolder permissionHolder, GDPlayerData playerData, Claim claim) {
PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, null, null);
PERMISSION_PROVIDER.addActiveContexts(contexts, permissionHolder, playerData, claim);
}
public boolean containsDefaultContext(Set<Context> contexts) {
@ -139,7 +139,7 @@ public Map<String, Boolean> getPermissions(GDPermissionHolder holder, Set<Contex
return PERMISSION_PROVIDER.getPermissions(holder, contexts);
}
public Map<String, String> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
public Map<String, List<String>> getOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getOptions(holder, contexts);
}
@ -155,22 +155,14 @@ public Map<Set<Context>, Map<String, Boolean>> getTransientPermissions(GDPermiss
return PERMISSION_PROVIDER.getTransientPermissions(holder);
}
public Map<Set<Context>, Map<String, String>> getPermanentOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getPermanentOptions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getPermanentOptions(holder);
}
public Map<Set<Context>, Map<String, String>> getTransientOptions(GDPermissionHolder holder) {
public Map<Set<Context>, Map<String, List<String>>> getTransientOptions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getTransientOptions(holder);
}
public Map<String, String> getPermanentOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getPermanentOptions(holder, contexts);
}
public Map<String, String> getTransientOptions(GDPermissionHolder holder, Set<Context> contexts) {
return PERMISSION_PROVIDER.getTransientOptions(holder, contexts);
}
public Map<Set<Context>, Map<String, Boolean>> getAllPermissions(GDPermissionHolder holder) {
return PERMISSION_PROVIDER.getAllPermissions(holder);
}

View File

@ -41,7 +41,6 @@
import com.griefdefender.api.permission.option.type.WeatherTypes;
import com.griefdefender.cache.PermissionHolderCache;
import com.griefdefender.claim.GDClaim;
import com.griefdefender.internal.util.BlockUtil;
import com.griefdefender.internal.util.NMSUtil;
import com.griefdefender.permission.GDPermissionUser;
import net.kyori.text.Component;
@ -69,6 +68,7 @@
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import javax.annotation.Nullable;
@ -326,4 +326,51 @@ public GDClaim findNearbyClaim(Player player, GDPlayerData playerData, int maxDi
return claim;
}
public Location<World> getSafeClaimLocation(GDClaim claim) {
final int minClaimLevel = claim.getOwnerMinClaimLevel();
double claimY = claim.getOwnerPlayerData() == null ? 65.0D : (minClaimLevel > 65.0D ? minClaimLevel : 65);
if (claim.isCuboid()) {
claimY = claim.lesserBoundaryCorner.getY();
}
final int random = ThreadLocalRandom.current().nextInt(2, 20 + 1);
final int randomCorner = ThreadLocalRandom.current().nextInt(1, 4 + 1);
Location<World> claimCorner = null;
switch (randomCorner) {
case 1: // SW
claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 2: // NW
claimCorner = new Location<>(claim.getWorld(), claim.lesserBoundaryCorner.getX() - random, claimY, claim.lesserBoundaryCorner.getZ() - random);
case 3: // SE
claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.greaterBoundaryCorner.getZ() + random);
case 4: // NE
claimCorner = new Location<>(claim.getWorld(), claim.greaterBoundaryCorner.getX() + random, claimY, claim.lesserBoundaryCorner.getZ() - random);
}
final Location<World> safeLocation = Sponge.getTeleportHelper().getSafeLocation(claimCorner, 64, 16, 2).orElse(null);
if (safeLocation != null) {
return safeLocation;
}
// If no safe location was found, fall back to corner
return claimCorner;
}
public boolean forceItemInteract(ItemType itemType, Player player) {
final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId());
if (playerData.claimMode) {
return true;
}
if (!playerData.claimTool) {
return GriefDefenderPlugin.getGlobalConfig().getConfig().mod.forceItemInteract(itemType.getId());
}
if (GriefDefenderPlugin.getInstance().modificationTool != null && itemType.getId().equals(GriefDefenderPlugin.getInstance().modificationTool)) {
return true;
}
if (GriefDefenderPlugin.getInstance().investigationTool != null && itemType.getId().equals(GriefDefenderPlugin.getInstance().investigationTool)) {
return true;
}
return GriefDefenderPlugin.getGlobalConfig().getConfig().mod.forceItemInteract(itemType.getId());
}
}

View File

@ -3,9 +3,9 @@
"libraries": [
{
"name": "com.griefdefender:adapter-sponge:1.12.2",
"sha1": "beb43662d4d04825a35dcdf21eb16b18424e93d6",
"path": "com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210101.010513-16.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210101.010513-16.jar"
"sha1": "da88e2f8cbe0535f01753087464dd3b7918048a4",
"path": "com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210115.020835-20.jar",
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter-sponge/1.12.2-SNAPSHOT/adapter-sponge-1.12.2-20210115.020835-20.jar"
},
{
"name": "com.griefdefender:api:1.0.0",
@ -41,15 +41,15 @@
},
{
"name": "co.aikar:acf-core:0.5.0-SNAPSHOT",
"sha1": "72aff420c92e4cb381ba8bccceb0b37cba7a9496",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190722.233344-152.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20190722.233344-152.jar"
"sha1": "5f81a496db139cd72d00d31789b57b4788c505f8",
"path": "co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-core/0.5.0-SNAPSHOT/acf-core-0.5.0-20200925.132010-170.jar"
},
{
"name": "co.aikar:acf-sponge:0.5.0-SNAPSHOT",
"sha1": "c73413c215cfad8f0c2306ed156df74ebdf18d47",
"path": "co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20190722.233405-145.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20190722.233405-145.jar"
"sha1": "8fde3bc49f21414ca81070271e43c5e9a04c3e08",
"path": "co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20200925.132017-161.jar",
"url": "https://repo.glaremasters.me/repository/public/co/aikar/acf-sponge/0.5.0-SNAPSHOT/acf-sponge-0.5.0-20200925.132017-161.jar"
},
{
"name": "co.aikar:locales:1.0-SNAPSHOT",
@ -137,32 +137,32 @@
"url": "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar"
},
{
"name": "org.spongepowered:configurate-core:3.7-SNAPSHOT",
"sha1": "e596c439ac71fa2ea5c48f8ba97a7dc6f4c77b16",
"path": "org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar",
"name": "org.spongepowered:configurate-core:3.7.2",
"sha1": "985223b13c7da64116a7e20203b2904023eeb1db",
"path": "org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-core/3.7-SNAPSHOT/configurate-core-3.7-20190531.182437-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-core/3.7.2/configurate-core-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-gson:3.7-SNAPSHOT",
"sha1": "265a94f16583621f497eeecc356f35f983484dde",
"path": "org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar",
"name": "org.spongepowered:configurate-gson:3.7.2",
"sha1": "0431733e80d7dfc62b37962c2723bba5c996548f",
"path": "org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-gson/3.7-SNAPSHOT/configurate-gson-3.7-20190531.182438-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-gson/3.7.2/configurate-gson-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-hocon:3.7-SNAPSHOT",
"sha1": "af48dcb9e7456f2f81a633f62ae5c55e5215c4af",
"path": "org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar",
"name": "org.spongepowered:configurate-hocon:3.7.2",
"sha1": "a5e49f57ae8f5e61dbae48a158a28343e7d6f707",
"path": "org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-hocon/3.7-SNAPSHOT/configurate-hocon-3.7-20190531.182439-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-hocon/3.7.2/configurate-hocon-3.7.2.jar"
},
{
"name": "org.spongepowered:configurate-yaml:3.7-SNAPSHOT",
"sha1": "c66110f5ae0098c450e048f78b322590d2e24d06",
"path": "org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar",
"name": "org.spongepowered:configurate-yaml:3.7.2",
"sha1": "a0c3eec370aa9bdec3f450f842edcb03f6d42be2",
"path": "org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar",
"relocate": "ninja.leaping.configurate:configurate",
"url": "https://repo.spongepowered.org/maven/org/spongepowered/configurate-yaml/3.7-SNAPSHOT/configurate-yaml-3.7-20190531.182442-11.jar"
"url": "https://repo1.maven.org/maven2/org/spongepowered/configurate-yaml/3.7.2/configurate-yaml-3.7.2.jar"
},
{
"name": "com.typesafe:config:1.3.1",