Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Towny's keepinv event to provide better compatiblity with other plugins. #845

Merged
merged 1 commit into from
Jun 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.gmail.goosius.siegewar.utils.SiegeWarBlockUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarDistanceUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarImmunityUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarInventoryUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarMoneyUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarNationUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarTownPeacefulnessUtil;
Expand All @@ -30,6 +31,7 @@
import com.palmergames.bukkit.towny.event.damage.TownyExplosionDamagesEntityEvent;
import com.palmergames.bukkit.towny.event.damage.TownyFriendlyFireTestEvent;
import com.palmergames.bukkit.towny.event.nation.NationRankRemoveEvent;
import com.palmergames.bukkit.towny.event.player.PlayerKeepsInventoryEvent;
import com.palmergames.bukkit.towny.event.teleport.OutlawTeleportEvent;
import com.palmergames.bukkit.towny.event.time.NewHourEvent;
import com.palmergames.bukkit.towny.event.time.NewShortTimeEvent;
Expand Down Expand Up @@ -466,4 +468,29 @@ private Siege siegeAtPlayerLocation(Resident resident) {
return SiegeController.getActiveSiegeAtLocation(resident.getPlayer().getLocation());
return null;
}

/**
* Have SiegeWar have the ultimate say on whether siege zones have inventory
* keeping.
*
* @param event {@link PlayerKeepsInventoryEvent} internal to Towny.
*/
@EventHandler(priority = EventPriority.HIGHEST)
public void onTownyKeepInventoryEvent(PlayerKeepsInventoryEvent event) {
if (!SiegeWarDistanceUtil.isLocationInActiveSiegeZone(event.getPlayer().getLocation()))
return;

// Towny is already going to keep the inventory, but we dont want inventories
// saved.
if (!event.isCancelled() && !SiegeWarSettings.isKeepInventoryOnSiegeZoneDeathEnabled()) {
event.setCancelled(true);
return;
}

// Towny is going to drop the inventory, but we want inventories saved.
if (event.isCancelled() && SiegeWarSettings.isKeepInventoryOnSiegeZoneDeathEnabled()) {
SiegeWarInventoryUtil.degradeInventory(event.getPlayer());
event.setCancelled(false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.gmail.goosius.siegewar.utils.CosmeticUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarBlockUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarDistanceUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarInventoryUtil;
import com.gmail.goosius.siegewar.utils.SiegeWarScoringUtil;
import com.palmergames.bukkit.towny.TownyUniverse;
import com.palmergames.bukkit.towny.object.Resident;
Expand Down Expand Up @@ -43,8 +42,6 @@ public class PlayerDeath {
/**
* Evaluates a siege death event.
* <p>
* Any player who dies in an active SiegeZone keeps inventory (with degrade)
* <p>
* If the dead player is officially involved in a nearby siege,
* - The opposing team gains battle points
* - Their inventory items degrade a little (e.g. 20%)
Expand All @@ -61,11 +58,6 @@ public class PlayerDeath {
* @param playerDeathEvent The player death event
*/
public static void evaluateSiegePlayerDeath(Player deadPlayer, PlayerDeathEvent playerDeathEvent) {
//Keep inventory
if (SiegeWarSettings.isKeepInventoryOnSiegeZoneDeathEnabled() && SiegeWarDistanceUtil.isLocationInActiveSiegeZone(deadPlayer.getLocation())) {
SiegeWarInventoryUtil.degradeInventory(playerDeathEvent);
SiegeWarInventoryUtil.keepInventory(playerDeathEvent);
}
//Battle-points & banner-control-sessions
try {
Resident deadResident = TownyUniverse.getInstance().getResident(deadPlayer.getUniqueId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@
import com.gmail.goosius.siegewar.Messaging;
import com.gmail.goosius.siegewar.settings.SiegeWarSettings;
import com.palmergames.bukkit.towny.object.Translatable;
import org.bukkit.event.entity.PlayerDeathEvent;

import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;

public class SiegeWarInventoryUtil {

public static void degradeInventory(PlayerDeathEvent playerDeathEvent) {
public static void degradeInventory(Player player) {
Damageable damageable;
double maxDurability;
int currentDurability, damageToInflict, newDurability, durabilityWarning;
boolean closeToBreaking = false;
for (ItemStack itemStack : playerDeathEvent.getEntity().getInventory().getContents()) {
for (ItemStack itemStack : player.getInventory().getContents()) {
if (itemStack != null && itemStack.getType().getMaxDurability() != 0 && !itemStack.getItemMeta().isUnbreakable()) {
damageable = ((Damageable) itemStack.getItemMeta());
maxDurability = itemStack.getType().getMaxDurability();
Expand All @@ -35,11 +36,6 @@ public static void degradeInventory(PlayerDeathEvent playerDeathEvent) {
}
}
if (closeToBreaking) //One or more items are close to breaking, send warning.
Messaging.sendMsg(playerDeathEvent.getEntity(), Translatable.of("msg_inventory_degrade_warning"));
}

public static void keepInventory(PlayerDeathEvent playerDeathEvent) {
playerDeathEvent.setKeepInventory(true);
playerDeathEvent.getDrops().clear();
Messaging.sendMsg(player, Translatable.of("msg_inventory_degrade_warning"));
}
}