Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.Server;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.FurnaceRecipe;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe;
import org.bukkit.inventory.RecipeChoice;
Expand Down Expand Up @@ -158,7 +160,13 @@ public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe,
final User user = ess.getUser(sender.getPlayer());
user.getBase().closeInventory();
user.setRecipeSee(true);
final InventoryView view = user.getBase().openWorkbench(null, true);
final InventoryView view = openWorkbench(user);
if (view == null) {
user.setRecipeSee(false);
return;
}
final Inventory topInventory = ess.provider(InventoryViewProvider.class).getTopInventory(view);

final String[] recipeShape = recipe.getShape();
final Map<Character, ItemStack> ingredientMap = recipe.getIngredientMap();
for (int j = 0; j < recipeShape.length; j++) {
Expand All @@ -170,7 +178,7 @@ public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe,
if (VersionUtil.PRE_FLATTENING && item.getDurability() == Short.MAX_VALUE) {
item.setDurability((short) 0);
}
ess.provider(InventoryViewProvider.class).getTopInventory(view).setItem(j * 3 + k + 1, item);
topInventory.setItem(j * 3 + k + 1, item);
}
}
} else {
Expand Down Expand Up @@ -217,7 +225,11 @@ public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe re
final User user = ess.getUser(sender.getPlayer());
user.getBase().closeInventory();
user.setRecipeSee(true);
final InventoryView view = user.getBase().openWorkbench(null, true);
final InventoryView view = openWorkbench(user);
if (view == null) {
user.setRecipeSee(false);
return;
}
for (int i = 0; i < ingredients.size(); i++) {
final ItemStack item = ingredients.get(i);
if (VersionUtil.PRE_FLATTENING && item.getDurability() == Short.MAX_VALUE) {
Expand All @@ -239,6 +251,17 @@ public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe re
}
}

private InventoryView openWorkbench(final User user) {
final InventoryView view = user.getBase().openWorkbench(null, true);
// If InventoryOpenEvent is canceled, the items can end up in the player's own crafting grid
// which allows players to extract counterfeit items.
if (view == null)
return null;

final Inventory inventory = ess.provider(InventoryViewProvider.class).getTopInventory(view);
return inventory.getType() == InventoryType.WORKBENCH ? view : null;
}

public String getMaterialName(final CommandSource sender, final ItemStack stack) {
if (stack == null) {
return sender.tl("recipeNothing");
Expand Down
Loading