mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-08-24 23:05:36 +02:00
Compare commits
2 Commits
fix/genera
...
fix/v7/unn
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cb9a8a6cfb | ||
![]() |
4d8d5b3a9f |
@@ -600,7 +600,7 @@ public class PlayerEventListener implements Listener {
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
if (lastPlot != null) {
|
||||
plotListener.plotExit(pp, lastPlot);
|
||||
plotListener.plotExit(pp, lastPlot, null, null);
|
||||
lastPlotAccess.remove();
|
||||
}
|
||||
try (final MetaDataAccess<Location> lastLocationAccess =
|
||||
@@ -753,7 +753,7 @@ public class PlayerEventListener implements Listener {
|
||||
if (now == null) {
|
||||
try (final MetaDataAccess<Boolean> kickAccess =
|
||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot, now, area) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
false)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
@@ -847,7 +847,7 @@ public class PlayerEventListener implements Listener {
|
||||
if (plot == null) {
|
||||
try (final MetaDataAccess<Boolean> kickAccess =
|
||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot, null, area) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
false)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
|
@@ -47,6 +47,7 @@ import org.bukkit.event.entity.LingeringPotionSplashEvent;
|
||||
import org.bukkit.event.entity.PotionSplashEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.player.PlayerEggThrowEvent;
|
||||
import org.bukkit.projectiles.BlockProjectileSource;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
@@ -157,14 +158,26 @@ public class ProjectileEventListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onProjectileHit(ProjectileHitEvent event) {
|
||||
Projectile entity = event.getEntity();
|
||||
if (cancelProjectileHit(event.getEntity())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerEggThrow(PlayerEggThrowEvent event) {
|
||||
if (cancelProjectileHit(event.getEgg())) {
|
||||
event.setHatching(false);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean cancelProjectileHit(Projectile entity) {
|
||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
Plot plot = area.getPlot(location);
|
||||
ProjectileSource shooter = entity.getShooter();
|
||||
@@ -172,15 +185,14 @@ public class ProjectileEventListener implements Listener {
|
||||
if (!((Player) shooter).isOnline()) {
|
||||
if (plot != null) {
|
||||
if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
} else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
||||
@@ -189,38 +201,36 @@ public class ProjectileEventListener implements Listener {
|
||||
Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED
|
||||
)) {
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return true;
|
||||
}
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
|
||||
ProjectilesFlag.class) || (entity instanceof FishHook && plot.getFlag(
|
||||
FishingFlag.class))) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
if (!(shooter instanceof Entity) && shooter != null) {
|
||||
if (plot == null) {
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
Location sLoc =
|
||||
BukkitUtil.adapt(((BlockProjectileSource) shooter).getBlock().getLocation());
|
||||
if (!area.contains(sLoc.getX(), sLoc.getZ())) {
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
Plot sPlot = area.getOwnedPlotAbs(sLoc);
|
||||
if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) {
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -164,7 +164,7 @@ public class PlotListener {
|
||||
try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
||||
Plot last = lastPlot.get().orElse(null);
|
||||
if ((last != null) && !last.getId().equals(plot.getId())) {
|
||||
plotExit(player, last);
|
||||
plotExit(player, last, plot, plot.getArea());
|
||||
}
|
||||
if (PlotSquared.platform().expireManager() != null) {
|
||||
PlotSquared.platform().expireManager().handleEntry(player, plot);
|
||||
@@ -365,7 +365,12 @@ public class PlotListener {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean plotExit(final PlotPlayer<?> player, Plot plot) {
|
||||
public boolean plotExit(
|
||||
final PlotPlayer<?> player,
|
||||
@NonNull Plot plot,
|
||||
@Nullable Plot nextPlot,
|
||||
@Nullable PlotArea nextArea
|
||||
) {
|
||||
try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
||||
final Plot previous = lastPlot.remove();
|
||||
|
||||
@@ -382,7 +387,9 @@ public class PlotListener {
|
||||
if (plot.hasOwner()) {
|
||||
PlotArea pw = plot.getArea();
|
||||
if (pw == null) {
|
||||
return true;
|
||||
if (nextPlot == null || (pw = nextPlot.getArea()) == null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
try (final MetaDataAccess<Boolean> kickAccess =
|
||||
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||
@@ -440,11 +447,23 @@ public class PlotListener {
|
||||
player.setFlight(value.get());
|
||||
metaDataAccess.remove();
|
||||
} else {
|
||||
GameMode gameMode = player.getGameMode();
|
||||
if (gameMode == GameModes.SURVIVAL || gameMode == GameModes.ADVENTURE) {
|
||||
player.setFlight(false);
|
||||
} else if (!player.getFlight()) {
|
||||
player.setFlight(true);
|
||||
FlyFlag.FlyStatus flight = FlyFlag.FlyStatus.DEFAULT;
|
||||
if (nextPlot != null) {
|
||||
flight = nextPlot.getFlag(FlyFlag.class);
|
||||
} else if (nextArea != null) {
|
||||
if (nextArea.isRoadFlags()) {
|
||||
flight = nextArea.getRoadFlag(FlyFlag.class);
|
||||
} else {
|
||||
flight = nextArea.getFlag(FlyFlag.class);
|
||||
}
|
||||
}
|
||||
if (flight != FlyFlag.FlyStatus.ENABLED) {
|
||||
GameMode gameMode = player.getGameMode();
|
||||
if (gameMode == GameModes.SURVIVAL || gameMode == GameModes.ADVENTURE) {
|
||||
player.setFlight(false);
|
||||
} else if (!player.getFlight()) {
|
||||
player.setFlight(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1340,7 +1340,7 @@ public class Plot {
|
||||
for (Plot current : getConnectedPlots()) {
|
||||
List<PlotPlayer<?>> players = current.getPlayersInPlot();
|
||||
for (PlotPlayer<?> pp : players) {
|
||||
this.plotListener.plotExit(pp, current);
|
||||
this.plotListener.plotExit(pp, current, null, area);
|
||||
}
|
||||
|
||||
if (Settings.Backup.DELETE_ON_UNCLAIM) {
|
||||
@@ -2594,7 +2594,7 @@ public class Plot {
|
||||
public void reEnter() {
|
||||
TaskManager.runTaskLater(() -> {
|
||||
for (PlotPlayer<?> pp : Plot.this.getPlayersInPlot()) {
|
||||
this.plotListener.plotExit(pp, Plot.this);
|
||||
this.plotListener.plotExit(pp, Plot.this, Plot.this, area);
|
||||
this.plotListener.plotEntry(pp, Plot.this);
|
||||
}
|
||||
}, TaskTime.ticks(1L));
|
||||
|
Reference in New Issue
Block a user