Skip to content

Commit

Permalink
Create Custom Balloon Events (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ian Tapply authored Jun 7, 2024
1 parent 184d3a0 commit a7ce131
Show file tree
Hide file tree
Showing 15 changed files with 200 additions and 16 deletions.
24 changes: 19 additions & 5 deletions src/main/java/net/jeqo/bloons/balloon/SingleBalloon.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import lombok.Setter;
import net.jeqo.bloons.Bloons;
import net.jeqo.bloons.configuration.BalloonConfiguration;
import net.jeqo.bloons.events.balloon.SingleBalloonEquipEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonForceUnequipEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent;
import net.jeqo.bloons.logger.Logger;
import net.jeqo.bloons.utils.BalloonManagement;
import net.jeqo.bloons.utils.ColorManagement;
Expand Down Expand Up @@ -205,13 +208,24 @@ public void initializeBalloonChicken() {
public static void checkBalloonRemovalOrAdd(final Player player, final String balloonID) {
new BukkitRunnable() {
public void run() {
SingleBalloon owner = Bloons.playerBalloons.get(player.getUniqueId());
if (owner != null) return;
SingleBalloon initialBalloon = Bloons.playerBalloons.get(player.getUniqueId());
if (initialBalloon != null) return;

SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(player, null);
unequipEvent.callEvent();

if (unequipEvent.isCancelled()) return;

BalloonManagement.removeBalloon(player, null);
SingleBalloon balloonOwner = new SingleBalloon(player, balloonID);
balloonOwner.runTaskTimer(Bloons.getInstance(), 0L, 1L);
Bloons.playerBalloons.put(player.getUniqueId(), balloonOwner);

SingleBalloonEquipEvent equipEvent = new SingleBalloonEquipEvent(player, balloonID);
equipEvent.callEvent();

if (equipEvent.isCancelled()) return;

SingleBalloon balloon = new SingleBalloon(player, balloonID);
balloon.runTaskTimer(Bloons.getInstance(), 0L, 1L);
Bloons.playerBalloons.put(player.getUniqueId(), balloon);
Bloons.playerBalloonID.put(player.getUniqueId(), balloonID);

}
Expand Down
9 changes: 7 additions & 2 deletions src/main/java/net/jeqo/bloons/commands/CommandEquip.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.commands.manager.Command;
import net.jeqo.bloons.commands.manager.enums.CommandPermission;
import net.jeqo.bloons.events.balloon.SingleBalloonEquipEvent;
import net.jeqo.bloons.utils.BalloonManagement;
import net.jeqo.bloons.utils.MessageTranslations;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Sound;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -49,6 +48,12 @@ public boolean execute(CommandSender sender, String[] args) {
return false;
}

// Call the equip event and check if it's cancelled, if it is, don't spawn the balloon or do anything
SingleBalloonEquipEvent singleBalloonEquipEvent = new SingleBalloonEquipEvent(player, balloonID);
singleBalloonEquipEvent.callEvent();

if (singleBalloonEquipEvent.isCancelled()) return false;

BalloonManagement.removeBalloon(player, Bloons.playerBalloons.get(player.getUniqueId()));
SingleBalloon.checkBalloonRemovalOrAdd(player, balloonID);
player.playSound(player.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1);
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/net/jeqo/bloons/commands/CommandForceEquip.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.commands.manager.Command;
import net.jeqo.bloons.commands.manager.enums.CommandPermission;
import net.jeqo.bloons.events.balloon.SingleBalloonForceEquipEvent;
import net.jeqo.bloons.utils.MessageTranslations;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -44,6 +45,11 @@ public boolean execute(CommandSender sender, String[] args) {
return false;
}

SingleBalloonForceEquipEvent singleBalloonForceEquipEvent = new SingleBalloonForceEquipEvent(player, balloonID);
singleBalloonForceEquipEvent.callEvent();

if (singleBalloonForceEquipEvent.isCancelled()) return false;

SingleBalloon.checkBalloonRemovalOrAdd(player.getPlayer(), balloonID);
String balloonName = messageTranslations.getString("balloons." + balloonID + ".name");
Component equippedMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("equipped", balloonName));
Expand Down
13 changes: 10 additions & 3 deletions src/main/java/net/jeqo/bloons/commands/CommandForceUnequip.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.commands.manager.Command;
import net.jeqo.bloons.commands.manager.enums.CommandPermission;
import net.jeqo.bloons.events.balloon.SingleBalloonForceUnequipEvent;
import net.jeqo.bloons.utils.BalloonManagement;
import net.jeqo.bloons.utils.MessageTranslations;
import net.kyori.adventure.text.Component;
Expand Down Expand Up @@ -33,14 +34,20 @@ public boolean execute(CommandSender sender, String[] args) {
return false;
}

SingleBalloon owner = Bloons.playerBalloons.get(player.getUniqueId());
if (owner == null) {
SingleBalloon balloon = Bloons.playerBalloons.get(player.getUniqueId());
if (balloon == null) {
player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_DIDGERIDOO, 1, 1);
Component notEquippedMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("not-equipped"));
sender.sendMessage(notEquippedMessage);
return false;
}
BalloonManagement.removeBalloon(player, owner);

SingleBalloonForceUnequipEvent singleBalloonForceEquipEvent = new SingleBalloonForceUnequipEvent(player, balloon);
singleBalloonForceEquipEvent.callEvent();

if (singleBalloonForceEquipEvent.isCancelled()) return false;

BalloonManagement.removeBalloon(player, balloon);
Component unequipSuccessfulMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("unequipped"));
sender.sendMessage(unequipSuccessfulMessage);
return false;
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/net/jeqo/bloons/commands/CommandReload.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import net.jeqo.bloons.Bloons;
import net.jeqo.bloons.commands.manager.Command;
import net.jeqo.bloons.commands.manager.enums.CommandPermission;
import net.jeqo.bloons.events.balloon.general.BloonsConfigReloadEvent;
import net.jeqo.bloons.utils.MessageTranslations;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

Expand All @@ -25,6 +24,11 @@ public CommandReload(JavaPlugin plugin) {
public boolean execute(CommandSender sender, String[] args) {
MessageTranslations messageTranslations = new MessageTranslations(this.plugin);

BloonsConfigReloadEvent bloonsConfigReloadEvent = new BloonsConfigReloadEvent();
bloonsConfigReloadEvent.callEvent();

if (bloonsConfigReloadEvent.isCancelled()) return false;

Bloons.getInstance().reloadConfig();
Component configReloadedMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("config-reloaded"));
sender.sendMessage(configReloadedMessage);
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/net/jeqo/bloons/commands/CommandUnequip.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.commands.manager.Command;
import net.jeqo.bloons.commands.manager.enums.CommandPermission;
import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent;
import net.jeqo.bloons.utils.BalloonManagement;
import net.jeqo.bloons.utils.MessageTranslations;
import net.kyori.adventure.text.Component;
Expand Down Expand Up @@ -36,6 +37,11 @@ public boolean execute(CommandSender sender, String[] args) {
return false;
}

SingleBalloonUnequipEvent singleBalloonUnequipEvent = new SingleBalloonUnequipEvent(player, singleBalloon);
singleBalloonUnequipEvent.callEvent();

if (singleBalloonUnequipEvent.isCancelled()) return false;

BalloonManagement.removeBalloon(player, singleBalloon);
Component unequipSuccessfulMessage = messageTranslations.getSerializedString(messageTranslations.getMessage("prefix"), messageTranslations.getMessage("unequipped"));
player.sendMessage(unequipSuccessfulMessage);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package net.jeqo.bloons.events.balloon;

import lombok.Getter;
import lombok.Setter;
import net.jeqo.bloons.events.BloonsEvent;
import org.bukkit.entity.Player;

@Getter @Setter
public class SingleBalloonEquipEvent extends BloonsEvent {
private Player player;
private String balloonID;

public SingleBalloonEquipEvent(Player player, String balloonID) {
this.player = player;
this.balloonID = balloonID;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package net.jeqo.bloons.events.balloon;

import lombok.Getter;
import lombok.Setter;
import net.jeqo.bloons.events.BloonsEvent;
import org.bukkit.entity.Player;

@Getter @Setter
public class SingleBalloonForceEquipEvent extends BloonsEvent {
private Player player;
private String balloonID;

public SingleBalloonForceEquipEvent(Player player, String balloonID) {
this.player = player;
this.balloonID = balloonID;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package net.jeqo.bloons.events.balloon;

import lombok.Getter;
import lombok.Setter;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.BloonsEvent;
import org.bukkit.entity.Player;

@Getter @Setter
public class SingleBalloonForceUnequipEvent extends BloonsEvent {
private Player player;
private SingleBalloon balloon;

public SingleBalloonForceUnequipEvent(Player player, SingleBalloon balloon) {
this.player = player;
this.balloon = balloon;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package net.jeqo.bloons.events.balloon;

import lombok.Getter;
import lombok.Setter;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.BloonsEvent;
import org.bukkit.entity.Player;

@Getter @Setter
public class SingleBalloonStoreEvent extends BloonsEvent {
private Player player;
private SingleBalloon balloon;

public SingleBalloonStoreEvent(Player player, SingleBalloon balloon) {
this.player = player;
this.balloon = balloon;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package net.jeqo.bloons.events.balloon;

import lombok.Getter;
import lombok.Setter;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.BloonsEvent;
import org.bukkit.entity.Player;

@Getter @Setter
public class SingleBalloonUnequipEvent extends BloonsEvent {
private Player player;
private SingleBalloon balloon;

public SingleBalloonUnequipEvent(Player player, SingleBalloon balloon) {
this.player = player;
this.balloon = balloon;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package net.jeqo.bloons.events.balloon.general;

import net.jeqo.bloons.events.BloonsEvent;

public class BloonsConfigReloadEvent extends BloonsEvent {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.jeqo.bloons.Bloons;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent;
import net.jeqo.bloons.gui.menus.BalloonMenu;
import net.jeqo.bloons.utils.BalloonManagement;
import net.jeqo.bloons.utils.ColorCodeConverter;
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/net/jeqo/bloons/listeners/PlayerListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

import net.jeqo.bloons.Bloons;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.balloon.SingleBalloonEquipEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonForceUnequipEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonStoreEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent;
import net.jeqo.bloons.utils.UpdateChecker;
import net.jeqo.bloons.logger.Logger;
import net.jeqo.bloons.utils.BalloonManagement;
Expand All @@ -24,6 +28,10 @@ public class PlayerListener implements Listener {
@EventHandler
public void onQuit(PlayerQuitEvent e) {
SingleBalloon owner = Bloons.playerBalloons.get(e.getPlayer().getUniqueId());

SingleBalloonStoreEvent event = new SingleBalloonStoreEvent(e.getPlayer(), owner);
event.callEvent();

BalloonManagement.storeBalloon(owner);
}

Expand All @@ -37,7 +45,13 @@ public void onJoin(PlayerJoinEvent event) {

// If they have a balloon active, remove it and add it back to reduce issues
if (balloonID != null) {
SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(player, Bloons.playerBalloons.get(player.getUniqueId()));
unequipEvent.callEvent();

if (!unequipEvent.isCancelled()) return;

BalloonManagement.removeBalloon(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId()));

SingleBalloon.checkBalloonRemovalOrAdd(event.getPlayer(), balloonID);
}

Expand All @@ -57,6 +71,10 @@ public void onJoin(PlayerJoinEvent event) {
@EventHandler
public void onDeath(PlayerDeathEvent event) {
SingleBalloon balloonOwner = Bloons.playerBalloons.get(Objects.requireNonNull(event.getEntity().getPlayer()).getUniqueId());

SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(event.getEntity().getPlayer(), balloonOwner);
unequipEvent.callEvent();

BalloonManagement.removeBalloon(event.getEntity().getPlayer(), balloonOwner);
}

Expand All @@ -79,10 +97,22 @@ public void onRespawn(PlayerRespawnEvent event) {
public void onWorldChange(PlayerChangedWorldEvent event) {
SingleBalloon balloonOwner = Bloons.playerBalloons.get(event.getPlayer().getUniqueId());
String balloonID = Bloons.playerBalloonID.get(event.getPlayer().getUniqueId());

SingleBalloonStoreEvent storeEvent = new SingleBalloonStoreEvent(event.getPlayer(), balloonOwner);
storeEvent.callEvent();

if (storeEvent.isCancelled()) return;

BalloonManagement.storeBalloon(balloonOwner);

if (balloonID != null) {
SingleBalloonForceUnequipEvent unequipEvent = new SingleBalloonForceUnequipEvent(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId()));
unequipEvent.callEvent();

if (unequipEvent.isCancelled()) return;

BalloonManagement.removeBalloon(event.getPlayer(), Bloons.playerBalloons.get(event.getPlayer().getUniqueId()));

SingleBalloon.checkBalloonRemovalOrAdd(event.getPlayer(), balloonID);
}
}
Expand Down
25 changes: 21 additions & 4 deletions src/main/java/net/jeqo/bloons/utils/BalloonManagement.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import net.jeqo.bloons.Bloons;
import net.jeqo.bloons.balloon.SingleBalloon;
import net.jeqo.bloons.events.balloon.SingleBalloonStoreEvent;
import net.jeqo.bloons.events.balloon.SingleBalloonUnequipEvent;
import org.bukkit.entity.Player;

public class BalloonManagement {
Expand All @@ -13,6 +15,11 @@ public class BalloonManagement {
*/
public static void removeBalloon(Player player, SingleBalloon owner) {
if (owner != null) {
SingleBalloonUnequipEvent event = new SingleBalloonUnequipEvent(player, owner);
event.callEvent();

if (event.isCancelled()) return;

owner.spawnRemoveParticle();
owner.cancel();
Bloons.playerBalloons.remove(player.getUniqueId());
Expand All @@ -27,6 +34,11 @@ public static void removeBalloon(Player player, SingleBalloon owner) {
*/
public static void quickRemoveBalloon(Player player, SingleBalloon owner) {
if (owner != null) {
SingleBalloonUnequipEvent event = new SingleBalloonUnequipEvent(player, owner);
event.callEvent();

if (event.isCancelled()) return;

owner.cancel();
Bloons.playerBalloons.remove(player.getUniqueId());
Bloons.playerBalloonID.remove(player.getUniqueId());
Expand All @@ -35,11 +47,16 @@ public static void quickRemoveBalloon(Player player, SingleBalloon owner) {

/**
* Store the balloon in storage and just cancel the runnable
* @param owner The balloon
* @param balloon The balloon
*/
public static void storeBalloon(SingleBalloon owner) {
if (owner != null) {
owner.cancel();
public static void storeBalloon(SingleBalloon balloon) {
if (balloon != null) {
SingleBalloonStoreEvent event = new SingleBalloonStoreEvent(balloon.getPlayer(), balloon);
event.callEvent();

if (event.isCancelled()) return;

balloon.cancel();
}
}
}

0 comments on commit a7ce131

Please sign in to comment.