Clean up PlayerListener.java

This commit is contained in:
Len 2024-02-10 15:48:19 +01:00
parent 9e4fc5fffd
commit 04d5a76ac6

View File

@ -6,6 +6,7 @@ import com.alttd.cometskyblock.island.IslandPlayer;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
@ -21,110 +22,31 @@ public class PlayerListener implements Listener {
public PlayerListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
}
// TODO -- extract all of the duplicate code
@EventHandler(ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
event.setCancelled(true);
return;
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return;
}
if (!island.canBuild(player.getUniqueId())) {
event.setCancelled(true);
return;
}
canInteract(event, event.getPlayer());
}
@EventHandler(ignoreCancelled = true)
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
event.setCancelled(true);
return;
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return;
}
if (!island.canBuild(player.getUniqueId())) {
event.setCancelled(true);
return;
}
canInteract(event, event.getPlayer());
}
@EventHandler(ignoreCancelled = true)
public void onBlockIgnite(PlayerBucketEmptyEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
event.setCancelled(true);
return;
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return;
}
if (!island.canBuild(player.getUniqueId())) {
event.setCancelled(true);
return;
}
canInteract(event, event.getPlayer());
}
@EventHandler(ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
event.setCancelled(true);
return;
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return;
}
if (!island.canBuild(player.getUniqueId())) {
event.setCancelled(true);
return;
}
canInteract(event, event.getPlayer());
}
@EventHandler(ignoreCancelled = true)
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
event.setCancelled(true);
return;
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return;
}
if (!island.canBuild(player.getUniqueId())) {
event.setCancelled(true);
return;
}
canInteract(event, event.getPlayer());
}
@EventHandler(ignoreCancelled = true)
public void onEntityBlockForm(EntityBlockFormEvent event) { // not a player listener
World world = event.getEntity().getWorld();
@ -142,20 +64,42 @@ public class PlayerListener implements Listener {
public void islandVisitProtection(EntityDamageEvent event) {
Entity entity = event.getEntity();
if (entity instanceof Player player) {
Island island = Island.getIsland(player.getWorld().getUID());
if (island == null) {
return;
}
if (island.worldName() == null || island.worldName().isEmpty()) { // Worlds not generated by us will have this as null or empty
return;
}
event.setCancelled(true);
if (event.getCause() == EntityDamageEvent.DamageCause.VOID || player.getLocation().getY() < 0) {
player.setFallDistance(0);
player.teleportAsync(plugin.getServer().getWorlds().get(0).getSpawnLocation());
if (!canInteract(event, player)) {
if (event.getCause() == EntityDamageEvent.DamageCause.VOID || player.getLocation().getY() < 0) {
player.setFallDistance(0);
player.teleportAsync(plugin.getServer().getWorlds().get(0).getSpawnLocation());
}
}
}
}
boolean canInteract(Cancellable event, Player player) {
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (!world.getUID().equals(islandPlayer.islandUUID())) {
return cancelEvent(event);
}
Island island = Island.getIsland(world.getUID());
if (island == null) {
return cancelEvent(event);
}
// Worlds not generated by CometSkyblock will have this as null or empty
// We do not care about these worlds - yet
if (island.worldName() == null || island.worldName().isEmpty()) {
return true;
}
if (!island.canBuild(player.getUniqueId())) {
return cancelEvent(event);
}
return true;
}
boolean cancelEvent(Cancellable event) {
event.setCancelled(true);
return false;
}
}