1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00
This commit is contained in:
TheBusyBiscuit 2020-10-30 22:50:16 +01:00
parent 95f827727d
commit 210c8d20f4
4 changed files with 53 additions and 15 deletions

View File

@ -47,6 +47,7 @@
* Fixed contributors not showing correctly
* Fixed #2469
* Fixed #2509
* Fixed #2499
## Release Candidate 17 (17 Oct 2020)

View File

@ -5,6 +5,7 @@ import java.util.Optional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.commons.lang.Validate;
import org.bukkit.Keyed;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
@ -58,6 +59,9 @@ public class BlockDataService implements PersistentDataService, Keyed {
* The value to store
*/
public void setBlockData(@Nonnull Block b, @Nonnull String value) {
Validate.notNull(b, "The block cannot be null!");
Validate.notNull(value, "The value cannot be null!");
BlockStateSnapshotResult result = PaperLib.getBlockState(b, false);
BlockState state = result.getState();
@ -78,6 +82,8 @@ public class BlockDataService implements PersistentDataService, Keyed {
* @return The stored value
*/
public Optional<String> getBlockData(@Nonnull Block b) {
Validate.notNull(b, "The block cannot be null!");
BlockState state = PaperLib.getBlockState(b, false).getState();
if (state instanceof TileState) {
@ -133,4 +139,4 @@ public class BlockDataService implements PersistentDataService, Keyed {
}
}
}
}

View File

@ -1,5 +1,7 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans;
import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.NamespacedKey;
import org.bukkit.block.EnderChest;
import org.bukkit.inventory.ItemStack;
@ -21,12 +23,13 @@ class EnderTalisman extends Talisman {
private static final LockedCategory ENDER_TALISMANS_CATEGORY = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "ender_talismans"), new CustomItem(SlimefunItems.ENDER_TALISMAN, "&7Talismans - &aTier II"), 3, Talisman.TALISMANS_CATEGORY.getKey());
@ParametersAreNonnullByDefault
public EnderTalisman(Talisman parent, SlimefunItemStack item) {
super(ENDER_TALISMANS_CATEGORY, item, new ItemStack[] { SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3 }, parent.isConsumable(), parent.isEventCancelled(), parent.getMessageSuffix(), parent.getChance(), parent.getEffects());
}
@Override
public void createEnderTalisman() {
void loadEnderTalisman() {
// Let's override that, otherwise we would be creating Ender Talismans
// for every Ender Talisman
}

View File

@ -5,6 +5,10 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.ThreadLocalRandom;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.ChatColor;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
@ -44,19 +48,23 @@ public class Talisman extends SlimefunItem {
protected final PotionEffect[] effects;
protected final int chance;
public Talisman(SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) {
@ParametersAreNonnullByDefault
public Talisman(SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, @Nullable String messageSuffix, PotionEffect... effects) {
this(item, recipe, consumable, cancelEvent, messageSuffix, 100, effects);
}
public Talisman(SlimefunItemStack item, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) {
@ParametersAreNonnullByDefault
public Talisman(SlimefunItemStack item, ItemStack[] recipe, @Nullable String messageSuffix, int chance, PotionEffect... effects) {
this(item, recipe, true, true, messageSuffix, chance, effects);
}
public Talisman(SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance, PotionEffect... effects) {
@ParametersAreNonnullByDefault
public Talisman(SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, @Nullable String messageSuffix, int chance, PotionEffect... effects) {
this(TALISMANS_CATEGORY, item, recipe, consumable, cancelEvent, messageSuffix, chance, effects);
}
protected Talisman(Category category, SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance, PotionEffect... effects) {
@ParametersAreNonnullByDefault
protected Talisman(Category category, SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, @Nullable String messageSuffix, int chance, PotionEffect... effects) {
super(category, item, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1));
this.consumable = consumable;
@ -81,14 +89,26 @@ public class Talisman extends SlimefunItem {
}
}
/**
* This returns whether the {@link Talisman} will be consumed upon use.
*
* @return Whether this {@link Talisman} is consumed on use.
*/
public boolean isConsumable() {
return consumable;
}
/**
* This returns the chance of this {@link Talisman} activating.
* The chance will be between 1 and 100.
*
* @return The chance of this {@link Talisman} activating.
*/
public int getChance() {
return chance;
}
@Nonnull
public PotionEffect[] getEffects() {
return effects;
}
@ -101,6 +121,7 @@ public class Talisman extends SlimefunItem {
return cancel;
}
@Nullable
private SlimefunItemStack getEnderVariant() {
return enderTalisman;
}
@ -114,10 +135,10 @@ public class Talisman extends SlimefunItem {
@Override
public void load() {
super.load();
createEnderTalisman();
loadEnderTalisman();
}
protected void createEnderTalisman() {
void loadEnderTalisman() {
EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(getEnderVariant());
Optional<Research> research = Research.getResearch(new NamespacedKey(SlimefunPlugin.instance(), "ender_talismans"));
@ -126,14 +147,16 @@ public class Talisman extends SlimefunItem {
}
}
private static boolean hasMessage(Talisman talisman) {
private static boolean hasMessage(@Nonnull Talisman talisman) {
return talisman.getMessageSuffix() != null;
}
@ParametersAreNonnullByDefault
public static boolean checkFor(Event e, SlimefunItemStack stack) {
return checkFor(e, stack.getItem());
}
@ParametersAreNonnullByDefault
public static boolean checkFor(Event e, SlimefunItem item) {
if (!(item instanceof Talisman)) {
return false;
@ -153,7 +176,7 @@ public class Talisman extends SlimefunItem {
if (SlimefunUtils.containsSimilarItem(p.getInventory(), talismanItem, true)) {
if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getInventory(), talisman);
activateTalisman(e, p, p.getInventory(), talisman, talismanItem);
return true;
} else {
return false;
@ -163,7 +186,7 @@ public class Talisman extends SlimefunItem {
if (SlimefunUtils.containsSimilarItem(p.getEnderChest(), enderTalisman, true)) {
if (Slimefun.hasUnlocked(p, talisman, true)) {
activateTalisman(e, p, p.getEnderChest(), talisman);
activateTalisman(e, p, p.getEnderChest(), talisman, enderTalisman);
return true;
} else {
return false;
@ -174,38 +197,43 @@ public class Talisman extends SlimefunItem {
}
}
private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman) {
consumeItem(inv, talisman);
@ParametersAreNonnullByDefault
private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman, ItemStack talismanItem) {
consumeItem(inv, talisman, talismanItem);
applyTalismanEffects(p, talisman);
cancelEvent(e, talisman);
sendMessage(p, talisman);
}
@ParametersAreNonnullByDefault
private static void applyTalismanEffects(Player p, Talisman talisman) {
for (PotionEffect effect : talisman.getEffects()) {
p.addPotionEffect(effect);
}
}
@ParametersAreNonnullByDefault
private static void cancelEvent(Event e, Talisman talisman) {
if (e instanceof Cancellable && talisman.isEventCancelled()) {
((Cancellable) e).setCancelled(true);
}
}
@ParametersAreNonnullByDefault
private static void sendMessage(Player p, Talisman talisman) {
if (hasMessage(talisman)) {
SlimefunPlugin.getLocalization().sendMessage(p, "messages.talisman." + talisman.getMessageSuffix(), true);
}
}
private static void consumeItem(Inventory inv, Talisman talisman) {
@ParametersAreNonnullByDefault
private static void consumeItem(Inventory inv, Talisman talisman, ItemStack talismanItem) {
if (talisman.isConsumable()) {
ItemStack[] contents = inv.getContents();
for (int i = 0; i < contents.length; i++) {
ItemStack item = contents[i];
if (SlimefunUtils.isItemSimilar(item, talisman.getItem(), true, false)) {
if (SlimefunUtils.isItemSimilar(item, talismanItem, true, false)) {
ItemUtils.consumeItem(item, false);
return;
}