mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-04-15 20:06:24 +02:00
!Moved damage reduction formulas to MMOLib
This commit is contained in:
parent
7cde1863d2
commit
45d145ed38
@ -14,6 +14,8 @@ import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
@ -22,9 +24,8 @@ import org.bukkit.util.Vector;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
import net.Indyuce.mmoitems.api.util.AltChar;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.version.VersionMaterial;
|
||||
|
||||
public class MMOUtils {
|
||||
public static String getSkullTextureURL(ItemStack item) {
|
||||
@ -61,6 +62,35 @@ public class MMOUtils {
|
||||
player.getWorld().dropItem(player.getLocation(), drop);
|
||||
}
|
||||
|
||||
public static LivingEntity getDamager(EntityDamageByEntityEvent event) {
|
||||
|
||||
/*
|
||||
* check direct damager
|
||||
*/
|
||||
if (event.getDamager() instanceof LivingEntity)
|
||||
return (LivingEntity) event.getDamager();
|
||||
|
||||
/*
|
||||
* checks projectile and add damage type, which supports every vanilla
|
||||
* projectile like snowballs, tridents and arrows
|
||||
*/
|
||||
if (event.getDamager() instanceof Projectile) {
|
||||
Projectile proj = (Projectile) event.getDamager();
|
||||
if (proj.getShooter() instanceof LivingEntity)
|
||||
return (LivingEntity) proj.getShooter();
|
||||
}
|
||||
|
||||
/*
|
||||
* check for last damage
|
||||
*/
|
||||
// if (event.getEntity().getLastDamageCause() instanceof
|
||||
// EntityDamageByEntityEvent && checkLastDamageCause)
|
||||
// return getDamager(result, (EntityDamageByEntityEvent)
|
||||
// event.getEntity().getLastDamageCause(), false);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int getEffectDuration(PotionEffectType type) {
|
||||
|
||||
// confusion takes a lot of time to decay
|
||||
@ -77,18 +107,10 @@ public class MMOUtils {
|
||||
return 80;
|
||||
}
|
||||
|
||||
public static String getDisplayName(ItemStack i) {
|
||||
if (!i.hasItemMeta())
|
||||
return MMOUtils.caseOnWords(i.getType().name().toLowerCase().replace("_", " "));
|
||||
return i.getItemMeta().hasDisplayName() ? i.getItemMeta().getDisplayName() : MMOUtils.caseOnWords(i.getType().name().toLowerCase().replace("_", " "));
|
||||
}
|
||||
|
||||
public static Integer[] getSocketSlots(List<String> lore) {
|
||||
List<Integer> list = new ArrayList<Integer>();
|
||||
for (int j = 0; j < lore.size(); j++)
|
||||
if (lore.get(j).equals(ItemStat.translate("empty-gem-socket").replace("#d", AltChar.diamond)))
|
||||
list.add(j);
|
||||
return list.toArray(new Integer[list.size()]);
|
||||
public static String getDisplayName(ItemStack item) {
|
||||
if (!item.hasItemMeta())
|
||||
return MMOUtils.caseOnWords(item.getType().name().toLowerCase().replace("_", " "));
|
||||
return item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : MMOUtils.caseOnWords(item.getType().name().toLowerCase().replace("_", " "));
|
||||
}
|
||||
|
||||
public static boolean twoHandedCase(Player player) {
|
||||
@ -119,7 +141,7 @@ public class MMOUtils {
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public static boolean isPluginItem(ItemStack item, boolean lore) {
|
||||
public static boolean isMetaItem(ItemStack item, boolean lore) {
|
||||
return item != null && item.getType() != Material.AIR && item.getItemMeta() != null && item.getItemMeta().getDisplayName() != null && (!lore || item.getItemMeta().getLore() != null);
|
||||
}
|
||||
|
||||
@ -222,6 +244,19 @@ public class MMOUtils {
|
||||
return s;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static boolean areSimilar(ItemStack item1, ItemStack iitem2) {
|
||||
if (item1.getType() == VersionMaterial.PLAYER_HEAD.toMaterial() && iitem2.getType() == VersionMaterial.PLAYER_HEAD.toMaterial()) {
|
||||
ItemMeta meta1 = item1.getItemMeta();
|
||||
ItemMeta meta2 = iitem2.getItemMeta();
|
||||
|
||||
if (meta1.hasDisplayName() && meta2.hasDisplayName())
|
||||
return meta1.getDisplayName().equalsIgnoreCase(meta2.getDisplayName());
|
||||
}
|
||||
|
||||
return item1.isSimilar(iitem2);
|
||||
}
|
||||
|
||||
public static double truncation(double x, int n) {
|
||||
double pow = Math.pow(10.0, n);
|
||||
return Math.floor(x * pow) / pow;
|
||||
|
@ -1,12 +1,15 @@
|
||||
package net.Indyuce.mmoitems.ability;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
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.EntityDamageEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
@ -20,8 +23,6 @@ import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.version.VersionSound;
|
||||
|
||||
public class Magical_Shield extends Ability {
|
||||
public static Map<Location, Double[]> magicalShield = new HashMap<>();
|
||||
|
||||
public Magical_Shield() {
|
||||
super(CastingMode.ON_HIT, CastingMode.WHEN_HIT, CastingMode.LEFT_CLICK, CastingMode.RIGHT_CLICK, CastingMode.SHIFT_LEFT_CLICK, CastingMode.SHIFT_RIGHT_CLICK);
|
||||
|
||||
@ -41,26 +42,50 @@ public class Magical_Shield extends Ability {
|
||||
@Override
|
||||
public void whenCast(CachedStats stats, AbilityResult ability, ItemAttackResult result) {
|
||||
double duration = ability.getModifier("duration");
|
||||
double radius = Math.pow(ability.getModifier("radius"), 2);
|
||||
double radiusSquared = Math.pow(ability.getModifier("radius"), 2);
|
||||
double power = ability.getModifier("power") / 100;
|
||||
|
||||
Location loc = stats.getPlayer().getLocation().clone();
|
||||
stats.getPlayer().getWorld().playSound(stats.getPlayer().getLocation(), VersionSound.ENTITY_ENDERMAN_TELEPORT.toSound(), 3, 0);
|
||||
magicalShield.put(loc, new Double[] { radius, power });
|
||||
new BukkitRunnable() {
|
||||
int ti = 0;
|
||||
new MagicalShield(stats.getPlayer().getLocation().clone(), duration, radiusSquared, power);
|
||||
}
|
||||
|
||||
public void run() {
|
||||
ti++;
|
||||
for (double j = 0; j < Math.PI / 2; j += Math.PI / (28 + random.nextInt(5)))
|
||||
for (double i = 0; i < Math.PI * 2; i += Math.PI / (14 + random.nextInt(5)))
|
||||
MMOLib.plugin.getVersion().getWrapper().spawnParticle(Particle.REDSTONE, loc.clone().add(2.5 * Math.cos(i + j) * Math.sin(j), 2.5 * Math.cos(j), 2.5 * Math.sin(i + j) * Math.sin(j)), Color.FUCHSIA);
|
||||
public class MagicalShield extends BukkitRunnable implements Listener {
|
||||
private final Location loc;
|
||||
private final double duration, radius, power;
|
||||
|
||||
if (ti > duration * 20 / 3) {
|
||||
magicalShield.remove(loc);
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(MMOItems.plugin, 0, 3);
|
||||
int ti = 0;
|
||||
|
||||
public MagicalShield(Location loc, double duration, double radius, double power) {
|
||||
this.loc = loc;
|
||||
|
||||
this.duration = duration;
|
||||
this.radius = radius;
|
||||
this.power = power;
|
||||
|
||||
runTaskTimer(MMOItems.plugin, 0, 3);
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOItems.plugin);
|
||||
}
|
||||
|
||||
private void close() {
|
||||
cancel();
|
||||
EntityDamageEvent.getHandlerList().unregister(this);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void a(EntityDamageEvent event) {
|
||||
if (event.getEntity() instanceof Player && event.getEntity().getLocation().distanceSquared(loc) < radius)
|
||||
event.setDamage(event.getDamage() * (1 - power));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ti++;
|
||||
if (ti > duration * 20. / 3.)
|
||||
close();
|
||||
|
||||
for (double j = 0; j < Math.PI / 2; j += Math.PI / (28 + random.nextInt(5)))
|
||||
for (double i = 0; i < Math.PI * 2; i += Math.PI / (14 + random.nextInt(5)))
|
||||
MMOLib.plugin.getVersion().getWrapper().spawnParticle(Particle.REDSTONE, loc.clone().add(2.5 * Math.cos(i + j) * Math.sin(j), 2.5 * Math.cos(j), 2.5 * Math.sin(i + j) * Math.sin(j)), Color.FUCHSIA);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +0,0 @@
|
||||
package net.Indyuce.mmoitems.api.util;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import net.mmogroup.mmolib.version.VersionMaterial;
|
||||
|
||||
public class IsSimilar {
|
||||
public static boolean check(ItemStack i1, ItemStack i2) {
|
||||
/**
|
||||
* Not the most optimal code,
|
||||
* but it works for now.
|
||||
*/
|
||||
if(i1.getType() == VersionMaterial.PLAYER_HEAD.toMaterial() &&
|
||||
i2.getType() == VersionMaterial.PLAYER_HEAD.toMaterial()) {
|
||||
ItemMeta meta1 = i1.getItemMeta();
|
||||
ItemMeta meta2 = i2.getItemMeta();
|
||||
|
||||
if(meta1.hasDisplayName() && meta2.hasDisplayName())
|
||||
return meta1.getDisplayName().equalsIgnoreCase(meta2.getDisplayName());
|
||||
}
|
||||
|
||||
return i1.isSimilar(i2);
|
||||
}
|
||||
}
|
@ -128,7 +128,7 @@ public class BlockBrowser extends PluginInventory {
|
||||
|
||||
ItemStack item = event.getCurrentItem();
|
||||
if (item == null) return;
|
||||
if (MMOUtils.isPluginItem(item, false)) {
|
||||
if (MMOUtils.isMetaItem(item, false)) {
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Next Page")) {
|
||||
page++; open(); return;
|
||||
}
|
||||
|
@ -19,7 +19,6 @@ import net.Indyuce.mmoitems.api.crafting.recipe.CraftingRecipe;
|
||||
import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
|
||||
import net.Indyuce.mmoitems.api.crafting.recipe.UpgradingRecipe;
|
||||
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
|
||||
import net.Indyuce.mmoitems.api.util.IsSimilar;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
public class CraftingStationPreview extends PluginInventory {
|
||||
@ -28,10 +27,8 @@ public class CraftingStationPreview extends PluginInventory {
|
||||
private final RecipeInfo recipe;
|
||||
|
||||
private List<CheckedIngredient> ingredients = new ArrayList<>();
|
||||
|
||||
private static final int[]
|
||||
slots = { 12, 13, 14, 21, 22, 23, 30, 31, 32 },
|
||||
fill = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 17, 18, 19, 25, 26, 27, 29, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 };
|
||||
|
||||
private static final int[] slots = { 12, 13, 14, 21, 22, 23, 30, 31, 32 }, fill = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 17, 18, 19, 25, 26, 27, 29, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 };
|
||||
|
||||
public CraftingStationPreview(Player player, CraftingStation station, RecipeInfo recipe, int previousPage) {
|
||||
super(player);
|
||||
@ -46,9 +43,8 @@ public class CraftingStationPreview extends PluginInventory {
|
||||
Inventory inv = Bukkit.createInventory(this, 45, "Recipe Preview");
|
||||
ingredients.clear();
|
||||
ingredients.addAll(recipe.getIngredients());
|
||||
|
||||
int min = (page - 1) * slots.length,
|
||||
max = page * slots.length;
|
||||
|
||||
int min = (page - 1) * slots.length, max = page * slots.length;
|
||||
for (int j = min; j < max; j++) {
|
||||
if (j >= ingredients.size()) {
|
||||
if (station.getItemOptions().hasNoRecipe())
|
||||
@ -62,19 +58,19 @@ public class CraftingStationPreview extends PluginInventory {
|
||||
for (int slot : fill)
|
||||
inv.setItem(slot, ConfigItem.FILL.getItem());
|
||||
|
||||
if(recipe.getRecipe() instanceof CraftingRecipe) {
|
||||
if (recipe.getRecipe() instanceof CraftingRecipe) {
|
||||
ItemStack item = ((CraftingRecipe) recipe.getRecipe()).getOutput().getPreview();
|
||||
item.setAmount(((CraftingRecipe) recipe.getRecipe()).getOutput().getAmount());
|
||||
inv.setItem(16, item);
|
||||
}
|
||||
if(recipe.getRecipe() instanceof UpgradingRecipe) {
|
||||
if (recipe.getRecipe() instanceof UpgradingRecipe) {
|
||||
ItemStack stack = ((UpgradingRecipe) recipe.getRecipe()).getItem().getPreview();
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName(meta.getDisplayName() + ChatColor.translateAlternateColorCodes('&', " &a+1!"));
|
||||
stack.setItemMeta(meta);
|
||||
inv.setItem(16, stack);
|
||||
}
|
||||
|
||||
|
||||
inv.setItem(10, ConfigItem.BACK.getItem());
|
||||
inv.setItem(34, ConfigItem.CONFIRM.getItem());
|
||||
ItemStack book = recipe.display();
|
||||
@ -83,45 +79,45 @@ public class CraftingStationPreview extends PluginInventory {
|
||||
ItemMeta meta = book.getItemMeta();
|
||||
List<String> newLore = meta.getLore().subList(0, meta.getLore().size() - 3);
|
||||
meta.setLore(newLore);
|
||||
for(Enchantment ench : meta.getEnchants().keySet())
|
||||
for (Enchantment ench : meta.getEnchants().keySet())
|
||||
meta.removeEnchant(ench);
|
||||
book.setItemMeta(meta);
|
||||
inv.setItem(28, book);
|
||||
|
||||
|
||||
inv.setItem(20, page > 1 ? ConfigItem.PREVIOUS_PAGE.getItem() : ConfigItem.FILL.getItem());
|
||||
inv.setItem(24, max < ingredients.size() ? ConfigItem.NEXT_PAGE.getItem() : ConfigItem.FILL.getItem());
|
||||
|
||||
|
||||
return inv;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void whenClicked(InventoryClickEvent event) {
|
||||
event.setCancelled(true);
|
||||
|
||||
if (!MMOUtils.isPluginItem(event.getCurrentItem(), false))
|
||||
if (!MMOUtils.isMetaItem(event.getCurrentItem(), false))
|
||||
return;
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.CONFIRM.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.CONFIRM.getItem())) {
|
||||
CraftingStationView csv = new CraftingStationView(player, station, previousPage);
|
||||
csv.processRecipe(recipe);
|
||||
csv.open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.PREVIOUS_PAGE.getItem())) {
|
||||
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.PREVIOUS_PAGE.getItem())) {
|
||||
page--;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.NEXT_PAGE.getItem())) {
|
||||
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.NEXT_PAGE.getItem())) {
|
||||
page++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.BACK.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.BACK.getItem())) {
|
||||
new CraftingStationView(player, station, previousPage).open();
|
||||
return;
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
|
||||
import net.Indyuce.mmoitems.api.event.crafting.PlayerUseRecipeEvent;
|
||||
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.api.util.IsSimilar;
|
||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||
import net.Indyuce.mmoitems.listener.CustomSoundListener;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
@ -124,32 +123,33 @@ public class CraftingStationView extends PluginInventory {
|
||||
return inv;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void whenClicked(InventoryClickEvent event) {
|
||||
event.setCancelled(true);
|
||||
|
||||
if (!MMOUtils.isPluginItem(event.getCurrentItem(), false))
|
||||
if (!MMOUtils.isMetaItem(event.getCurrentItem(), false))
|
||||
return;
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.PREVIOUS_IN_QUEUE.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.PREVIOUS_IN_QUEUE.getItem())) {
|
||||
queueOffset--;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.NEXT_IN_QUEUE.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.NEXT_IN_QUEUE.getItem())) {
|
||||
queueOffset++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.NEXT_PAGE.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.NEXT_PAGE.getItem())) {
|
||||
page++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsSimilar.check(event.getCurrentItem(), ConfigItem.PREVIOUS_PAGE.getItem())) {
|
||||
if (MMOUtils.areSimilar(event.getCurrentItem(), ConfigItem.PREVIOUS_PAGE.getItem())) {
|
||||
page--;
|
||||
open();
|
||||
return;
|
||||
|
@ -212,7 +212,7 @@ public class ItemBrowser extends PluginInventory {
|
||||
return;
|
||||
|
||||
ItemStack item = event.getCurrentItem();
|
||||
if (MMOUtils.isPluginItem(item, false)) {
|
||||
if (MMOUtils.isMetaItem(item, false)) {
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Next Page")) {
|
||||
page++;
|
||||
open();
|
||||
|
@ -136,7 +136,7 @@ public class AbilityEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + AltChar.rightArrow + " Ability List")) {
|
||||
|
@ -99,7 +99,7 @@ public class AbilityListEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Add an ability...")) {
|
||||
|
@ -133,7 +133,7 @@ public class ArrowParticlesEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Particle")) {
|
||||
|
@ -86,7 +86,7 @@ public class BlockEdition extends PluginInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if(event.getSlot() == 40)
|
||||
|
@ -85,7 +85,7 @@ public class CommandListEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Register a command...")) {
|
||||
|
@ -69,7 +69,7 @@ public class CraftingEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
CraftingType corresponding = CraftingType.getBySlot(event.getSlot());
|
||||
|
@ -91,7 +91,7 @@ public class ElementsEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (correspondingSlot.containsKey(event.getSlot())) {
|
||||
|
@ -101,7 +101,7 @@ public class ItemEdition extends EditionInventory {
|
||||
return;
|
||||
|
||||
ItemStack item = event.getCurrentItem();
|
||||
if (!MMOUtils.isPluginItem(item, false) || event.getInventory().getItem(4) == null)
|
||||
if (!MMOUtils.isMetaItem(item, false) || event.getInventory().getItem(4) == null)
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Next Page")) {
|
||||
|
@ -79,7 +79,7 @@ public class ItemUpdaterEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
// safe check
|
||||
|
@ -149,7 +149,7 @@ public class ParticlesEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Particle")) {
|
||||
|
@ -85,7 +85,7 @@ public class SoundsEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (correspondingSlot.containsKey(event.getSlot())) {
|
||||
|
@ -161,7 +161,7 @@ public class UpgradingEdition extends EditionInventory {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
|
||||
event.setCancelled(true);
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (item.getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Success Chance")) {
|
||||
|
@ -32,7 +32,7 @@ public class GuiListener implements Listener {
|
||||
if (!(inventory instanceof EditionInventory))
|
||||
return;
|
||||
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isPluginItem(item, false))
|
||||
if (event.getInventory() != event.getClickedInventory() || !MMOUtils.isMetaItem(item, false))
|
||||
return;
|
||||
|
||||
if (!item.getItemMeta().getDisplayName().startsWith(ChatColor.GREEN + ""))
|
||||
|
@ -38,7 +38,7 @@ public class CustomBlockListener implements Listener {
|
||||
Bukkit.getPluginManager().registerEvents(new MushroomReplacer(), MMOItems.plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void a(BlockPhysicsEvent event) {
|
||||
if (MMOItems.plugin.getCustomBlocks().isMushroomBlock(event.getChangedType())) {
|
||||
event.setCancelled(true);
|
||||
@ -46,7 +46,7 @@ public class CustomBlockListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
public void b(BlockBreakEvent event) {
|
||||
Material type = event.getBlock().getType();
|
||||
|
||||
@ -130,10 +130,8 @@ public class CustomBlockListener implements Listener {
|
||||
*/
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void d(BlockIgniteEvent event) {
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
if (event.getCause() == IgniteCause.LAVA || event.getCause() == IgniteCause.SPREAD) {
|
||||
BlockFace[] faces = { BlockFace.UP, BlockFace.DOWN, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST };
|
||||
for (BlockFace face : faces)
|
||||
@ -150,7 +148,7 @@ public class CustomBlockListener implements Listener {
|
||||
ItemStack item = player.getInventory().getItemInMainHand();
|
||||
if (item != null && item.getType() != Material.AIR) {
|
||||
NBTItem nbt = NBTItem.get(item);
|
||||
if (nbt.hasType())
|
||||
if (nbt.hasType())
|
||||
return nbt.getInteger("MMOITEMS_PICKAXE_POWER");
|
||||
}
|
||||
|
||||
@ -158,10 +156,8 @@ public class CustomBlockListener implements Listener {
|
||||
}
|
||||
|
||||
public class MushroomReplacer implements Listener {
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void d(BlockBreakEvent event) {
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
if (MMOItems.plugin.getCustomBlocks().isMushroomBlock(event.getBlock().getType()) && MMOItems.plugin.getDropTables().hasSilkTouchTool(event.getPlayer()))
|
||||
event.setDropItems(false);
|
||||
}
|
||||
|
@ -33,10 +33,10 @@ public class ElementListener implements Listener {
|
||||
iterator.remove();
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void a(EntityDamageByEntityEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (!event.isCancelled() && isWeakened(entity)) {
|
||||
if (isWeakened(entity)) {
|
||||
event.setDamage(event.getDamage() * (1 + waterWeaknessDamageIncrease));
|
||||
entity.getWorld().spawnParticle(Particle.WATER_SPLASH, event.getEntity().getLocation().add(0, entity.getHeight() / 2, 0), 16, .3, .3, .3, 0);
|
||||
}
|
||||
|
@ -2,17 +2,13 @@ package net.Indyuce.mmoitems.listener;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
@ -21,112 +17,49 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Magical_Shield;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.api.ItemAttackResult;
|
||||
import net.Indyuce.mmoitems.api.SoulboundInfo;
|
||||
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerStats;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.DamageType;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void b(EntityDamageEvent event) {
|
||||
if(event.getCause() == DamageCause.ENTITY_ATTACK || event.getCause() == DamageCause.ENTITY_SWEEP_ATTACK
|
||||
|| event.getCause() == DamageCause.PROJECTILE) return;
|
||||
if (!(event.getEntity() instanceof Player) || event.isCancelled() || event.getEntity().hasMetadata("NPC"))
|
||||
return;
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
// magical shield ability
|
||||
for (Location loc : Magical_Shield.magicalShield.keySet())
|
||||
if (loc.getWorld().equals(player.getWorld())) {
|
||||
Double[] values = Magical_Shield.magicalShield.get(loc);
|
||||
if (loc.distanceSquared(player.getLocation()) <= values[0])
|
||||
event.setDamage(event.getDamage() * (1 - Math.max(values[1], 1)));
|
||||
}
|
||||
|
||||
/*
|
||||
* damage reduction
|
||||
*/
|
||||
PlayerStats stats = PlayerData.get(player).getStats();
|
||||
|
||||
if (event.getCause() == DamageCause.FIRE)
|
||||
event.setDamage(event.getDamage() * (1 - stats.getStat(ItemStat.FIRE_DAMAGE_REDUCTION) / 100));
|
||||
else if (event.getCause() == DamageCause.FALL)
|
||||
event.setDamage(event.getDamage() * (1 - stats.getStat(ItemStat.FALL_DAMAGE_REDUCTION) / 100));
|
||||
else if (event.getCause() == DamageCause.MAGIC)
|
||||
event.setDamage(event.getDamage() * (1 - stats.getStat(ItemStat.MAGIC_DAMAGE_REDUCTION) / 100));
|
||||
|
||||
event.setDamage(event.getDamage() * (1 - (stats.getStat(ItemStat.DAMAGE_REDUCTION) / 100)));
|
||||
}
|
||||
|
||||
// regeneration
|
||||
@EventHandler
|
||||
public void c(EntityRegainHealthEvent event) {
|
||||
public void applyMMOItemsRegeneration(EntityRegainHealthEvent event) {
|
||||
if (event.getEntity() instanceof Player)
|
||||
event.setAmount(event.getAmount() * (1 + PlayerData.get((Player) event.getEntity()).getStats().getStat(ItemStat.REGENERATION) / 100));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void d(PlayerJoinEvent event) {
|
||||
public void loadPlayerData(PlayerJoinEvent event) {
|
||||
PlayerData.load(event.getPlayer());
|
||||
|
||||
if (!MMOLib.plugin.getVersion().isBelowOrEqual(1, 12) && MMOItems.plugin.getConfig().getBoolean("auto-recipe-book"))
|
||||
event.getPlayer().discoverRecipes(MMOItems.plugin.getRecipes().getNamespacedKeys());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void e(PlayerQuitEvent event) {
|
||||
public void savePlayerData(PlayerQuitEvent event) {
|
||||
PlayerData.get(event.getPlayer()).save();
|
||||
}
|
||||
|
||||
// apply on-hit abilities from armor pieces.
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void f(EntityDamageByEntityEvent event) {
|
||||
if (event.isCancelled() || !(event.getEntity() instanceof Player) || (!(event.getDamager() instanceof LivingEntity) && !(event.getDamager() instanceof Projectile)) || event.getEntity().hasMetadata("NPC") || event.getDamager().hasMetadata("NPC"))
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void castWhenHitAbilities(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getEntity() instanceof Player) || event.getEntity().hasMetadata("NPC"))
|
||||
return;
|
||||
|
||||
/*
|
||||
* damage reduction
|
||||
*/
|
||||
if (MMOLib.plugin.getDamage().findInfo(event.getEntity()) != null)
|
||||
LivingEntity damager = MMOUtils.getDamager(event);
|
||||
if (damager == null)
|
||||
return;
|
||||
PlayerStats stats = PlayerData.get((Player) event.getEntity()).getStats();
|
||||
double d = 0;
|
||||
|
||||
if(event.getCause() == DamageCause.PROJECTILE) {
|
||||
d += (stats.getStat(ItemStat.PROJECTILE_DAMAGE_REDUCTION) / 100);
|
||||
if(((Projectile) event.getDamager()).getShooter() instanceof Player)
|
||||
d += (stats.getStat(ItemStat.PVP_DAMAGE_REDUCTION) / 100);
|
||||
else d += (stats.getStat(ItemStat.PVE_DAMAGE_REDUCTION) / 100);
|
||||
}
|
||||
else {
|
||||
d += (stats.getStat(ItemStat.PHYSICAL_DAMAGE_REDUCTION) / 100);
|
||||
if(event.getDamager() instanceof Player)
|
||||
d += (stats.getStat(ItemStat.PVP_DAMAGE_REDUCTION) / 100);
|
||||
else d += (stats.getStat(ItemStat.PVE_DAMAGE_REDUCTION) / 100);
|
||||
}
|
||||
|
||||
event.setDamage((event.getDamage() * (1 - d)) * (1 - (stats.getStat(ItemStat.DAMAGE_REDUCTION) / 100)));
|
||||
|
||||
LivingEntity damager = null;
|
||||
if(event.getDamager() instanceof LivingEntity)
|
||||
damager = (LivingEntity) event.getDamager();
|
||||
else if(((Projectile) event.getDamager()).getShooter() instanceof LivingEntity)
|
||||
damager = (LivingEntity) ((Projectile) event.getDamager()).getShooter();
|
||||
|
||||
if(damager == null) return;
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
PlayerData.get(player).castAbilities(damager, new ItemAttackResult(event.getDamage(), DamageType.SKILL), CastingMode.WHEN_HIT);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void g(PlayerInteractEvent event) {
|
||||
public void castClickAbilities(PlayerInteractEvent event) {
|
||||
if (event.getAction() == Action.PHYSICAL)
|
||||
return;
|
||||
|
||||
@ -142,7 +75,7 @@ public class PlayerListener implements Listener {
|
||||
* way there don't get lost
|
||||
*/
|
||||
@EventHandler
|
||||
public void h(PlayerDeathEvent event) {
|
||||
public void applySoulbound(PlayerDeathEvent event) {
|
||||
if (event.getKeepInventory())
|
||||
return;
|
||||
|
||||
@ -161,7 +94,7 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void i(PlayerRespawnEvent event) {
|
||||
public void readSoulbound(PlayerRespawnEvent event) {
|
||||
SoulboundInfo.read(event.getPlayer());
|
||||
}
|
||||
}
|
@ -4,8 +4,10 @@ import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
@ -16,6 +18,8 @@ import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.NBTItem;
|
||||
|
||||
public class Listener_v1_13 implements Listener {
|
||||
private final boolean autoRecipeBook = MMOItems.plugin.getConfig().getBoolean("auto-recipe-book");
|
||||
|
||||
@EventHandler
|
||||
public void a(ProjectileLaunchEvent event) {
|
||||
if (!(event.getEntity() instanceof Trident) || !(event.getEntity().getShooter() instanceof Player))
|
||||
@ -37,4 +41,10 @@ public class Listener_v1_13 implements Listener {
|
||||
|
||||
MMOItems.plugin.getEntities().registerCustomProjectile(nbtItem, playerData.getStats().newTemporary(), (Trident) event.getEntity(), type != null);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void b(PlayerJoinEvent event) {
|
||||
if (autoRecipeBook)
|
||||
event.getPlayer().discoverRecipes(MMOItems.plugin.getRecipes().getNamespacedKeys());
|
||||
}
|
||||
}
|
||||
|
@ -96,9 +96,9 @@ public class EntityManager implements Listener {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(MMOItems.plugin, () -> unregisterCustomEntity(event.getEntity()));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void b(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Projectile) || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC") || event.isCancelled())
|
||||
if (!(event.getDamager() instanceof Projectile) || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC"))
|
||||
return;
|
||||
|
||||
Projectile arrow = (Projectile) event.getDamager();
|
||||
|
@ -20,10 +20,10 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.MMOUtils;
|
||||
import net.Indyuce.mmoitems.api.ConfigFile;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.item.MMOItem;
|
||||
import net.Indyuce.mmoitems.api.util.IsSimilar;
|
||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||
import net.mmogroup.mmolib.MMOLib;
|
||||
import net.mmogroup.mmolib.api.item.NBTItem;
|
||||
@ -73,6 +73,7 @@ public class UpdaterManager implements Listener {
|
||||
/*
|
||||
* updates inventory item when clicked
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler
|
||||
public void a(InventoryClickEvent event) {
|
||||
ItemStack item = event.getCurrentItem();
|
||||
@ -80,7 +81,7 @@ public class UpdaterManager implements Listener {
|
||||
return;
|
||||
|
||||
ItemStack newItem = getUpdated(item);
|
||||
if (!IsSimilar.check(newItem, item))
|
||||
if (!MMOUtils.areSimilar(newItem, item))
|
||||
event.setCurrentItem(newItem);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user