mirror of
https://github.com/bloodmc/GriefDefender.git
synced 2025-02-13 01:21:42 +01:00
First round of fixes for 1.2.3 release.
* Fix funds not being returned after claim create failure in economy mode. * Fix '/gd option claim' command with global options such as 'economy-block-cost'. * Fix schematics not loading on startup. * Fix claim cleanup task. * Remove item frame defaults. * Add '/claimcreate <radius> [type]' command. Used to create a claim around player. * Add new direction parameter 'all' for commands '/claimexpand' and '/claimcontract'. * Add confirmation to '/cfr' command. Fixes #59 Fixes #63 Fixes #64 Fixes #65 Fixes #66
This commit is contained in:
parent
7d6654aa39
commit
90eed11bea
@ -144,7 +144,7 @@ public class GDPlayerData implements PlayerData {
|
||||
|
||||
public boolean dataInitialized = false;
|
||||
public boolean showVisualFillers = true;
|
||||
public boolean restoreAbandonClaim = false;
|
||||
public boolean useRestoreSchematic = false;
|
||||
private boolean checkedDimensionHeight = false;
|
||||
|
||||
public GDPlayerData(UUID worldUniqueId, UUID playerUniqueId, PlayerStorageData playerStorage, GriefDefenderConfig<?> activeConfig, Set<Claim> claims) {
|
||||
|
@ -89,6 +89,7 @@
|
||||
import com.griefdefender.command.CommandClaimBuyBlocks;
|
||||
import com.griefdefender.command.CommandClaimClear;
|
||||
import com.griefdefender.command.CommandClaimContract;
|
||||
import com.griefdefender.command.CommandClaimCreate;
|
||||
import com.griefdefender.command.CommandClaimCuboid;
|
||||
import com.griefdefender.command.CommandClaimDelete;
|
||||
import com.griefdefender.command.CommandClaimDeleteAll;
|
||||
@ -573,6 +574,7 @@ public void registerBaseCommands() {
|
||||
manager.registerCommand(new CommandClaimBuyBlocks());
|
||||
manager.registerCommand(new CommandClaimClear());
|
||||
manager.registerCommand(new CommandClaimContract());
|
||||
manager.registerCommand(new CommandClaimCreate());
|
||||
manager.registerCommand(new CommandClaimCuboid());
|
||||
manager.registerCommand(new CommandClaimDelete());
|
||||
manager.registerCommand(new CommandClaimDeleteAll());
|
||||
@ -723,6 +725,7 @@ public void registerBaseCommands() {
|
||||
tabList.add("west");
|
||||
tabList.add("up");
|
||||
tabList.add("down");
|
||||
tabList.add("all");
|
||||
return ImmutableList.copyOf(tabList);
|
||||
});
|
||||
manager.getCommandCompletions().registerCompletion("gdclaimtypes", c -> {
|
||||
|
@ -238,6 +238,7 @@ public static MessageCache getInstance() {
|
||||
public Component FLAG_DESCRIPTION_PROJECTILE_IMPACT_BLOCK;
|
||||
public Component FLAG_DESCRIPTION_PROJECTILE_IMPACT_ENTITY;
|
||||
public Component FLAG_RESET_SUCCESS;
|
||||
public Component FLAG_RESET_WARNING;
|
||||
public Component FLAG_UI_CLICK_ALLOW;
|
||||
public Component FLAG_UI_CLICK_DENY;
|
||||
public Component FLAG_UI_CLICK_REMOVE;
|
||||
@ -595,6 +596,7 @@ public void loadCache() {
|
||||
FLAG_DESCRIPTION_PROJECTILE_IMPACT_BLOCK = MessageStorage.MESSAGE_DATA.getMessage("flag-description-projectile-impact-block");
|
||||
FLAG_DESCRIPTION_PROJECTILE_IMPACT_ENTITY = MessageStorage.MESSAGE_DATA.getMessage("flag-description-projectile-impact-entity");
|
||||
FLAG_RESET_SUCCESS = MessageStorage.MESSAGE_DATA.getMessage("flag-reset-success");
|
||||
FLAG_RESET_WARNING = MessageStorage.MESSAGE_DATA.getMessage("flag-reset-warning");
|
||||
FLAG_UI_CLICK_ALLOW = MessageStorage.MESSAGE_DATA.getMessage("flag-ui-click-allow");
|
||||
FLAG_UI_CLICK_DENY = MessageStorage.MESSAGE_DATA.getMessage("flag-ui-click-deny");
|
||||
FLAG_UI_CLICK_REMOVE = MessageStorage.MESSAGE_DATA.getMessage("flag-ui-click-remove");
|
||||
|
@ -2827,6 +2827,7 @@ public ClaimResult build() {
|
||||
if (!result.successful()) {
|
||||
return result;
|
||||
}
|
||||
requiredFunds = claimCost * claim.getOwnerEconomyBlockCost();
|
||||
} else {
|
||||
final int remainingClaimBlocks = playerData.getRemainingClaimBlocks() - claimCost;
|
||||
if (remainingClaimBlocks < 0) {
|
||||
|
@ -200,10 +200,12 @@ public void execute(Player player, String[] args) throws InvalidCommandArgument
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!option.isGlobal()) {
|
||||
contextSet.add(claim.getContext());
|
||||
if (contextSet.isEmpty() ) {
|
||||
type = MenuType.CLAIM;
|
||||
}
|
||||
contextSet.add(claim.getContext());
|
||||
}
|
||||
GDCauseStackManager.getInstance().pushCause(player);
|
||||
PermissionUtil.getInstance().setOptionValue(this.subject, option.getPermission(), value, contextSet);
|
||||
TextAdapter.sendComponent(player, MessageStorage.MESSAGE_DATA.getMessage(MessageStorage.OPTION_SET_TARGET,
|
||||
|
@ -166,9 +166,9 @@ private static Consumer<CommandSender> createConfirmationConsumer(Player player,
|
||||
}
|
||||
|
||||
GDClaimManager claimManager = GriefDefenderPlugin.getInstance().dataStore.getClaimWorldManager(player.getWorld().getUID());
|
||||
playerData.restoreAbandonClaim = event.isRestoring();
|
||||
playerData.useRestoreSchematic = event.isRestoring();
|
||||
final ClaimResult claimResult = claimManager.deleteClaimInternal(claim, abandonTopClaim);
|
||||
playerData.restoreAbandonClaim = false;
|
||||
playerData.useRestoreSchematic = false;
|
||||
if (!claimResult.successful()) {
|
||||
TextAdapter.sendComponent(player, event.getMessage().orElse(GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.ABANDON_FAILED,
|
||||
ImmutableMap.of("result", claimResult.getMessage().orElse(TextComponent.of(claimResult.getResultType().toString()))))));
|
||||
|
@ -148,9 +148,9 @@ private static Consumer<CommandSender> createConfirmationConsumer(GDPermissionUs
|
||||
}
|
||||
}
|
||||
|
||||
playerData.restoreAbandonClaim = event.isRestoring();
|
||||
playerData.useRestoreSchematic = event.isRestoring();
|
||||
GriefDefenderPlugin.getInstance().dataStore.abandonClaimsForPlayer(user, allowedClaims);
|
||||
playerData.restoreAbandonClaim = false;
|
||||
playerData.useRestoreSchematic = false;
|
||||
|
||||
if (GriefDefenderPlugin.getInstance().isEconomyModeEnabled()) {
|
||||
final Economy economy = GriefDefenderPlugin.getInstance().getVaultProvider().getApi();
|
||||
|
@ -84,6 +84,11 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Vector3i lesser = claim.lesserBoundaryCorner;
|
||||
final Vector3i greater = claim.greaterBoundaryCorner;
|
||||
Vector3i point1 = null;
|
||||
Vector3i point2 = null;
|
||||
if (direction == null || !direction.equalsIgnoreCase("all")) {
|
||||
final BlockFace face = direction == null ? PlayerUtil.getInstance().getBlockFace(player) : PlayerUtil.getInstance().getBlockFace(direction);
|
||||
if (face == null || amount <= 0) {
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_INVALID);
|
||||
@ -94,11 +99,6 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_INVALID);
|
||||
return;
|
||||
}
|
||||
|
||||
final Vector3i lesser = claim.lesserBoundaryCorner;
|
||||
final Vector3i greater = claim.greaterBoundaryCorner;
|
||||
Vector3i point1 = null;
|
||||
Vector3i point2 = null;
|
||||
if (face == BlockFace.EAST) {
|
||||
point1 = new Vector3i(lesser.getX(), lesser.getY(), lesser.getZ());
|
||||
point2 = new Vector3i(greater.getX() - amount, greater.getY(), greater.getZ());
|
||||
@ -112,6 +112,16 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
point1 = new Vector3i(lesser.getX(), lesser.getY(), lesser.getZ());
|
||||
point2 = new Vector3i(greater.getX(), greater.getY(), greater.getZ() - amount);
|
||||
}
|
||||
} else {
|
||||
point1 = new Vector3i(
|
||||
lesser.getX() + amount,
|
||||
lesser.getY(),
|
||||
lesser.getZ() + amount);
|
||||
point2 = new Vector3i(
|
||||
greater.getX() - amount,
|
||||
greater.getY(),
|
||||
greater.getZ() - amount);
|
||||
}
|
||||
|
||||
final ClaimResult result = claim.resize(point1, point2);
|
||||
if (!result.successful()) {
|
||||
|
@ -0,0 +1,147 @@
|
||||
/*
|
||||
* This file is part of GriefDefender, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) bloodmc
|
||||
* Copyright (c) contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package com.griefdefender.command;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.flowpowered.math.vector.Vector3i;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.griefdefender.GDPlayerData;
|
||||
import com.griefdefender.GriefDefenderPlugin;
|
||||
import com.griefdefender.api.GriefDefender;
|
||||
import com.griefdefender.api.claim.Claim;
|
||||
import com.griefdefender.api.claim.ClaimResult;
|
||||
import com.griefdefender.api.claim.ClaimResultType;
|
||||
import com.griefdefender.api.claim.ClaimType;
|
||||
import com.griefdefender.api.claim.ClaimTypes;
|
||||
import com.griefdefender.api.permission.option.Options;
|
||||
import com.griefdefender.api.permission.option.type.CreateModeTypes;
|
||||
import com.griefdefender.cache.MessageCache;
|
||||
import com.griefdefender.cache.PermissionHolderCache;
|
||||
import com.griefdefender.claim.GDClaim;
|
||||
import com.griefdefender.configuration.MessageStorage;
|
||||
import com.griefdefender.internal.visual.ClaimVisual;
|
||||
import com.griefdefender.permission.GDPermissionManager;
|
||||
import com.griefdefender.permission.GDPermissionUser;
|
||||
import com.griefdefender.permission.GDPermissions;
|
||||
import com.griefdefender.registry.ClaimTypeRegistryModule;
|
||||
import com.griefdefender.util.EconomyUtil;
|
||||
import com.griefdefender.util.PlayerUtil;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.CommandAlias;
|
||||
import co.aikar.commands.annotation.CommandCompletion;
|
||||
import co.aikar.commands.annotation.CommandPermission;
|
||||
import co.aikar.commands.annotation.Description;
|
||||
import co.aikar.commands.annotation.Optional;
|
||||
import co.aikar.commands.annotation.Subcommand;
|
||||
import co.aikar.commands.annotation.Syntax;
|
||||
import net.kyori.text.Component;
|
||||
|
||||
@CommandAlias("%griefdefender")
|
||||
@CommandPermission(GDPermissions.CLAIM_CREATE)
|
||||
public class CommandClaimCreate extends BaseCommand {
|
||||
|
||||
@CommandCompletion("@gddummy @gdclaimtypes @gddummy")
|
||||
@CommandAlias("claimcreate")
|
||||
@Description("Creates a claim around the player.")
|
||||
@Syntax("<radius> [type] [player]")
|
||||
@Subcommand("claim create")
|
||||
public void execute(Player player, int radius, @Optional String type) {
|
||||
final Location location = player.getLocation();
|
||||
final World world = location.getWorld();
|
||||
final int minClaimLevel = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.MIN_LEVEL);
|
||||
final int maxClaimLevel = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.MAX_LEVEL);
|
||||
if (location.getBlockY() < minClaimLevel || location.getBlockY() > maxClaimLevel) {
|
||||
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CLAIM_CHEST_OUTSIDE_LEVEL,
|
||||
ImmutableMap.of(
|
||||
"min-level", minClaimLevel,
|
||||
"max-level", maxClaimLevel));
|
||||
GriefDefenderPlugin.sendMessage(player, message);
|
||||
return;
|
||||
}
|
||||
|
||||
final Vector3i lesserBoundary = new Vector3i(
|
||||
location.getBlockX() - radius,
|
||||
minClaimLevel,
|
||||
location.getBlockZ() - radius);
|
||||
final Vector3i greaterBoundary = new Vector3i(
|
||||
location.getBlockX() + radius,
|
||||
maxClaimLevel,
|
||||
location.getBlockZ() + radius);
|
||||
|
||||
final GDPermissionUser user = PermissionHolderCache.getInstance().getOrCreateUser(player);
|
||||
final GDPlayerData playerData = user.getInternalPlayerData();
|
||||
final ClaimType claimType = ClaimTypeRegistryModule.getInstance().getById(type).orElse(ClaimTypes.BASIC);
|
||||
final boolean cuboid = playerData.getClaimCreateMode() == CreateModeTypes.VOLUME;
|
||||
if ((claimType == ClaimTypes.BASIC || claimType == ClaimTypes.TOWN) && GriefDefenderPlugin.getGlobalConfig().getConfig().economy.economyMode) {
|
||||
EconomyUtil.getInstance().economyCreateClaimConfirmation(player, playerData, location.getBlockY(), lesserBoundary, greaterBoundary, claimType,
|
||||
cuboid, playerData.claimSubdividing);
|
||||
return;
|
||||
}
|
||||
|
||||
final ClaimResult result = GriefDefender.getRegistry().createBuilder(Claim.Builder.class)
|
||||
.bounds(lesserBoundary, greaterBoundary)
|
||||
.cuboid(cuboid)
|
||||
.owner(user.getUniqueId())
|
||||
.type(claimType)
|
||||
.world(world.getUID())
|
||||
.build();
|
||||
GDClaim gdClaim = (GDClaim) result.getClaim().orElse(null);
|
||||
if (!result.successful()) {
|
||||
if (result.getResultType() == ClaimResultType.OVERLAPPING_CLAIM) {
|
||||
GDClaim overlapClaim = (GDClaim) result.getClaim().get();
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().CREATE_OVERLAP_SHORT);
|
||||
Set<Claim> claims = new HashSet<>();
|
||||
claims.add(overlapClaim);
|
||||
CommandHelper.showOverlapClaims(player, claims, location.getBlockY());
|
||||
} else if (result.getResultType() == ClaimResultType.CLAIM_EVENT_CANCELLED) {
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().CREATE_CANCEL);
|
||||
} else {
|
||||
GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_RESULT,
|
||||
ImmutableMap.of("reason", result.getResultType())));
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
playerData.lastShovelLocation = null;
|
||||
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_SUCCESS,
|
||||
ImmutableMap.of(
|
||||
"type", gdClaim.getFriendlyNameType(true)));
|
||||
GriefDefenderPlugin.sendMessage(player, message);
|
||||
if (GriefDefenderPlugin.getInstance().getWorldEditProvider() != null) {
|
||||
GriefDefenderPlugin.getInstance().getWorldEditProvider().stopVisualDrag(player);
|
||||
GriefDefenderPlugin.getInstance().getWorldEditProvider().visualizeClaim(gdClaim, player, playerData, false);
|
||||
}
|
||||
gdClaim.getVisualizer().createClaimBlockVisuals(location.getBlockY(), player.getLocation(), playerData);
|
||||
gdClaim.getVisualizer().apply(player, false);
|
||||
}
|
||||
}
|
||||
}
|
@ -84,6 +84,11 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Vector3i lesser = claim.lesserBoundaryCorner;
|
||||
final Vector3i greater = claim.greaterBoundaryCorner;
|
||||
Vector3i point1 = null;
|
||||
Vector3i point2 = null;
|
||||
if (direction == null || !direction.equalsIgnoreCase("all")) {
|
||||
final BlockFace face = direction == null ? PlayerUtil.getInstance().getBlockFace(player) : PlayerUtil.getInstance().getBlockFace(direction);
|
||||
if (face == null || amount <= 0) {
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_INVALID);
|
||||
@ -94,11 +99,6 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().COMMAND_INVALID);
|
||||
return;
|
||||
}
|
||||
|
||||
final Vector3i lesser = claim.lesserBoundaryCorner;
|
||||
final Vector3i greater = claim.greaterBoundaryCorner;
|
||||
Vector3i point1 = null;
|
||||
Vector3i point2 = null;
|
||||
if (face == BlockFace.EAST) {
|
||||
point1 = new Vector3i(lesser.getX(), lesser.getY(), lesser.getZ());
|
||||
point2 = new Vector3i(greater.getX() + amount, greater.getY(), greater.getZ());
|
||||
@ -112,6 +112,16 @@ public void execute(Player player, int amount, @Optional String direction) {
|
||||
point1 = new Vector3i(lesser.getX(), lesser.getY(), lesser.getZ());
|
||||
point2 = new Vector3i(greater.getX(), greater.getY(), greater.getZ() + amount);
|
||||
}
|
||||
} else {
|
||||
point1 = new Vector3i(
|
||||
lesser.getX() - amount,
|
||||
lesser.getY(),
|
||||
lesser.getZ() - amount);
|
||||
point2 = new Vector3i(
|
||||
greater.getX() + amount,
|
||||
greater.getY(),
|
||||
greater.getZ() + amount);
|
||||
}
|
||||
|
||||
final ClaimResult result = claim.resize(point1, point2);
|
||||
if (!result.successful()) {
|
||||
|
@ -32,16 +32,24 @@
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.griefdefender.GDPlayerData;
|
||||
import com.griefdefender.GriefDefenderPlugin;
|
||||
import com.griefdefender.api.permission.Context;
|
||||
import com.griefdefender.api.claim.Claim;
|
||||
import com.griefdefender.cache.MessageCache;
|
||||
import com.griefdefender.claim.GDClaim;
|
||||
import com.griefdefender.configuration.MessageStorage;
|
||||
import com.griefdefender.permission.GDPermissions;
|
||||
import com.griefdefender.text.action.GDCallbackHolder;
|
||||
import com.griefdefender.util.PermissionUtil;
|
||||
import net.kyori.text.Component;
|
||||
import net.kyori.text.TextComponent;
|
||||
import net.kyori.text.adapter.bukkit.TextAdapter;
|
||||
import net.kyori.text.event.ClickEvent;
|
||||
import net.kyori.text.event.HoverEvent;
|
||||
import net.kyori.text.format.TextColor;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@CommandAlias("%griefdefender")
|
||||
@CommandPermission(GDPermissions.COMMAND_FLAGS_RESET)
|
||||
@ -71,8 +79,23 @@ public void execute(Player player) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Component confirmationText = TextComponent.builder()
|
||||
.append(MessageCache.getInstance().FLAG_RESET_WARNING)
|
||||
.append(TextComponent.builder()
|
||||
.append("\n[")
|
||||
.append("Confirm", TextColor.GREEN)
|
||||
.append("]\n")
|
||||
.clickEvent(ClickEvent.runCommand(GDCallbackHolder.getInstance().createCallbackRunCommand(createConfirmationConsumer(player, claim))))
|
||||
.hoverEvent(HoverEvent.showText(MessageCache.getInstance().UI_CLICK_CONFIRM)).build())
|
||||
.build();
|
||||
TextAdapter.sendComponent(player, confirmationText);
|
||||
}
|
||||
|
||||
private static Consumer<CommandSender> createConfirmationConsumer(Player player, Claim claim) {
|
||||
return confirm -> {
|
||||
// Remove persisted data
|
||||
PermissionUtil.getInstance().clearPermissions((GDClaim) claim);
|
||||
GriefDefenderPlugin.sendMessage(player, MessageCache.getInstance().FLAG_RESET_SUCCESS);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +109,7 @@ public class MessageStorage {
|
||||
public static final String CLAIM_BELOW_LEVEL = "claim-below-level";
|
||||
public static final String CLAIM_CHEST_OUTSIDE_LEVEL = "claim-chest-outside-level";
|
||||
public static final String CLAIM_CONTEXT_NOT_FOUND = "claim-context-not-found";
|
||||
public static final String CLAIM_EXPIRED_INACTIVITY = "claim-expired-inactivity";
|
||||
public static final String CLAIM_FAREWELL = "claim-farewell";
|
||||
public static final String CLAIM_FAREWELL_INVALID = "claim-farewell-invalid";
|
||||
public static final String CLAIM_GREETING = "claim-greeting";
|
||||
|
@ -380,7 +380,6 @@ public void setDefaultGlobalPermissions() {
|
||||
}
|
||||
|
||||
private void setDefaultFlags(Set<Context> contexts, Map<String, Boolean> defaultFlags) {
|
||||
final boolean defaultWildernessValue = contexts.contains(ClaimContexts.WILDERNESS_DEFAULT_CONTEXT);
|
||||
GriefDefenderPlugin.getInstance().executor.execute(() -> {
|
||||
for (Map.Entry<String, Boolean> mapEntry : defaultFlags.entrySet()) {
|
||||
final Flag flag = FlagRegistryModule.getInstance().getById(mapEntry.getKey()).orElse(null);
|
||||
@ -393,16 +392,6 @@ private void setDefaultFlags(Set<Context> contexts, Map<String, Boolean> default
|
||||
contexts.add(FlagContexts.TARGET_TYPE_MONSTER);
|
||||
PermissionUtil.getInstance().setTransientPermission(GriefDefenderPlugin.DEFAULT_HOLDER, GDPermissions.FLAG_BASE + "." + mapEntry.getKey(), true, contexts);
|
||||
contexts.remove(FlagContexts.TARGET_TYPE_MONSTER);
|
||||
// deny item frame damage by default
|
||||
contexts.add(FlagContexts.TARGET_ITEM_FRAME);
|
||||
PermissionUtil.getInstance().setTransientPermission(GriefDefenderPlugin.DEFAULT_HOLDER, GDPermissions.FLAG_BASE + "." + mapEntry.getKey(), defaultWildernessValue, contexts);
|
||||
contexts.remove(FlagContexts.TARGET_ITEM_FRAME);
|
||||
}
|
||||
if (flag == Flags.INTERACT_ENTITY_SECONDARY) {
|
||||
// deny item frame rotation by default
|
||||
contexts.add(FlagContexts.TARGET_ITEM_FRAME);
|
||||
PermissionUtil.getInstance().setTransientPermission(GriefDefenderPlugin.DEFAULT_HOLDER, GDPermissions.FLAG_BASE + "." + mapEntry.getKey(), defaultWildernessValue, contexts);
|
||||
contexts.remove(FlagContexts.TARGET_ITEM_FRAME);
|
||||
}
|
||||
}
|
||||
PermissionUtil.getInstance().refreshCachedData(GriefDefenderPlugin.DEFAULT_HOLDER);
|
||||
|
@ -240,6 +240,12 @@ public void loadWorldData(World world) {
|
||||
if (claimWorldManager.getWildernessClaim() == null) {
|
||||
claimWorldManager.createWildernessClaim(world);
|
||||
}
|
||||
|
||||
// Load schematics
|
||||
if (GriefDefenderPlugin.getInstance().getWorldEditProvider() != null) {
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Loading schematics for world " + world.getName() + "...");
|
||||
GriefDefenderPlugin.getInstance().getWorldEditProvider().loadSchematics(world);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -458,7 +464,7 @@ public ClaimResult deleteClaimFromStorage(GDClaim claim) {
|
||||
if (GriefDefenderPlugin.getInstance().getWorldEditProvider() != null) {
|
||||
final Path schematicPath = GriefDefenderPlugin.getInstance().getWorldEditProvider().getSchematicWorldMap().get(claim.getWorldUniqueId());
|
||||
if (schematicPath != null && Files.exists(schematicPath.resolve(claim.getUniqueId().toString()))) {
|
||||
if (ownerData != null && ownerData.restoreAbandonClaim) {
|
||||
if (ownerData != null && ownerData.useRestoreSchematic) {
|
||||
final ConfigBase activeConfig = GriefDefenderPlugin.getActiveConfig(claim.getWorldUniqueId()).getConfig();
|
||||
if (GriefDefenderPlugin.getInstance().getWorldEditProvider() != null && activeConfig.claim.claimAutoSchematicRestore) {
|
||||
final ClaimSchematic schematic = claim.getSchematics().get("__restore__");
|
||||
|
@ -24,19 +24,24 @@
|
||||
*/
|
||||
package com.griefdefender.task;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.griefdefender.GDBootstrap;
|
||||
import com.griefdefender.GDPlayerData;
|
||||
import com.griefdefender.GriefDefenderPlugin;
|
||||
import com.griefdefender.api.claim.Claim;
|
||||
import com.griefdefender.api.claim.ClaimSchematic;
|
||||
import com.griefdefender.api.permission.option.Options;
|
||||
import com.griefdefender.claim.GDClaim;
|
||||
import com.griefdefender.claim.GDClaimManager;
|
||||
import com.griefdefender.configuration.GriefDefenderConfig;
|
||||
import com.griefdefender.configuration.MessageStorage;
|
||||
import com.griefdefender.internal.util.BlockUtil;
|
||||
import com.griefdefender.permission.GDPermissionManager;
|
||||
import com.griefdefender.permission.GDPermissionUser;
|
||||
import com.griefdefender.util.PermissionUtil;
|
||||
|
||||
import net.kyori.text.Component;
|
||||
import net.kyori.text.serializer.plain.PlainComponentSerializer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
@ -63,6 +68,8 @@ public void run() {
|
||||
continue;
|
||||
}
|
||||
|
||||
final GriefDefenderConfig<?> activeConfig = GriefDefenderPlugin.getActiveConfig(world);
|
||||
final boolean schematicRestore = activeConfig.getConfig().claim.claimAutoSchematicRestore;
|
||||
Iterator<Claim> iterator = new HashSet<>(claimList).iterator();
|
||||
while (iterator.hasNext()) {
|
||||
GDClaim claim = (GDClaim) iterator.next();
|
||||
@ -75,7 +82,6 @@ public void run() {
|
||||
continue;
|
||||
}
|
||||
|
||||
GriefDefenderConfig<?> activeConfig = GriefDefenderPlugin.getActiveConfig(world);
|
||||
int areaOfDefaultClaim = 0;
|
||||
if (activeConfig.getConfig().claim.autoChestClaimBlockRadius >= 0) {
|
||||
areaOfDefaultClaim = (int) Math.pow(activeConfig.getConfig().claim.autoChestClaimBlockRadius * 2 + 1, 2);
|
||||
@ -88,15 +94,21 @@ public void run() {
|
||||
if (claim.getArea() <= areaOfDefaultClaim && claimExpirationChest > 0) {
|
||||
if (claimLastActive.plus(Duration.ofDays(claimExpirationChest))
|
||||
.isBefore(Instant.now())) {
|
||||
|
||||
playerData.useRestoreSchematic = schematicRestore;
|
||||
claimManager.deleteClaim(claim);
|
||||
|
||||
if (activeConfig.getConfig().claim.claimAutoNatureRestore) {
|
||||
playerData.useRestoreSchematic = false;
|
||||
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CLAIM_EXPIRED_INACTIVITY,
|
||||
ImmutableMap.of(
|
||||
"player", subject.getFriendlyName(),
|
||||
"uuid", claim.getUniqueId().toString()));
|
||||
GriefDefenderPlugin.getInstance().getLogger().info(PlainComponentSerializer.INSTANCE.serialize(message));
|
||||
if (!schematicRestore && activeConfig.getConfig().claim.claimAutoNatureRestore) {
|
||||
BlockUtil.getInstance().restoreClaim(claim);
|
||||
}
|
||||
|
||||
GriefDefenderPlugin.getInstance().getLogger().info(" " + claim.getOwnerName() + "'s new player claim " + "'" + claim.getUniqueId() + "' expired.");
|
||||
// remove all context permissions
|
||||
PermissionUtil.getInstance().clearPermissions(claim);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!claim.isBasicClaim()) {
|
||||
@ -124,18 +136,19 @@ public void run() {
|
||||
}
|
||||
}
|
||||
|
||||
final ClaimSchematic schematic = claim.getSchematics().get("__restore__");
|
||||
playerData.useRestoreSchematic = schematicRestore;
|
||||
claimManager.deleteClaim(claim);
|
||||
GriefDefenderPlugin.getInstance().getLogger().info("Removed " + claim.getOwnerName() + "'s unused claim @ "
|
||||
+ claim.getLesserBoundaryCorner());
|
||||
|
||||
if (activeConfig.getConfig().claim.claimAutoNatureRestore) {
|
||||
playerData.useRestoreSchematic = false;
|
||||
final Component message = GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CLAIM_EXPIRED_INACTIVITY,
|
||||
ImmutableMap.of(
|
||||
"player", subject.getFriendlyName(),
|
||||
"uuid", claim.getUniqueId().toString()));
|
||||
GriefDefenderPlugin.getInstance().getLogger().info(PlainComponentSerializer.INSTANCE.serialize(message));
|
||||
if (!schematicRestore && activeConfig.getConfig().claim.claimAutoNatureRestore) {
|
||||
BlockUtil.getInstance().restoreClaim(claim);
|
||||
} else if (activeConfig.getConfig().claim.claimAutoSchematicRestore) {
|
||||
if (schematic != null) {
|
||||
schematic.apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
// remove all context permissions
|
||||
PermissionUtil.getInstance().clearPermissions(claim);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,9 +3,9 @@
|
||||
"libraries": [
|
||||
{
|
||||
"name": "com.griefdefender:adapter:1.13.2",
|
||||
"sha1": "d39aacdde1b7c0017e69b033f572f735bcc721cb",
|
||||
"path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20191007.192614-19.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20191007.192614-19.jar"
|
||||
"sha1": "e29bb897bb2e65650019ba1d457bd2d57253e4ac",
|
||||
"path": "com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20191030.135953-20.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.13.2-SNAPSHOT/adapter-1.13.2-20191030.135953-20.jar"
|
||||
},
|
||||
{
|
||||
"name": "com.griefdefender:api:1.0.0",
|
||||
|
@ -3,9 +3,9 @@
|
||||
"libraries": [
|
||||
{
|
||||
"name": "com.griefdefender:adapter:1.14.2",
|
||||
"sha1": "c1e110c74824f314c46b31de7cc0817f223b3322",
|
||||
"path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20191007.192516-19.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20191007.192516-19.jar"
|
||||
"sha1": "a1d0d15ed46106f71f0a87e3033bf4e27d2115bd",
|
||||
"path": "com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20191030.135904-20.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.2-SNAPSHOT/adapter-1.14.2-20191030.135904-20.jar"
|
||||
},
|
||||
{
|
||||
"name": "com.griefdefender:api:1.0.0",
|
||||
|
@ -3,9 +3,9 @@
|
||||
"libraries": [
|
||||
{
|
||||
"name": "com.griefdefender:adapter:1.14.3",
|
||||
"sha1": "6827e0ded527dfe912f9949e29fa28c09a302c0a",
|
||||
"path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20191007.192429-20.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20191007.192429-20.jar"
|
||||
"sha1": "5861e4469cdfdc25a4c424727d71d15186b92441",
|
||||
"path": "com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20191030.135827-21.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.3-SNAPSHOT/adapter-1.14.3-20191030.135827-21.jar"
|
||||
},
|
||||
{
|
||||
"name": "com.griefdefender:api:1.0.0",
|
||||
|
@ -3,9 +3,9 @@
|
||||
"libraries": [
|
||||
{
|
||||
"name": "com.griefdefender:adapter:1.14.4",
|
||||
"sha1": "e2ca45c14cc84384cdd465105e629f97c38bfb3a",
|
||||
"path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20191007.192349-18.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20191007.192349-18.jar"
|
||||
"sha1": "0e014588faa41ae12d5feb77b47b607578c73ed7",
|
||||
"path": "com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20191030.135735-19.jar",
|
||||
"url": "https://repo.glaremasters.me/repository/bloodshot/com/griefdefender/adapter/1.14.4-SNAPSHOT/adapter-1.14.4-20191030.135735-19.jar"
|
||||
},
|
||||
{
|
||||
"name": "com.griefdefender:api:1.0.0",
|
||||
|
@ -91,6 +91,7 @@ GriefDefender {
|
||||
claim-children-warning="&6This claim includes child claims. If you're sure you want to delete it, use &f/deleteclaim&6 again."
|
||||
claim-context-not-found="&cContext &f{context}&c was not found."
|
||||
claim-disabled-world="&cClaims are disabled in this world."
|
||||
claim-expired-inactivity="&6{player}'s &cclaim with id &f{uuid}&c has expired and has been removed due to inactivity."
|
||||
claim-farewell="&aSet claim farewell to {farewell}&a."
|
||||
claim-farewell-clear="&aThe claim farewell message has been cleared."
|
||||
claim-farewell-invalid="&cClaim flag &f{flag}&c is invalid."
|
||||
@ -363,6 +364,7 @@ GriefDefender {
|
||||
flag-overridden="&cFailed to set claim flag. The flag &f{flag}&c has been overridden by an admin."
|
||||
flag-override-not-supported="&cClaim type {type}&c does not support flag overrides."
|
||||
flag-reset-success="&aClaim flags reset to defaults successfully."
|
||||
flag-reset-warning="&6Are you sure you want to reset this claim's flag data back to default?"
|
||||
flag-set-permission-target="&aSet {type}&a permission &b{permission}&a to {value}&a with contexts &7{contexts}&a on &6{target}&a."
|
||||
flag-ui-click-allow="Click here to allow this flag."
|
||||
flag-ui-click-deny="Click here to deny this flag."
|
||||
|
@ -90,6 +90,7 @@ GriefDefender {
|
||||
claim-children-warning="&6Cette protection contient des protections enfants. Si tu es sûr de vouloir la supprimer, utilises &f/deleteclaim&6 à nouveau."
|
||||
claim-context-not-found="&cContexte &f{context}&c non trouvé."
|
||||
claim-disabled-world="&cLes protections sont désactivées dans ce monde."
|
||||
claim-expired-inactivity="&cLa protection du joueur &6{player} avec l'id &f{uuid}&c a expiré et a été supprimé pour cause d'inactivité."
|
||||
claim-farewell="&aDéfini le message de sortie à {farewell}&a."
|
||||
claim-farewell-clear="&aLe message de sortie a été supprimé."
|
||||
claim-farewell-invalid="&cLe flag de protection &f{flag}&c n'est pas valide."
|
||||
@ -356,6 +357,7 @@ GriefDefender {
|
||||
flag-overridden="&cÉchec de la définition du flag de protection. Le flag &f{flag}&c a été outrepassé par un admin."
|
||||
flag-override-not-supported="&cLe type de protection {type}&c ne supporte pas les flags outrepassés."
|
||||
flag-reset-success="&aFlags remit par défaut dans la protection avec succès."
|
||||
flag-reset-warning="&6Es-tu sûr de vouloir remettre par défaut les paramètres de la protection ?"
|
||||
flag-set-permission-target="&aDéfinis {type}&a permission &b{permission}&a avec contexte &7{contexts}&a à {value}&a sur &6{target}&a."
|
||||
flag-ui-click-allow="Clique ici pour autoriser ce flag."
|
||||
flag-ui-click-deny="Clique ici pour interdire ce flag."
|
||||
@ -580,7 +582,7 @@ GriefDefender {
|
||||
tax-claim-paid-partial="&aLa dette de taxe de '&6{amount}&a' a été partiellement payée. Pour lever la mise en demeure de la protection, le reste de la taxe due de '&6{balance}&a' doit être payé."
|
||||
tax-info="&aTon prélèvement de taxe d'un montant de &6{amount}&a va être prélevé depuis ton compte le &b{date}&a."
|
||||
tax-past-due="&cTu as actuellement un défaut de paiement passé de taxe de &a{balance}&c qui nécessite d'être payé pour le &b{date}&c. L'échec de paiement de cette taxe entrainera la perte de la propriété."
|
||||
teleport-combat-cancel=&cTéléportation annulée ! Tu ne peut pas te téléporter en combat. Trouve un endroit sécurisé et réessaye."
|
||||
teleport-combat-cancel="&cTéléportation annulée ! Tu ne peut pas te téléporter en combat. Trouve un endroit sécurisé et réessaye."
|
||||
teleport-delay-notice="&aTu seras téléporté dans {delay} secondes. Clique sur annuler pour arrêter."
|
||||
teleport-no-safe-location="&cPas de zone sécurisée trouvé dans la protection pour téléporter !\n&aClique confirm pour téléporter malgré tout ou &autilise la commande '&f/claiminfo&a' pour définir une un point d'apparition sécurisé à la place."
|
||||
title-accessor=ACCÉDANT
|
||||
|
@ -90,6 +90,7 @@ GriefDefender {
|
||||
claim-children-warning="&6У данного региона есть суб-регионы. Если вы уверены, что хотите удалить его, используйте &f/deleteclaim&6 ещё раз."
|
||||
claim-context-not-found="&cКонтекст &f{context}&c не найден."
|
||||
claim-disabled-world="&cВ этом мире нельзя создать регион."
|
||||
claim-expired-inactivity="&cРегион игрока &6{player} с id &f{uuid}&c был удалён ввиду отсутствия активности."
|
||||
claim-farewell="&aСообщение при выходе из региона установлено: &f{farewell}&a."
|
||||
claim-farewell-clear="&aСообщение при выходе из региона удалено."
|
||||
claim-farewell-invalid="&cФлаг региона &f{flag}&c не существует."
|
||||
@ -360,6 +361,7 @@ GriefDefender {
|
||||
flag-overridden="&cНе удалось установить &f{flag}&c - он переопределён администратором."
|
||||
flag-override-not-supported="&cРегион вида &f{type}&c не поддерживает переопределение флагов."
|
||||
flag-reset-success="&aФлаги региона успешно откачены на стандартные значения."
|
||||
flag-reset-warning="&6Вы уверены, что хотите откатить флаги этого региона на стандартные значения?"
|
||||
flag-set-permission-target="&aРазрешение &b{permission}&a вида &f{type}&a с контекстами &7{contexts}&a установлено в значение &6{value}&a для &6{target}&a."
|
||||
flag-ui-click-allow="Нажмите здесь, чтобы разрешить этот флаг."
|
||||
flag-ui-click-deny="Нажмите здесь, чтобы запретить этот флаг."
|
||||
|
Loading…
Reference in New Issue
Block a user