1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Various fixes and performance improvements, mainly for talismans

This commit is contained in:
TheBusyBiscuit 2020-07-30 17:20:21 +02:00
parent c21a34da01
commit 2f05b9e4f8
3 changed files with 66 additions and 28 deletions

View File

@ -45,6 +45,9 @@
* Optimized Cargo networks for Paper * Optimized Cargo networks for Paper
* Optimized Multiblocks for Paper * Optimized Multiblocks for Paper
* Optimized Enhanced Furnaces for Paper * Optimized Enhanced Furnaces for Paper
* General performance improvements for Talismans
* General performance improvements for GPS Emergency Transmitters
* General performance improvements for Infused Magnets
#### Fixes #### Fixes
* Fixed Slimefun Armor sometimes not applying its effects * Fixed Slimefun Armor sometimes not applying its effects
@ -58,6 +61,10 @@
* Fixed #2143 * Fixed #2143
* Fixed #2145 * Fixed #2145
* Fixed #2151 * Fixed #2151
* Fixed old Talismans not working
* Fixed Talismans sometimes not getting consumed properly
* Fixed old Infused Magnets not working
* Fixed old GPS Emergency Transmitters not working
## Release Candidate 14 (12 Jul 2020) ## Release Candidate 14 (12 Jul 2020)

View File

