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 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)
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user