ProjectAres/PGM/src/main/java/tc/oc/pgm/modules/PlayableRegionMatchModule.java

51 lines
1.9 KiB
Java

package tc.oc.pgm.modules;
import net.md_5.bungee.api.chat.TranslatableComponent;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.util.Vector;
import tc.oc.commons.bukkit.util.BlockUtils;
import tc.oc.pgm.events.ListenerScope;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchModule;
import tc.oc.pgm.match.MatchPlayer;
import tc.oc.pgm.events.BlockTransformEvent;
import tc.oc.commons.bukkit.event.CoarsePlayerMoveEvent;
import tc.oc.pgm.match.MatchScope;
import tc.oc.pgm.regions.Region;
import tc.oc.pgm.utils.MatchPlayers;
@ListenerScope(MatchScope.RUNNING)
public class PlayableRegionMatchModule extends MatchModule implements Listener {
protected final Region playableRegion;
public PlayableRegionMatchModule(Match match, Region playableRegion){
super(match);
this.playableRegion = playableRegion;
}
@EventHandler(ignoreCancelled = true)
public void onBlockTransformEvent(final BlockTransformEvent event) {
Location center = BlockUtils.center(event.getNewState());
if(!this.playableRegion.contains(center.toVector())) {
event.setCancelled(true, new TranslatableComponent("match.playableArea.blockInteractWarning"));
}
}
@EventHandler(ignoreCancelled = true)
public void onCoarsePlayerMoveEvent(final CoarsePlayerMoveEvent event) {
MatchPlayer player = this.match.getPlayer(event.getPlayer());
if(MatchPlayers.canInteract(player)) {
Vector from = BlockUtils.center(event.getFrom()).toVector();
Vector to = BlockUtils.center(event.getTo()).toVector();
if(this.playableRegion.contains(from) && !this.playableRegion.contains(to)) {
event.setCancelled(true, new TranslatableComponent("match.playableArea.leaveAreaWarning"));
}
}
}
}