@ -19,10 +19,12 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.core.researching.Research;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@ -150,9 +152,9 @@ public class Talisman extends SlimefunItem {
ItemStack talismanItem = talisman.getItem(); ItemStack talismanItem = talisman.getItem();
if (p.getInventory().containsAtLeast(talismanItem, 1)) { if (SlimefunUtils.containsSimilarItem(p.getInventory(), talismanItem, true)) {
if (Slimefun.hasUnlocked(p, talismanItem, true)) { if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getInventory(), talisman, talismanItem); activateTalisman(e, p, p.getInventory(), talisman);
return true; return true;
} }
else { else {
@ -162,9 +164,9 @@ public class Talisman extends SlimefunItem {
else { else {
ItemStack enderTalisman = talisman.getEnderVariant(); ItemStack enderTalisman = talisman.getEnderVariant();
if (p.getEnderChest().containsAtLeast(enderTalisman, 1)) { if (SlimefunUtils.containsSimilarItem(p.getEnderChest(), enderTalisman, true)) {
if (Slimefun.hasUnlocked(p, enderTalisman, true)) { if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getEnderChest(), talisman, enderTalisman); activateTalisman(e, p, p.getEnderChest(), talisman);
return true; return true;
} }
else { else {
@ -177,12 +179,11 @@ public class Talisman extends SlimefunItem {
} }
} }
private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman, ItemStack talismanItem) { private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman) {
consumeItem(inv, talisman, talismanItem); consumeItem(inv, talisman);
applyTalismanEffects(p, talisman); applyTalismanEffects(p, talisman);
cancelEvent(e, talisman); cancelEvent(e, talisman);
sendMessage(p, talisman); sendMessage(p, talisman);
} }
private static void applyTalismanEffects(Player p, Talisman talisman) { private static void applyTalismanEffects(Player p, Talisman talisman) {
@ -203,9 +204,17 @@ public class Talisman extends SlimefunItem {
} }
} }
private static void consumeItem(Inventory inv, Talisman talisman, ItemStack talismanItem) { private static void consumeItem(Inventory inv, Talisman talisman) {
if (talisman.isConsumable()) { if (talisman.isConsumable()) {
inv.removeItem(talismanItem); ItemStack[] contents = inv.getContents();
for (int i = 0; i < contents.length; i++) {
ItemStack item = contents[i];
if (SlimefunUtils.isItemSimilar(item, talisman.getItem(), true, false)) {
ItemUtils.consumeItem(item, false);
return;
}
}
} }
} }

View File

@ -212,14 +212,16 @@ public final class SlimefunUtils {
} }
// Performance optimization // Performance optimization
ItemStackWrapper wrapper = new ItemStackWrapper(item); if (!(item instanceof SlimefunItemStack)) {
item = new ItemStackWrapper(item);
}
for (ItemStack stack : inventory.getStorageContents()) { for (ItemStack stack : inventory.getStorageContents()) {
if (stack == null || stack.getType() == Material.AIR) { if (stack == null || stack.getType() == Material.AIR) {
continue; continue;
} }
if (isItemSimilar(stack, wrapper, checkLore)) { if (isItemSimilar(stack, item, checkLore, false)) {
return true; return true;
} }
} }
@ -241,7 +243,6 @@ public final class SlimefunUtils {
return ((SlimefunItemStack) item).getItemId().equals(((SlimefunItemStack) sfitem).getItemId()); return ((SlimefunItemStack) item).getItemId().equals(((SlimefunItemStack) sfitem).getItemId());
} }
boolean sfItemHasMeta = sfitem.hasItemMeta();
if (item.hasItemMeta()) { if (item.hasItemMeta()) {
ItemMeta itemMeta = item.getItemMeta(); ItemMeta itemMeta = item.getItemMeta();
@ -255,13 +256,12 @@ public final class SlimefunUtils {
ImmutableItemMeta meta = ((SlimefunItemStack) sfitem).getImmutableMeta(); ImmutableItemMeta meta = ((SlimefunItemStack) sfitem).getImmutableMeta();
return equalsItemMeta(itemMeta, meta, checkLore); return equalsItemMeta(itemMeta, meta, checkLore);
} }
else if (sfitem.hasItemMeta()) {
if (sfItemHasMeta) {
return equalsItemMeta(itemMeta, sfitem.getItemMeta(), checkLore); return equalsItemMeta(itemMeta, sfitem.getItemMeta(), checkLore);
} }
} }
else { else {
return !sfItemHasMeta; return !sfitem.hasItemMeta();
} }
return false; return false;
@ -278,11 +278,17 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && itemLore.isPresent()) { if (itemMeta.hasLore() && itemLore.isPresent()) {
return equalsLore(itemMeta.getLore(), itemLore.get()); return equalsLore(itemMeta.getLore(), itemLore.get());
} }
else return !itemMeta.hasLore() && !itemLore.isPresent(); else {
return !itemMeta.hasLore() && !itemLore.isPresent();
}
}
else {
return true;
} }
else return true;
} }
else return false; else {
return false;
}
} }
else if (!itemMeta.hasDisplayName() && !displayName.isPresent()) { else if (!itemMeta.hasDisplayName() && !displayName.isPresent()) {
Optional<List<String>> itemLore = meta.getLore(); Optional<List<String>> itemLore = meta.getLore();
@ -291,9 +297,13 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && itemLore.isPresent()) { if (itemMeta.hasLore() && itemLore.isPresent()) {
return equalsLore(itemMeta.getLore(), itemLore.get()); return equalsLore(itemMeta.getLore(), itemLore.get());
} }
else return !itemMeta.hasLore() && !itemLore.isPresent(); else {
return !itemMeta.hasLore() && !itemLore.isPresent();
}
}
else {
return true;
} }
else return true;
} }
else return false; else return false;
} }
@ -305,22 +315,34 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && sfitemMeta.hasLore()) { if (itemMeta.hasLore() && sfitemMeta.hasLore()) {
return equalsLore(itemMeta.getLore(), sfitemMeta.getLore()); return equalsLore(itemMeta.getLore(), sfitemMeta.getLore());
} }
else return !itemMeta.hasLore() && !sfitemMeta.hasLore(); else {
return !itemMeta.hasLore() && !sfitemMeta.hasLore();
}
}
else {
return true;
} }
else return true;
} }
else return false; else {
return false;
}
} }
else if (!itemMeta.hasDisplayName() && !sfitemMeta.hasDisplayName()) { else if (!itemMeta.hasDisplayName() && !sfitemMeta.hasDisplayName()) {
if (checkLore) { if (checkLore) {
if (itemMeta.hasLore() && sfitemMeta.hasLore()) { if (itemMeta.hasLore() && sfitemMeta.hasLore()) {
return equalsLore(itemMeta.getLore(), sfitemMeta.getLore()); return equalsLore(itemMeta.getLore(), sfitemMeta.getLore());
} }
else return !itemMeta.hasLore() && !sfitemMeta.hasLore(); else {
return !itemMeta.hasLore() && !sfitemMeta.hasLore();
}
}
else {
return true;
} }
else return true;
} }
else return false; else {
return false;
}
} }
private static boolean equalsLore(List<String> lore, List<String> lore2) { private static boolean equalsLore(List<String> lore, List<String> lore2) {