From 9d42d5fd4c5af02c183992fd127b847d9a25a1f9 Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 20:47:27 +0100 Subject: [PATCH 1/6] Hoearthquake should no longer work in protected areas --- .../net/Indyuce/mmoitems/ability/Hoearthquake.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/Indyuce/mmoitems/ability/Hoearthquake.java b/src/main/java/net/Indyuce/mmoitems/ability/Hoearthquake.java index efa560bf..c8217f26 100644 --- a/src/main/java/net/Indyuce/mmoitems/ability/Hoearthquake.java +++ b/src/main/java/net/Indyuce/mmoitems/ability/Hoearthquake.java @@ -1,11 +1,13 @@ package net.Indyuce.mmoitems.ability; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; @@ -49,8 +51,12 @@ public class Hoearthquake extends Ability { for (int x = -1; x < 2; x++) for (int z = -1; z < 2; z++) { Block b = loc.clone().add(x, -1, z).getBlock(); - if (b.getType() == Material.GRASS || b.getType() == Material.DIRT) - b.setType(Material.FARMLAND); + if (b.getType() == Material.GRASS || b.getType() == Material.DIRT) { + BlockBreakEvent event = new BlockBreakEvent(b, stats.getPlayer()); + event.setDropItems(false); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) b.setType(Material.FARMLAND); + } } } }.runTaskTimer(MMOItems.plugin, 0, 1); From 303dc15e13745c8e6e951d0ec3dc3eb61e02f39c Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 20:52:01 +0100 Subject: [PATCH 2/6] SkillsPro support should now use the custom display name instead of the internal name for classes --- src/main/java/net/Indyuce/mmoitems/comp/rpg/SkillsProHook.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/Indyuce/mmoitems/comp/rpg/SkillsProHook.java b/src/main/java/net/Indyuce/mmoitems/comp/rpg/SkillsProHook.java index 40be0490..b2308a73 100644 --- a/src/main/java/net/Indyuce/mmoitems/comp/rpg/SkillsProHook.java +++ b/src/main/java/net/Indyuce/mmoitems/comp/rpg/SkillsProHook.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems.comp.rpg; +import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -44,7 +45,7 @@ public class SkillsProHook implements RPGHandler, Listener { @Override public String getClassName() { - return info.getSkillName(); + return ChatColor.stripColor(info.getSkill().getDisplayName()); } @Override From 99e8e7e9a60ac580af45a2b2f5bb85dc619636dd Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 21:39:34 +0100 Subject: [PATCH 3/6] Fixed some ItemStats having Optional[*] as their value instead of just * --- src/main/java/net/Indyuce/mmoitems/stat/type/StringStat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/Indyuce/mmoitems/stat/type/StringStat.java b/src/main/java/net/Indyuce/mmoitems/stat/type/StringStat.java index 606732ea..6374ce9a 100644 --- a/src/main/java/net/Indyuce/mmoitems/stat/type/StringStat.java +++ b/src/main/java/net/Indyuce/mmoitems/stat/type/StringStat.java @@ -63,7 +63,7 @@ public class StringStat extends ItemStat { @Override public void whenDisplayed(List lore, Optional statData) { if (statData.isPresent()) { - String value = MMOLib.plugin.parseColors(statData.toString()); + String value = MMOLib.plugin.parseColors(statData.get().toString()); value = value.length() > 40 ? value.substring(0, 40) + "..." : value; lore.add(ChatColor.GRAY + "Current Value: " + ChatColor.GREEN + value); From 4e3ea77dbb049a12b6b18f09894a4cbad0844449 Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 21:56:52 +0100 Subject: [PATCH 4/6] Fixed custom sounds not playing correctly when used alongside lutes --- .../interaction/weapon/untargeted/Lute.java | 5 ++-- .../untargeted/lute/BruteLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/CircularLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/LuteAttackHandler.java | 3 ++- .../untargeted/lute/SimpleLuteAttack.java | 27 +++++++++---------- .../untargeted/lute/SlashLuteAttack.java | 22 +++++++-------- .../untargeted/lute/WaveLuteAttack.java | 27 +++++++++---------- .../mmoitems/api/util/SoundReader.java | 14 +++++++++- 8 files changed, 75 insertions(+), 77 deletions(-) diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java index f9bc5320..c3dc6e3d 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/Lute.java @@ -14,7 +14,6 @@ import net.mmogroup.mmolib.api.item.NBTItem; import net.mmogroup.mmolib.version.VersionSound; import org.bukkit.Location; import org.bukkit.Particle; -import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -46,7 +45,7 @@ public class Lute extends UntargetedWeapon { Vector weight = new Vector(0, -.003 * getNBTItem().getStat(ItemStats.NOTE_WEIGHT.getId()), 0); LuteAttackEffect effect = LuteAttackEffect.get(getNBTItem()); - Sound sound = new SoundReader(getNBTItem().getString("MMOITEMS_LUTE_ATTACK_SOUND"), VersionSound.BLOCK_NOTE_BLOCK_BELL.toSound()).getSound(); + SoundReader sound = new SoundReader(getNBTItem().getString("MMOITEMS_LUTE_ATTACK_SOUND"), VersionSound.BLOCK_NOTE_BLOCK_BELL.toSound()); if (effect != null) { effect.getAttack().handle(stats, getNBTItem(), attackDamage, range, weight, sound); return; @@ -63,7 +62,7 @@ public class Lute extends UntargetedWeapon { List entities = MMOUtils.getNearbyChunkEntities(loc); loc.getWorld().spawnParticle(Particle.NOTE, loc, 0); - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (int j = 0; j < 3; j++) { loc.add(vec.add(weight)); if (loc.getBlock().getType().isSolid()) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java index 16574d89..9264af41 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/BruteLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class BruteLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -39,8 +37,7 @@ public class BruteLuteAttack implements LuteAttackHandler { } loc.getWorld().spawnParticle(Particle.NOTE, loc, 2, .1, .1, .1, 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java index f8b3b637..416d54ff 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/CircularLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class CircularLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -42,8 +40,7 @@ public class CircularLuteAttack implements LuteAttackHandler { Vector vec = MMOUtils.rotateFunc(new Vector(Math.cos(a), Math.sin(a), 0).multiply(.3), loc); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec), 0); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(-1)), 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java index 6fffe0c4..ff5a98ed 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/LuteAttackHandler.java @@ -2,6 +2,7 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; import java.util.Random; +import net.Indyuce.mmoitems.api.util.SoundReader; import org.bukkit.Sound; import org.bukkit.util.Vector; @@ -9,7 +10,7 @@ import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; import net.mmogroup.mmolib.api.item.NBTItem; public interface LuteAttackHandler { - void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound); + void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound); Random random = new Random(); } diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java index ced9252f..445eeb02 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SimpleLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class SimpleLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -39,8 +37,7 @@ public class SimpleLuteAttack implements LuteAttackHandler { } loc.getWorld().spawnParticle(Particle.NOTE, loc, 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java index aacfdcd2..b551053b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/SlashLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; public class SlashLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection(); final Location loc = stats.getPlayer().getLocation().add(0, 1.3, 0); double ti = 1; public void run() { - if ((ti += .6) > 5) - cancel(); + if ((ti += .6) > 5) cancel(); - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + ti / 5)); + sound.play(loc, 2, (float) (.5 + ti / range)); for (int k = -30; k < 30; k += 3) if (random.nextBoolean()) { loc.setDirection(vec); diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java index 486e762d..bccfab2b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/weapon/untargeted/lute/WaveLuteAttack.java @@ -1,34 +1,32 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted.lute; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOUtils; import net.Indyuce.mmoitems.api.ItemAttackResult; import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats; +import net.Indyuce.mmoitems.api.util.SoundReader; import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.api.item.NBTItem; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.List; public class WaveLuteAttack implements LuteAttackHandler { @Override - public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, Sound sound) { + public void handle(CachedStats stats, NBTItem nbt, double attackDamage, double range, Vector weight, SoundReader sound) { new BukkitRunnable() { final Vector vec = stats.getPlayer().getEyeLocation().getDirection().multiply(.4); final Location loc = stats.getPlayer().getEyeLocation(); int ti = 0; public void run() { - if (ti++ > range) - cancel(); + if (ti++ > range) cancel(); List entities = MMOUtils.getNearbyChunkEntities(loc); for (int j = 0; j < 3; j++) { @@ -41,8 +39,7 @@ public class WaveLuteAttack implements LuteAttackHandler { Vector vec = MMOUtils.rotateFunc(new Vector(.5, 0, 0), loc); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(Math.sin((double) ti / 2))), 0); loc.getWorld().spawnParticle(Particle.NOTE, loc.clone().add(vec.multiply(-1)), 0); - if (j == 0) - loc.getWorld().playSound(loc, sound, 2, (float) (.5 + (double) ti / range)); + if (j == 0) sound.play(loc, 2, (float) (.5 + (double) ti / range)); for (Entity target : entities) if (MMOUtils.canDamage(stats.getPlayer(), loc, target)) { diff --git a/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java b/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java index c1e884b6..af7cfb1b 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java +++ b/src/main/java/net/Indyuce/mmoitems/api/util/SoundReader.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems.api.util; +import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -25,7 +26,7 @@ public class SoundReader { } this.sound = sound; - this.soundKey = soundKey; + this.soundKey = soundKey.toLowerCase(); } public Sound getSound() { @@ -46,4 +47,15 @@ public class SoundReader { else player.playSound(player.getLocation(), soundKey, vol, pitch); } + + public void play(Location loc) { + play(loc, 1, 1); + } + + public void play(Location loc, float vol, float pitch) { + if(soundKey.isEmpty()) + loc.getWorld().playSound(loc, sound, vol, pitch); + else + loc.getWorld().playSound(loc, soundKey, vol, pitch); + } } From ea6d72e0caed772de1e608b4e59477ab0c1fc470 Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 27 Dec 2020 22:36:31 +0100 Subject: [PATCH 5/6] update mmolib --- lib/MMOLib.jar | Bin 412633 -> 420044 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/MMOLib.jar b/lib/MMOLib.jar index ab5829170bf1a391612a815e5624d6ae1af1940f..68d9093e94351c7aef67a49ef159ab13e3479bde 100644 GIT binary patch delta 37567 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 IJj~<&0sXlqYXATM delta 30594 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⁢Lq(*X|{0n+=H`LWn+>bcOCvFqUO4x_O@bX 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 bEsB}J Date: Sun, 27 Dec 2020 22:52:00 +0100 Subject: [PATCH 6/6] Added a new stat for Skins which lets you set specific required IDs for items. If an item doesn't have any of the set ids the skin will not apply. --- .../java/net/Indyuce/mmoitems/ItemStats.java | 2 + .../mmoitems/api/interaction/ItemSkin.java | 16 +++ .../Indyuce/mmoitems/stat/CompatibleIds.java | 103 ++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 src/main/java/net/Indyuce/mmoitems/stat/CompatibleIds.java diff --git a/src/main/java/net/Indyuce/mmoitems/ItemStats.java b/src/main/java/net/Indyuce/mmoitems/ItemStats.java index 63ff4336..cda97e82 100644 --- a/src/main/java/net/Indyuce/mmoitems/ItemStats.java +++ b/src/main/java/net/Indyuce/mmoitems/ItemStats.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems; +import net.Indyuce.mmoitems.stat.CompatibleIds; import org.bukkit.Material; import net.Indyuce.mmoitems.stat.Abilities; @@ -208,6 +209,7 @@ public class ItemStats { MAX_CONSUME = new DoubleStat("MAX_CONSUME", Material.BLAZE_POWDER, "Max Consume", new String[]{"Max amount of usage before", "item disappears."}, new String[]{"consumable"}), SUCCESS_RATE = new SuccessRate(), COMPATIBLE_TYPES = new CompatibleTypes(), + COMPATIBLE_IDS = new CompatibleIds(), // Crafting Stats CRAFTING = new Crafting(), diff --git a/src/main/java/net/Indyuce/mmoitems/api/interaction/ItemSkin.java b/src/main/java/net/Indyuce/mmoitems/api/interaction/ItemSkin.java index db418f10..962e0f5c 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/interaction/ItemSkin.java +++ b/src/main/java/net/Indyuce/mmoitems/api/interaction/ItemSkin.java @@ -53,6 +53,22 @@ public class ItemSkin extends UseItem { } } + if (getMMOItem().hasData(ItemStats.COMPATIBLE_IDS)) { + for (String id : ((StringListData) getMMOItem().getData(ItemStats.COMPATIBLE_IDS)).getList()) { + if (id.equalsIgnoreCase(target.getString("MMOITEMS_ITEM_ID"))) { + compatible = true; + break; + } + } + + if (!compatible) { + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 2); + Message.SKIN_INCOMPATIBLE.format(ChatColor.RED, "#item#", MMOUtils.getDisplayName(target.getItem())) + .send(player); + return new ApplyResult(ResultType.NONE); + } + } + // check for success rate double successRate = getNBTItem().getStat(ItemStats.SUCCESS_RATE.getId()); if (successRate != 0) diff --git a/src/main/java/net/Indyuce/mmoitems/stat/CompatibleIds.java b/src/main/java/net/Indyuce/mmoitems/stat/CompatibleIds.java new file mode 100644 index 00000000..f8fad75e --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/stat/CompatibleIds.java @@ -0,0 +1,103 @@ +package net.Indyuce.mmoitems.stat; + +import com.google.gson.JsonArray; +import com.google.gson.JsonParser; +import net.Indyuce.mmoitems.ItemStats; +import net.Indyuce.mmoitems.MMOItems; +import net.Indyuce.mmoitems.api.edition.StatEdition; +import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder; +import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem; +import net.Indyuce.mmoitems.gui.edition.EditionInventory; +import net.Indyuce.mmoitems.stat.data.StringListData; +import net.Indyuce.mmoitems.stat.data.random.RandomStatData; +import net.Indyuce.mmoitems.stat.data.type.StatData; +import net.Indyuce.mmoitems.stat.type.ItemStat; +import net.mmogroup.mmolib.api.item.ItemTag; +import net.mmogroup.mmolib.api.util.AltChar; +import net.mmogroup.mmolib.version.VersionMaterial; +import org.apache.commons.lang.Validate; +import org.bukkit.ChatColor; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class CompatibleIds extends ItemStat { + public CompatibleIds() { + super("COMPATIBLE_IDS", VersionMaterial.COMMAND_BLOCK.toMaterial(), "Compatible IDs", + new String[] { "The item ids this skin is", "compatible with." }, new String[] { "skin" }); + } + + @Override + @SuppressWarnings("unchecked") + public StringListData whenInitialized(Object object) { + Validate.isTrue(object instanceof List, "Must specify a string list"); + return new StringListData((List) object); + } + + @Override + public void whenClicked(EditionInventory inv, InventoryClickEvent event) { + if (event.getAction() == InventoryAction.PICKUP_ALL) + new StatEdition(inv, ItemStats.COMPATIBLE_IDS).enable("Write in the chat the item id you want to add."); + + if (event.getAction() == InventoryAction.PICKUP_HALF) { + if (inv.getEditedSection().contains("compatible-ids")) { + List lore = inv.getEditedSection().getStringList("compatible-ids"); + if (lore.size() < 1) + return; + + String last = lore.get(lore.size() - 1); + lore.remove(last); + inv.getEditedSection().set("compatible-ids", lore); + inv.registerTemplateEdition(); + inv.getPlayer().sendMessage(MMOItems.plugin.getPrefix() + "Successfully removed '" + last + "'."); + } + } + } + + @Override + public void whenInput(EditionInventory inv, String message, Object... info) { + List lore = inv.getEditedSection().contains("compatible-ids") ? inv.getEditedSection().getStringList("compatible-ids") + : new ArrayList<>(); + lore.add(message.toUpperCase()); + inv.getEditedSection().set("compatible-ids", lore); + inv.registerTemplateEdition(); + inv.getPlayer().sendMessage(MMOItems.plugin.getPrefix() + "Compatible IDs successfully added."); + } + + @Override + public void whenDisplayed(List lore, Optional statData) { + + if (statData.isPresent()) { + lore.add(ChatColor.GRAY + "Current Value:"); + ((StringListData) statData.get()).getList().forEach(str -> lore.add(ChatColor.GRAY + str)); + + } else + lore.add(ChatColor.GRAY + "Current Value: " + ChatColor.RED + "Compatible with any item."); + + lore.add(""); + lore.add(ChatColor.YELLOW + AltChar.listDash + " Click to add a new id."); + lore.add(ChatColor.YELLOW + AltChar.listDash + " Right click to remove the last id."); + } + + @Override + public void whenApplied(ItemStackBuilder item, StatData data) { + List compatibleIds = new ArrayList<>(); + JsonArray array = new JsonArray(); + ((StringListData) data).getList().forEach(line -> { + array.add(line); + compatibleIds.add(line); + }); + item.getLore().insert("compatible-ids", compatibleIds); + item.addItemTag(new ItemTag("MMOITEMS_COMPATIBLE_IDS", array.toString())); + } + + @Override + public void whenLoaded(ReadMMOItem mmoitem) { + if (mmoitem.getNBT().hasTag("MMOITEMS_COMPATIBLE_IDS")) + mmoitem.setData(ItemStats.COMPATIBLE_IDS, + new StringListData(new JsonParser().parse(mmoitem.getNBT().getString("MMOITEMS_COMPATIBLE_IDS")).getAsJsonArray())); + } +}