Skip to content

Commit

Permalink
Added listeners to remove or disable beacons when broken
Browse files Browse the repository at this point in the history
  • Loading branch information
RedsTom committed Aug 25, 2023
1 parent 9a6d07d commit 7bdea9c
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 0 deletions.
60 changes: 60 additions & 0 deletions src/main/java/me/redstom/beaconwarp/events/BeaconListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package me.redstom.beaconwarp.events;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import io.papermc.paper.event.block.BeaconDeactivatedEvent;
import me.redstom.beaconwarp.orm.entities.Warp;
import me.redstom.beaconwarp.orm.repositories.Repositories;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

import java.util.Optional;

import static me.redstom.beaconwarp.common.TextConstants.DARK_BLUE;
import static me.redstom.beaconwarp.common.TextConstants.PREFIX;

@Singleton
public class BeaconListener implements Listener {

@Inject private Repositories repositories;

@EventHandler
public void onBeaconLightOff(BeaconDeactivatedEvent event) {
if (event.getBeacon() == null) {
return;
}

Optional<Warp> optionalWarp = repositories.warps()
.findWarpOn(event.getBeacon()
.getLocation());

if (optionalWarp.isEmpty()) {
return;
}

Warp warp = optionalWarp.get();
warp.state(Warp.State.DISABLED);
repositories.warps().update(warp);

OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(warp
.user()
.uniqueId());

if (offlinePlayer.isOnline()) {
Player player = (Player) offlinePlayer;
player.sendMessage(
PREFIX.append(Component.text("Le warp")
.appendSpace()
.append(Component.text(warp
.name())
.color(DARK_BLUE))
.appendSpace()
.append(Component.text("a été désactivé : pour le réactiver, veuillez " +
"reconstruire son socle et remettre sa visibilité en \"public\" !"))));
}
}
}
68 changes: 68 additions & 0 deletions src/main/java/me/redstom/beaconwarp/events/BlockBreakListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package me.redstom.beaconwarp.events;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import me.redstom.beaconwarp.common.TextConstants;
import me.redstom.beaconwarp.orm.entities.Warp;
import me.redstom.beaconwarp.orm.repositories.Repositories;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;

import java.util.Optional;

@Singleton
public class BlockBreakListener implements Listener {

@Inject private Repositories repositories;

@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
if (event.getBlock()
.getType() != Material.BEACON) {
return;
}

Optional<Warp> warp = repositories.warps().findWarpOn(event.getBlock()
.getLocation());
if (!warp.isPresent()) {
return;
}

Player player = event.getPlayer();
if (!warp.get()
.user()
.uniqueId()
.equals(player.getUniqueId()) && !player.hasPermission("beacon.admin")) {
event.setCancelled(true);

OfflinePlayer other = Bukkit.getOfflinePlayer(warp.get()
.user()
.uniqueId());
player.sendMessage(TextConstants.PREFIX.append(Component.text("Vous ne pouvez pas casser ce bloc car il abrite un warp qui appartient à ")
.color(TextConstants.RED)
.append(Component.text(other.getName() == null
? "un joueur inconnu"
: other.getName())
.color(TextConstants.LIGHT_BLUE))
.append(Component.text("."))));

return;
}

repositories.warps().delete(warp.get());
player.sendMessage(TextConstants.PREFIX.append(Component.text("Le warp")
.appendSpace()
.append(Component.text(warp.get()
.name())
.color(TextConstants.DARK_BLUE))
.appendSpace()
.append(Component.text("a bien été supprimé !"))));
}

}

0 comments on commit 7bdea9c

Please sign in to comment.