diff --git a/pom.xml b/pom.xml
index db6f8be..e092bac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
com.songoda
UltimateStacker
4.0.0
- 2.1.2b
+ 2.1.3
clean install
UltimateStacker-${project.version}
@@ -126,11 +126,6 @@
Lootables
1.0.8
-
- com.gamingmesh
- jobs
- 4.10.3
-
com.bgsoftware
wildstacker
diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
index 3f8d074..3cfac1b 100644
--- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
+++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
@@ -192,9 +192,9 @@ public class UltimateStacker extends SongodaPlugin {
pluginManager.registerEvents(new ClearLagListeners(this), this);
// Register Hooks
- if (pluginManager.isPluginEnabled("Jobs")) {
+ if (pluginManager.isPluginEnabled("Jobs"))
stackerHooks.add(new JobsHook());
- }
+
HologramManager.load(this);
// Database stuff, go!
diff --git a/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java b/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java
index 3ab30ae..e0f0400 100644
--- a/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java
+++ b/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java
@@ -1,30 +1,26 @@
package com.songoda.ultimatestacker.hook.hooks;
-import com.gamingmesh.jobs.Jobs;
-import com.gamingmesh.jobs.actions.EntityActionInfo;
-import com.gamingmesh.jobs.container.ActionType;
-import com.gamingmesh.jobs.container.JobsPlayer;
+import com.songoda.core.hooks.jobs.JobsPlayerHandler;
import com.songoda.ultimatestacker.hook.StackerHook;
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
import org.bukkit.GameMode;
-import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
public class JobsHook implements StackerHook {
@Override
public void applyExperience(Player player, EntityStack entityStack) {
- if (player.getGameMode().equals(GameMode.CREATIVE))
+ if (player.getGameMode().equals(GameMode.CREATIVE) || entityStack.getHostEntity() == null)
return;
- JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
+ JobsPlayerHandler jPlayer = com.songoda.core.hooks.JobsHook.getPlayer(player);
if (jPlayer == null)
return;
for (int i = 1; i < entityStack.getAmount(); i++) {
- Entity entity = entityStack.getHostEntity();
- EntityActionInfo eInfo = new EntityActionInfo(entity, ActionType.KILL);
- Jobs.action(jPlayer, eInfo, entity);
+ LivingEntity entity = entityStack.getHostEntity();
+ jPlayer.killEntity(entity);
}
}
}
diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java
index 561fe79..ded22b3 100644
--- a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java
+++ b/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java
@@ -11,6 +11,7 @@ import org.bukkit.GameRule;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.ChestedHorse;
+import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@@ -18,13 +19,17 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Random;
+import java.util.UUID;
import java.util.stream.Collectors;
public class DeathListeners implements Listener {
@@ -37,8 +42,23 @@ public class DeathListeners implements Listener {
this.random = new Random();
}
+
+ private final Map> finalItems = new HashMap<>();
+
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
+ public void onEntityDamage(EntityDamageEvent event) {
+ if (!(event.getEntity() instanceof LivingEntity))
+ return;
+ LivingEntity entity = (LivingEntity) event.getEntity();
+
+ if (entity.getHealth() - event.getFinalDamage() < 0)
+ finalItems.put(entity.getUniqueId(), getItems(entity));
+
+ }
+
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityDeath(EntityDeathEvent event) {
+ LivingEntity entity = event.getEntity();
if (event.getEntityType() == EntityType.PLAYER
|| event.getEntityType() == EntityType.ARMOR_STAND) return;
@@ -54,25 +74,25 @@ public class DeathListeners implements Listener {
}
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
- && !event.getEntity().getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT))
+ && !entity.getWorld().getGameRuleValue(GameRule.DO_MOB_LOOT))
drops.clear();
if (plugin.getEntityStackManager().isStackedAndLoaded(event.getEntity()))
plugin.getEntityStackManager().getStack(event.getEntity())
- .onDeath(event.getEntity(), drops, custom, event.getDroppedExp(), event);
+ .onDeath(entity, drops, custom, event.getDroppedExp(), event);
else
DropUtils.processStackedDrop(event.getEntity(), drops, event);
+ finalItems.remove(entity.getUniqueId());
}
private boolean shouldDrop(LivingEntity entity, Material material) {
if (entity.getEquipment() != null && entity.getEquipment().getArmorContents().length != 0) {
- List items = new ArrayList<>(Arrays.asList(entity.getEquipment().getArmorContents()));
- items.add(entity.getEquipment().getItemInHand());
- if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9))
- items.add(entity.getEquipment().getItemInOffHand());
- for (ItemStack item : items)
- if (item.getType() == material)
- return true;
+ if (finalItems.containsKey(entity.getUniqueId())) {
+ List items = finalItems.get(entity.getUniqueId());
+ for (ItemStack item : items)
+ if (item.getType() == material)
+ return true;
+ }
}
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)
&& entity instanceof ChestedHorse
@@ -110,6 +130,17 @@ public class DeathListeners implements Listener {
}
}
+ public List getItems(LivingEntity entity) {
+ if (entity.getEquipment() != null && entity.getEquipment().getArmorContents().length != 0) {
+ List items = new ArrayList<>(Arrays.asList(entity.getEquipment().getArmorContents()));
+ items.add(entity.getEquipment().getItemInHand());
+ if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9))
+ items.add(entity.getEquipment().getItemInOffHand());
+ return items;
+ }
+ return new ArrayList<>();
+ }
+
@EventHandler
public void onEntityHit(EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Player) || ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_12))