mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-11-27 12:35:17 +01:00
Merge remote-tracking branch 'origin/development' into development
This commit is contained in:
commit
bb0a4f5413
@ -4,7 +4,7 @@ stages:
|
||||
variables:
|
||||
name: "UltimateStacker"
|
||||
path: "/builds/$CI_PROJECT_PATH"
|
||||
version: "1.9.7"
|
||||
version: "1.9.8"
|
||||
|
||||
build:
|
||||
stage: build
|
||||
|
@ -2,29 +2,37 @@ package com.songoda.ultimatestacker.listeners;
|
||||
|
||||
import com.songoda.lootables.loot.Drop;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.utils.DropUtils;
|
||||
import com.songoda.ultimatestacker.utils.ServerVersion;
|
||||
import com.songoda.ultimatestacker.utils.settings.Setting;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.ChestedHorse;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
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.EntityDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class DeathListeners implements Listener {
|
||||
|
||||
private final UltimateStacker instance;
|
||||
private Random random;
|
||||
|
||||
public DeathListeners(UltimateStacker instance) {
|
||||
this.instance = instance;
|
||||
random = new Random();
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
@ -96,4 +104,48 @@ public class DeathListeners implements Listener {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityHit(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player)) return;
|
||||
if (!instance.getEntityStackManager().isStacked(event.getEntity())) return;
|
||||
EntityStack stack = instance.getEntityStackManager().getStack(event.getEntity());
|
||||
|
||||
if (Setting.KILL_WHOLE_STACK_ON_DEATH.getBoolean() && Setting.REALISTIC_DAMAGE.getBoolean()) {
|
||||
Player player = (Player) event.getDamager();
|
||||
ItemStack tool = player.getInventory().getItemInMainHand();
|
||||
if (tool.getType().getMaxDurability() < 1 || (tool.getItemMeta() != null && (tool.getItemMeta().isUnbreakable()
|
||||
|| tool.getItemMeta().spigot().isUnbreakable())))
|
||||
return;
|
||||
|
||||
int unbreakingLevel = tool.getEnchantmentLevel(Enchantment.DURABILITY);
|
||||
Damageable damageable = (Damageable) tool.getItemMeta();
|
||||
|
||||
int actualDamage = 0;
|
||||
for (int i = 0; i < stack.getAmount(); i++)
|
||||
if (checkUnbreakingChance(unbreakingLevel))
|
||||
actualDamage++;
|
||||
|
||||
damageable.setDamage(damageable.getDamage() + actualDamage-1);
|
||||
tool.setItemMeta((ItemMeta) damageable);
|
||||
|
||||
if (!this.hasEnoughDurability(tool, 1))
|
||||
player.getInventory().setItemInMainHand(null);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasEnoughDurability(ItemStack tool, int requiredAmount) {
|
||||
if (!tool.hasItemMeta() || !(tool.getItemMeta() instanceof Damageable) || tool.getType().getMaxDurability() < 1)
|
||||
return true;
|
||||
|
||||
Damageable damageable = (Damageable) tool.getItemMeta();
|
||||
int durabilityRemaining = tool.getType().getMaxDurability() - damageable.getDamage();
|
||||
return durabilityRemaining > requiredAmount;
|
||||
}
|
||||
|
||||
public boolean checkUnbreakingChance(int level) {
|
||||
return (1.0 / (level + 1)) > random.nextDouble();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -148,6 +148,9 @@ public enum Setting {
|
||||
"Y axis. This is important for grinders so that flying entities don't continuously",
|
||||
"stack upwards to a higher up entity."),
|
||||
|
||||
REALISTIC_DAMAGE("Entities.Use Realistic Weapon Damage", true,
|
||||
"Should weapons tale damage based on the amount of entites in the stack?"),
|
||||
|
||||
STACK_ITEMS("Items.Enabled", true,
|
||||
"Should items be stacked?"),
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user