mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
parent
563ebec856
commit
63414033a6
@ -0,0 +1,120 @@
|
|||||||
|
package io.github.thebusybiscuit.slimefun4.api.events;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This {@link Event} is called when a {@link Player} crafts an item using a {@link MultiBlockMachine}.
|
||||||
|
* Unlike the {@link MultiBlockInteractEvent}, this event only fires if an output to a craft is expected.
|
||||||
|
* If this event is cancelled, ingredients will not be consumed and no output item results.
|
||||||
|
*
|
||||||
|
* @author char321
|
||||||
|
* @author JustAHuman
|
||||||
|
*/
|
||||||
|
public class MultiBlockCraftEvent extends PlayerEvent implements Cancellable {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
|
private final MultiBlockMachine machine;
|
||||||
|
private final ItemStack[] input;
|
||||||
|
private ItemStack output;
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link MultiBlockCraftEvent}.
|
||||||
|
*
|
||||||
|
* @param p The player that crafts using a multiblock
|
||||||
|
* @param machine The multiblock machine used to craft
|
||||||
|
* @param input The input items of the craft
|
||||||
|
* @param output The resulting item of the craft
|
||||||
|
*/
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
public MultiBlockCraftEvent(Player p, MultiBlockMachine machine, ItemStack[] input, ItemStack output) {
|
||||||
|
super(p);
|
||||||
|
this.machine = machine;
|
||||||
|
this.input = input;
|
||||||
|
this.output = output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link MultiBlockCraftEvent}.
|
||||||
|
*
|
||||||
|
* @param p The player that crafts using a multiblock
|
||||||
|
* @param machine The multiblock machine used to craft
|
||||||
|
* @param input The input item of the craft
|
||||||
|
* @param output The resulting item of the craft
|
||||||
|
*/
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
public MultiBlockCraftEvent(Player p, MultiBlockMachine machine, ItemStack input, ItemStack output) {
|
||||||
|
this(p, machine, new ItemStack[]{input}, output);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the machine that was used to craft.
|
||||||
|
*
|
||||||
|
* @return The {@link MultiBlockMachine} used to craft.
|
||||||
|
*/
|
||||||
|
public @Nonnull MultiBlockMachine getMachine() {
|
||||||
|
return machine;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the input of the craft.
|
||||||
|
*
|
||||||
|
* @return The {@link ItemStack ItemStack[]} input that is used in the craft.
|
||||||
|
*/
|
||||||
|
public @Nonnull ItemStack[] getInput() {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the output of the craft.
|
||||||
|
*
|
||||||
|
* @return The {@link ItemStack} output that results from the craft.
|
||||||
|
*/
|
||||||
|
public @Nonnull ItemStack getOutput() {
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the output of the craft. Keep in mind that this overwrites any existing output.
|
||||||
|
*
|
||||||
|
* @param output
|
||||||
|
* The new item for the event to produce.
|
||||||
|
*
|
||||||
|
* @return The previous {@link ItemStack} output that was replaced.
|
||||||
|
*/
|
||||||
|
public @Nullable ItemStack setOutput(@Nullable ItemStack output) {
|
||||||
|
ItemStack oldOutput = this.output;
|
||||||
|
this.output = output;
|
||||||
|
return oldOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancel) {
|
||||||
|
this.cancelled = cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @Nonnull HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nonnull HandlerList getHandlers() {
|
||||||
|
return getHandlerList();
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -14,6 +15,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.inventory.InvUtils;
|
import io.github.bakedlibs.dough.inventory.InvUtils;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
||||||
@ -48,12 +50,14 @@ abstract class AbstractSmeltery extends MultiBlockMachine {
|
|||||||
for (int i = 0; i < inputs.size(); i++) {
|
for (int i = 0; i < inputs.size(); i++) {
|
||||||
if (canCraft(inv, inputs, i)) {
|
if (canCraft(inv, inputs, i)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutputList(this, inputs.get(i)).clone();
|
ItemStack output = RecipeType.getRecipeOutputList(this, inputs.get(i)).clone();
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, inputs.get(i), output);
|
||||||
|
|
||||||
if (SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (!event.isCancelled() && SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
||||||
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
craft(p, b, inv, inputs.get(i), output, outputInv);
|
craft(p, b, inv, inputs.get(i), event.getOutput(), outputInv);
|
||||||
} else {
|
} else {
|
||||||
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -13,9 +14,9 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.slimefun4.core.services.sounds.SoundEffect;
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
import io.github.bakedlibs.dough.items.ItemUtils;
|
import io.github.bakedlibs.dough.items.ItemUtils;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
||||||
@ -43,9 +44,11 @@ public class ArmorForge extends AbstractCraftingTable {
|
|||||||
for (ItemStack[] input : inputs) {
|
for (ItemStack[] input : inputs) {
|
||||||
if (isCraftable(inv, input)) {
|
if (isCraftable(inv, input)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
|
||||||
if (SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
craft(p, output, inv, possibleDispenser);
|
if (!event.isCancelled() && SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
||||||
|
craft(p, event.getOutput(), inv, possibleDispenser);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -7,6 +7,7 @@ import java.util.Optional;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -18,6 +19,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import io.github.bakedlibs.dough.items.ItemUtils;
|
import io.github.bakedlibs.dough.items.ItemUtils;
|
||||||
import io.github.bakedlibs.dough.scheduling.TaskQueue;
|
import io.github.bakedlibs.dough.scheduling.TaskQueue;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
||||||
@ -74,6 +76,14 @@ public class AutomatedPanningMachine extends MultiBlockMachine {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack finalOutput = event.getOutput();
|
||||||
if (p.getGameMode() != GameMode.CREATIVE) {
|
if (p.getGameMode() != GameMode.CREATIVE) {
|
||||||
ItemUtils.consumeItem(input, false);
|
ItemUtils.consumeItem(input, false);
|
||||||
}
|
}
|
||||||
@ -82,13 +92,13 @@ public class AutomatedPanningMachine extends MultiBlockMachine {
|
|||||||
|
|
||||||
queue.thenRepeatEvery(20, 5, () -> b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, material));
|
queue.thenRepeatEvery(20, 5, () -> b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, material));
|
||||||
queue.thenRun(20, () -> {
|
queue.thenRun(20, () -> {
|
||||||
if (output.getType() != Material.AIR) {
|
if (finalOutput.getType() != Material.AIR) {
|
||||||
Optional<Inventory> outputChest = OutputChest.findOutputChestFor(b.getRelative(BlockFace.DOWN), output);
|
Optional<Inventory> outputChest = OutputChest.findOutputChestFor(b.getRelative(BlockFace.DOWN), output);
|
||||||
|
|
||||||
if (outputChest.isPresent()) {
|
if (outputChest.isPresent()) {
|
||||||
outputChest.get().addItem(output.clone());
|
outputChest.get().addItem(finalOutput.clone());
|
||||||
} else {
|
} else {
|
||||||
b.getWorld().dropItemNaturally(b.getLocation(), output.clone());
|
b.getWorld().dropItemNaturally(b.getLocation(), finalOutput.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
SoundEffect.AUTOMATED_PANNING_MACHINE_SUCCESS_SOUND.playAt(b);
|
SoundEffect.AUTOMATED_PANNING_MACHINE_SUCCESS_SOUND.playAt(b);
|
||||||
|
@ -6,6 +6,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -16,6 +17,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
||||||
@ -66,13 +68,19 @@ public class Compressor extends MultiBlockMachine {
|
|||||||
if (recipeInput != null && SlimefunUtils.isItemSimilar(item, recipeInput, true)) {
|
if (recipeInput != null && SlimefunUtils.isItemSimilar(item, recipeInput, true)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutput(this, recipeInput);
|
ItemStack output = RecipeType.getRecipeOutput(this, recipeInput);
|
||||||
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, item, output);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
ItemStack removing = item.clone();
|
ItemStack removing = item.clone();
|
||||||
removing.setAmount(recipeInput.getAmount());
|
removing.setAmount(recipeInput.getAmount());
|
||||||
inv.removeItem(removing);
|
inv.removeItem(removing);
|
||||||
|
|
||||||
craft(p, output, dispBlock, inv);
|
craft(p, event.getOutput(), dispBlock, inv);
|
||||||
} else {
|
} else {
|
||||||
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -13,8 +14,8 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.slimefun4.core.services.sounds.SoundEffect;
|
|
||||||
import io.github.bakedlibs.dough.items.ItemUtils;
|
import io.github.bakedlibs.dough.items.ItemUtils;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
@ -44,9 +45,11 @@ public class EnhancedCraftingTable extends AbstractCraftingTable {
|
|||||||
for (ItemStack[] input : inputs) {
|
for (ItemStack[] input : inputs) {
|
||||||
if (isCraftable(inv, input)) {
|
if (isCraftable(inv, input)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
|
||||||
if (SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
craft(inv, possibleDispenser, p, b, output);
|
if (!event.isCancelled() && SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
||||||
|
craft(inv, possibleDispenser, p, b, event.getOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -6,6 +6,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -16,6 +17,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
|
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
@ -126,12 +128,18 @@ public class GrindStone extends MultiBlockMachine {
|
|||||||
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutput(this, convert);
|
ItemStack output = RecipeType.getRecipeOutput(this, convert);
|
||||||
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, output);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
ItemStack removing = current.clone();
|
ItemStack removing = current.clone();
|
||||||
removing.setAmount(1);
|
removing.setAmount(1);
|
||||||
inv.removeItem(removing);
|
inv.removeItem(removing);
|
||||||
outputInv.addItem(output);
|
outputInv.addItem(event.getOutput());
|
||||||
SoundEffect.GRIND_STONE_INTERACT_SOUND.playAt(b);
|
SoundEffect.GRIND_STONE_INTERACT_SOUND.playAt(b);
|
||||||
} else {
|
} else {
|
||||||
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
||||||
|
@ -6,6 +6,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -17,6 +18,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
||||||
@ -62,12 +64,18 @@ public class Juicer extends MultiBlockMachine {
|
|||||||
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
||||||
ItemStack adding = RecipeType.getRecipeOutput(this, convert);
|
ItemStack adding = RecipeType.getRecipeOutput(this, convert);
|
||||||
Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv);
|
Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, adding);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
ItemStack removing = current.clone();
|
ItemStack removing = current.clone();
|
||||||
removing.setAmount(1);
|
removing.setAmount(1);
|
||||||
inv.removeItem(removing);
|
inv.removeItem(removing);
|
||||||
outputInv.addItem(adding);
|
outputInv.addItem(event.getOutput());
|
||||||
|
|
||||||
SoundEffect.JUICER_USE_SOUND.playAt(b);
|
SoundEffect.JUICER_USE_SOUND.playAt(b);
|
||||||
// Not changed since this is supposed to be a natural sound.
|
// Not changed since this is supposed to be a natural sound.
|
||||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -15,6 +16,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
@ -50,9 +52,11 @@ public class MagicWorkbench extends AbstractCraftingTable {
|
|||||||
for (ItemStack[] input : inputs) {
|
for (ItemStack[] input : inputs) {
|
||||||
if (isCraftable(inv, input)) {
|
if (isCraftable(inv, input)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
ItemStack output = RecipeType.getRecipeOutputList(this, input).clone();
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
|
||||||
if (SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
craft(inv, possibleDispener, p, b, output);
|
if (!event.isCancelled() && SlimefunUtils.canPlayerUseItem(p, output, true)) {
|
||||||
|
craft(inv, possibleDispener, p, b, event.getOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -7,6 +7,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -18,6 +19,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
|
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
||||||
@ -190,13 +192,15 @@ public class OreCrusher extends MultiBlockMachine {
|
|||||||
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
||||||
ItemStack adding = RecipeType.getRecipeOutput(this, convert);
|
ItemStack adding = RecipeType.getRecipeOutput(this, convert);
|
||||||
Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv);
|
Inventory outputInv = findOutputInventory(adding, possibleDispenser, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, adding);
|
||||||
|
|
||||||
if (SlimefunUtils.canPlayerUseItem(p, adding, true)) {
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (!event.isCancelled() && SlimefunUtils.canPlayerUseItem(p, adding, true)) {
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
ItemStack removing = current.clone();
|
ItemStack removing = current.clone();
|
||||||
removing.setAmount(convert.getAmount());
|
removing.setAmount(convert.getAmount());
|
||||||
inv.removeItem(removing);
|
inv.removeItem(removing);
|
||||||
outputInv.addItem(adding);
|
outputInv.addItem(event.getOutput());
|
||||||
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);
|
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);
|
||||||
} else {
|
} else {
|
||||||
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
||||||
|
@ -2,12 +2,12 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -18,6 +18,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
||||||
@ -84,8 +85,8 @@ public class OreWasher extends MultiBlockMachine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ItemStack> getDisplayRecipes() {
|
public @Nonnull List<ItemStack> getDisplayRecipes() {
|
||||||
return recipes.stream().map(items -> items[0]).collect(Collectors.toList());
|
return recipes.stream().map(items -> items[0]).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -93,15 +94,14 @@ public class OreWasher extends MultiBlockMachine {
|
|||||||
Block dispBlock = b.getRelative(BlockFace.UP);
|
Block dispBlock = b.getRelative(BlockFace.UP);
|
||||||
BlockState state = PaperLib.getBlockState(dispBlock, false).getState();
|
BlockState state = PaperLib.getBlockState(dispBlock, false).getState();
|
||||||
|
|
||||||
if (state instanceof Dispenser) {
|
if (state instanceof Dispenser disp) {
|
||||||
Dispenser disp = (Dispenser) state;
|
|
||||||
Inventory inv = disp.getInventory();
|
Inventory inv = disp.getInventory();
|
||||||
|
|
||||||
for (ItemStack input : inv.getContents()) {
|
for (ItemStack input : inv.getContents()) {
|
||||||
if (input != null) {
|
if (input != null) {
|
||||||
if (SlimefunUtils.isItemSimilar(input, SlimefunItems.SIFTED_ORE, true)) {
|
if (SlimefunUtils.isItemSimilar(input, SlimefunItems.SIFTED_ORE, true)) {
|
||||||
ItemStack output = getRandomDust();
|
ItemStack output = getRandomDust();
|
||||||
Inventory outputInv = null;
|
Inventory outputInv;
|
||||||
|
|
||||||
if (!legacyMode) {
|
if (!legacyMode) {
|
||||||
/*
|
/*
|
||||||
@ -119,7 +119,12 @@ public class OreWasher extends MultiBlockMachine {
|
|||||||
outputInv = findOutputInventory(output, dispBlock, inv);
|
outputInv = findOutputInventory(output, dispBlock, inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
removeItem(p, b, inv, outputInv, input, output, 1);
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(p, b, inv, outputInv, input, event.getOutput(), 1);
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
outputInv.addItem(SlimefunItems.STONE_CHUNK);
|
outputInv.addItem(SlimefunItems.STONE_CHUNK);
|
||||||
@ -130,14 +135,25 @@ public class OreWasher extends MultiBlockMachine {
|
|||||||
ItemStack output = SlimefunItems.SALT;
|
ItemStack output = SlimefunItems.SALT;
|
||||||
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
||||||
|
|
||||||
removeItem(p, b, inv, outputInv, input, output, 2);
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(p, b, inv, outputInv, input, event.getOutput(), 2);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else if (SlimefunUtils.isItemSimilar(input, SlimefunItems.PULVERIZED_ORE, true)) {
|
} else if (SlimefunUtils.isItemSimilar(input, SlimefunItems.PULVERIZED_ORE, true)) {
|
||||||
ItemStack output = SlimefunItems.PURE_ORE_CLUSTER;
|
ItemStack output = SlimefunItems.PURE_ORE_CLUSTER;
|
||||||
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
Inventory outputInv = findOutputInventory(output, dispBlock, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, input, output);
|
||||||
|
|
||||||
removeItem(p, b, inv, outputInv, input, output, 1);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(p, b, inv, outputInv, input, event.getOutput(), 1);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -17,6 +18,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.CustomItemStack;
|
import io.github.bakedlibs.dough.items.CustomItemStack;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
|
||||||
@ -51,13 +53,19 @@ public class PressureChamber extends MultiBlockMachine {
|
|||||||
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
if (convert != null && SlimefunUtils.isItemSimilar(current, convert, true)) {
|
||||||
ItemStack output = RecipeType.getRecipeOutput(this, convert);
|
ItemStack output = RecipeType.getRecipeOutput(this, convert);
|
||||||
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
Inventory outputInv = findOutputInventory(output, possibleDispenser, inv);
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, current, output);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (outputInv != null) {
|
if (outputInv != null) {
|
||||||
ItemStack removing = current.clone();
|
ItemStack removing = current.clone();
|
||||||
removing.setAmount(convert.getAmount());
|
removing.setAmount(convert.getAmount());
|
||||||
inv.removeItem(removing);
|
inv.removeItem(removing);
|
||||||
|
|
||||||
craft(p, b, output, inv, possibleDispenser);
|
craft(p, b, event.getOutput(), inv, possibleDispenser);
|
||||||
} else {
|
} else {
|
||||||
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
Slimefun.getLocalization().sendMessage(p, "machines.full-inventory", true);
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -19,6 +20,7 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.bakedlibs.dough.items.ItemUtils;
|
import io.github.bakedlibs.dough.items.ItemUtils;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockCraftEvent;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
|
||||||
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
|
||||||
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
|
||||||
@ -107,11 +109,18 @@ public class TableSaw extends MultiBlockMachine {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MultiBlockCraftEvent event = new MultiBlockCraftEvent(p, this, item, output);
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (p.getGameMode() != GameMode.CREATIVE) {
|
if (p.getGameMode() != GameMode.CREATIVE) {
|
||||||
ItemUtils.consumeItem(item, true);
|
ItemUtils.consumeItem(item, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
outputItems(b, output);
|
outputItems(b, event.getOutput());
|
||||||
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, item.getType());
|
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, item.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user