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 Multiblocks 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
* Fixed Slimefun Armor sometimes not applying its effects
@ -58,6 +61,10 @@
* Fixed #2143
* Fixed #2145
* 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)

View File

@ -19,10 +19,12 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.slimefun4.core.researching.Research;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@ -150,9 +152,9 @@ public class Talisman extends SlimefunItem {
ItemStack talismanItem = talisman.getItem();
if (p.getInventory().containsAtLeast(talismanItem, 1)) {
if (Slimefun.hasUnlocked(p, talismanItem, true)) {
activateTalisman(e, p, p.getInventory(), talisman, talismanItem);
if (SlimefunUtils.containsSimilarItem(p.getInventory(), talismanItem, true)) {
if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getInventory(), talisman);
return true;
}
else {
@ -162,9 +164,9 @@ public class Talisman extends SlimefunItem {
else {
ItemStack enderTalisman = talisman.getEnderVariant();
if (p.getEnderChest().containsAtLeast(enderTalisman, 1)) {
if (Slimefun.hasUnlocked(p, enderTalisman, true)) {
activateTalisman(e, p, p.getEnderChest(), talisman, enderTalisman);
if (SlimefunUtils.containsSimilarItem(p.getEnderChest(), enderTalisman, true)) {
if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getEnderChest(), talisman);
return true;
}
else {
@ -177,12 +179,11 @@ public class Talisman extends SlimefunItem {
}
}
private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman, ItemStack talismanItem) {
consumeItem(inv, talisman, talismanItem);
private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman) {
consumeItem(inv, talisman);
applyTalismanEffects(p, talisman);
cancelEvent(e, talisman);
sendMessage(p, 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()) {
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
ItemStackWrapper wrapper = new ItemStackWrapper(item);
if (!(item instanceof SlimefunItemStack)) {
item = new ItemStackWrapper(item);
}
for (ItemStack stack : inventory.getStorageContents()) {
if (stack == null || stack.getType() == Material.AIR) {
continue;
}
if (isItemSimilar(stack, wrapper, checkLore)) {
if (isItemSimilar(stack, item, checkLore, false)) {
return true;
}
}
@ -241,7 +243,6 @@ public final class SlimefunUtils {
return ((SlimefunItemStack) item).getItemId().equals(((SlimefunItemStack) sfitem).getItemId());
}
boolean sfItemHasMeta = sfitem.hasItemMeta();
if (item.hasItemMeta()) {
ItemMeta itemMeta = item.getItemMeta();
@ -255,13 +256,12 @@ public final class SlimefunUtils {
ImmutableItemMeta meta = ((SlimefunItemStack) sfitem).getImmutableMeta();
return equalsItemMeta(itemMeta, meta, checkLore);
}
if (sfItemHasMeta) {
else if (sfitem.hasItemMeta()) {
return equalsItemMeta(itemMeta, sfitem.getItemMeta(), checkLore);
}
}
else {
return !sfItemHasMeta;
return !sfitem.hasItemMeta();
}
return false;
@ -278,11 +278,17 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && itemLore.isPresent()) {
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()) {
Optional<List<String>> itemLore = meta.getLore();
@ -291,9 +297,13 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && itemLore.isPresent()) {
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;
}
@ -305,22 +315,34 @@ public final class SlimefunUtils {
if (itemMeta.hasLore() && sfitemMeta.hasLore()) {
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()) {
if (checkLore) {
if (itemMeta.hasLore() && sfitemMeta.hasLore()) {
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) {