mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 05:06:44 +01:00
port claim :)
This commit is contained in:
parent
f2da7cbdc9
commit
e415dcc8a4
@ -63,6 +63,7 @@ import com.plotsquared.bukkit.uuid.SquirrelIdUUIDService;
|
|||||||
import com.plotsquared.core.PlotPlatform;
|
import com.plotsquared.core.PlotPlatform;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.backup.BackupManager;
|
import com.plotsquared.core.backup.BackupManager;
|
||||||
|
import com.plotsquared.core.commands.PlotSquaredCommandManager;
|
||||||
import com.plotsquared.core.components.ComponentPresetManager;
|
import com.plotsquared.core.components.ComponentPresetManager;
|
||||||
import com.plotsquared.core.configuration.ConfigurationNode;
|
import com.plotsquared.core.configuration.ConfigurationNode;
|
||||||
import com.plotsquared.core.configuration.ConfigurationSection;
|
import com.plotsquared.core.configuration.ConfigurationSection;
|
||||||
@ -215,6 +216,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
@Inject
|
@Inject
|
||||||
private PlatformWorldManager<World> worldManager;
|
private PlatformWorldManager<World> worldManager;
|
||||||
private Locale serverLocale;
|
private Locale serverLocale;
|
||||||
|
@Inject
|
||||||
|
private PlotSquaredCommandManager commandManager;
|
||||||
|
|
||||||
@SuppressWarnings("StringSplitter")
|
@SuppressWarnings("StringSplitter")
|
||||||
@Override
|
@Override
|
||||||
@ -382,6 +385,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
// Commands
|
// Commands
|
||||||
if (Settings.Enabled_Components.COMMANDS) {
|
if (Settings.Enabled_Components.COMMANDS) {
|
||||||
this.registerCommands();
|
this.registerCommands();
|
||||||
|
this.commandManager.initializeCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Permissions
|
// Permissions
|
||||||
|
@ -49,7 +49,7 @@ class CommandAdd implements PlotSquaredCommandContainer {
|
|||||||
@Requirement(CommandRequirement.PLAYER)
|
@Requirement(CommandRequirement.PLAYER)
|
||||||
@Requirement(CommandRequirement.IS_OWNER)
|
@Requirement(CommandRequirement.IS_OWNER)
|
||||||
@CommandPermission("plots.add")
|
@CommandPermission("plots.add")
|
||||||
@CommandMethod("plot add [target]")
|
@CommandMethod("${command.prefix} add [target]")
|
||||||
public void commandAdd(
|
public void commandAdd(
|
||||||
final @NonNull PlotPlayer<?> sender,
|
final @NonNull PlotPlayer<?> sender,
|
||||||
@Argument("target") final PlotMember target,
|
@Argument("target") final PlotMember target,
|
||||||
|
@ -0,0 +1,239 @@
|
|||||||
|
package com.plotsquared.core.commands;
|
||||||
|
|
||||||
|
import cloud.commandframework.annotations.Argument;
|
||||||
|
import cloud.commandframework.annotations.CommandMethod;
|
||||||
|
import cloud.commandframework.annotations.CommandPermission;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.plotsquared.core.command.Claim;
|
||||||
|
import com.plotsquared.core.commands.requirements.CommandRequirement;
|
||||||
|
import com.plotsquared.core.commands.requirements.Requirement;
|
||||||
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.database.DBFunc;
|
||||||
|
import com.plotsquared.core.events.PlayerClaimPlotEvent;
|
||||||
|
import com.plotsquared.core.events.PlotMergeEvent;
|
||||||
|
import com.plotsquared.core.events.Result;
|
||||||
|
import com.plotsquared.core.location.Direction;
|
||||||
|
import com.plotsquared.core.permissions.Permission;
|
||||||
|
import com.plotsquared.core.player.MetaDataAccess;
|
||||||
|
import com.plotsquared.core.player.PlayerMetaDataKeys;
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.util.EconHandler;
|
||||||
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
public class CommandClaim implements PlotSquaredCommandContainer {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Claim.class.getSimpleName());
|
||||||
|
|
||||||
|
private final EventDispatcher eventDispatcher;
|
||||||
|
private final EconHandler econHandler;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
CommandClaim(
|
||||||
|
final @NonNull EventDispatcher eventDispatcher,
|
||||||
|
final @NonNull EconHandler econHandler
|
||||||
|
) {
|
||||||
|
this.eventDispatcher = eventDispatcher;
|
||||||
|
this.econHandler = econHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Requirement(CommandRequirement.PLAYER)
|
||||||
|
@Requirement(CommandRequirement.IN_PLOT)
|
||||||
|
@CommandPermission("plots.add")
|
||||||
|
@CommandMethod("${command.prefix} claim [schematic]")
|
||||||
|
public void commandClaim(
|
||||||
|
final @NonNull PlotPlayer<?> sender,
|
||||||
|
final @NonNull Plot plot,
|
||||||
|
@Argument("schematic") final @Nullable String schematic
|
||||||
|
) {
|
||||||
|
final PlayerClaimPlotEvent event = this.eventDispatcher.callClaim(sender, plot, schematic);
|
||||||
|
if (event.getEventResult() == Result.DENY) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("events.event_denied"),
|
||||||
|
TagResolver.resolver("value", Tag.inserting(Component.text("Claim")))
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final boolean forceClaim = event.getEventResult() == Result.FORCE;
|
||||||
|
final int currentPlots = Settings.Limit.GLOBAL ?
|
||||||
|
sender.getPlotCount() :
|
||||||
|
sender.getPlotCount(sender.getLocation().getWorldName());
|
||||||
|
final PlotArea area = plot.getArea();
|
||||||
|
|
||||||
|
try (final MetaDataAccess<Integer> metaDataAccess = sender.accessPersistentMetaData(
|
||||||
|
PlayerMetaDataKeys.PERSISTENT_GRANTED_PLOTS
|
||||||
|
)) {
|
||||||
|
int grants = 0;
|
||||||
|
if (currentPlots >= sender.getAllowedPlots() && !forceClaim) {
|
||||||
|
if (metaDataAccess.isPresent()) {
|
||||||
|
grants = metaDataAccess.get().orElse(0);
|
||||||
|
if (grants <= 0) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
|
TagResolver.resolver("amount", Tag.inserting(Component.text(grants)))
|
||||||
|
);
|
||||||
|
metaDataAccess.remove();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
|
TagResolver.resolver("amount", Tag.inserting(Component.text(sender.getAllowedPlots())))
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plot.canClaim(sender)) {
|
||||||
|
sender.sendMessage(TranslatableCaption.of("working.plot_is_claimed"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schematic != null && !schematic.isEmpty()) {
|
||||||
|
if (area.isSchematicClaimSpecify()) {
|
||||||
|
if (!area.hasSchematic(schematic)) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("schematics.schematic_invalid_named"),
|
||||||
|
TagResolver.builder()
|
||||||
|
.tag("schemname", Tag.inserting(Component.text(schematic)))
|
||||||
|
.tag("reason", Tag.inserting(Component.text("non-existent")))
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sender.hasPermission(
|
||||||
|
Permission.PERMISSION_CLAIM_SCHEMATIC.format(schematic)
|
||||||
|
) && !sender.hasPermission(
|
||||||
|
"plots.admin.command.schematic"
|
||||||
|
) && !forceClaim) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("permission.no_schematic_permission"),
|
||||||
|
TagResolver.resolver("value", Tag.inserting(Component.text(schematic)))
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.econHandler.isEnabled(area) && !forceClaim) {
|
||||||
|
final PlotExpression costExr = area.getPrices().get("claim");
|
||||||
|
final double cost = costExr.evaluate(currentPlots);
|
||||||
|
|
||||||
|
if (cost > 0d) {
|
||||||
|
if (!this.econHandler.isSupported()) {
|
||||||
|
sender.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.econHandler.getMoney(sender) < cost) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("economy.cannot_afford_plot"),
|
||||||
|
TagResolver.builder()
|
||||||
|
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
||||||
|
.tag(
|
||||||
|
"balance",
|
||||||
|
Tag.inserting(
|
||||||
|
Component.text(this.econHandler.format(this.econHandler.getMoney(sender)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.econHandler.withdrawMoney(sender, cost);
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
|
TagResolver.builder()
|
||||||
|
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
||||||
|
.tag(
|
||||||
|
"balance",
|
||||||
|
Tag.inserting(
|
||||||
|
Component.text(this.econHandler.format(this.econHandler.getMoney(sender)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grants > 0) {
|
||||||
|
if (grants == 1) {
|
||||||
|
metaDataAccess.remove();
|
||||||
|
} else {
|
||||||
|
metaDataAccess.set(grants - 1);
|
||||||
|
}
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||||
|
TagResolver.builder()
|
||||||
|
.tag("usedGrants", Tag.inserting(Component.text(grants - 1)))
|
||||||
|
.tag("remainingGrants", Tag.inserting(Component.text(grants)))
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sender.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
|
final int border = area.getBorder();
|
||||||
|
if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !forceClaim) {
|
||||||
|
sender.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actually update the owner :)
|
||||||
|
plot.setOwnerAbs(sender.getUUID());
|
||||||
|
|
||||||
|
DBFunc.createPlotSafe(plot, () -> {
|
||||||
|
try {
|
||||||
|
TaskManager.getPlatformImplementation().sync(() -> {
|
||||||
|
if (!plot.claim(sender, true, event.getSchematic(), false, false)) {
|
||||||
|
LOGGER.info("Failed to claim plot {}", plot.getId().toCommaSeparatedString());
|
||||||
|
sender.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
|
||||||
|
plot.setOwnerAbs(null);
|
||||||
|
} else if (area.isAutoMerge()) {
|
||||||
|
final PlotMergeEvent mergeEvent = this.eventDispatcher.callMerge(
|
||||||
|
plot,
|
||||||
|
Direction.ALL,
|
||||||
|
Integer.MAX_VALUE,
|
||||||
|
sender
|
||||||
|
);
|
||||||
|
if (mergeEvent.getEventResult() == Result.DENY) {
|
||||||
|
sender.sendMessage(
|
||||||
|
TranslatableCaption.of("events.event_denied"),
|
||||||
|
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge on claim")))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (plot.getPlotModificationManager().autoMerge(
|
||||||
|
mergeEvent.getDir(),
|
||||||
|
mergeEvent.getMax(),
|
||||||
|
sender.getUUID(),
|
||||||
|
sender,
|
||||||
|
true
|
||||||
|
)) {
|
||||||
|
eventDispatcher.callPostMerge(sender, plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
} catch (final Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}, () -> {
|
||||||
|
LOGGER.info("Failed to add plot to database: {}", plot.getId().toCommaSeparatedString());
|
||||||
|
sender.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
|
||||||
|
plot.setOwnerAbs(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -75,7 +75,8 @@ public class PlotSquaredCommandManager {
|
|||||||
).map(this.injector::getInstance).forEach(this::scanClass);
|
).map(this.injector::getInstance).forEach(this::scanClass);
|
||||||
// Then we scan the commands.
|
// Then we scan the commands.
|
||||||
Stream.of(
|
Stream.of(
|
||||||
CommandAdd.class
|
CommandAdd.class,
|
||||||
|
CommandClaim.class
|
||||||
).map(this.injector::getInstance).forEach(this::scanClass);
|
).map(this.injector::getInstance).forEach(this::scanClass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user