mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 11:13:45 +01:00 
			
		
		
		
	fix: allow cauldron in use flag to behave as expected (#4673)
This commit is contained in:
		@@ -64,9 +64,11 @@ import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.TamedInteractFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.UseFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.VehicleBreakFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.VehicleUseFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.VillagerInteractFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
 | 
			
		||||
import com.plotsquared.core.plot.world.PlotAreaManager;
 | 
			
		||||
import com.plotsquared.core.util.EventDispatcher;
 | 
			
		||||
import com.plotsquared.core.util.MathMan;
 | 
			
		||||
@@ -78,6 +80,7 @@ import com.plotsquared.core.util.task.TaskTime;
 | 
			
		||||
import com.sk89q.worldedit.WorldEdit;
 | 
			
		||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
 | 
			
		||||
import com.sk89q.worldedit.world.block.BlockType;
 | 
			
		||||
import com.sk89q.worldedit.world.block.BlockTypes;
 | 
			
		||||
import io.papermc.lib.PaperLib;
 | 
			
		||||
import net.kyori.adventure.text.Component;
 | 
			
		||||
import net.kyori.adventure.text.minimessage.MiniMessage;
 | 
			
		||||
@@ -152,9 +155,11 @@ import org.bukkit.util.Vector;
 | 
			
		||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
@@ -179,6 +184,7 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
            Material.WRITTEN_BOOK
 | 
			
		||||
    );
 | 
			
		||||
    private static final Set<String> DYES;
 | 
			
		||||
 | 
			
		||||
    static {
 | 
			
		||||
        Set<String> mutableDyes = new HashSet<>(Set.of(
 | 
			
		||||
                "WHITE_DYE",
 | 
			
		||||
@@ -213,7 +219,7 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        // "temporary" fix for https://hub.spigotmc.org/jira/browse/SPIGOT-7813
 | 
			
		||||
        // can (and should) be removed when 1.21 support is dropped
 | 
			
		||||
        // List of all interactable 1.21 materials
 | 
			
		||||
        INTERACTABLE_MATERIALS = Material.CHEST.isInteractable() ? null :  Set.of(
 | 
			
		||||
        INTERACTABLE_MATERIALS = Material.CHEST.isInteractable() ? null : Set.of(
 | 
			
		||||
                "REDSTONE_ORE", "DEEPSLATE_REDSTONE_ORE", "CHISELED_BOOKSHELF", "DECORATED_POT", "CHEST", "CRAFTING_TABLE",
 | 
			
		||||
                "FURNACE", "JUKEBOX", "OAK_FENCE", "SPRUCE_FENCE", "BIRCH_FENCE", "JUNGLE_FENCE", "ACACIA_FENCE", "CHERRY_FENCE",
 | 
			
		||||
                "DARK_OAK_FENCE", "MANGROVE_FENCE", "BAMBOO_FENCE", "CRIMSON_FENCE", "WARPED_FENCE", "PUMPKIN",
 | 
			
		||||
@@ -531,12 +537,14 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        // Delayed
 | 
			
		||||
 | 
			
		||||
        // Async
 | 
			
		||||
        TaskManager.runTaskLaterAsync(() -> {
 | 
			
		||||
            if (!player.hasPlayedBefore() && player.isOnline()) {
 | 
			
		||||
                player.saveData();
 | 
			
		||||
            }
 | 
			
		||||
            this.eventDispatcher.doJoinTask(pp);
 | 
			
		||||
        }, TaskTime.seconds(1L));
 | 
			
		||||
        TaskManager.runTaskLaterAsync(
 | 
			
		||||
                () -> {
 | 
			
		||||
                    if (!player.hasPlayedBefore() && player.isOnline()) {
 | 
			
		||||
                        player.saveData();
 | 
			
		||||
                    }
 | 
			
		||||
                    this.eventDispatcher.doJoinTask(pp);
 | 
			
		||||
                }, TaskTime.seconds(1L)
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (pp.hasPermission(Permission.PERMISSION_ADMIN_UPDATE_NOTIFICATION.toString()) && Settings.Enabled_Components.UPDATE_NOTIFICATIONS
 | 
			
		||||
                && PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
 | 
			
		||||
@@ -597,7 +605,9 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
                    // to is identical to the plot's home location, and untrusted-visit is true
 | 
			
		||||
                    // 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)))) {
 | 
			
		||||
                    if (result || (plot.getFlag(UntrustedVisitFlag.class) && plot
 | 
			
		||||
                            .getHomeSynchronous()
 | 
			
		||||
                            .equals(BukkitUtil.adaptComplete(to)))) {
 | 
			
		||||
                        // 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)) {
 | 
			
		||||
@@ -941,12 +951,15 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        builder.tag("plot_id", Tag.inserting(Component.text(id.toString())));
 | 
			
		||||
        builder.tag("sender", Tag.inserting(Component.text(sender)));
 | 
			
		||||
        if (plotPlayer.hasPermission("plots.chat.color")) {
 | 
			
		||||
            builder.tag("msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
 | 
			
		||||
                    message,
 | 
			
		||||
                    TagResolver.resolver(StandardTags.color(), StandardTags.gradient(),
 | 
			
		||||
                            StandardTags.rainbow(), StandardTags.decorations()
 | 
			
		||||
                    )
 | 
			
		||||
            )));
 | 
			
		||||
            builder.tag(
 | 
			
		||||
                    "msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
 | 
			
		||||
                            message,
 | 
			
		||||
                            TagResolver.resolver(
 | 
			
		||||
                                    StandardTags.color(), StandardTags.gradient(),
 | 
			
		||||
                                    StandardTags.rainbow(), StandardTags.decorations()
 | 
			
		||||
                            )
 | 
			
		||||
                    ))
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            builder.tag("msg", Tag.inserting(Component.text(message)));
 | 
			
		||||
        }
 | 
			
		||||
@@ -1255,7 +1268,9 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
                eventType = PlayerBlockEventType.INTERACT_BLOCK;
 | 
			
		||||
                blocktype1 = BukkitAdapter.asBlockType(block.getType());
 | 
			
		||||
 | 
			
		||||
                if (INTERACTABLE_MATERIALS != null ? INTERACTABLE_MATERIALS.contains(blockType.name()) : blockType.isInteractable()) {
 | 
			
		||||
                if (INTERACTABLE_MATERIALS != null
 | 
			
		||||
                        ? INTERACTABLE_MATERIALS.contains(blockType.name())
 | 
			
		||||
                        : blockType.isInteractable()) {
 | 
			
		||||
                    if (!player.isSneaking()) {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -1273,7 +1288,7 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
                // in the following, lb needs to have the material of the item in hand i.e. type
 | 
			
		||||
                switch (type.toString()) {
 | 
			
		||||
                    case "REDSTONE", "STRING", "PUMPKIN_SEEDS", "MELON_SEEDS", "COCOA_BEANS", "WHEAT_SEEDS", "BEETROOT_SEEDS",
 | 
			
		||||
                            "SWEET_BERRIES", "GLOW_BERRIES" -> {
 | 
			
		||||
                         "SWEET_BERRIES", "GLOW_BERRIES" -> {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    default -> {
 | 
			
		||||
@@ -1391,6 +1406,16 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
        BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
 | 
			
		||||
        Plot plot = area.getPlot(location);
 | 
			
		||||
        final List<BlockTypeWrapper> use =
 | 
			
		||||
                Optional.ofNullable(plot).map(p -> p.getFlag(UseFlag.class)).orElse(area.isRoadFlags() ?
 | 
			
		||||
                        area.getFlag(UseFlag.class) : Collections.emptyList());
 | 
			
		||||
        BlockType type = BukkitAdapter.asBlockType(block.getType());
 | 
			
		||||
        for (final BlockTypeWrapper blockTypeWrapper : use) {
 | 
			
		||||
            if (blockTypeWrapper.accepts(BlockTypes.AIR) || blockTypeWrapper
 | 
			
		||||
                    .accepts(type)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
 | 
			
		||||
                return;
 | 
			
		||||
@@ -1462,6 +1487,16 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        Player player = event.getPlayer();
 | 
			
		||||
        BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
 | 
			
		||||
        Plot plot = area.getPlot(location);
 | 
			
		||||
        final List<BlockTypeWrapper> use =
 | 
			
		||||
                Optional.ofNullable(plot).map(p -> p.getFlag(UseFlag.class)).orElse(area.isRoadFlags() ?
 | 
			
		||||
                        area.getFlag(UseFlag.class) : Collections.emptyList());
 | 
			
		||||
        BlockType type = BukkitAdapter.asBlockType(blockClicked.getType());
 | 
			
		||||
        for (final BlockTypeWrapper blockTypeWrapper : use) {
 | 
			
		||||
            if (blockTypeWrapper.accepts(BlockTypes.AIR) || blockTypeWrapper
 | 
			
		||||
                    .accepts(type)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
 | 
			
		||||
                return;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user