mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-01-10 07:47:35 +01:00
!disable death drop stat.
This commit is contained in:
parent
a2a01bfb42
commit
19a6e7a4d6
@ -1,8 +1,80 @@
|
||||
package net.Indyuce.mmoitems;
|
||||
|
||||
import net.Indyuce.mmoitems.stat.*;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||
import net.Indyuce.mmoitems.stat.Abilities;
|
||||
import net.Indyuce.mmoitems.stat.Amphibian;
|
||||
import net.Indyuce.mmoitems.stat.Armor;
|
||||
import net.Indyuce.mmoitems.stat.ArmorToughness;
|
||||
import net.Indyuce.mmoitems.stat.ArrowParticles;
|
||||
import net.Indyuce.mmoitems.stat.ArrowPotionEffects;
|
||||
import net.Indyuce.mmoitems.stat.AttackDamage;
|
||||
import net.Indyuce.mmoitems.stat.AttackSpeed;
|
||||
import net.Indyuce.mmoitems.stat.CanDeconstruct;
|
||||
import net.Indyuce.mmoitems.stat.CanDeskin;
|
||||
import net.Indyuce.mmoitems.stat.CanIdentify;
|
||||
import net.Indyuce.mmoitems.stat.Commands;
|
||||
import net.Indyuce.mmoitems.stat.CompatibleIds;
|
||||
import net.Indyuce.mmoitems.stat.CompatibleTypes;
|
||||
import net.Indyuce.mmoitems.stat.Crafting;
|
||||
import net.Indyuce.mmoitems.stat.CustomModelData;
|
||||
import net.Indyuce.mmoitems.stat.CustomSounds;
|
||||
import net.Indyuce.mmoitems.stat.DisableAdvancedEnchantments;
|
||||
import net.Indyuce.mmoitems.stat.DisableDeathDrop;
|
||||
import net.Indyuce.mmoitems.stat.DisplayName;
|
||||
import net.Indyuce.mmoitems.stat.DyeColor;
|
||||
import net.Indyuce.mmoitems.stat.Effects;
|
||||
import net.Indyuce.mmoitems.stat.Elements;
|
||||
import net.Indyuce.mmoitems.stat.Enchants;
|
||||
import net.Indyuce.mmoitems.stat.GemColor;
|
||||
import net.Indyuce.mmoitems.stat.GemSockets;
|
||||
import net.Indyuce.mmoitems.stat.GemUpgradeScaling;
|
||||
import net.Indyuce.mmoitems.stat.GrantedPermissions;
|
||||
import net.Indyuce.mmoitems.stat.HideDye;
|
||||
import net.Indyuce.mmoitems.stat.HideEnchants;
|
||||
import net.Indyuce.mmoitems.stat.HidePotionEffects;
|
||||
import net.Indyuce.mmoitems.stat.Inedible;
|
||||
import net.Indyuce.mmoitems.stat.InternalRevisionID;
|
||||
import net.Indyuce.mmoitems.stat.ItemDamage;
|
||||
import net.Indyuce.mmoitems.stat.ItemLevel;
|
||||
import net.Indyuce.mmoitems.stat.ItemParticles;
|
||||
import net.Indyuce.mmoitems.stat.ItemSetStat;
|
||||
import net.Indyuce.mmoitems.stat.ItemTierStat;
|
||||
import net.Indyuce.mmoitems.stat.ItemTypeRestriction;
|
||||
import net.Indyuce.mmoitems.stat.KnockbackResistance;
|
||||
import net.Indyuce.mmoitems.stat.Lore;
|
||||
import net.Indyuce.mmoitems.stat.LoreFormat;
|
||||
import net.Indyuce.mmoitems.stat.LostWhenBroken;
|
||||
import net.Indyuce.mmoitems.stat.LuteAttackEffectStat;
|
||||
import net.Indyuce.mmoitems.stat.LuteAttackSoundStat;
|
||||
import net.Indyuce.mmoitems.stat.MaterialStat;
|
||||
import net.Indyuce.mmoitems.stat.MaxHealth;
|
||||
import net.Indyuce.mmoitems.stat.MaximumDurability;
|
||||
import net.Indyuce.mmoitems.stat.MovementSpeed;
|
||||
import net.Indyuce.mmoitems.stat.NBTTags;
|
||||
import net.Indyuce.mmoitems.stat.PermanentEffects;
|
||||
import net.Indyuce.mmoitems.stat.Permission;
|
||||
import net.Indyuce.mmoitems.stat.PickaxePower;
|
||||
import net.Indyuce.mmoitems.stat.PotionColor;
|
||||
import net.Indyuce.mmoitems.stat.PotionEffects;
|
||||
import net.Indyuce.mmoitems.stat.RepairPower;
|
||||
import net.Indyuce.mmoitems.stat.RepairType;
|
||||
import net.Indyuce.mmoitems.stat.RequiredBiomes;
|
||||
import net.Indyuce.mmoitems.stat.RequiredClass;
|
||||
import net.Indyuce.mmoitems.stat.RequiredLevel;
|
||||
import net.Indyuce.mmoitems.stat.RevisionID;
|
||||
import net.Indyuce.mmoitems.stat.ShieldPatternStat;
|
||||
import net.Indyuce.mmoitems.stat.SkullTextureStat;
|
||||
import net.Indyuce.mmoitems.stat.SoulbindingBreakChance;
|
||||
import net.Indyuce.mmoitems.stat.SoulbindingChance;
|
||||
import net.Indyuce.mmoitems.stat.Soulbound;
|
||||
import net.Indyuce.mmoitems.stat.SoulboundLevel;
|
||||
import net.Indyuce.mmoitems.stat.StaffSpiritStat;
|
||||
import net.Indyuce.mmoitems.stat.StoredTags;
|
||||
import net.Indyuce.mmoitems.stat.SuccessRate;
|
||||
import net.Indyuce.mmoitems.stat.Unbreakable;
|
||||
import net.Indyuce.mmoitems.stat.Unstackable;
|
||||
import net.Indyuce.mmoitems.stat.UpgradeStat;
|
||||
import net.Indyuce.mmoitems.stat.VanillaEatingAnimation;
|
||||
import net.Indyuce.mmoitems.stat.block.BlockID;
|
||||
import net.Indyuce.mmoitems.stat.block.GenTemplate;
|
||||
import net.Indyuce.mmoitems.stat.block.MaxXP;
|
||||
@ -13,7 +85,7 @@ import net.Indyuce.mmoitems.stat.type.DisableStat;
|
||||
import net.Indyuce.mmoitems.stat.type.DoubleStat;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.Indyuce.mmoitems.stat.type.StringStat;
|
||||
import io.lumine.mythic.lib.version.VersionMaterial;
|
||||
import org.bukkit.Material;
|
||||
|
||||
/**
|
||||
* A central file for the plugin since new stats are added ALL the time.
|
||||
@ -114,6 +186,7 @@ public class ItemStats {
|
||||
TWO_HANDED = new BooleanStat("TWO_HANDED", Material.IRON_INGOT, "Two Handed", new String[]{"If set to true, a player will be", "significantly slower if holding two", "items, one being Two Handed."}, new String[]{"piercing", "slashing", "blunt", "offhand", "range", "tool"}),
|
||||
EQUIP_PRIORITY = new DoubleStat("EQUIP_PRIORITY", VersionMaterial.DIAMOND_HORSE_ARMOR.toMaterial(), "Equip Priority", new String[]{"Sets the level of priority this item has for the", "right click to swap equipped armor feature."}),
|
||||
REQUIRED_BIOMES = new RequiredBiomes(),
|
||||
DROP_ON_DEATH = new DisableDeathDrop(),
|
||||
|
||||
// Permanent Effects
|
||||
PERM_EFFECTS = new PermanentEffects(),
|
||||
|
@ -29,9 +29,13 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
private final Map<Player, ArrayList<ItemStack>> deathItems = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public void loadPlayerData(PlayerJoinEvent event) {
|
||||
@ -76,7 +80,7 @@ public class PlayerListener implements Listener {
|
||||
* way there don't get lost
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void applySoulbound(PlayerDeathEvent event) {
|
||||
public void onDeath(PlayerDeathEvent event) {
|
||||
if (event.getKeepInventory() || !MMOItems.plugin.getLanguage().keepSoulboundOnDeath)
|
||||
return;
|
||||
|
||||
@ -86,14 +90,22 @@ public class PlayerListener implements Listener {
|
||||
Iterator<ItemStack> iterator = event.getDrops().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
ItemStack item = iterator.next();
|
||||
NBTItem nbt = MythicLib.plugin.getVersion().getWrapper().getNBTItem(item);
|
||||
NBTItem nbt = NBTItem.get(item);
|
||||
|
||||
if (nbt.hasTag("MMOITEMS_DISABLE_DEATH_DROP") && nbt.getBoolean("MMOITEMS_DISABLE_DEATH_DROP")) {
|
||||
iterator.remove();
|
||||
if (!deathItems.containsKey(player))
|
||||
deathItems.put(player, new ArrayList<>());
|
||||
|
||||
deathItems.get(player).add(item);
|
||||
}
|
||||
|
||||
/*
|
||||
* not a perfect check but it's very sufficient and so we avoid
|
||||
* using a JsonParser followed by map checkups in the SoulboundData
|
||||
* constructor
|
||||
*/
|
||||
if (nbt.hasTag("MMOITEMS_SOULBOUND") && nbt.getString("MMOITEMS_SOULBOUND").contains(player.getUniqueId().toString())) {
|
||||
else if (nbt.hasTag("MMOITEMS_SOULBOUND") && nbt.getString("MMOITEMS_SOULBOUND").contains(player.getUniqueId().toString())) {
|
||||
iterator.remove();
|
||||
soulboundInfo.add(item);
|
||||
}
|
||||
@ -104,9 +116,16 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void readSoulbound(PlayerRespawnEvent event) {
|
||||
public void onRespawn(PlayerRespawnEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (MMOItems.plugin.getLanguage().keepSoulboundOnDeath)
|
||||
SoulboundInfo.read(event.getPlayer());
|
||||
SoulboundInfo.read(player);
|
||||
|
||||
if (deathItems.containsKey(player)) {
|
||||
player.getInventory().addItem(deathItems.get(player).toArray(new ItemStack[0]));
|
||||
deathItems.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
|
@ -0,0 +1,11 @@
|
||||
package net.Indyuce.mmoitems.stat;
|
||||
|
||||
import net.Indyuce.mmoitems.stat.type.BooleanStat;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class DisableDeathDrop extends BooleanStat {
|
||||
public DisableDeathDrop() {
|
||||
super("DISABLE_DEATH_DROP", Material.BONE, "Disable Drop On Death",
|
||||
new String[] { "Enable this to prevent this item", "from dropping on the wielder's death." }, new String[] { "all" });
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user