From 991ce83369733deb29d580e519d7fb965c0245fe Mon Sep 17 00:00:00 2001 From: thetrouper Date: Tue, 1 Apr 2025 08:47:14 -0500 Subject: [PATCH] More Bug patching, next round of testing coming soon --- .gradle/8.8/checksums/checksums.lock | Bin 17 -> 17 bytes .../8.8/executionHistory/executionHistory.bin | Bin 267875 -> 294207 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.8/fileHashes/fileHashes.bin | Bin 27497 -> 27697 bytes .gradle/8.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 26453 -> 27439 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../compileJava/previous-compilation-data.bin | Bin 63121 -> 63099 bytes .../me/trouper/armorsmp/data/ArmorTier.java | 4 +- .../java/me/trouper/armorsmp/data/Unique.java | 15 +- .../me/trouper/armorsmp/server/Manager.java | 19 ++- .../server/commands/AdminCommand.java | 8 +- .../armorsmp/server/events/DeathEvents.java | 13 +- .../armorsmp/server/events/DropItemEvent.java | 2 - .../armorsmp/server/events/JoinEvent.java | 6 +- .../armorsmp/server/events/PickUpEvent.java | 6 +- .../server/events/UpgradeRedeemEvent.java | 6 +- .../{ArmorBackend.java => TierBackend.java} | 132 +++++++--------- .../server/systems/UniquesBackend.java | 148 +++++++++++------- .../me/trouper/armorsmp/utils/Display.java | 3 + .../me/trouper/armorsmp/utils/ItemUtils.java | 81 ++++++++++ .../me/trouper/armorsmp/utils/WorldUtils.java | 46 ------ 22 files changed, 272 insertions(+), 217 deletions(-) rename src/main/java/me/trouper/armorsmp/server/systems/{ArmorBackend.java => TierBackend.java} (60%) create mode 100644 src/main/java/me/trouper/armorsmp/utils/ItemUtils.java delete mode 100644 src/main/java/me/trouper/armorsmp/utils/WorldUtils.java diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock index 07ca503692a459fc9e9e3432fe5c779f1b128c0a..5a1120c55c9db082b64522197d62f5953ecd6af0 100644 GIT binary patch literal 17 TcmZRMD3>v^U4J5)0RqebCTRm^ literal 17 TcmZRMD3>v^U4J5)0Rr>@CSe0! diff --git a/.gradle/8.8/executionHistory/executionHistory.bin b/.gradle/8.8/executionHistory/executionHistory.bin index 71f9e9734ca03f4afa0ce8e34b413fd160479c45..a1af76cea72d0b9dfef0973f4f324ba51052d107 100644 GIT binary patch delta 3515 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 delta 1706 zcmZWpYfuws6y@7ZAOuJ@D2O~HiiuQ_)(EI=qo8Ap8X;&kP-A(AcM=1FNNar}Dno@^ z{6Lrjsgfet0BOal6|AG3(Gk=#AU>grk7;Wo*vcT0hCm3^AN%7w_ndpqz2ELO4{{#X zQHQ4@+d?M=+SO2)H?6SJ9;Uklk)$?Hx7lTr-*TR$EYUwYQK`tx-jW%=O&*&SyD%mo zE?p@QWNo2x9*5K>kU=*q-1o2jQnRXj&0C079oz_Z(p9RxX~cpSh^`IPF*SSyo$LG{ z?mHE(>LBKTzS3Fo&FOc;`^NBZ$2c8)}BXbt}ehjmQ|ZDiWPzKG@M!3YynC!V8+Ce8gJ(#AYZ zK~#$TLi4U5Ro1>oCq3_8M%DO+oZwoUrnzOLufvsyW)0zW9;nBBw84rS1OsH7_~_qB z7!&6hNEQ}%6LjE6Md;%#LR0tESbMbp3!s4`|ve>p0bq@u$E)Y zJR9Fnq1l6evS`34f+m>=4Ol`Q?zmY$for;q`Ad`5PV6bZO*ny1N{Hpk zO+E~4dxv0~&8p`wc~UZ?S5k1KufO|T@hn`mkn}K_buT5^qh_5WX0Y>nIw()>r4ppP z&265t>IT=`7LwaLAHve!LC?l0Oem3yOkeJZz!4;h0Mt8Hvxb+7;EBHoMy#8f(qUJB&{(_M6TOTinuo`FJmRe(F5NS6W=900SPf>t3%S~*oW7@bmRX&16m~mt`%_D~IcI>QnO9WL=3KWbZt5<{zR6kak>}$jQJ*#z zc-Z|G=>>e%JRQ`#Audl==_mYvt6G{B;H%}I@4l)oe|}GJu+N@`tgLu(@j6FUF7n)= z9GX&a=gIcw!A3vL(UkC)J%+A(g6Ewk)*L2?b>HYBGIq}m6qF@q_@^hw#04bC6BcE} z$z&;MSt&B*qNL<(>h`a%Ul^`9={1H>8)0n6@J{+$kj|~59-)g6HvF!iDn4DYRTUeb zE>)&(O-PdaW~Zf+)QUesyXsuFEXg@^M7ym`zXu(%RMBa;@W$75Tu5CT*l^}<=kWo} zmvmQAi);#fT{R1h?S}=!RWoQm9Iko_Gu7_wWzq`|S?hoL_B{r1@M?bh2!@jP2-W+A OYGizfCZU?-XZ!~<^2rha diff --git a/.gradle/8.8/executionHistory/executionHistory.lock b/.gradle/8.8/executionHistory/executionHistory.lock index bf8b0e4f0777be38a326dd618bfa1d9beebfc20f..3d7bdde32d787fa03bc886c9b9a5eed7236150e6 100644 GIT binary patch literal 17 VcmZSP%UL8YayH460SuTX0{|jA16Tk6 literal 17 UcmZSP%UL8YayH460SuTj03r_qEdT%j diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin index 2f68423300e626c8a137d60b14c81ef05c5d0201..b92adb42112dcddebcdf7cc724c2561b7b8fd079 100644 GIT binary patch delta 1714 zcmZWqX;4#F6eb~%38okbkPt*(R1nby&_JZPA*l)kC?V`x5}Y8&RIM8-#eG9+hj^-; zLOXymr65({A>tG|E)_~yOu(TEg~ZZyP@$-F5Nk<#-||N|GxweI?)|>+o^$Vc$x4yzkxw$=OfUk8DWGvEnTr0ZiZSuqV#N?)`c6Y_^rQ?q3hwH&z5s z((_%o*)xPQ*Zbdd!Tl~Qda?v}UF^VQI>ptArv!BYzu4npo7A>St7iCWBD1D*`c(Tw ze(&?OHa3ilX2qTB6pIszykrG>EI~s|44(c*#jWzO3d1V9`akZ4cKQ(v<3M2uT0|z& z!9>(K)<~FsJ$_8#!oal61Gf9lmac90Nv%^2F7GDbXmt+-ck+cB(LM;?gMl$xfjt|G zi@vfby`FQi&=4-(=0l--E>q~qJjjpng*`C=ETfT;3Y9Smtg)m)s=ASz%S&^%|I+(o zXNu7qO)_j(2IBl!%>GF6JAH6yKcmc=e(SBNgxyJZ zrUJ8evW|L^jEIdYis9Ecn_f9CqfeS z3Zr2#Nsgtvj!s_A9WK{fj!h|r>7_I(4Iz-pyTOpc_o{AdA8Fca6WDNE<|aC*r!iM3 zjDHZwGKd~AG=L^ULIln5AejtWfsvw6##T35q~);xp;oK-ia2h& zwqWf=@?y{;{o#ps%-+b*1Eu_%kNWm}+L-2@tS2wRIAmE5WAP$5nCe2bz5sNoBCykv zFTUWZ_3)D28s!Z)vMjdD5WAI&{D^`~vPCFO!q}T3a4SEqh^>14%!CCf^AD_IN$cpM z4HSk~iTsSBqsvlzGQC0>NhbEje%6u~1Os)>S&Csd1b3qNuu{uMgqxXl0$UJz#9yG%=dygvdp*fyi6}l$hpGu_nCU?dUu^$X%pg#$=8uI2W5JUx5*rt(i5tz!whOL2K4cS*GU|J&r?<^OVDMFPE ztFuU{ao9-)`aUSnQWLvWf?c+Rg^uhr$g&lf`-@RkX)DjoTsY7u=`yY-PsiqNEv3)w z1xAh!p_l?)*&^X*-_}pJw0qRFj6;Gzle>;SnTNPFdpiT>YSG`JoQ zA2&IYddc66P~&fhJMc5-oxaBm1nd&R)OIQ7=ugbfT}zFzPY@-dP{lA_dqtbIKx9Kl~ znmrd{HeU&**;@lF1*da57wSBIYS5y-_!n4*=^7%*87BLr?>8lk7e z-pse+qtmgDBIBAD!84#nC78`x4c~)z&gxhydXMQ52NW& z2Ihy5a)ySV**#C(#U4+oYn>SY(sJvIWja*LqshsTm?)pzn=G}NGbVvkL5)AIuKyTQ zTWGv#QOV4sJzyy@-GzH!PyVt(JV)Fb1DTNZYE3;Yhg{rz=Cf`5H#0<>7;4;G! zVgftkWW!|P$!`*bK`G$gWadP0@)DSA3S*=v>e&GUSOBUXl#$Rb3}C?B0{}SN1rPuL literal 17 VcmZSHRrQ78AlK>b3}C>O4*)p41o8j? diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin index da2c5a1a9ff94fe2f8e687e1dac35b0ce572fa14..ce098b56e85f5c6d7b18c78747bcf89fa5a828a2 100644 GIT binary patch delta 1304 zcmcb5j&c1p#tp_2OpNTCO(i;+_%qz~=6wHd!vF?ZuP1MnnjtWEzP;D_6A$-51k-0u zc9m8TSio;Dbil!_3L=>KcXF)s4}oMK*;^bV}41p7K+MQt@ zSy0jclU0=!`86CCy1AcshlpjYoNTLX$w|=X8GG9vvRAoCX z@cg#E*B0{H`Vk_YX*k(c>x4kmgRUl%vzOzbg10BLYB%zS#GFx2lCOmtdvbEE_6&i< zPnR>+0jEpezI_?!Q{Vb zN|VErlqNf-i%jlJGnjlfS!wdlG$jEUm2A!5`wfnkZnbfm{Qs@lTiEp zHLon-1Cv(X4zbHCcqaf&mjfjxP%0AyVS)cMm0vSEYx6Pq-rsygvGEb63c1y6H&ajB zhHQ>`zJw#kPYF|nyVR+3Rs1@vor(`vE?zDB6|SNlWCaKdyjtV^zsCHn!`9jV{(suG z&>pS?uHs>s=Gwl%(8^PN0=HWuCtb!=@iTr}T(ho^pnk}om9ONKR$!_Sd#E{ExJO@c z_XLx=lx>s$V{vQRzSmzgmak`wsXJWmS2{g)^2Ipedb5X<@+IEcrI~hJcQH7MB@8m; zS1^blvPe9?a?6C|JEH3_t)5VMutTgg@aK$*_m5R}ui1vFLfA7@ougyN!o50LnqJRO zdLvX=z(OfFIw*7(SKu+$&CS^&2FD5!N?3Y?7D74h#yzQg2&9wJqCa?(fL zBV#6eUfOZkdmhtvOif2af}Hz59XqYDll|uL6*EgPRou8M&sBKhn&yc_ufRIJiI*@{ XNLGtlzu~rK@ZG&=`gQJ_S0EJt$PJ8} delta 144 zcmV;B0B`@V)&bSd0kAU|0s!i>H5iEklhzuKlYJW)ldT)@leHWeljR&RlSLg#lcpUn zlLa1OlYSmwll2~8lWiYhljR>tvqm7V0kaJvPyw@bBTxa8-6R>44ka+NRwcj#vo0wh y0h4Ab*t1qE9|4o4EWnd}EqRj;E|0UdE>HoJ9WcrQ76Gv#_!qG-7y`3FNE9E=6*V0I diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index fde4444b694ba29ff9fc49a265385612c6f452f4..a0e16bd8395fe32e2c4476a8d4f05411d8be0307 100644 GIT binary patch literal 17 VcmZR+e^jIHbcJ9j0~jzn001=Z1Udi! literal 17 VcmZR+e^jIHbcJ9j0~j!K0RS|(1Oxy8 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 45a82f482744a6358c8512da772c9e7380617299..32aaaa5d706227668d1efe71b4edc68c09236ef0 100644 GIT binary patch literal 63099 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≤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 U@07={N7ib=zaeF^R~h^N01{E*w*UYD diff --git a/src/main/java/me/trouper/armorsmp/data/ArmorTier.java b/src/main/java/me/trouper/armorsmp/data/ArmorTier.java index e25281d..7834f25 100644 --- a/src/main/java/me/trouper/armorsmp/data/ArmorTier.java +++ b/src/main/java/me/trouper/armorsmp/data/ArmorTier.java @@ -8,8 +8,6 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import java.util.function.Consumer; - public enum ArmorTier { NONE(0, new ItemStack(Material.AIR), @@ -146,7 +144,7 @@ public enum ArmorTier { if (value.getLeggings().getType().equals(p.getInventory().getLeggings().getType())) return value; if (value.getBoots().getType().equals(p.getInventory().getBoots().getType())) return value; } - return ArmorSMP.getInstance().getManager().armor.getTier(p); + return ArmorSMP.getInstance().getManager().tiers.getTier(p); } public int getNumeric() { diff --git a/src/main/java/me/trouper/armorsmp/data/Unique.java b/src/main/java/me/trouper/armorsmp/data/Unique.java index 6673dd3..7afd006 100644 --- a/src/main/java/me/trouper/armorsmp/data/Unique.java +++ b/src/main/java/me/trouper/armorsmp/data/Unique.java @@ -7,7 +7,7 @@ import me.trouper.armorsmp.ArmorSMP; import me.trouper.armorsmp.utils.Display; import me.trouper.armorsmp.utils.Text; import me.trouper.armorsmp.utils.Verbose; -import me.trouper.armorsmp.utils.WorldUtils; +import me.trouper.armorsmp.utils.ItemUtils; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.*; @@ -41,7 +41,7 @@ public enum Unique { p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST,25,2,true,false,false)); }, (p) -> { }, 50), - CHESTPLATE(ItemBuilder.create() + DRAGON_EGG(ItemBuilder.create() .material(Material.NETHERITE_CHESTPLATE) .lore(Text.legacyColor("&bAbilities:")) .lore(Text.legacyColor("&3| &7Dragon's Breath")) @@ -216,24 +216,29 @@ public enum Unique { } public static boolean isUnique(ItemStack i) { + if (i == null) return false; for (Unique value : values()) { - if (WorldUtils.isSimilar(value.getInGameItem(),i)) return true; + if (ItemUtils.isSimilar(value.getInGameItem(),i)) return true; if (i.getType().equals(Material.DRAGON_EGG)) return true; } return false; } + + public static boolean isArmor(Unique unique) { + return ItemUtils.isArmor(unique.getInGameItem()); + } public static Unique matchUnique(ItemStack i) { Verbose.send("Matching Unique, Item Type: %s",i.getType()); Unique match = null; for (Unique value : values()) { - if (WorldUtils.isSimilar(value.getInGameItem(),i)) { + if (ItemUtils.isSimilar(value.getInGameItem(),i)) { match = value; Verbose.send("Matched with, Unique: %s",match); } } if (i.getType().equals(Material.DRAGON_EGG)) { - match = Unique.CHESTPLATE; + match = Unique.DRAGON_EGG; Verbose.send("Matched with dragon egg: Unique: %s",match); } return match; diff --git a/src/main/java/me/trouper/armorsmp/server/Manager.java b/src/main/java/me/trouper/armorsmp/server/Manager.java index cf822d8..6d0f95c 100644 --- a/src/main/java/me/trouper/armorsmp/server/Manager.java +++ b/src/main/java/me/trouper/armorsmp/server/Manager.java @@ -8,20 +8,17 @@ import me.trouper.armorsmp.server.commands.TipsCommand; import me.trouper.armorsmp.server.commands.TrustCommand; import me.trouper.armorsmp.server.crafting.ArmorUpgrade; import me.trouper.armorsmp.server.events.*; -import me.trouper.armorsmp.server.systems.ArmorBackend; -import me.trouper.armorsmp.server.systems.Broadcaster; -import me.trouper.armorsmp.server.systems.TrustBackend; -import me.trouper.armorsmp.server.systems.UniquesBackend; +import me.trouper.armorsmp.server.systems.*; import org.bukkit.Bukkit; public class Manager { // My systems public IO io; - - public ArmorBackend armor; + public TrustBackend trust; - public UniquesBackend uniques; + public TierBackend tiers; public Broadcaster broadcaster; + public UniquesBackend uniques; public Manager() { io = new IO(); @@ -30,17 +27,19 @@ public class Manager { public void init() { io.loadAll(); - armor = new ArmorBackend(); + trust = new TrustBackend(); - uniques = new UniquesBackend(); + tiers = new TierBackend(); + //uniques = new UniquesBackend(); broadcaster = new Broadcaster(); + uniques = new UniquesBackend(); registerCommands(); registerEvents(); registerCrafting(); Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),broadcaster::broadcastTip,0,io.config.tips.tipInterval); - Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),uniques::applyPersistence,0,20); + Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(), uniques::applyPersistence,0,20); } diff --git a/src/main/java/me/trouper/armorsmp/server/commands/AdminCommand.java b/src/main/java/me/trouper/armorsmp/server/commands/AdminCommand.java index e0c7085..8eb6e8c 100644 --- a/src/main/java/me/trouper/armorsmp/server/commands/AdminCommand.java +++ b/src/main/java/me/trouper/armorsmp/server/commands/AdminCommand.java @@ -11,7 +11,6 @@ import me.trouper.armorsmp.data.io.Config; import me.trouper.armorsmp.data.Unique; import me.trouper.armorsmp.server.crafting.ArmorUpgrade; import me.trouper.armorsmp.utils.Text; -import me.trouper.armorsmp.utils.Verbose; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; @@ -153,7 +152,7 @@ public class AdminCommand implements CustomCommand { return; } - ArmorSMP.getInstance().getManager().armor.setTier(target, tier); + ArmorSMP.getInstance().getManager().tiers.setTier(target, tier); Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Changed armor tier to {0} for {1}", tier, target.getName()); } @@ -205,8 +204,7 @@ public class AdminCommand implements CustomCommand { } ArmorSMP.getInstance().getManager().uniques.setOwner(piece, target); - ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true); - ArmorSMP.getInstance().getManager().uniques.queueUpdate(target); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(target, true); Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Set the owner of unique {0} to {1}.", piece.getCanonical(), target.getName()); } @@ -287,7 +285,7 @@ public class AdminCommand implements CustomCommand { } ArmorSMP.getInstance().getManager().uniques.dropUnique(target,piece); - ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(target, true); ArmorSMP.getInstance().getManager().uniques.queueUpdate(target); Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Removed {0} from {1}", piece.getCanonical(), target.getName()); diff --git a/src/main/java/me/trouper/armorsmp/server/events/DeathEvents.java b/src/main/java/me/trouper/armorsmp/server/events/DeathEvents.java index 21e9fe4..d5b91ec 100644 --- a/src/main/java/me/trouper/armorsmp/server/events/DeathEvents.java +++ b/src/main/java/me/trouper/armorsmp/server/events/DeathEvents.java @@ -6,7 +6,7 @@ import me.trouper.armorsmp.data.ArmorTier; import me.trouper.armorsmp.server.crafting.ArmorUpgrade; import me.trouper.armorsmp.utils.Text; import me.trouper.armorsmp.utils.Verbose; -import me.trouper.armorsmp.utils.WorldUtils; +import me.trouper.armorsmp.utils.ItemUtils; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -18,26 +18,25 @@ public class DeathEvents implements CustomListener { @EventHandler public void onDeath(PlayerDeathEvent e) { Player p = e.getEntity(); - final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p); + final ArmorTier tier = ArmorSMP.getInstance().getManager().tiers.getTier(p); Verbose.send("Handling death event for %s, their tier is %s",p.getName(),tier); - e.getDrops().removeIf(WorldUtils::notDroppable); + e.getDrops().removeIf(ItemUtils::notDroppable); if (tier.equals(ArmorTier.NONE)) { Verbose.send("Tier was none"); Text.sendMessage(true, Text.Pallet.INFO,p,"You have died! Since you were at tier {0}, you didn't drop an Armor Upgrader.",tier); return; } - if (ArmorSMP.getInstance().getManager().armor.downTier(p)) { + if (ArmorSMP.getInstance().getManager().tiers.downTier(p)) { Verbose.send("They have been down-tiered"); e.getDrops().add(ArmorUpgrade.ARMOR_UGPRADE); e.deathMessage(Text.getMessage(false, Text.Pallet.INFO,"{0} has died, and dropped an {1}!", LegacyComponentSerializer.legacyAmpersand().serialize(p.name()),"Armor Upgrader")); } - ArmorSMP.getInstance().getManager().armor.dropUniqueArmor(p); - ArmorSMP.getInstance().getManager().uniques.dropUniqueItems(p); + ArmorSMP.getInstance().getManager().uniques.dropAllUniques(p); } @EventHandler public void onRespawn(PlayerRespawnEvent e) { - ArmorSMP.getInstance().getManager().armor.queueUpdate(e.getPlayer(),false); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(e.getPlayer(),false); } } diff --git a/src/main/java/me/trouper/armorsmp/server/events/DropItemEvent.java b/src/main/java/me/trouper/armorsmp/server/events/DropItemEvent.java index fd6549a..ee44717 100644 --- a/src/main/java/me/trouper/armorsmp/server/events/DropItemEvent.java +++ b/src/main/java/me/trouper/armorsmp/server/events/DropItemEvent.java @@ -3,8 +3,6 @@ package me.trouper.armorsmp.server.events; import io.github.itzispyder.pdk.events.CustomListener; import me.trouper.armorsmp.ArmorSMP; import me.trouper.armorsmp.data.Unique; -import me.trouper.armorsmp.utils.Text; -import me.trouper.armorsmp.utils.WorldUtils; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerDropItemEvent; diff --git a/src/main/java/me/trouper/armorsmp/server/events/JoinEvent.java b/src/main/java/me/trouper/armorsmp/server/events/JoinEvent.java index 76542fb..219e7af 100644 --- a/src/main/java/me/trouper/armorsmp/server/events/JoinEvent.java +++ b/src/main/java/me/trouper/armorsmp/server/events/JoinEvent.java @@ -32,9 +32,9 @@ public class JoinEvent implements CustomListener { Verbose.send("Checking for updates needed on %s",p.getName()); final Map armorCache = ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache; final Set uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache; - if (!ArmorSMP.getInstance().getManager().armor.verifyArmor(p)) { + if (!ArmorSMP.getInstance().getManager().tiers.verifyArmor(p)) { Verbose.send("Updating armor"); - ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true)); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true)); } if (!ArmorSMP.getInstance().getManager().uniques.verifyUniques(p)) { Verbose.send("Updating uniques"); @@ -42,7 +42,7 @@ public class JoinEvent implements CustomListener { } if (armorCache.containsKey(p.getUniqueId().toString())) { Verbose.send("Updating armor from cache"); - ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true)); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true)); ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache.remove(p.getUniqueId().toString()); ArmorSMP.getInstance().getManager().io.storage.save(); } diff --git a/src/main/java/me/trouper/armorsmp/server/events/PickUpEvent.java b/src/main/java/me/trouper/armorsmp/server/events/PickUpEvent.java index caca8a3..b12e112 100644 --- a/src/main/java/me/trouper/armorsmp/server/events/PickUpEvent.java +++ b/src/main/java/me/trouper/armorsmp/server/events/PickUpEvent.java @@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener; import me.trouper.armorsmp.ArmorSMP; import me.trouper.armorsmp.data.Unique; import me.trouper.armorsmp.utils.Text; -import me.trouper.armorsmp.utils.WorldUtils; +import me.trouper.armorsmp.utils.ItemUtils; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityPickupItemEvent; @@ -29,9 +29,9 @@ public class PickUpEvent implements CustomListener { Text.sendMessage(true, Text.Pallet.INFO,p,"Congratulations! You have picked up the unique {0}. There is only one of each in the whole server!",match.getCanonical()); ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.INFO,"GG, {0}! They are the new owner of the unique {1}.",p.getName(),match.getCanonical())); - if (WorldUtils.isArmor(match.getInGameItem())) { + if (ItemUtils.isArmor(match.getInGameItem())) { p.getInventory().remove(i); - ArmorSMP.getInstance().getManager().armor.queueUpdate(p,true); + ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,true); } } } diff --git a/src/main/java/me/trouper/armorsmp/server/events/UpgradeRedeemEvent.java b/src/main/java/me/trouper/armorsmp/server/events/UpgradeRedeemEvent.java index 9da66ff..234124e 100644 --- a/src/main/java/me/trouper/armorsmp/server/events/UpgradeRedeemEvent.java +++ b/src/main/java/me/trouper/armorsmp/server/events/UpgradeRedeemEvent.java @@ -24,11 +24,11 @@ public class UpgradeRedeemEvent implements CustomListener { if (!holding.hasItemMeta()) return; if (holding.getItemMeta().getCustomModelData() != ArmorUpgrade.ARMOR_UGPRADE.getItemMeta().getCustomModelData()) return; - final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p); + final ArmorTier tier = ArmorSMP.getInstance().getManager().tiers.getTier(p); - if (ArmorSMP.getInstance().getManager().armor.upTier(p)) { + if (ArmorSMP.getInstance().getManager().tiers.upTier(p)) { holding.setAmount(holding.getAmount() - 1); - Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().armor.getTier(p)); + Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().tiers.getTier(p)); } else { Text.sendMessage(true, Text.Pallet.ERROR,p,"Unable to upgrade. You are already at the maximum Armor Tier!"); } diff --git a/src/main/java/me/trouper/armorsmp/server/systems/ArmorBackend.java b/src/main/java/me/trouper/armorsmp/server/systems/TierBackend.java similarity index 60% rename from src/main/java/me/trouper/armorsmp/server/systems/ArmorBackend.java rename to src/main/java/me/trouper/armorsmp/server/systems/TierBackend.java index df019b8..f7c09b5 100644 --- a/src/main/java/me/trouper/armorsmp/server/systems/ArmorBackend.java +++ b/src/main/java/me/trouper/armorsmp/server/systems/TierBackend.java @@ -2,9 +2,8 @@ package me.trouper.armorsmp.server.systems; import me.trouper.armorsmp.ArmorSMP; import me.trouper.armorsmp.data.ArmorTier; -import me.trouper.armorsmp.data.io.IO; import me.trouper.armorsmp.data.io.Storage; -import me.trouper.armorsmp.data.Unique; +import me.trouper.armorsmp.utils.ItemUtils; import me.trouper.armorsmp.utils.Verbose; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -12,12 +11,26 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import java.util.Map; -import java.util.concurrent.atomic.AtomicReference; - -public class ArmorBackend { +public class TierBackend { private final Storage storage = ArmorSMP.getInstance().getManager().io.storage; + + public synchronized void setTier(OfflinePlayer target, ArmorTier tier, boolean transferEnchants) { + Verbose.send("Setting tier of %s to %s",target.getName(),tier); + storage.userData.playerTiers.put(target.getUniqueId().toString(),tier); + storage.save(); + queueUpdate(target,transferEnchants); + } + + public synchronized void queueUpdate(OfflinePlayer target, boolean transferEnchants) { + Verbose.send("Queueing update for %s",target.getName()); + if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants); + else { + storage.armorUpdateCache.put(target.getUniqueId().toString(),transferEnchants); + ArmorSMP.getInstance().getManager().io.storage.save(); + } + + } public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) { final ArmorTier current = getTier(target); @@ -26,14 +39,7 @@ public class ArmorBackend { public void setTier(OfflinePlayer target, ArmorTier tier) { setTier(target, tier, shouldTransferEnchants(target, tier)); - } - - public void setTier(OfflinePlayer target, ArmorTier tier, boolean transferEnchants) { - Verbose.send("Setting tier of %s to %s",target.getName(),tier); - storage.userData.playerTiers.put(target.getUniqueId().toString(),tier); - storage.save(); - queueUpdate(target,transferEnchants); - } + } public boolean downTier(OfflinePlayer target) { int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString()).getNumeric(); @@ -64,7 +70,7 @@ public class ArmorBackend { Verbose.send("Got tier of %s: %s", target.getName(),tier); return tier; } - + public boolean verifyArmor(Player target) { Verbose.send("Verifying armor of %s", target.getName()); PlayerInventory e = target.getInventory(); @@ -74,78 +80,57 @@ public class ArmorBackend { final Material correctChestplate = tier.getChestplate().getType(); final Material correctLeggings = tier.getLeggings().getType(); final Material correctBoots = tier.getBoots().getType(); - Verbose.send(""" - Correct Gear: - %s - %s - %s - %s - """, correctHelmet,correctChestplate,correctLeggings,correctBoots - ); - final Material helmet = e.getHelmet() == null ? Material.AIR : e.getHelmet().getType() == Material.NETHERITE_HELMET ? correctHelmet : e.getHelmet().getType(); - final Material chestplate = e.getChestplate() == null ? Material.AIR : e.getChestplate().getType() == Material.NETHERITE_CHESTPLATE ? correctChestplate : e.getChestplate().getType(); - final Material leggings = e.getLeggings() == null ? Material.AIR : e.getLeggings().getType() == Material.NETHERITE_LEGGINGS ? correctLeggings : e.getLeggings().getType(); - final Material boots = e.getBoots() == null ? Material.AIR : e.getBoots().getType() == Material.NETHERITE_BOOTS ? correctBoots : e.getBoots().getType(); - Verbose.send(""" - Equipped Gear: - %s - %s - %s - %s - """, helmet,chestplate,leggings,boots - ); + boolean helmetValid = (e.getHelmet() != null && ItemUtils.isUniqueArmor(e.getHelmet())) || (e.getHelmet() != null ? e.getHelmet().getType() : Material.AIR) == correctHelmet; + boolean chestplateValid = (e.getChestplate() != null && ItemUtils.isUniqueArmor(e.getChestplate())) || (e.getChestplate() != null ? e.getChestplate().getType() : Material.AIR) == correctChestplate; + boolean leggingsValid = (e.getLeggings() != null && ItemUtils.isUniqueArmor(e.getLeggings())) || (e.getLeggings() != null ? e.getLeggings().getType() : Material.AIR) == correctLeggings; + boolean bootsValid = (e.getBoots() != null && ItemUtils.isUniqueArmor(e.getBoots())) || (e.getBoots() != null ? e.getBoots().getType() : Material.AIR) == correctBoots; - return helmet.equals(correctHelmet) && chestplate.equals(correctChestplate) && leggings.equals(correctLeggings) && boots.equals(correctBoots); + Verbose.send("Armor validation result: [%b, %b, %b, %b]", + helmetValid, chestplateValid, leggingsValid, bootsValid); + + return helmetValid && chestplateValid && leggingsValid && bootsValid; } - + private void updateArmor(Player target, boolean transferEnchants) { - Verbose.send("Updating the armor of %s",target.getName()); + Verbose.send("Updating the armor of %s", target.getName()); PlayerInventory e = target.getInventory(); final ArmorTier tier = getTier(target); - Verbose.send("Tier is %s",tier); - - final ItemStack helmet = e.getHelmet(); - final ItemStack chestplate = e.getChestplate(); - final ItemStack leggings = e.getLeggings(); - final ItemStack boots = e.getBoots(); - if (tier.equals(ArmorTier.NONE)) { e.setHelmet(new ItemStack(Material.AIR)); e.setChestplate(new ItemStack(Material.AIR)); e.setLeggings(new ItemStack(Material.AIR)); e.setBoots(new ItemStack(Material.AIR)); - - updateUniqueArmor(target); - Verbose.send("Returning to prevent NPE"); + ArmorSMP.getInstance().getManager().uniques.queueUpdate(target); + Verbose.send("Cleared armor slots for tier NONE."); return; } - - AtomicReference updatedHelmet = new AtomicReference<>(tier.getHelmet()); - AtomicReference updatedChestplate = new AtomicReference<>(tier.getChestplate()); - AtomicReference updatedLeggings = new AtomicReference<>(tier.getLeggings()); - AtomicReference updatedBoots = new AtomicReference<>(tier.getBoots()); - - + + ItemStack updatedHelmet = tier.getHelmet().clone(); + ItemStack updatedChestplate = tier.getChestplate().clone(); + ItemStack updatedLeggings = tier.getLeggings().clone(); + ItemStack updatedBoots = tier.getBoots().clone(); + if (transferEnchants) { - Verbose.send("Transfering enchants..."); - if (helmet != null && !helmet.getType().name().contains("NETHERITE")) updatedHelmet.get().addEnchantments(helmet.getEnchantments()); - if (chestplate != null && !chestplate.getType().name().contains("NETHERITE")) updatedChestplate.get().addEnchantments(chestplate.getEnchantments()); - if (leggings != null && !leggings.getType().name().contains("NETHERITE")) updatedLeggings.get().addEnchantments(leggings.getEnchantments()); - if (boots != null && !boots.getType().name().contains("NETHERITE")) updatedBoots.get().addEnchantments(boots.getEnchantments()); + Verbose.send("Transfering enchants (non-unique only)..."); + ItemUtils.transferEnchants(e.getHelmet(), updatedHelmet); + ItemUtils.transferEnchants(e.getChestplate(), updatedChestplate); + ItemUtils.transferEnchants(e.getLeggings(), updatedLeggings); + ItemUtils.transferEnchants(e.getBoots(), updatedBoots); } - - Verbose.send("Setting items..."); - e.setHelmet(updatedHelmet.get()); - e.setChestplate(updatedChestplate.get()); - e.setLeggings(updatedLeggings.get()); - e.setBoots(updatedBoots.get()); - - updateUniqueArmor(target); - Verbose.send("Update complete!"); + + e.setHelmet(updatedHelmet); + e.setChestplate(updatedChestplate); + e.setLeggings(updatedLeggings); + e.setBoots(updatedBoots); + + ArmorSMP.getInstance().getManager().uniques.queueUpdate(target); + Verbose.send("Armor update complete!"); } + + /* private void updateUniqueArmor(Player target) { PlayerInventory e = target.getInventory(); @@ -163,12 +148,7 @@ public class ArmorBackend { } } - public synchronized void queueUpdate(OfflinePlayer target, boolean transferEnchants) { - Verbose.send("Queueing update for %s",target.getName()); - if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants); - else storage.armorUpdateCache.put(target.getUniqueId().toString(),transferEnchants); - ArmorSMP.getInstance().getManager().io.storage.save(); - } + public synchronized void dropUniqueArmor(Player target) { final Map uniques = storage.uniques.owners; @@ -191,4 +171,6 @@ public class ArmorBackend { ArmorSMP.getInstance().getManager().io.storage.save(); } + + */ } diff --git a/src/main/java/me/trouper/armorsmp/server/systems/UniquesBackend.java b/src/main/java/me/trouper/armorsmp/server/systems/UniquesBackend.java index 90b331f..d78f378 100644 --- a/src/main/java/me/trouper/armorsmp/server/systems/UniquesBackend.java +++ b/src/main/java/me/trouper/armorsmp/server/systems/UniquesBackend.java @@ -1,77 +1,99 @@ package me.trouper.armorsmp.server.systems; import me.trouper.armorsmp.ArmorSMP; -import me.trouper.armorsmp.data.io.IO; -import me.trouper.armorsmp.data.io.Storage; import me.trouper.armorsmp.data.Unique; +import me.trouper.armorsmp.data.io.Storage; +import me.trouper.armorsmp.utils.ItemUtils; import me.trouper.armorsmp.utils.Verbose; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import java.util.ArrayList; import java.util.List; -import java.util.UUID; -import java.util.concurrent.atomic.AtomicBoolean; public class UniquesBackend { private final Storage storage = ArmorSMP.getInstance().getManager().io.storage; - - private void updateUniques() { - ArmorSMP.getInstance().getServer().getOnlinePlayers().forEach(this::updateUniques); - } - - public void updateUniques(Player p) { - ArmorSMP.getInstance().getManager().io.storage.uniques.owners.forEach(((unique, id) -> { - if (unique.equals(Unique.HELMET) - || unique.equals(Unique.CHESTPLATE) - || unique.equals(Unique.LEGGINGS) - || unique.equals(Unique.BOOTS) - ) return; - if (id.equals(p.getUniqueId().toString())) { - Verbose.send(1, "They own the unique, checking if they have it: ", p.getInventory().contains(unique.getInGameItem())); - if (!p.getInventory().contains(unique.getInGameItem())) { - Verbose.send(1, "They don't have it, giving them the item."); - p.getInventory().removeItemAnySlot(unique.getInGameItem()); - p.getInventory().addItem(unique.getInGameItem()); - } - } else { - p.getInventory().removeItemAnySlot(unique.getInGameItem()); - } - })); - } public void queueUpdate(OfflinePlayer target) { - if (target.getPlayer() != null && target.isOnline()) updateUniques(); - else storage.uniqueUpdateCache.add(target.getUniqueId().toString()); - ArmorSMP.getInstance().getManager().io.storage.save(); - } - - public void setOwner(Unique u, OfflinePlayer p) { - storage.uniques.owners.put(u,p.getUniqueId().toString()); - ArmorSMP.getInstance().getManager().io.storage.save(); - queueUpdate(p); + if (target.getPlayer() != null && target.isOnline()) updateUniques(target.getPlayer()); + else { + storage.uniqueUpdateCache.add(target.getUniqueId().toString()); + ArmorSMP.getInstance().getManager().io.storage.save(); + } + } - public void dropUnique(Player p, Unique dropped) { - storage.uniques.owners.remove(dropped); - ArmorSMP.getInstance().getManager().io.storage.save(); + private void updateUniques(Player p) { + + removeUnowned(p); + equipOwnedArmor(p); + addMissing(p); + + storage.save(); } - public void dropUniqueItems(Player p) { - storage.uniques.owners.forEach((unique,owner)->{ - if (unique.equals(Unique.MACE) || unique.equals(Unique.SWORD) || unique.equals(Unique.AXE) && owner.equals(p.getUniqueId().toString())) { - storage.uniques.owners.remove(unique); + private void removeUnowned(Player p) { + PlayerInventory inv = p.getInventory(); + for (ItemStack item : inv.getContents()) { + if (item == null || !ItemUtils.isUnique(item)) continue; + Unique unique = Unique.matchUnique(item); + if (unique == null || !isOwner(p, unique)) { + inv.removeItemAnySlot(item); + } + } + + for (ItemStack armor : inv.getArmorContents()) { + if (armor == null || !ItemUtils.isUnique(armor)) continue; + Unique unique = Unique.matchUnique(armor); + if (unique == null || !isOwner(p, unique)) { + inv.setItem(inv.first(armor), null); + } + } + } + + private void equipOwnedArmor(Player p) { + storage.uniques.owners.forEach((unique, ownerId) -> { + if (ownerId.equals(p.getUniqueId().toString()) && Unique.isArmor(unique)) { + if (ItemUtils.isHelmet(unique.getInGameItem())) p.getInventory().setHelmet(unique.getInGameItem()); + else if (ItemUtils.isChestplate(unique.getInGameItem())) p.getInventory().setChestplate(unique.getInGameItem()); + else if (ItemUtils.isLeggings(unique.getInGameItem())) p.getInventory().setLeggings(unique.getInGameItem()); + else if (ItemUtils.isBoots(unique.getInGameItem())) p.getInventory().setBoots(unique.getInGameItem()); } }); - ArmorSMP.getInstance().getManager().io.storage.save(); } - + + private void addMissing(Player p) { + storage.uniques.owners.forEach((unique, ownerId) -> { + if (ownerId.equals(p.getUniqueId().toString())) { + if (!Unique.isArmor(unique) && !hasItem(p, unique)) { + p.getInventory().addItem(unique.getInGameItem()); + } + } + }); + } + + public boolean isOwner(Player p, Unique unique) { + return storage.uniques.owners.containsKey(unique) && storage.uniques.owners.get(unique).equals(p.getUniqueId().toString()); + } + + + private boolean hasItem(Player p, Unique unique) { + for (ItemStack item : p.getInventory().getContents()) { + if (item != null && ItemUtils.isSimilar(item, unique.getInGameItem())) { + return true; + } + } + return false; + } + public void applyPersistence() { Bukkit.getOnlinePlayers().forEach(this::applyEffects); } - + public void applyEffects(Player p) { storage.uniques.owners.forEach((unique, owner) -> { if (p != null && owner.equals(p.getUniqueId().toString()) && p.isOnline()) { @@ -80,18 +102,32 @@ public class UniquesBackend { }); } + public void dropUnique(Player p, Unique dropped) { + storage.uniques.owners.remove(dropped); + storage.save(); + } + + public void dropAllUniques(Player p) { + storage.uniques.owners.forEach((unique,owner)->{ + if (owner.equals(p.getUniqueId().toString())) { + storage.uniques.owners.remove(unique); + } + }); + storage.save(); + } + + public void setOwner(Unique u, OfflinePlayer p) { + storage.uniques.owners.put(u, p.getUniqueId().toString()); + storage.save(); + if (p.isOnline()) updateUniques(p.getPlayer()); + } + public boolean verifyUniques(Player p) { - AtomicBoolean success = new AtomicBoolean(false); List checks = new ArrayList<>(); ArmorSMP.getInstance().getManager().io.storage.uniques.owners.forEach(((unique, id) -> { - if (unique.equals(Unique.HELMET) - || unique.equals(Unique.CHESTPLATE) - || unique.equals(Unique.LEGGINGS) - || unique.equals(Unique.BOOTS) - ) return; if (id.equals(p.getUniqueId().toString())) { Verbose.send(1, "They own the unique, checking if they have it: ", p.getInventory().contains(unique.getInGameItem())); - if (p.getInventory().contains(unique.getInGameItem())) { + if (hasItem(p,unique)) { Verbose.send(1, "They have it"); checks.add(true); } else { @@ -102,4 +138,6 @@ public class UniquesBackend { })); return !checks.contains(false); } -} + + +} \ No newline at end of file diff --git a/src/main/java/me/trouper/armorsmp/utils/Display.java b/src/main/java/me/trouper/armorsmp/utils/Display.java index 205c4a8..5b6b9d6 100644 --- a/src/main/java/me/trouper/armorsmp/utils/Display.java +++ b/src/main/java/me/trouper/armorsmp/utils/Display.java @@ -36,11 +36,14 @@ public class Display implements Global { } } } + public static final Function> PARTICLE_FACTORY = particle -> l -> l.getWorld().spawnParticle(particle, l, 1, 0, 0, 0, 0); + public static final BiFunction> DUST_PARTICLE_FACTORY = (color, thickness) -> { Particle.DustOptions dust = new Particle.DustOptions(color, thickness); return l -> l.getWorld().spawnParticle(Particle.DUST, l, 1, 0, 0, 0, 0, dust); }; + public static final Function> FLAME_PARTICLE_FACTORY = soul -> { Particle flame = soul ? Particle.SOUL_FIRE_FLAME : Particle.FLAME; return l -> l.getWorld().spawnParticle(flame, l, 1, 0, 0, 0, 0); diff --git a/src/main/java/me/trouper/armorsmp/utils/ItemUtils.java b/src/main/java/me/trouper/armorsmp/utils/ItemUtils.java new file mode 100644 index 0000000..be1fb19 --- /dev/null +++ b/src/main/java/me/trouper/armorsmp/utils/ItemUtils.java @@ -0,0 +1,81 @@ +package me.trouper.armorsmp.utils; + +import me.trouper.armorsmp.data.Unique; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class ItemUtils { + + public static boolean notDroppable(ItemStack i) { + return isArmor(i) && !isUnique(i) && !isDragonEggEquivalent(i); + } + + private static boolean isDragonEggEquivalent(ItemStack i) { + Material m = i.getType(); + return m.equals(Unique.DRAGON_EGG); + } + + public static boolean isArmor(ItemStack i) { + return isHelmet(i) || isChestplate(i) || isLeggings(i) || isBoots(i); + } + + public static boolean isHelmet(ItemStack i) { + Material m = i.getType(); + String n = m.name(); + return n.contains("HELMET"); + } + + public static boolean isChestplate(ItemStack i) { + Material m = i.getType(); + String n = m.name(); + return n.contains("CHESTPLATE"); + } + + public static boolean isLeggings(ItemStack i) { + Material m = i.getType(); + String n = m.name(); + return n.contains("LEGGINGS"); + } + + public static boolean isBoots(ItemStack i) { + Material m = i.getType(); + String n = m.name(); + return n.contains("BOOTS"); + } + + public static boolean isUnique(ItemStack i) { + Material m = i.getType(); + List uniqueMets = new ArrayList<>(); + for (Unique value : Unique.values()) { + uniqueMets.add(value.getInGameItem().getType()); + } + + return uniqueMets.contains(m); + } + + public static boolean isUniqueArmor(ItemStack i) { + return isUnique(i) && isArmor(i); + } + + public static boolean isSimilar(ItemStack item1, ItemStack item2) { + if (item1 == null || item2 == null) return false; + if (item1.getType() != item2.getType()) return false; + if (item1.hasItemMeta() != item2.hasItemMeta()) return false; + + ItemMeta meta1 = item1.getItemMeta(); + ItemMeta meta2 = item2.getItemMeta(); + + return meta1 == null || meta2 == null || meta1.equals(meta2); + } + + /** @excludes unique enchants */ + public static void transferEnchants(ItemStack oldItem, ItemStack newItem) { + if (oldItem != null && !isUnique(oldItem)) { + newItem.addEnchantments(oldItem.getEnchantments()); + } + } +} diff --git a/src/main/java/me/trouper/armorsmp/utils/WorldUtils.java b/src/main/java/me/trouper/armorsmp/utils/WorldUtils.java deleted file mode 100644 index c74a7f1..0000000 --- a/src/main/java/me/trouper/armorsmp/utils/WorldUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.trouper.armorsmp.utils; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class WorldUtils { - - public static boolean notDroppable(ItemStack i) { - return isArmor(i) && !isUnique(i) && !isDragonEggEquivalent(i); - } - - private static boolean isDragonEggEquivalent(ItemStack i) { - Material m = i.getType(); - return m.equals(Material.NETHERITE_CHESTPLATE); - } - - public static boolean isArmor(ItemStack i) { - Material m = i.getType(); - String n = m.name(); - return n.contains("HELMET") - || n.contains("CHESTPLATE") - || n.contains("LEGGINGS") - || n.contains("BOOTS"); - } - - public static boolean isUnique(ItemStack i) { - Material m = i.getType(); - String n = m.name(); - return (n.contains("NETHERITE") && isArmor(i)) - || n.contains("MACE") - || n.contains("NETHERITE_SWORD") - || n.contains("NETHERITE_AXE"); - } - - public static boolean isSimilar(ItemStack item1, ItemStack item2) { - if (item1 == null || item2 == null) return false; - if (item1.getType() != item2.getType()) return false; - if (item1.hasItemMeta() != item2.hasItemMeta()) return false; - - ItemMeta meta1 = item1.getItemMeta(); - ItemMeta meta2 = item2.getItemMeta(); - - return meta1 == null || meta2 == null || meta1.equals(meta2); - } -}