Rework listeners and add EntityListener.

This commit is contained in:
Len 2024-04-23 10:54:56 +02:00
parent 88c3ee39ec
commit b2eab51b72
9 changed files with 135 additions and 133 deletions

View File

@ -11,7 +11,8 @@ import com.alttd.cometskyblock.island.IslandData;
import com.alttd.cometskyblock.island.oregenerator.GeneratorHandler;
import com.alttd.cometskyblock.island.oregenerator.GeneratorLoader;
import com.alttd.cometskyblock.listeners.BedListener;
import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;;
import com.alttd.cometskyblock.listeners.EntityListener;
import com.alttd.cometskyblock.listeners.cobblestoneGeneratorListener;;
import com.alttd.cometskyblock.listeners.PlayerListener;
import com.alttd.cometskyblock.managers.IslandManager;
import com.alttd.cometskyblock.worldgenerator.MasterWorldGenerator;
@ -104,11 +105,16 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI
}
public void loadEventListeners() {
final PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new BedListener(this), this);
pm.registerEvents(new CobbestoneGeneratorListener(this), this);
pm.registerEvents(new GUIListener(this), this);
pm.registerEvents(new PlayerListener(this), this);
// final PluginManager pm = getServer().getPluginManager();
// pm.registerEvents(new BedListener(this), this);
// pm.registerEvents(new cobblestoneGeneratorListener(this), this);
// pm.registerEvents(new GUIListener(this), this);
// pm.registerEvents(new PlayerListener(this), this);
new BedListener(this);
new cobblestoneGeneratorListener(this);
new GUIListener(this);
new PlayerListener(this);
new EntityListener(this);
}
}

View File

@ -1,6 +1,7 @@
package com.alttd.cometskyblock.gui;
import com.alttd.cometskyblock.CometSkyBlockPlugin;
import com.alttd.cometskyblock.listeners.EventListener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -12,12 +13,13 @@ import org.bukkit.event.inventory.InventoryOpenEvent;
/**
* Basically a handler to redirect events to our GUI implementations
*/
public class GUIListener implements Listener {
public class GUIListener extends EventListener {
protected final CometSkyBlockPlugin plugin;
public GUIListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
this.register(this.plugin);
}
@EventHandler

View File

@ -15,11 +15,12 @@ import org.bukkit.event.block.BlockPlaceEvent;
* By default Gamerule DO_INSOMNIA is disabled, the moment an island member sleeps this gamerule will be enabled.
* Still debating if this should only be enabled for those that have slept
*/
public class BedListener implements Listener {
public class BedListener extends EventListener {
private final CometSkyBlockPlugin plugin;
public BedListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
this.register(this.plugin);
}
@EventHandler(ignoreCancelled = true)
@ -28,23 +29,10 @@ public class BedListener implements Listener {
return;
}
Player player = event.getPlayer();
if(!canInteract(event, player))
return;
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;
}
world.setGameRule(GameRule.DO_INSOMNIA, true);
}

View File

@ -0,0 +1,24 @@
package com.alttd.cometskyblock.listeners;
import com.alttd.cometskyblock.CometSkyBlockPlugin;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
public class EntityListener extends EventListener {
private final CometSkyBlockPlugin plugin;
public EntityListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
this.register(this.plugin);
}
@EventHandler(ignoreCancelled = true)
public void onEntityTargetPlayer(EntityTargetLivingEntityEvent event) {
if (!(event.getTarget() instanceof Player player))
return;
if(!canInteract(event, player))
return;
}
}

View File

@ -0,0 +1,58 @@
package com.alttd.cometskyblock.listeners;
import com.alttd.cometskyblock.island.Island;
import com.alttd.cometskyblock.island.IslandPlayer;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public class EventListener implements Listener {
protected boolean isRegistered = false;
public void register(JavaPlugin instance) {
Bukkit.getServer().getPluginManager().registerEvents(this, instance);
isRegistered = true;
}
public void unregister() {
HandlerList.unregisterAll(this);
isRegistered = false;
}
boolean canInteract(Cancellable event, Player player) {
World world = player.getWorld();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (world.getUID().equals(Bukkit.getWorlds().get(0).getUID()))
return false;
// 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.canInteract(player.getUniqueId())) {
return cancelEvent(event);
}
return true;
}
boolean cancelEvent(Cancellable event) {
event.setCancelled(true);
return false;
}
}

View File

