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:
parent
c21a34da01
commit
2f05b9e4f8
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user