mirror of
https://github.com/bloodmc/GriefDefender.git
synced 2025-02-07 00:21:59 +01:00
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:
parent
ad31466bb1
commit
e281231d87
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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.")
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)) {
|
||||
|
@ -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";
|
||||
|
@ -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) {
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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ł."
|
||||
|
@ -854,4 +854,4 @@ GriefDefender {
|
||||
untrust-self="&c您不能移除自己的信任权限。"
|
||||
visual-update-in-progress="&a更新领地选区可视化效果。还需等待 &6{count}&a 个方块的效果渲染。请稍作等待。"
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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(":");
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user