SPIGOT-8003: Fire PrepareItemCraftEvent for Crafter preview
This commit is contained in:
parent
d20d4c1c3b
commit
4f3946f7ac
@ -1,11 +1,10 @@
|
|||||||
--- a/net/minecraft/world/inventory/ContainerWorkbench.java
|
--- a/net/minecraft/world/inventory/ContainerWorkbench.java
|
||||||
+++ b/net/minecraft/world/inventory/ContainerWorkbench.java
|
+++ b/net/minecraft/world/inventory/ContainerWorkbench.java
|
||||||
@@ -16,6 +16,12 @@
|
@@ -16,6 +16,11 @@
|
||||||
import net.minecraft.world.item.crafting.Recipes;
|
import net.minecraft.world.item.crafting.Recipes;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
|
||||||
+// CraftBukkit start
|
+// CraftBukkit start
|
||||||
+import net.minecraft.world.item.crafting.RecipeRepair;
|
|
||||||
+import org.bukkit.craftbukkit.inventory.CraftInventoryCrafting;
|
+import org.bukkit.craftbukkit.inventory.CraftInventoryCrafting;
|
||||||
+import org.bukkit.craftbukkit.inventory.CraftInventoryView;
|
+import org.bukkit.craftbukkit.inventory.CraftInventoryView;
|
||||||
+// CraftBukkit end
|
+// CraftBukkit end
|
||||||
@ -13,7 +12,7 @@
|
|||||||
public class ContainerWorkbench extends AbstractCraftingMenu {
|
public class ContainerWorkbench extends AbstractCraftingMenu {
|
||||||
|
|
||||||
private static final int CRAFTING_GRID_WIDTH = 3;
|
private static final int CRAFTING_GRID_WIDTH = 3;
|
||||||
@@ -31,13 +37,16 @@
|
@@ -31,13 +36,16 @@
|
||||||
public final ContainerAccess access;
|
public final ContainerAccess access;
|
||||||
private final EntityHuman player;
|
private final EntityHuman player;
|
||||||
private boolean placingRecipe;
|
private boolean placingRecipe;
|
||||||
@ -31,7 +30,7 @@
|
|||||||
this.access = containeraccess;
|
this.access = containeraccess;
|
||||||
this.player = playerinventory.player;
|
this.player = playerinventory.player;
|
||||||
this.addResultSlot(this.player, 124, 35);
|
this.addResultSlot(this.player, 124, 35);
|
||||||
@@ -50,6 +59,7 @@
|
@@ -50,6 +58,7 @@
|
||||||
EntityPlayer entityplayer = (EntityPlayer) entityhuman;
|
EntityPlayer entityplayer = (EntityPlayer) entityhuman;
|
||||||
ItemStack itemstack = ItemStack.EMPTY;
|
ItemStack itemstack = ItemStack.EMPTY;
|
||||||
Optional<RecipeHolder<RecipeCrafting>> optional = worldserver.getServer().getRecipeManager().getRecipeFor(Recipes.CRAFTING, craftinginput, worldserver, recipeholder);
|
Optional<RecipeHolder<RecipeCrafting>> optional = worldserver.getServer().getRecipeManager().getRecipeFor(Recipes.CRAFTING, craftinginput, worldserver, recipeholder);
|
||||||
@ -39,15 +38,15 @@
|
|||||||
|
|
||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
RecipeHolder<RecipeCrafting> recipeholder1 = (RecipeHolder) optional.get();
|
RecipeHolder<RecipeCrafting> recipeholder1 = (RecipeHolder) optional.get();
|
||||||
@@ -63,6 +73,7 @@
|
@@ -63,6 +72,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+ itemstack = org.bukkit.craftbukkit.event.CraftEventFactory.callPreCraftEvent(inventorycrafting, inventorycraftresult, itemstack, container.getBukkitView(), optional.map(RecipeHolder::value).orElse(null) instanceof RecipeRepair); // CraftBukkit
|
+ itemstack = org.bukkit.craftbukkit.event.CraftEventFactory.callPreCraftEvent(inventorycrafting, inventorycraftresult, itemstack, container.getBukkitView(), optional); // CraftBukkit
|
||||||
|
|
||||||
inventorycraftresult.setItem(0, itemstack);
|
inventorycraftresult.setItem(0, itemstack);
|
||||||
container.setRemoteSlot(0, itemstack);
|
container.setRemoteSlot(0, itemstack);
|
||||||
@@ -103,6 +114,7 @@
|
@@ -103,6 +113,7 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean stillValid(EntityHuman entityhuman) {
|
public boolean stillValid(EntityHuman entityhuman) {
|
||||||
@ -55,7 +54,7 @@
|
|||||||
return stillValid(this.access, entityhuman, Blocks.CRAFTING_TABLE);
|
return stillValid(this.access, entityhuman, Blocks.CRAFTING_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,4 +193,17 @@
|
@@ -181,4 +192,17 @@
|
||||||
protected EntityHuman owner() {
|
protected EntityHuman owner() {
|
||||||
return this.player;
|
return this.player;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
--- a/net/minecraft/world/inventory/CrafterMenu.java
|
--- a/net/minecraft/world/inventory/CrafterMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/CrafterMenu.java
|
+++ b/net/minecraft/world/inventory/CrafterMenu.java
|
||||||
@@ -10,8 +10,27 @@
|
@@ -10,8 +10,29 @@
|
||||||
import net.minecraft.world.item.crafting.RecipeCrafting;
|
import net.minecraft.world.item.crafting.RecipeCrafting;
|
||||||
import net.minecraft.world.level.block.CrafterBlock;
|
import net.minecraft.world.level.block.CrafterBlock;
|
||||||
|
|
||||||
+// CraftBukkit start
|
+// CraftBukkit start
|
||||||
|
+import java.util.Optional;
|
||||||
|
+import net.minecraft.world.item.crafting.RecipeHolder;
|
||||||
+import org.bukkit.craftbukkit.inventory.CraftInventoryCrafter;
|
+import org.bukkit.craftbukkit.inventory.CraftInventoryCrafter;
|
||||||
+import org.bukkit.craftbukkit.inventory.view.CraftCrafterView;
|
+import org.bukkit.craftbukkit.inventory.view.CraftCrafterView;
|
||||||
+// CraftBukkit end
|
+// CraftBukkit end
|
||||||
@ -28,7 +30,7 @@
|
|||||||
protected static final int SLOT_COUNT = 9;
|
protected static final int SLOT_COUNT = 9;
|
||||||
private static final int INV_SLOT_START = 9;
|
private static final int INV_SLOT_START = 9;
|
||||||
private static final int INV_SLOT_END = 36;
|
private static final int INV_SLOT_END = 36;
|
||||||
@@ -106,6 +125,7 @@
|
@@ -106,6 +127,7 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean stillValid(EntityHuman entityhuman) {
|
public boolean stillValid(EntityHuman entityhuman) {
|
||||||
@ -36,3 +38,18 @@
|
|||||||
return this.container.stillValid(entityhuman);
|
return this.container.stillValid(entityhuman);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -115,9 +137,13 @@
|
||||||
|
if (entityhuman instanceof EntityPlayer entityplayer) {
|
||||||
|
WorldServer worldserver = entityplayer.serverLevel();
|
||||||
|
CraftingInput craftinginput = this.container.asCraftInput();
|
||||||
|
- ItemStack itemstack = (ItemStack) CrafterBlock.getPotentialResults(worldserver, craftinginput).map((recipeholder) -> {
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ Optional<RecipeHolder<RecipeCrafting>> recipe = CrafterBlock.getPotentialResults(worldserver, craftinginput);
|
||||||
|
+ ItemStack itemstack = (ItemStack) recipe.map((recipeholder) -> {
|
||||||
|
+ // CraftBukkit end
|
||||||
|
return ((RecipeCrafting) recipeholder.value()).assemble(craftinginput, worldserver.registryAccess());
|
||||||
|
}).orElse(ItemStack.EMPTY);
|
||||||
|
+ itemstack = org.bukkit.craftbukkit.event.CraftEventFactory.callPreCraftEvent(this.container, this.resultContainer, itemstack, this.getBukkitView(), recipe); // CraftBukkit
|
||||||
|
|
||||||
|
this.resultContainer.setItem(0, itemstack);
|
||||||
|
}
|
||||||
|
@ -94,7 +94,6 @@ import net.minecraft.world.item.Item;
|
|||||||
import net.minecraft.world.item.ItemWorldMap;
|
import net.minecraft.world.item.ItemWorldMap;
|
||||||
import net.minecraft.world.item.crafting.RecipeCrafting;
|
import net.minecraft.world.item.crafting.RecipeCrafting;
|
||||||
import net.minecraft.world.item.crafting.RecipeHolder;
|
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||||
import net.minecraft.world.item.crafting.RecipeRepair;
|
|
||||||
import net.minecraft.world.item.crafting.Recipes;
|
import net.minecraft.world.item.crafting.Recipes;
|
||||||
import net.minecraft.world.level.EnumGamemode;
|
import net.minecraft.world.level.EnumGamemode;
|
||||||
import net.minecraft.world.level.GameRules;
|
import net.minecraft.world.level.GameRules;
|
||||||
@ -1475,7 +1474,7 @@ public final class CraftServer implements Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Call Bukkit event to check for matrix/result changes.
|
// Call Bukkit event to check for matrix/result changes.
|
||||||
net.minecraft.world.item.ItemStack result = CraftEventFactory.callPreCraftEvent(inventoryCrafting, craftResult, itemstack, container.getBukkitView(), recipe.map(RecipeHolder::value).orElse(null) instanceof RecipeRepair);
|
net.minecraft.world.item.ItemStack result = CraftEventFactory.callPreCraftEvent(inventoryCrafting, craftResult, itemstack, container.getBukkitView(), recipe);
|
||||||
|
|
||||||
return createItemCraftResult(recipe, CraftItemStack.asBukkitCopy(result), inventoryCrafting, craftWorld.getHandle());
|
return createItemCraftResult(recipe, CraftItemStack.asBukkitCopy(result), inventoryCrafting, craftWorld.getHandle());
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import java.util.Collections;
|
|||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@ -64,6 +65,7 @@ import net.minecraft.world.item.Items;
|
|||||||
import net.minecraft.world.item.context.ItemActionContext;
|
import net.minecraft.world.item.context.ItemActionContext;
|
||||||
import net.minecraft.world.item.crafting.RecipeCrafting;
|
import net.minecraft.world.item.crafting.RecipeCrafting;
|
||||||
import net.minecraft.world.item.crafting.RecipeHolder;
|
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||||
|
import net.minecraft.world.item.crafting.RecipeRepair;
|
||||||
import net.minecraft.world.level.ChunkCoordIntPair;
|
import net.minecraft.world.level.ChunkCoordIntPair;
|
||||||
import net.minecraft.world.level.Explosion;
|
import net.minecraft.world.level.Explosion;
|
||||||
import net.minecraft.world.level.GeneratorAccess;
|
import net.minecraft.world.level.GeneratorAccess;
|
||||||
@ -1285,11 +1287,11 @@ public class CraftEventFactory {
|
|||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack callPreCraftEvent(InventoryCrafting matrix, IInventory resultInventory, ItemStack result, InventoryView lastCraftView, boolean isRepair) {
|
public static ItemStack callPreCraftEvent(InventoryCrafting matrix, IInventory resultInventory, ItemStack result, InventoryView lastCraftView, Optional<RecipeHolder<RecipeCrafting>> recipe) {
|
||||||
CraftInventoryCrafting inventory = new CraftInventoryCrafting(matrix, resultInventory);
|
CraftInventoryCrafting inventory = new CraftInventoryCrafting(matrix, resultInventory);
|
||||||
inventory.setResult(CraftItemStack.asCraftMirror(result));
|
inventory.setResult(CraftItemStack.asCraftMirror(result));
|
||||||
|
|
||||||
PrepareItemCraftEvent event = new PrepareItemCraftEvent(inventory, lastCraftView, isRepair);
|
PrepareItemCraftEvent event = new PrepareItemCraftEvent(inventory, lastCraftView, recipe.map(RecipeHolder::value).orElse(null) instanceof RecipeRepair);
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
org.bukkit.inventory.ItemStack bitem = event.getInventory().getResult();
|
org.bukkit.inventory.ItemStack bitem = event.getInventory().getResult();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user