mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-21 06:44:43 +02:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
519b8453be | |||
aa44078018 | |||
bfbf406418 | |||
2accedf264 | |||
6ef0d58480 | |||
fbf4a638b4 |
@ -28,7 +28,6 @@ import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag;
|
||||
import com.plotsquared.core.util.PlotFlagUtil;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Item;
|
||||
@ -42,31 +41,11 @@ import org.bukkit.event.block.BlockReceiveGameEvent;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class BlockEventListener117 implements Listener {
|
||||
|
||||
private static final Set<Material> COPPER_OXIDIZING = Set.of(
|
||||
Material.COPPER_BLOCK,
|
||||
Material.EXPOSED_COPPER,
|
||||
Material.WEATHERED_COPPER,
|
||||
Material.OXIDIZED_COPPER,
|
||||
Material.CUT_COPPER,
|
||||
Material.EXPOSED_CUT_COPPER,
|
||||
Material.WEATHERED_CUT_COPPER,
|
||||
Material.OXIDIZED_CUT_COPPER,
|
||||
Material.CUT_COPPER_STAIRS,
|
||||
Material.EXPOSED_CUT_COPPER_STAIRS,
|
||||
Material.WEATHERED_CUT_COPPER_STAIRS,
|
||||
Material.OXIDIZED_CUT_COPPER_STAIRS,
|
||||
Material.CUT_COPPER_SLAB,
|
||||
Material.EXPOSED_CUT_COPPER_SLAB,
|
||||
Material.WEATHERED_CUT_COPPER_SLAB,
|
||||
Material.OXIDIZED_CUT_COPPER_SLAB
|
||||
);
|
||||
|
||||
@Inject
|
||||
public BlockEventListener117() {
|
||||
}
|
||||
@ -184,7 +163,7 @@ public class BlockEventListener117 implements Listener {
|
||||
if (plot == null) {
|
||||
return;
|
||||
}
|
||||
if (COPPER_OXIDIZING.contains(event.getNewState().getType())) {
|
||||
if (event.getNewState().getType().name().contains("COPPER")) {
|
||||
if (!plot.getFlag(CopperOxideFlag.class)) {
|
||||
plot.debug("Copper could not oxide because copper-oxide = false");
|
||||
event.setCancelled(true);
|
||||
|
@ -88,10 +88,8 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.FluidCollisionMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Boat;
|
||||
@ -600,7 +598,11 @@ public class PlayerEventListener implements Listener {
|
||||
// i.e. untrusted-visit can override deny-teleport
|
||||
// this is acceptable, because otherwise it wouldn't make sense to have both flags set
|
||||
if (result || (plot.getFlag(UntrustedVisitFlag.class) && plot.getHomeSynchronous().equals(BukkitUtil.adaptComplete(to)))) {
|
||||
plotListener.plotEntry(pp, plot);
|
||||
// returns false if the player is not allowed to enter the plot (if they are denied, for example)
|
||||
// don't let the move event cancel the entry after teleport, but rather catch and cancel early (#4647)
|
||||
if (!plotListener.plotEntry(pp, plot)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("deny.no_enter"),
|
||||
@ -1370,22 +1372,7 @@ public class PlayerEventListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||
BlockFace bf = event.getBlockFace();
|
||||
// Note: a month after Bukkit 1.14.4 released, they added the API method
|
||||
// PlayerBucketEmptyEvent#getBlock(), which returns the block the
|
||||
// bucket contents is going to be placed at. Currently we determine this
|
||||
// block ourselves to retain compatibility with 1.13.
|
||||
final Block block;
|
||||
// if the block can be waterlogged, the event might waterlog the block
|
||||
// sometimes
|
||||
if (event.getBlockClicked().getBlockData() instanceof Waterlogged waterlogged
|
||||
&& !waterlogged.isWaterlogged() && event.getBucket() != Material.LAVA_BUCKET) {
|
||||
block = event.getBlockClicked();
|
||||
} else {
|
||||
block = event.getBlockClicked().getLocation()
|
||||
.add(bf.getModX(), bf.getModY(), bf.getModZ())
|
||||
.getBlock();
|
||||
}
|
||||
final Block block = event.getBlock();
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
|
@ -124,7 +124,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
||||
* Gets the server brand name
|
||||
*
|
||||
* @return server brand
|
||||
* @since TODO
|
||||
* @since 7.5.3
|
||||
*/
|
||||
@NonNull String serverBrand();
|
||||
|
||||
|
@ -24,6 +24,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -98,6 +99,14 @@ public enum CommandCategory implements Caption {
|
||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Component toComponent(
|
||||
@NonNull final LocaleHolder localeHolder,
|
||||
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||
) {
|
||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a player has access to this command category
|
||||
*
|
||||
|
@ -113,38 +113,34 @@ public class Help extends Command {
|
||||
}
|
||||
if (cat == null && page == 0) {
|
||||
TextComponent.Builder builder = Component.text();
|
||||
builder.append(MINI_MESSAGE.deserialize(TranslatableCaption.of("help.help_header").getComponent(player)));
|
||||
builder.append(TranslatableCaption.of("help.help_header").toComponent(player));
|
||||
for (CommandCategory c : CommandCategory.values()) {
|
||||
if (!c.canAccess(player)) {
|
||||
continue;
|
||||
}
|
||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
||||
.deserialize(
|
||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
||||
TagResolver.builder()
|
||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
|
||||
.tag("category_desc", Tag.inserting(c.toComponent(player)))
|
||||
.build()
|
||||
));
|
||||
builder.append(Component.newline());
|
||||
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
|
||||
player, TagResolver.builder()
|
||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
|
||||
.tag("category_desc", Tag.inserting(c.toComponent(player)))
|
||||
.build()
|
||||
));
|
||||
}
|
||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
||||
.deserialize(
|
||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
||||
TagResolver.builder()
|
||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||
.tag("category", Tag.inserting(Component.text("all")))
|
||||
.tag(
|
||||
"category_desc",
|
||||
Tag.inserting(TranslatableCaption
|
||||
.of("help.help_display_all_commands")
|
||||
.toComponent(player))
|
||||
)
|
||||
.build()
|
||||
));
|
||||
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
||||
.of("help.help_footer")
|
||||
.getComponent(player)));
|
||||
builder.append(Component.newline());
|
||||
builder.append(TranslatableCaption.of("help.help_info_item").toComponent(
|
||||
player, TagResolver.builder()
|
||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||
.tag("category", Tag.inserting(Component.text("all")))
|
||||
.tag(
|
||||
"category_desc", Tag.inserting(TranslatableCaption
|
||||
.of("help.help_display_all_commands")
|
||||
.toComponent(player))
|
||||
)
|
||||
.build()
|
||||
));
|
||||
builder.append(Component.newline());
|
||||
builder.append(TranslatableCaption.of("help.help_footer").toComponent(player));
|
||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
|
||||
return true;
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ package com.plotsquared.core.configuration.caption;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
@ -44,6 +45,16 @@ public interface Caption {
|
||||
*/
|
||||
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder);
|
||||
|
||||
/**
|
||||
* Get the Adventure {@link ComponentLike} for this caption while applying custom {@link TagResolver}
|
||||
* (apart from the default {@code core.prefix})
|
||||
* @param localeHolder Local holder
|
||||
* @param tagResolvers custom tag resolvers to replace placeholders / parameters
|
||||
* @return {@link ComponentLike}
|
||||
* @since TODO
|
||||
*/
|
||||
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder, @NonNull TagResolver @NonNull... tagResolvers);
|
||||
|
||||
@NonNull String toString();
|
||||
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ package com.plotsquared.core.configuration.caption;
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public final class StaticCaption implements Caption {
|
||||
@ -51,6 +52,14 @@ public final class StaticCaption implements Caption {
|
||||
return MiniMessage.miniMessage().deserialize(this.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Component toComponent(
|
||||
@NonNull final LocaleHolder localeHolder,
|
||||
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||
) {
|
||||
return MiniMessage.miniMessage().deserialize(this.value, tagResolvers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String toString() {
|
||||
return "StaticCaption(" + value + ")";
|
||||
|
@ -27,6 +27,7 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@ -96,13 +97,23 @@ public final class TranslatableCaption implements NamespacedCaption {
|
||||
|
||||
@Override
|
||||
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
|
||||
return this.toComponent(localeHolder, new TagResolver[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Component toComponent(
|
||||
@NonNull final LocaleHolder localeHolder,
|
||||
final @NonNull TagResolver @NonNull ... tagResolvers
|
||||
) {
|
||||
if (getKey().equals("core.prefix")) {
|
||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
||||
}
|
||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), TagResolver.resolver(
|
||||
TagResolver[] finalResolvers = Arrays.copyOf(tagResolvers, tagResolvers.length + 1);
|
||||
finalResolvers[finalResolvers.length - 1] = TagResolver.resolver(
|
||||
"prefix",
|
||||
Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(localeHolder))
|
||||
));
|
||||
);
|
||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder), finalResolvers);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -25,30 +25,24 @@ import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.util.StringMan;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class HelpObject implements ComponentLike {
|
||||
|
||||
static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
|
||||
|
||||
private final Component rendered;
|
||||
|
||||
public HelpObject(final Command command, final String label, final PlotPlayer<?> audience) {
|
||||
rendered = MINI_MESSAGE.deserialize(
|
||||
TranslatableCaption.of("help.help_item").getComponent(audience),
|
||||
TagResolver.builder()
|
||||
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
|
||||
.tag("alias", Tag.inserting(Component.text(
|
||||
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
|
||||
)))
|
||||
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
|
||||
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
|
||||
.tag("label", Tag.inserting(Component.text(label)))
|
||||
.build()
|
||||
);
|
||||
this.rendered = TranslatableCaption.of("help.help_item").toComponent(audience, TagResolver.builder()
|
||||
.tag("usage", Tag.inserting(Component.text(command.getUsage().replace("{label}", label))))
|
||||
.tag("alias", Tag.inserting(Component.text(
|
||||
command.getAliases().isEmpty() ? "" : StringMan.join(command.getAliases(), " | ")
|
||||
)))
|
||||
.tag("desc", Tag.inserting(command.getDescription().toComponent(audience)))
|
||||
.tag("arguments", Tag.inserting(Component.text(buildArgumentList(command.getRequiredArguments()))))
|
||||
.tag("label", Tag.inserting(Component.text(label)))
|
||||
.build());
|
||||
}
|
||||
|
||||
private String buildArgumentList(final Argument<?>[] arguments) {
|
||||
|
@ -22,7 +22,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.intellectualsites.plotsquared"
|
||||
version = "7.5.3-SNAPSHOT"
|
||||
version = "7.5.4-SNAPSHOT"
|
||||
|
||||
if (!File("$rootDir/.git").exists()) {
|
||||
logger.lifecycle("""
|
||||
@ -206,14 +206,14 @@ tasks.getByName<Jar>("jar") {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4")
|
||||
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5")
|
||||
tasks {
|
||||
register("cacheLatestFaweArtifact") {
|
||||
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
|
||||
val artifact = ((JsonSlurper().parse(lastSuccessfulBuildUrl) as Map<*, *>)["artifacts"] as List<*>)
|
||||
.map { it as Map<*, *> }
|
||||
.map { it["fileName"] as String }
|
||||
.first { it -> it.contains("Bukkit") }
|
||||
.first { it -> it.contains("Paper") }
|
||||
project.ext["faweArtifact"] = artifact
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user