SPIGOT-8014: Add method for getting and setting remaining items in CrafterCraftEvent
This commit is contained in:
parent
42a4fa96f0
commit
1bd27f7985
@ -21,7 +21,7 @@
|
|||||||
ItemStack itemstack = ((RecipeCrafting) recipeholder.value()).assemble(craftinginput, worldserver.registryAccess());
|
ItemStack itemstack = ((RecipeCrafting) recipeholder.value()).assemble(craftinginput, worldserver.registryAccess());
|
||||||
|
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ CrafterCraftEvent event = CraftEventFactory.callCrafterCraftEvent(blockposition, worldserver, crafterblockentity, itemstack, recipeholder);
|
+ CrafterCraftEvent event = CraftEventFactory.callCrafterCraftEvent(blockposition, worldserver, crafterblockentity, itemstack, recipeholder.value().getRemainingItems(craftinginput), recipeholder);
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
@ -30,6 +30,15 @@
|
|||||||
if (itemstack.isEmpty()) {
|
if (itemstack.isEmpty()) {
|
||||||
worldserver.levelEvent(1050, blockposition, 0);
|
worldserver.levelEvent(1050, blockposition, 0);
|
||||||
} else {
|
} else {
|
||||||
|
@@ -196,7 +212,7 @@
|
||||||
|
worldserver.setBlock(blockposition, (IBlockData) iblockdata.setValue(CrafterBlock.CRAFTING, true), 2);
|
||||||
|
itemstack.onCraftedBySystem(worldserver);
|
||||||
|
this.dispenseItem(worldserver, blockposition, crafterblockentity, itemstack, iblockdata, recipeholder);
|
||||||
|
- Iterator iterator = ((RecipeCrafting) recipeholder.value()).getRemainingItems(craftinginput).iterator();
|
||||||
|
+ Iterator<ItemStack> iterator = event.getRemainingItems().stream().map(CraftItemStack::asNMSCopy).iterator(); // CraftBukkit
|
||||||
|
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
ItemStack itemstack1 = (ItemStack) iterator.next();
|
||||||
@@ -227,7 +243,25 @@
|
@@ -227,7 +243,25 @@
|
||||||
ItemStack itemstack1 = itemstack.copy();
|
ItemStack itemstack1 = itemstack.copy();
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import java.util.stream.Stream;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import net.minecraft.core.BlockPosition;
|
import net.minecraft.core.BlockPosition;
|
||||||
import net.minecraft.core.EnumDirection;
|
import net.minecraft.core.EnumDirection;
|
||||||
|
import net.minecraft.core.NonNullList;
|
||||||
import net.minecraft.network.protocol.game.PacketPlayInCloseWindow;
|
import net.minecraft.network.protocol.game.PacketPlayInCloseWindow;
|
||||||
import net.minecraft.resources.MinecraftKey;
|
import net.minecraft.resources.MinecraftKey;
|
||||||
import net.minecraft.server.level.EntityPlayer;
|
import net.minecraft.server.level.EntityPlayer;
|
||||||
@ -1299,12 +1300,13 @@ public class CraftEventFactory {
|
|||||||
return CraftItemStack.asNMSCopy(bitem);
|
return CraftItemStack.asNMSCopy(bitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CrafterCraftEvent callCrafterCraftEvent(BlockPosition pos, World world, InventoryCrafting inventoryCrafting, ItemStack result, RecipeHolder<RecipeCrafting> holder) {
|
public static CrafterCraftEvent callCrafterCraftEvent(BlockPosition pos, World world, InventoryCrafting inventoryCrafting, ItemStack result, NonNullList<ItemStack> remaining, RecipeHolder<RecipeCrafting> holder) {
|
||||||
CraftBlock block = CraftBlock.at(world, pos);
|
CraftBlock block = CraftBlock.at(world, pos);
|
||||||
CraftItemStack itemStack = CraftItemStack.asCraftMirror(result);
|
CraftItemStack itemStack = CraftItemStack.asCraftMirror(result);
|
||||||
CraftingRecipe craftingRecipe = (CraftingRecipe) holder.toBukkitRecipe();
|
CraftingRecipe craftingRecipe = (CraftingRecipe) holder.toBukkitRecipe();
|
||||||
|
List<org.bukkit.inventory.ItemStack> bukkitRemaining = remaining.stream().map(CraftItemStack::asCraftMirror).collect(Collectors.toCollection(ArrayList::new));
|
||||||
|
|
||||||
CrafterCraftEvent crafterCraftEvent = new CrafterCraftEvent(block, craftingRecipe, itemStack);
|
CrafterCraftEvent crafterCraftEvent = new CrafterCraftEvent(block, craftingRecipe, itemStack, bukkitRemaining);
|
||||||
Bukkit.getPluginManager().callEvent(crafterCraftEvent);
|
Bukkit.getPluginManager().callEvent(crafterCraftEvent);
|
||||||
return crafterCraftEvent;
|
return crafterCraftEvent;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user