Fixed talisman crafting
This commit is contained in:
@@ -21,7 +21,6 @@ import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.RecipeChoice;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.permissions.Permission;
|
||||
@@ -216,8 +215,7 @@ public abstract class Talisman implements Listener, Watcher {
|
||||
Talisman talisman = Talismans.getByKey(talismanNamespacedKey);
|
||||
Validate.notNull(talisman, "Talisman specified in " + this.getConfigName() + ".yml's recipe is invalid!");
|
||||
recipeTalismanOverlay[i] = Talismans.getByKey(talismanNamespacedKey);
|
||||
RecipeChoice.ExactChoice recipeChoice = new RecipeChoice.ExactChoice(talisman.getItemStack());
|
||||
recipe.setIngredient(ingredientChar, recipeChoice);
|
||||
recipe.setIngredient(ingredientChar, Material.PLAYER_HEAD);
|
||||
} else {
|
||||
recipe.setIngredient(ingredientChar, Material.valueOf(recipeStrings.get(i).toUpperCase()));
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -31,7 +32,7 @@ import java.util.UUID;
|
||||
|
||||
@UtilityClass
|
||||
public class TalismanChecks {
|
||||
private static final Map<UUID, Set<Talisman>> CACHED_TALISMANS = new HashMap<>();
|
||||
private static final Map<UUID, Set<Talisman>> CACHED_TALISMANS = Collections.synchronizedMap(new HashMap<>());
|
||||
private static boolean readEnderChest = true;
|
||||
private static boolean readShulkerBoxes = true;
|
||||
private static final AbstractEcoPlugin PLUGIN = AbstractEcoPlugin.getInstance();
|
||||
@@ -114,6 +115,9 @@ public class TalismanChecks {
|
||||
}
|
||||
|
||||
for (ItemStack rawContent : rawContents) {
|
||||
if (rawContent == null) {
|
||||
continue;
|
||||
}
|
||||
if (readShulkerBoxes) {
|
||||
ItemMeta meta = rawContent.getItemMeta();
|
||||
if (meta instanceof BlockStateMeta) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class TalismanCraftListener implements Listener {
|
||||
@EventHandler
|
||||
@@ -74,9 +74,7 @@ public class TalismanCraftListener implements Listener {
|
||||
|
||||
ShapedRecipe recipe = (ShapedRecipe) event.getRecipe();
|
||||
|
||||
Talisman talisman = Talismans.getByKey(recipe.getKey());
|
||||
|
||||
if (talisman == null) {
|
||||
if (!recipe.getKey().getNamespace().equals("talismans")) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -84,9 +82,12 @@ public class TalismanCraftListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Talisman[] overlay = new Talisman[9];
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
ItemStack itemStack = event.getInventory().getMatrix()[i];
|
||||
|
||||
|
||||
if (itemStack == null) {
|
||||
continue;
|
||||
}
|
||||
@@ -97,23 +98,43 @@ public class TalismanCraftListener implements Listener {
|
||||
|
||||
Talisman matchedTalisman = TalismanChecks.getTalismanOnItem(itemStack);
|
||||
|
||||
if (matchedTalisman == null || !Objects.equals(matchedTalisman, talisman.getRecipeTalismanOverlay()[i])) {
|
||||
event.getInventory().setResult(new ItemStack(Material.AIR));
|
||||
if (matchedTalisman == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
overlay[i] = matchedTalisman;
|
||||
}
|
||||
|
||||
boolean empty = true;
|
||||
for (Talisman overlayTalisman : overlay) {
|
||||
if (overlayTalisman != null) {
|
||||
empty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty) {
|
||||
return;
|
||||
}
|
||||
|
||||
Talisman talisman = Talismans.values().stream().filter(talisman1 -> Arrays.equals(overlay, talisman1.getRecipeTalismanOverlay())).findFirst().orElse(null);
|
||||
|
||||
if (talisman == null) {
|
||||
event.getInventory().setResult(new ItemStack(Material.AIR));
|
||||
} else {
|
||||
event.getInventory().setResult(talisman.getItemStack());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void craftTalismanListener(@NotNull final CraftItemEvent event) {
|
||||
public void prepareCraftTalismanListener(@NotNull final CraftItemEvent event) {
|
||||
if (!(event.getRecipe() instanceof ShapedRecipe)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ShapedRecipe recipe = (ShapedRecipe) event.getRecipe();
|
||||
|
||||
Talisman talisman = Talismans.getByKey(recipe.getKey());
|
||||
|
||||
if (talisman == null) {
|
||||
if (!recipe.getKey().getNamespace().equals("talismans")) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -121,6 +142,8 @@ public class TalismanCraftListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Talisman[] overlay = new Talisman[9];
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
ItemStack itemStack = event.getInventory().getMatrix()[i];
|
||||
|
||||
@@ -134,10 +157,32 @@ public class TalismanCraftListener implements Listener {
|
||||
|
||||
Talisman matchedTalisman = TalismanChecks.getTalismanOnItem(itemStack);
|
||||
|
||||
if (matchedTalisman == null || !Objects.equals(matchedTalisman, talisman.getRecipeTalismanOverlay()[i])) {
|
||||
event.getInventory().setResult(new ItemStack(Material.AIR));
|
||||
event.setCancelled(true);
|
||||
if (matchedTalisman == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
overlay[i] = matchedTalisman;
|
||||
}
|
||||
|
||||
boolean empty = true;
|
||||
for (Talisman overlayTalisman : overlay) {
|
||||
if (overlayTalisman != null) {
|
||||
empty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty) {
|
||||
return;
|
||||
}
|
||||
|
||||
Talisman talisman = Talismans.values().stream().filter(talisman1 -> Arrays.equals(overlay, talisman1.getRecipeTalismanOverlay())).findFirst().orElse(null);
|
||||
|
||||
if (talisman == null) {
|
||||
event.getInventory().setResult(new ItemStack(Material.AIR));
|
||||
event.setCancelled(true);
|
||||
} else {
|
||||
event.getInventory().setResult(talisman.getItemStack());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user