@ -1,43 +0,0 @@
package com.alttd.cometskyblock.listeners;
import com.alttd.cometskyblock.CometSkyBlockPlugin;
import com.alttd.cometskyblock.events.IslandPlayerJoinEvent;
import com.alttd.cometskyblock.island.Island;
import com.alttd.cometskyblock.island.IslandPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class PlayerJoinListener implements Listener {
private final CometSkyBlockPlugin plugin;
public PlayerJoinListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
}
@EventHandler(ignoreCancelled = true)
public void onPlayerJoinEvent(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!player.hasPlayedBefore())
return;
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (islandPlayer.islandId() == 0) {
return;
}
Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinEvent(islandPlayer.toRecord()));
if (!player.getWorld().getUID().equals(islandPlayer.islandUUID()))
return;
Island island = Island.getIsland(islandPlayer.islandUUID());
if (island == null) {
return;
}
island.teleport(player, player.getLocation());
}
}

View File

@ -1,34 +0,0 @@
package com.alttd.cometskyblock.listeners;
import com.alttd.cometskyblock.CometSkyBlockPlugin;
import com.alttd.cometskyblock.events.IslandPlayerJoinEvent;
import com.alttd.cometskyblock.events.IslandPlayerLeaveEvent;
import com.alttd.cometskyblock.island.IslandPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class PlayerLeaveListener implements Listener {
private final CometSkyBlockPlugin plugin;
public PlayerLeaveListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
}
@EventHandler(ignoreCancelled = true)
public void onPlayerJoinEvent(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!player.hasPlayedBefore())
return;
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (islandPlayer.islandId() == 0) {
return;
}
Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerLeaveEvent(islandPlayer.toRecord()));
}
}

View File

@ -1,13 +1,14 @@
package com.alttd.cometskyblock.listeners;
import com.alttd.cometskyblock.CometSkyBlockPlugin;
import com.alttd.cometskyblock.events.IslandPlayerJoinEvent;
import com.alttd.cometskyblock.events.IslandPlayerLeaveEvent;
import com.alttd.cometskyblock.island.Island;
import com.alttd.cometskyblock.island.IslandPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler;
@ -16,17 +17,15 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.EntityBlockFormEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack;
public class PlayerListener implements Listener {
public class PlayerListener extends EventListener {
private final CometSkyBlockPlugin plugin;
public PlayerListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
this.register(this.plugin);
}
@EventHandler(ignoreCancelled = true)
@ -95,36 +94,39 @@ public class PlayerListener implements Listener {
// }
// }
boolean canInteract(Cancellable event, Player player) {
World world = player.getWorld();
@EventHandler(ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!player.hasPlayedBefore())
return;
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (world.getUID().equals(Bukkit.getWorlds().get(0).getUID()))
return false;
if (!world.getUID().equals(islandPlayer.islandUUID())) {
return cancelEvent(event);
if (islandPlayer.islandId() == 0) {
return;
}
Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerJoinEvent(islandPlayer.toRecord()));
if (!player.getWorld().getUID().equals(islandPlayer.islandUUID()))
return;
Island island = Island.getIsland(world.getUID());
Island island = Island.getIsland(islandPlayer.islandUUID());
if (island == null) {
return cancelEvent(event);
return;
}
// 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;
island.teleport(player, player.getLocation());
}
boolean cancelEvent(Cancellable event) {
event.setCancelled(true);
return false;
@EventHandler(ignoreCancelled = true)
public void onPlayerLeave(PlayerQuitEvent event) {
Player player = event.getPlayer();
IslandPlayer islandPlayer = IslandPlayer.getIslandPlayer(player.getUniqueId());
if (islandPlayer.islandId() == 0) {
return;
}
Bukkit.getServer().getPluginManager().callEvent(new IslandPlayerLeaveEvent(islandPlayer.toRecord()));
}
}

View File

@ -6,23 +6,22 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.*;
import org.bukkit.metadata.FixedMetadataValue;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class CobbestoneGeneratorListener implements Listener {
public class cobblestoneGeneratorListener extends EventListener {
public static final @NotNull String GENERATOR_METADATA_KEY = "comet:oregenerator";
private final CometSkyBlockPlugin plugin;
public CobbestoneGeneratorListener(CometSkyBlockPlugin plugin) {
public cobblestoneGeneratorListener(CometSkyBlockPlugin plugin) {
this.plugin = plugin;
this.register(this.plugin);
}
@EventHandler(ignoreCancelled = true)