Fixed talisman crafting

This commit is contained in:
Auxilor
2021-01-03 14:30:22 +00:00
parent 7683fc7588
commit dbee6da9ae
3 changed files with 64 additions and 17 deletions

View File

@@ -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()));
}

View File

@@ -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) {

View File

@@ -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());
}
}
}