v3.5.2
This commit is contained in:
parent
e57e2ab26e
commit
a952a70f01
@ -9,6 +9,6 @@ import su.nightexpress.excellentenchants.api.enchantment.IEnchantment;
|
|||||||
|
|
||||||
public interface BlockDropEnchant extends IEnchantment {
|
public interface BlockDropEnchant extends IEnchantment {
|
||||||
|
|
||||||
boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer,
|
boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer,
|
||||||
@NotNull Player player, @NotNull ItemStack item, int level);
|
@NotNull Player player, @NotNull ItemStack item, int level);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import org.bukkit.NamespacedKey;
|
|||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import su.nexmedia.engine.Version;
|
||||||
import su.nexmedia.engine.utils.Reflex;
|
import su.nexmedia.engine.utils.Reflex;
|
||||||
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
||||||
import su.nightexpress.excellentenchants.config.Config;
|
import su.nightexpress.excellentenchants.config.Config;
|
||||||
@ -123,6 +124,11 @@ public class EnchantRegistry {
|
|||||||
this.register(EnchantPoisonedArrows.ID, () -> new EnchantPoisonedArrows(plugin));
|
this.register(EnchantPoisonedArrows.ID, () -> new EnchantPoisonedArrows(plugin));
|
||||||
this.register(EnchantWitheredArrows.ID, () -> new EnchantWitheredArrows(plugin));
|
this.register(EnchantWitheredArrows.ID, () -> new EnchantWitheredArrows(plugin));
|
||||||
|
|
||||||
|
if (Version.isAbove(Version.V1_18_R2)) {
|
||||||
|
this.register(DarknessArrowsEnchant.ID, () -> new DarknessArrowsEnchant(plugin));
|
||||||
|
this.register(DarknessCloakEnchant.ID, () -> new DarknessCloakEnchant(plugin));
|
||||||
|
}
|
||||||
|
|
||||||
// Universal
|
// Universal
|
||||||
this.register(EnchantCurseOfFragility.ID, () -> new EnchantCurseOfFragility(plugin));
|
this.register(EnchantCurseOfFragility.ID, () -> new EnchantCurseOfFragility(plugin));
|
||||||
this.register(CurseOfMediocrityEnchant.ID, () -> new CurseOfMediocrityEnchant(plugin));
|
this.register(CurseOfMediocrityEnchant.ID, () -> new CurseOfMediocrityEnchant(plugin));
|
||||||
|
@ -0,0 +1,81 @@
|
|||||||
|
package su.nightexpress.excellentenchants.enchantment.impl.armor;
|
||||||
|
|
||||||
|
import org.bukkit.Particle;
|
||||||
|
import org.bukkit.enchantments.EnchantmentTarget;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import su.nexmedia.engine.api.particle.SimpleParticle;
|
||||||
|
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
||||||
|
import su.nightexpress.excellentenchants.Placeholders;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.meta.Potioned;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.type.CombatEnchant;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.meta.PotionImplementation;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.util.EnchantPriority;
|
||||||
|
|
||||||
|
public class DarknessCloakEnchant extends ExcellentEnchant implements Chanced, Potioned, CombatEnchant {
|
||||||
|
|
||||||
|
public static final String ID = "darkness_cloak";
|
||||||
|
|
||||||
|
private ChanceImplementation chanceImplementation;
|
||||||
|
private PotionImplementation potionImplementation;
|
||||||
|
|
||||||
|
public DarknessCloakEnchant(@NotNull ExcellentEnchants plugin) {
|
||||||
|
super(plugin, ID, EnchantPriority.MEDIUM);
|
||||||
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to apply " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.) on attacker.");
|
||||||
|
this.getDefaults().setLevelMax(3);
|
||||||
|
this.getDefaults().setTier(0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadSettings() {
|
||||||
|
super.loadSettings();
|
||||||
|
this.chanceImplementation = ChanceImplementation.create(this,
|
||||||
|
"20.0 * " + Placeholders.ENCHANTMENT_LEVEL + " * 0.75");
|
||||||
|
|
||||||
|
this.potionImplementation = PotionImplementation.create(this, PotionEffectType.DARKNESS, false,
|
||||||
|
"2.5" + Placeholders.ENCHANTMENT_LEVEL,
|
||||||
|
Placeholders.ENCHANTMENT_LEVEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ChanceImplementation getChanceImplementation() {
|
||||||
|
return chanceImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public PotionImplementation getPotionImplementation() {
|
||||||
|
return potionImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NotNull
|
||||||
|
public EnchantmentTarget getItemTarget() {
|
||||||
|
return EnchantmentTarget.ARMOR_TORSO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onAttack(@NotNull EntityDamageByEntityEvent e, @NotNull LivingEntity damager, @NotNull LivingEntity victim, @NotNull ItemStack weapon, int level) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onProtect(@NotNull EntityDamageByEntityEvent e, @NotNull LivingEntity damager, @NotNull LivingEntity victim, @NotNull ItemStack weapon, int level) {
|
||||||
|
if (!this.isAvailableToUse(victim)) return false;
|
||||||
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
|
if (!this.addEffect(damager, level)) return false;
|
||||||
|
|
||||||
|
if (this.hasVisualEffects()) {
|
||||||
|
SimpleParticle.of(Particle.ASH).play(damager.getEyeLocation(), 0.75, 0.1, 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,9 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.inventory.EntityEquipment;
|
import org.bukkit.inventory.EntityEquipment;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -28,6 +30,7 @@ import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
|
|||||||
import su.nightexpress.excellentenchants.enchantment.util.EnchantPriority;
|
import su.nightexpress.excellentenchants.enchantment.util.EnchantPriority;
|
||||||
import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils;
|
import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -75,6 +78,10 @@ public class EnchantFlameWalker extends ExcellentEnchant implements Cleanable {
|
|||||||
BLOCKS_TO_DESTROY.put(block, Pair.of(System.currentTimeMillis() + (long) seconds * 1000L, Rnd.get(100)));
|
BLOCKS_TO_DESTROY.put(block, Pair.of(System.currentTimeMillis() + (long) seconds * 1000L, Rnd.get(100)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isBlock(@NotNull Block block) {
|
||||||
|
return BLOCKS_TO_DESTROY.containsKey(block);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public EnchantmentTarget getItemTarget() {
|
public EnchantmentTarget getItemTarget() {
|
||||||
@ -111,14 +118,34 @@ public class EnchantFlameWalker extends ExcellentEnchant implements Cleanable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onFlameWalkerBlock(BlockBreakEvent e) {
|
public void onFlameWalkerBlock(BlockBreakEvent event) {
|
||||||
if (BLOCKS_TO_DESTROY.containsKey(e.getBlock())) {
|
if (isBlock(event.getBlock())) {
|
||||||
e.setDropItems(false);
|
event.setDropItems(false);
|
||||||
e.setExpToDrop(0);
|
event.setExpToDrop(0);
|
||||||
e.getBlock().setType(Material.LAVA);
|
event.getBlock().setType(Material.LAVA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
|
public void onBlockExplode(EntityExplodeEvent event) {
|
||||||
|
this.processExplosion(event.blockList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
|
public void onBlockExplode2(BlockExplodeEvent event) {
|
||||||
|
this.processExplosion(event.blockList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processExplosion(@NotNull List<Block> blocks) {
|
||||||
|
blocks.removeIf(block -> {
|
||||||
|
if (isBlock(block)) {
|
||||||
|
block.setType(Material.AIR);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onMagmaDamage(EntityDamageEvent e) {
|
public void onMagmaDamage(EntityDamageEvent e) {
|
||||||
if (e.getCause() != EntityDamageEvent.DamageCause.HOT_FLOOR) return;
|
if (e.getCause() != EntityDamageEvent.DamageCause.HOT_FLOOR) return;
|
||||||
|
@ -0,0 +1,98 @@
|
|||||||
|
package su.nightexpress.excellentenchants.enchantment.impl.bow;
|
||||||
|
|
||||||
|
import org.bukkit.Particle;
|
||||||
|
import org.bukkit.enchantments.EnchantmentTarget;
|
||||||
|
import org.bukkit.entity.AbstractArrow;
|
||||||
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import su.nexmedia.engine.api.particle.SimpleParticle;
|
||||||
|
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
||||||
|
import su.nightexpress.excellentenchants.Placeholders;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.meta.Arrowed;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.meta.Potioned;
|
||||||
|
import su.nightexpress.excellentenchants.api.enchantment.type.BowEnchant;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.meta.ArrowImplementation;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.impl.meta.PotionImplementation;
|
||||||
|
import su.nightexpress.excellentenchants.enchantment.util.EnchantPriority;
|
||||||
|
|
||||||
|
public class DarknessArrowsEnchant extends ExcellentEnchant implements Chanced, Arrowed, Potioned, BowEnchant {
|
||||||
|
|
||||||
|
public static final String ID = "darkness_arrows";
|
||||||
|
|
||||||
|
private ArrowImplementation arrowImplementation;
|
||||||
|
private ChanceImplementation chanceImplementation;
|
||||||
|
private PotionImplementation potionImplementation;
|
||||||
|
|
||||||
|
public DarknessArrowsEnchant(@NotNull ExcellentEnchants plugin) {
|
||||||
|
super(plugin, ID, EnchantPriority.MEDIUM);
|
||||||
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
||||||
|
this.getDefaults().setLevelMax(3);
|
||||||
|
this.getDefaults().setTier(0.1);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadSettings() {
|
||||||
|
super.loadSettings();
|
||||||
|
this.arrowImplementation = ArrowImplementation.create(this, SimpleParticle.of(Particle.ASH));
|
||||||
|
this.chanceImplementation = ChanceImplementation.create(this,
|
||||||
|
"25.0 + " + Placeholders.ENCHANTMENT_LEVEL + " * 5.0");
|
||||||
|
this.potionImplementation = PotionImplementation.create(this, PotionEffectType.DARKNESS, false,
|
||||||
|
"4.0 + " + Placeholders.ENCHANTMENT_LEVEL,
|
||||||
|
Placeholders.ENCHANTMENT_LEVEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ArrowImplementation getArrowImplementation() {
|
||||||
|
return arrowImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ChanceImplementation getChanceImplementation() {
|
||||||
|
return chanceImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public PotionImplementation getPotionImplementation() {
|
||||||
|
return potionImplementation;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public EnchantmentTarget getItemTarget() {
|
||||||
|
return EnchantmentTarget.BOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onShoot(@NotNull EntityShootBowEvent e, @NotNull LivingEntity shooter, @NotNull ItemStack bow, int level) {
|
||||||
|
if (!this.isAvailableToUse(shooter)) return false;
|
||||||
|
if (!(e.getProjectile() instanceof Arrow arrow)) return false;
|
||||||
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
|
|
||||||
|
arrow.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED);
|
||||||
|
return arrow.addCustomEffect(this.createEffect(level), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onHit(@NotNull ProjectileHitEvent e, @NotNull Projectile projectile, @NotNull ItemStack bow, int level) {
|
||||||
|
return this.isOurProjectile(projectile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onDamage(@NotNull EntityDamageByEntityEvent e, @NotNull Projectile projectile, @NotNull LivingEntity shooter, @NotNull LivingEntity victim, @NotNull ItemStack weapon, int level) {
|
||||||
|
return this.isOurProjectile(projectile);
|
||||||
|
}
|
||||||
|
}
|
@ -37,7 +37,8 @@ public class EnchantBomber extends ExcellentEnchant implements Chanced, BowEncha
|
|||||||
EnchantEnderBow.ID, EnchantGhast.ID,
|
EnchantEnderBow.ID, EnchantGhast.ID,
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
||||||
EnchantHover.ID,
|
DarknessArrowsEnchant.ID,
|
||||||
|
EnchantHover.ID, FlareEnchant.ID,
|
||||||
Enchantment.ARROW_FIRE.getKey().getKey(),
|
Enchantment.ARROW_FIRE.getKey().getKey(),
|
||||||
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
||||||
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
||||||
|
@ -38,11 +38,7 @@ public class EnchantConfusingArrows extends ExcellentEnchant implements Chanced,
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.1);
|
this.getDefaults().setTier(0.1);
|
||||||
this.getDefaults().setConflicts(
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantBomber.ID, EnchantHover.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -47,12 +47,7 @@ public class EnchantDragonfireArrows extends ExcellentEnchant implements Chanced
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an dragonfire arrow (R=" + PLACEHOLDER_FIRE_RADIUS + ", " + PLACEHOLDER_FIRE_DURATION + "s).");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an dragonfire arrow (R=" + PLACEHOLDER_FIRE_RADIUS + ", " + PLACEHOLDER_FIRE_DURATION + "s).");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.7);
|
this.getDefaults().setTier(0.7);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
this.getDefaults().setConflicts(
|
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,12 +42,7 @@ public class EnchantElectrifiedArrows extends ExcellentEnchant implements Chance
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an electrified arrow.");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an electrified arrow.");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.3);
|
this.getDefaults().setTier(0.3);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
this.getDefaults().setConflicts(
|
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,7 +33,8 @@ public class EnchantEnderBow extends ExcellentEnchant implements BowEnchant, Cha
|
|||||||
EnchantBomber.ID, EnchantGhast.ID,
|
EnchantBomber.ID, EnchantGhast.ID,
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
||||||
EnchantHover.ID,
|
DarknessArrowsEnchant.ID,
|
||||||
|
EnchantHover.ID, FlareEnchant.ID,
|
||||||
Enchantment.ARROW_FIRE.getKey().getKey(),
|
Enchantment.ARROW_FIRE.getKey().getKey(),
|
||||||
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
||||||
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
||||||
|
@ -47,12 +47,7 @@ public class EnchantExplosiveArrows extends ExcellentEnchant implements Chanced,
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an explosive arrow.");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an explosive arrow.");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.7);
|
this.getDefaults().setTier(0.7);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
this.getDefaults().setConflicts(
|
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID,
|
|
||||||
EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -40,7 +40,8 @@ public class EnchantGhast extends ExcellentEnchant implements BowEnchant, Chance
|
|||||||
EnchantEnderBow.ID, EnchantBomber.ID,
|
EnchantEnderBow.ID, EnchantBomber.ID,
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID,
|
||||||
EnchantHover.ID,
|
DarknessArrowsEnchant.ID,
|
||||||
|
EnchantHover.ID, FlareEnchant.ID,
|
||||||
Enchantment.ARROW_FIRE.getKey().getKey(),
|
Enchantment.ARROW_FIRE.getKey().getKey(),
|
||||||
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
Enchantment.ARROW_KNOCKBACK.getKey().getKey(),
|
||||||
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
Enchantment.ARROW_DAMAGE.getKey().getKey()
|
||||||
|
@ -38,11 +38,7 @@ public class EnchantHover extends ExcellentEnchant implements Chanced, Arrowed,
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.1);
|
this.getDefaults().setTier(0.1);
|
||||||
this.getDefaults().setConflicts(
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantBomber.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -38,12 +38,7 @@ public class EnchantPoisonedArrows extends ExcellentEnchant implements Chanced,
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.1);
|
this.getDefaults().setTier(0.1);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
this.getDefaults().setConflicts(
|
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantWitheredArrows.ID, EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -38,12 +38,7 @@ public class EnchantWitheredArrows extends ExcellentEnchant implements Chanced,
|
|||||||
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
this.getDefaults().setDescription(Placeholders.ENCHANTMENT_CHANCE + "% chance to launch an arrow with " + Placeholders.ENCHANTMENT_POTION_TYPE + " " + Placeholders.ENCHANTMENT_POTION_LEVEL + " (" + Placeholders.ENCHANTMENT_POTION_DURATION + "s.)");
|
||||||
this.getDefaults().setLevelMax(3);
|
this.getDefaults().setLevelMax(3);
|
||||||
this.getDefaults().setTier(0.5);
|
this.getDefaults().setTier(0.5);
|
||||||
|
this.getDefaults().setConflicts(EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID, EnchantBomber.ID);
|
||||||
this.getDefaults().setConflicts(
|
|
||||||
EnchantEnderBow.ID, EnchantGhast.ID, EnchantHover.ID,
|
|
||||||
EnchantExplosiveArrows.ID, EnchantPoisonedArrows.ID, EnchantConfusingArrows.ID,
|
|
||||||
EnchantElectrifiedArrows.ID, EnchantDragonfireArrows.ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -62,12 +62,12 @@ public class CurseOfMediocrityEnchant extends ExcellentEnchant implements Chance
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer,
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer,
|
||||||
@NotNull Player player, @NotNull ItemStack item, int level) {
|
@NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
if (!this.isAvailableToUse(player)) return false;
|
if (!this.isAvailableToUse(player)) return false;
|
||||||
if (!this.checkTriggerChance(level)) return false;
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
|
|
||||||
e.getItems().forEach(drop -> {
|
event.getItems().forEach(drop -> {
|
||||||
ItemStack stack = drop.getItemStack();
|
ItemStack stack = drop.getItemStack();
|
||||||
ItemUtil.mapMeta(stack, meta -> {
|
ItemUtil.mapMeta(stack, meta -> {
|
||||||
meta.getEnchants().keySet().forEach(meta::removeEnchant);
|
meta.getEnchants().keySet().forEach(meta::removeEnchant);
|
||||||
|
@ -102,8 +102,8 @@ public class EnchantDivineTouch extends ExcellentEnchant implements Chanced, Blo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
BlockState state = e.getBlockState();
|
BlockState state = event.getBlockState();
|
||||||
Block block = state.getBlock();
|
Block block = state.getBlock();
|
||||||
if (!block.hasMetadata(META_HANDLE)) return false;
|
if (!block.hasMetadata(META_HANDLE)) return false;
|
||||||
if (!(state instanceof CreatureSpawner spawnerBlock)) return false;
|
if (!(state instanceof CreatureSpawner spawnerBlock)) return false;
|
||||||
|
@ -130,23 +130,29 @@ public class EnchantSilkChest extends ExcellentEnchant implements BlockDropEncha
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer,
|
||||||
BlockState state = e.getBlockState();
|
@NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
|
BlockState state = event.getBlockState();
|
||||||
Block block = state.getBlock();
|
Block block = state.getBlock();
|
||||||
|
|
||||||
if (!this.isAvailableToUse(player)) return false;
|
if (!this.isAvailableToUse(player)) return false;
|
||||||
if (!(state instanceof Chest chest)) return false;
|
if (!(state instanceof Chest chest)) return false;
|
||||||
|
|
||||||
// Добавляем в сундук обратно предметы из дроп листа, кроме самого сундука.
|
// Добавляем в сундук обратно предметы из дроп листа, кроме самого сундука.
|
||||||
e.getItems().removeIf(drop -> drop.getItemStack().getType() == state.getType() && drop.getItemStack().getAmount() == 1);
|
event.getItems().removeIf(drop -> drop.getItemStack().getType() == state.getType() && drop.getItemStack().getAmount() == 1);
|
||||||
chest.getBlockInventory().addItem(e.getItems().stream().map(Item::getItemStack).toList().toArray(new ItemStack[0]));
|
chest.getBlockInventory().addItem(event.getItems().stream().map(Item::getItemStack).toList().toArray(new ItemStack[0]));
|
||||||
|
|
||||||
|
if (chest.getBlockInventory().isEmpty()) {
|
||||||
|
dropContainer.getDrop().add(new ItemStack(chest.getType()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Добавляем кастомный сундук в кастомный дроп лист.
|
// Добавляем кастомный сундук в кастомный дроп лист.
|
||||||
dropContainer.getDrop().add(this.getSilkChest(chest));
|
dropContainer.getDrop().add(this.getSilkChest(chest));
|
||||||
|
|
||||||
// Очищаем инвентарь сундука и дефолтный дроп лист.
|
// Очищаем инвентарь сундука и дефолтный дроп лист.
|
||||||
chest.getBlockInventory().clear();
|
chest.getBlockInventory().clear();
|
||||||
e.getItems().clear();
|
event.getItems().clear();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -89,18 +89,18 @@ public class EnchantSmelter extends ExcellentEnchant implements Chanced, BlockDr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
if (e.getBlockState() instanceof Container) return false;
|
if (event.getBlockState() instanceof Container) return false;
|
||||||
if (!this.isAvailableToUse(player)) return false;
|
if (!this.isAvailableToUse(player)) return false;
|
||||||
if (!this.checkTriggerChance(level)) return false;
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
if (e.getItems().stream().noneMatch(drop -> this.isSmeltable(drop.getItemStack().getType()))) return false;
|
if (event.getItems().stream().noneMatch(drop -> this.isSmeltable(drop.getItemStack().getType()))) return false;
|
||||||
|
|
||||||
e.getItems().forEach(drop -> {
|
event.getItems().forEach(drop -> {
|
||||||
Material material = this.smeltingTable.get(drop.getItemStack().getType());
|
Material material = this.smeltingTable.get(drop.getItemStack().getType());
|
||||||
if (material != null) drop.getItemStack().setType(material);
|
if (material != null) drop.getItemStack().setType(material);
|
||||||
});
|
});
|
||||||
|
|
||||||
Block block = e.getBlockState().getBlock();
|
Block block = event.getBlockState().getBlock();
|
||||||
if (this.hasVisualEffects()) {
|
if (this.hasVisualEffects()) {
|
||||||
Location location = LocationUtil.getCenter(block.getLocation(), true);
|
Location location = LocationUtil.getCenter(block.getLocation(), true);
|
||||||
LocationUtil.sound(location, this.sound);
|
LocationUtil.sound(location, this.sound);
|
||||||
|
@ -58,18 +58,18 @@ public class EnchantTelekinesis extends ExcellentEnchant implements Chanced, Blo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
if (!this.isAvailableToUse(player)) return false;
|
if (!this.isAvailableToUse(player)) return false;
|
||||||
if (!this.checkTriggerChance(level)) return false;
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
|
|
||||||
List<ItemStack> drops = new ArrayList<>();
|
List<ItemStack> drops = new ArrayList<>();
|
||||||
drops.addAll(e.getItems().stream().map(Item::getItemStack).toList());
|
drops.addAll(event.getItems().stream().map(Item::getItemStack).toList());
|
||||||
drops.addAll(dropContainer.getDrop());
|
drops.addAll(dropContainer.getDrop());
|
||||||
drops.removeIf(Objects::isNull);
|
drops.removeIf(Objects::isNull);
|
||||||
drops.forEach(drop -> PlayerUtil.addItem(player, drop));
|
drops.forEach(drop -> PlayerUtil.addItem(player, drop));
|
||||||
|
|
||||||
dropContainer.getDrop().clear();
|
dropContainer.getDrop().clear();
|
||||||
e.getItems().clear();
|
event.getItems().clear();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,8 @@ public class EnchantTreasures extends ExcellentEnchant implements Chanced, Block
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDrop(@NotNull BlockDropItemEvent e, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
public boolean onDrop(@NotNull BlockDropItemEvent event, @NotNull EnchantDropContainer dropContainer, @NotNull Player player, @NotNull ItemStack item, int level) {
|
||||||
Block block = e.getBlockState().getBlock();
|
Block block = event.getBlockState().getBlock();
|
||||||
if (block.hasMetadata(META)) {
|
if (block.hasMetadata(META)) {
|
||||||
block.removeMetadata(META, plugin);
|
block.removeMetadata(META, plugin);
|
||||||
return false;
|
return false;
|
||||||
@ -145,7 +145,7 @@ public class EnchantTreasures extends ExcellentEnchant implements Chanced, Block
|
|||||||
if (!this.isAvailableToUse(player)) return false;
|
if (!this.isAvailableToUse(player)) return false;
|
||||||
if (!this.checkTriggerChance(level)) return false;
|
if (!this.checkTriggerChance(level)) return false;
|
||||||
|
|
||||||
dropContainer.getDrop().addAll(this.getTreasures(e.getBlockState().getType()));
|
dropContainer.getDrop().addAll(this.getTreasures(event.getBlockState().getType()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
# +---------------------------------------------------------+
|
|
||||||
# | Официальная русская версия. |
|
|
||||||
# | Публикация на помойках rubukkit и spigotru ЗАПРЕЩЕНА. |
|
|
||||||
# +---------------------------------------------------------+
|
|
||||||
Command:
|
Command:
|
||||||
List:
|
List:
|
||||||
Desc: 'Список всех нестандартных зачарований.'
|
Desc: 'Меню дополнительных зачарований.'
|
||||||
Enchant:
|
Enchant:
|
||||||
Usage: '<зачарование> <уровень>'
|
Usage: '<зачарование> <уровень>'
|
||||||
Desc: 'Зачарование предмета в руке.'
|
Desc: 'Зачарование предмета в руке.'
|
||||||
|
Loading…
Reference in New Issue
Block a user