mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-04 14:44:43 +02:00
Compare commits
1 Commits
6.10.1
...
chore/v6/c
Author | SHA1 | Date | |
---|---|---|---|
76e761fcf3 |
@ -41,7 +41,6 @@ import com.plotsquared.bukkit.listener.PlayerEventListener;
|
|||||||
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
||||||
import com.plotsquared.bukkit.listener.ServerListener;
|
import com.plotsquared.bukkit.listener.ServerListener;
|
||||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||||
import com.plotsquared.bukkit.listener.SpigotListener;
|
|
||||||
import com.plotsquared.bukkit.listener.WorldEvents;
|
import com.plotsquared.bukkit.listener.WorldEvents;
|
||||||
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
||||||
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
||||||
@ -361,8 +360,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
} else {
|
} else {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
|
||||||
}
|
}
|
||||||
this.plotListener.startRunnable();
|
this.plotListener.startRunnable();
|
||||||
}
|
}
|
||||||
|
@ -442,7 +442,6 @@ public class BlockEventListener implements Listener {
|
|||||||
case "TWISTING_VINES":
|
case "TWISTING_VINES":
|
||||||
case "CAVE_VINES":
|
case "CAVE_VINES":
|
||||||
case "VINE":
|
case "VINE":
|
||||||
case "GLOW_BERRIES":
|
|
||||||
if (!plot.getFlag(VineGrowFlag.class)) {
|
if (!plot.getFlag(VineGrowFlag.class)) {
|
||||||
plot.debug("Vine could not grow because vine-grow = false");
|
plot.debug("Vine could not grow because vine-grow = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
@ -38,11 +39,8 @@ public class ForceFieldListener {
|
|||||||
|
|
||||||
private static Set<PlotPlayer<?>> getNearbyPlayers(Player player, Plot plot) {
|
private static Set<PlotPlayer<?>> getNearbyPlayers(Player player, Plot plot) {
|
||||||
Set<PlotPlayer<?>> players = new HashSet<>();
|
Set<PlotPlayer<?>> players = new HashSet<>();
|
||||||
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
|
for (Player nearPlayer : Iterables
|
||||||
.filter(entity -> entity instanceof Player)
|
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
|
||||||
.map(entity -> (Player) entity)
|
|
||||||
.toList()
|
|
||||||
) {
|
|
||||||
PlotPlayer<?> plotPlayer;
|
PlotPlayer<?> plotPlayer;
|
||||||
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
||||||
.equals(plotPlayer.getCurrentPlot())) {
|
.equals(plotPlayer.getCurrentPlot())) {
|
||||||
@ -56,11 +54,8 @@ public class ForceFieldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static PlotPlayer<?> hasNearbyPermitted(Player player, Plot plot) {
|
private static PlotPlayer<?> hasNearbyPermitted(Player player, Plot plot) {
|
||||||
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
|
for (Player nearPlayer : Iterables
|
||||||
.filter(entity -> entity instanceof Player)
|
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
|
||||||
.map(entity -> (Player) entity)
|
|
||||||
.toList()
|
|
||||||
) {
|
|
||||||
PlotPlayer<?> plotPlayer;
|
PlotPlayer<?> plotPlayer;
|
||||||
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
||||||
.equals(plotPlayer.getCurrentPlot())) {
|
.equals(plotPlayer.getCurrentPlot())) {
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
|
||||||
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
||||||
@ -37,11 +36,8 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.flag.FlagContainer;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
@ -404,50 +400,4 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onBeaconEffect(final BeaconEffectEvent event) {
|
|
||||||
Block block = event.getBlock();
|
|
||||||
Location beaconLocation = BukkitUtil.adapt(block.getLocation());
|
|
||||||
Plot beaconPlot = beaconLocation.getPlot();
|
|
||||||
|
|
||||||
PlotArea area = beaconLocation.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
Location playerLocation = BukkitUtil.adapt(player.getLocation());
|
|
||||||
|
|
||||||
PlotPlayer<Player> plotPlayer = BukkitUtil.adapt(player);
|
|
||||||
Plot playerStandingPlot = playerLocation.getPlot();
|
|
||||||
if (playerStandingPlot == null) {
|
|
||||||
FlagContainer container = area.getRoadFlagContainer();
|
|
||||||
if (!getBooleanFlagValue(container, BeaconEffectsFlag.class, true) ||
|
|
||||||
(beaconPlot != null && Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FlagContainer container = playerStandingPlot.getFlagContainer();
|
|
||||||
boolean plotBeaconEffects = getBooleanFlagValue(container, BeaconEffectsFlag.class, true);
|
|
||||||
if (playerStandingPlot.equals(beaconPlot)) {
|
|
||||||
if (!plotBeaconEffects) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plotBeaconEffects || Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
|
|
||||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
|
||||||
boolean defaultValue) {
|
|
||||||
BooleanFlag<?> flag = container.getFlag(flagClass);
|
|
||||||
return flag == null ? defaultValue : flag.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,6 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
@ -143,7 +142,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
import org.bukkit.metadata.MetadataValue;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -206,29 +204,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
this.plotListener = plotListener;
|
this.plotListener = plotListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
|
||||||
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
|
||||||
event.getCause() != EntityPotionEffectEvent.Cause.BEACON ||
|
|
||||||
!(event.getEntity() instanceof Player player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UUID uuid = player.getUniqueId();
|
|
||||||
PotionEffect effect = event.getNewEffect();
|
|
||||||
if (effect == null) {
|
|
||||||
PotionEffect oldEffect = event.getOldEffect();
|
|
||||||
if (oldEffect != null) {
|
|
||||||
String name = oldEffect.getType().getName();
|
|
||||||
plotListener.addEffect(uuid, name, -1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
long expiresAt = System.currentTimeMillis() + effect.getDuration() * 50L; //Convert ticks to milliseconds
|
|
||||||
String name = effect.getType().getName();
|
|
||||||
plotListener.addEffect(uuid, name, expiresAt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
|
||||||
if (e.getVehicle().getType() == EntityType.BOAT) {
|
if (e.getVehicle().getType() == EntityType.BOAT) {
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.listener;
|
|
||||||
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
|
||||||
import com.plotsquared.core.location.Location;
|
|
||||||
import com.plotsquared.core.plot.Plot;
|
|
||||||
import com.plotsquared.core.plot.flag.FlagContainer;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fallback listener for paper events on spigot
|
|
||||||
*/
|
|
||||||
public class SpigotListener implements Listener {
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
|
||||||
if (event.getCause() != EntityPotionEffectEvent.Cause.BEACON) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
|
||||||
Plot plot = location.getPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FlagContainer container = plot.getFlagContainer();
|
|
||||||
BeaconEffectsFlag effectsEnabled = container.getFlag(BeaconEffectsFlag.class);
|
|
||||||
if (effectsEnabled != null && !effectsEnabled.getValue()) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -47,13 +47,13 @@ import org.bukkit.event.EventException;
|
|||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
import org.bukkit.plugin.RegisteredListener;
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
import org.checkerframework.checker.index.qual.NonNegative;
|
import org.checkerframework.checker.index.qual.NonNegative;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.sk89q.worldedit.world.gamemode.GameModes.ADVENTURE;
|
import static com.sk89q.worldedit.world.gamemode.GameModes.ADVENTURE;
|
||||||
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
|
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
|
||||||
@ -348,14 +348,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
|
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeEffect(@NonNull String name) {
|
|
||||||
PotionEffectType type = PotionEffectType.getByName(name);
|
|
||||||
if (type != null) {
|
|
||||||
player.removePotionEffect(type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canSee(final PlotPlayer<?> other) {
|
public boolean canSee(final PlotPlayer<?> other) {
|
||||||
if (other instanceof ConsolePlayer) {
|
if (other instanceof ConsolePlayer) {
|
||||||
|
@ -58,7 +58,6 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.data.Directional;
|
import org.bukkit.block.data.Directional;
|
||||||
import org.bukkit.block.data.type.WallSign;
|
import org.bukkit.block.data.type.WallSign;
|
||||||
import org.bukkit.entity.Allay;
|
|
||||||
import org.bukkit.entity.Ambient;
|
import org.bukkit.entity.Ambient;
|
||||||
import org.bukkit.entity.Animals;
|
import org.bukkit.entity.Animals;
|
||||||
import org.bukkit.entity.AreaEffectCloud;
|
import org.bukkit.entity.AreaEffectCloud;
|
||||||
@ -438,9 +437,6 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
allowedInterfaces.add(Animals.class);
|
allowedInterfaces.add(Animals.class);
|
||||||
allowedInterfaces.add(WaterMob.class);
|
allowedInterfaces.add(WaterMob.class);
|
||||||
allowedInterfaces.add(Ambient.class);
|
allowedInterfaces.add(Ambient.class);
|
||||||
if (PlotSquared.platform().serverVersion()[1] >= 19) {
|
|
||||||
allowedInterfaces.add(Allay.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case "tameable" -> allowedInterfaces.add(Tameable.class);
|
case "tameable" -> allowedInterfaces.add(Tameable.class);
|
||||||
case "vehicle" -> allowedInterfaces.add(Vehicle.class);
|
case "vehicle" -> allowedInterfaces.add(Vehicle.class);
|
||||||
|
@ -251,7 +251,6 @@ public class Auto extends SubCommand {
|
|||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
|
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
|
||||||
);
|
);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -126,7 +126,6 @@ public class Buy extends Command {
|
|||||||
plot.removeFlag(event.getFlag());
|
plot.removeFlag(event.getFlag());
|
||||||
}
|
}
|
||||||
plot.setOwner(player.getUUID());
|
plot.setOwner(player.getUUID());
|
||||||
plot.getPlotModificationManager().setSign(player.getName());
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("working.claimed"),
|
TranslatableCaption.of("working.claimed"),
|
||||||
Template.of("plot", plot.getId().toString())
|
Template.of("plot", plot.getId().toString())
|
||||||
|
@ -181,7 +181,6 @@ public class Download extends SubCommand {
|
|||||||
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
|
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(URL value) {
|
public void run(URL value) {
|
||||||
plot.removeRunning();
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generation_link_success"),
|
TranslatableCaption.of("web.generation_link_success"),
|
||||||
Template.of("download", value.toString()),
|
Template.of("download", value.toString()),
|
||||||
|
@ -26,7 +26,6 @@ import com.plotsquared.core.util.task.RunnableVal2;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
@CommandDeclaration(command = "near",
|
@CommandDeclaration(command = "near",
|
||||||
@ -49,13 +48,9 @@ public class Near extends Command {
|
|||||||
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
|
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("near.plot_near"),
|
TranslatableCaption.of("near.plot_near"),
|
||||||
Template.of("list", StringMan.join(getPlayersInPlotVisible(plot, player), ", "))
|
Template.of("list", StringMan.join(plot.getPlayersInPlot(), ", "))
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PlotPlayer<?>> getPlayersInPlotVisible(Plot plot, PlotPlayer<?> executor) {
|
|
||||||
return plot.getPlayersInPlot().stream().filter(executor::canSee).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -808,8 +808,6 @@ public class Settings extends Config {
|
|||||||
);
|
);
|
||||||
@Comment("Whether PlotSquared should hook into MvDWPlaceholderAPI or not")
|
@Comment("Whether PlotSquared should hook into MvDWPlaceholderAPI or not")
|
||||||
public static boolean USE_MVDWAPI = true;
|
public static boolean USE_MVDWAPI = true;
|
||||||
@Comment("Prevent cross plot beacon effects")
|
|
||||||
public static boolean DISABLE_BEACON_EFFECT_OVERFLOW = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,17 +28,13 @@ import com.plotsquared.core.inject.annotations.WorldConfig;
|
|||||||
import com.plotsquared.core.plot.BlockBucket;
|
import com.plotsquared.core.plot.BlockBucket;
|
||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||||
import com.sk89q.worldedit.function.pattern.Pattern;
|
|
||||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||||
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.NonNull;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
@SuppressWarnings("WeakerAccess")
|
||||||
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ClassicPlotWorld.class.getSimpleName());
|
|
||||||
|
|
||||||
public int ROAD_HEIGHT = 62;
|
public int ROAD_HEIGHT = 62;
|
||||||
public int PLOT_HEIGHT = 62;
|
public int PLOT_HEIGHT = 62;
|
||||||
@ -125,15 +121,15 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
|||||||
super.loadConfiguration(config);
|
super.loadConfiguration(config);
|
||||||
this.PLOT_BEDROCK = config.getBoolean("plot.bedrock");
|
this.PLOT_BEDROCK = config.getBoolean("plot.bedrock");
|
||||||
this.PLOT_HEIGHT = Math.min(getMaxGenHeight(), config.getInt("plot.height"));
|
this.PLOT_HEIGHT = Math.min(getMaxGenHeight(), config.getInt("plot.height"));
|
||||||
this.MAIN_BLOCK = createCheckedBlockBucket(config.getString("plot.filling"), MAIN_BLOCK);
|
this.MAIN_BLOCK = new BlockBucket(config.getString("plot.filling"));
|
||||||
this.TOP_BLOCK = createCheckedBlockBucket(config.getString("plot.floor"), TOP_BLOCK);
|
this.TOP_BLOCK = new BlockBucket(config.getString("plot.floor"));
|
||||||
this.WALL_BLOCK = createCheckedBlockBucket(config.getString("wall.block"), WALL_BLOCK);
|
this.WALL_BLOCK = new BlockBucket(config.getString("wall.block"));
|
||||||
this.ROAD_HEIGHT = Math.min(getMaxGenHeight(), config.getInt("road.height"));
|
this.ROAD_HEIGHT = Math.min(getMaxGenHeight(), config.getInt("road.height"));
|
||||||
this.ROAD_BLOCK = createCheckedBlockBucket(config.getString("road.block"), ROAD_BLOCK);
|
this.ROAD_BLOCK = new BlockBucket(config.getString("road.block"));
|
||||||
this.WALL_FILLING = createCheckedBlockBucket(config.getString("wall.filling"), WALL_FILLING);
|
this.WALL_FILLING = new BlockBucket(config.getString("wall.filling"));
|
||||||
this.PLACE_TOP_BLOCK = config.getBoolean("wall.place_top_block");
|
this.PLACE_TOP_BLOCK = config.getBoolean("wall.place_top_block");
|
||||||
this.WALL_HEIGHT = Math.min(getMaxGenHeight() - (PLACE_TOP_BLOCK ? 1 : 0), config.getInt("wall.height"));
|
this.WALL_HEIGHT = Math.min(getMaxGenHeight() - (PLACE_TOP_BLOCK ? 1 : 0), config.getInt("wall.height"));
|
||||||
this.CLAIMED_WALL_BLOCK = createCheckedBlockBucket(config.getString("wall.block_claimed"), CLAIMED_WALL_BLOCK);
|
this.CLAIMED_WALL_BLOCK = new BlockBucket(config.getString("wall.block_claimed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
int schematicStartHeight() {
|
int schematicStartHeight() {
|
||||||
@ -144,19 +140,4 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld {
|
|||||||
return Math.min(WALL_HEIGHT, plotRoadMin);
|
return Math.min(WALL_HEIGHT, plotRoadMin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BlockBucket createCheckedBlockBucket(String input, BlockBucket def) {
|
|
||||||
final BlockBucket bucket = new BlockBucket(input);
|
|
||||||
Pattern pattern = null;
|
|
||||||
try {
|
|
||||||
pattern = bucket.toPattern();
|
|
||||||
} catch (Exception ignore) {
|
|
||||||
}
|
|
||||||
if (pattern == null) {
|
|
||||||
LOGGER.error("Failed to parse pattern '{}', check your worlds.yml", input);
|
|
||||||
LOGGER.error("Falling back to {}", def);
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
return bucket;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -67,13 +67,10 @@ import com.sk89q.worldedit.world.item.ItemType;
|
|||||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -85,7 +82,6 @@ public class PlotListener {
|
|||||||
|
|
||||||
private final HashMap<UUID, Interval> feedRunnable = new HashMap<>();
|
private final HashMap<UUID, Interval> feedRunnable = new HashMap<>();
|
||||||
private final HashMap<UUID, Interval> healRunnable = new HashMap<>();
|
private final HashMap<UUID, Interval> healRunnable = new HashMap<>();
|
||||||
private final Map<UUID, List<StatusEffect>> playerEffects = new HashMap<>();
|
|
||||||
|
|
||||||
private final EventDispatcher eventDispatcher;
|
private final EventDispatcher eventDispatcher;
|
||||||
|
|
||||||
@ -135,17 +131,6 @@ public class PlotListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playerEffects.isEmpty()) {
|
|
||||||
long currentTime = System.currentTimeMillis();
|
|
||||||
for (Iterator<Map.Entry<UUID, List<StatusEffect>>> iterator =
|
|
||||||
playerEffects.entrySet().iterator(); iterator.hasNext(); ) {
|
|
||||||
Map.Entry<UUID, List<StatusEffect>> entry = iterator.next();
|
|
||||||
List<StatusEffect> effects = entry.getValue();
|
|
||||||
effects.removeIf(effect -> currentTime > effect.expiresAt);
|
|
||||||
if (effects.isEmpty()) iterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, TaskTime.seconds(1L));
|
}, TaskTime.seconds(1L));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,17 +360,6 @@ public class PlotListener {
|
|||||||
try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
||||||
final Plot previous = lastPlot.remove();
|
final Plot previous = lastPlot.remove();
|
||||||
this.eventDispatcher.callLeave(player, plot);
|
this.eventDispatcher.callLeave(player, plot);
|
||||||
|
|
||||||
List<StatusEffect> effects = playerEffects.remove(player.getUUID());
|
|
||||||
if (effects != null) {
|
|
||||||
long currentTime = System.currentTimeMillis();
|
|
||||||
effects.forEach(effect -> {
|
|
||||||
if (currentTime <= effect.expiresAt) {
|
|
||||||
player.removeEffect(effect.name);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plot.hasOwner()) {
|
if (plot.hasOwner()) {
|
||||||
PlotArea pw = plot.getArea();
|
PlotArea pw = plot.getArea();
|
||||||
if (pw == null) {
|
if (pw == null) {
|
||||||
@ -494,23 +468,6 @@ public class PlotListener {
|
|||||||
public void logout(UUID uuid) {
|
public void logout(UUID uuid) {
|
||||||
feedRunnable.remove(uuid);
|
feedRunnable.remove(uuid);
|
||||||
healRunnable.remove(uuid);
|
healRunnable.remove(uuid);
|
||||||
playerEffects.remove(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Marks an effect as a status effect that will be removed on leaving a plot
|
|
||||||
* @param uuid The uuid of the player the effect belongs to
|
|
||||||
* @param name The name of the status effect
|
|
||||||
* @param expiresAt The time when the effect expires
|
|
||||||
* @since 6.10.0
|
|
||||||
*/
|
|
||||||
public void addEffect(@NonNull UUID uuid, @NonNull String name, long expiresAt) {
|
|
||||||
List<StatusEffect> effects = playerEffects.getOrDefault(uuid, new ArrayList<>());
|
|
||||||
effects.removeIf(effect -> effect.name.equals(name));
|
|
||||||
if (expiresAt != -1) {
|
|
||||||
effects.add(new StatusEffect(name, expiresAt));
|
|
||||||
}
|
|
||||||
playerEffects.put(uuid, effects);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class Interval {
|
private static class Interval {
|
||||||
@ -528,13 +485,4 @@ public class PlotListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private record StatusEffect(@NonNull String name, long expiresAt) {
|
|
||||||
|
|
||||||
private StatusEffect(@NonNull String name, long expiresAt) {
|
|
||||||
this.name = name;
|
|
||||||
this.expiresAt = expiresAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -246,10 +246,6 @@ public class ConsolePlayer extends PlotPlayer<Actor> {
|
|||||||
return PlotSquared.platform().consoleAudience();
|
return PlotSquared.platform().consoleAudience();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeEffect(@NonNull String name) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canSee(final PlotPlayer<?> other) {
|
public boolean canSee(final PlotPlayer<?> other) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1016,14 +1016,6 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
|||||||
return this.lockRepository;
|
return this.lockRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes any effects present of the given type.
|
|
||||||
*
|
|
||||||
* @param name the name of the type to remove
|
|
||||||
* @since 6.10.0
|
|
||||||
*/
|
|
||||||
public abstract void removeEffect(@NonNull String name);
|
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface PlotPlayerConverter<BaseObject> {
|
public interface PlotPlayerConverter<BaseObject> {
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ public class Plot {
|
|||||||
* that could alter the de facto owner of the plot.
|
* that could alter the de facto owner of the plot.
|
||||||
*
|
*
|
||||||
* @return The plot owner of this particular (sub-)plot
|
* @return The plot owner of this particular (sub-)plot
|
||||||
* as stored in the database, if one exists. Else, null.
|
* as stored in the database, if one exists. Else, null.
|
||||||
*/
|
*/
|
||||||
public @Nullable UUID getOwnerAbs() {
|
public @Nullable UUID getOwnerAbs() {
|
||||||
return this.owner;
|
return this.owner;
|
||||||
|
@ -23,7 +23,6 @@ import com.plotsquared.core.plot.flag.implementations.AnalysisFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.AnimalAttackFlag;
|
import com.plotsquared.core.plot.flag.implementations.AnimalAttackFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.AnimalCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.AnimalCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.AnimalInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.AnimalInteractFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.BlockBurnFlag;
|
import com.plotsquared.core.plot.flag.implementations.BlockBurnFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag;
|
import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BlockedCmdsFlag;
|
import com.plotsquared.core.plot.flag.implementations.BlockedCmdsFlag;
|
||||||
@ -138,7 +137,6 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
this.addFlag(AnimalAttackFlag.ANIMAL_ATTACK_FALSE);
|
this.addFlag(AnimalAttackFlag.ANIMAL_ATTACK_FALSE);
|
||||||
this.addFlag(AnimalInteractFlag.ANIMAL_INTERACT_FALSE);
|
this.addFlag(AnimalInteractFlag.ANIMAL_INTERACT_FALSE);
|
||||||
this.addFlag(BlockBurnFlag.BLOCK_BURN_FALSE);
|
this.addFlag(BlockBurnFlag.BLOCK_BURN_FALSE);
|
||||||
this.addFlag(BeaconEffectsFlag.BEACON_EFFECT_TRUE);
|
|
||||||
this.addFlag(BlockIgnitionFlag.BLOCK_IGNITION_TRUE);
|
this.addFlag(BlockIgnitionFlag.BLOCK_IGNITION_TRUE);
|
||||||
this.addFlag(ChatFlag.CHAT_FLAG_TRUE);
|
this.addFlag(ChatFlag.CHAT_FLAG_TRUE);
|
||||||
this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE);
|
this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE);
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.core.plot.flag.implementations;
|
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
public class BeaconEffectsFlag extends BooleanFlag<BeaconEffectsFlag> {
|
|
||||||
|
|
||||||
public static final BeaconEffectsFlag BEACON_EFFECT_TRUE = new BeaconEffectsFlag(true);
|
|
||||||
public static final BeaconEffectsFlag BEACON_EFFECT_FALSE = new BeaconEffectsFlag(false);
|
|
||||||
|
|
||||||
private BeaconEffectsFlag(boolean value){
|
|
||||||
super(value, TranslatableCaption.of("flags.flag_description_beacon_effect"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected BeaconEffectsFlag flagOf(@NonNull final Boolean value) {
|
|
||||||
return value ? BEACON_EFFECT_TRUE : BEACON_EFFECT_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -618,7 +618,6 @@
|
|||||||
"flags.flag_description_prevent_creative_copy": "<gray>Prevents people from copying item NBT data in the plot unless they're added as members.</gray>",
|
"flags.flag_description_prevent_creative_copy": "<gray>Prevents people from copying item NBT data in the plot unless they're added as members.</gray>",
|
||||||
"flags.flag_description_leaf_decay": "<gray>Set to `false` to prevent leaves from decaying.",
|
"flags.flag_description_leaf_decay": "<gray>Set to `false` to prevent leaves from decaying.",
|
||||||
"flags.flag_description_projectiles": "<gray>Prevents guests from shooting projectiles on the plot when set to false.</gray>",
|
"flags.flag_description_projectiles": "<gray>Prevents guests from shooting projectiles on the plot when set to false.</gray>",
|
||||||
"flags.flag_description_beacon_effect": "<gray>Enables beacon effects on the plot.</gray>",
|
|
||||||
"flags.flag_error_boolean": "Flag value must be a boolean (true | false).",
|
"flags.flag_error_boolean": "Flag value must be a boolean (true | false).",
|
||||||
"flags.flag_error_enum": "Must be one of: <list>",
|
"flags.flag_error_enum": "Must be one of: <list>",
|
||||||
"flags.flag_error_integer": "Flag value must be a whole positive number.",
|
"flags.flag_error_integer": "Flag value must be a whole positive number.",
|
||||||
|
@ -19,7 +19,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "com.plotsquared"
|
group = "com.plotsquared"
|
||||||
version = "6.10.1"
|
version = "6.9.5-SNAPSHOT"
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
group = rootProject.group
|
group = rootProject.group
|
||||||
@ -65,12 +65,12 @@ subprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.15"))
|
implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.13"))
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Tests
|
// Tests
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")
|
testImplementation("org.junit.jupiter:junit-jupiter:5.9.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins.withId("java") {
|
plugins.withId("java") {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Platform expectations
|
# Platform expectations
|
||||||
paper = "1.18.1-R0.1-SNAPSHOT"
|
paper = "1.18.1-R0.1-SNAPSHOT"
|
||||||
guice = "5.1.0"
|
guice = "5.1.0"
|
||||||
spotbugs = "4.7.2"
|
spotbugs = "4.7.1"
|
||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
worldedit = "7.2.12"
|
worldedit = "7.2.12"
|
||||||
|
Reference in New Issue
Block a user