mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-02 20:06:43 +01:00
48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
|
package com.minelittlepony.unicopia.util;
|
||
|
|
||
|
import net.minecraft.block.dispenser.DispenserBehavior;
|
||
|
import net.minecraft.block.dispenser.ItemDispenserBehavior;
|
||
|
import net.minecraft.item.ItemStack;
|
||
|
import net.minecraft.util.ActionResult;
|
||
|
import net.minecraft.util.TypedActionResult;
|
||
|
import net.minecraft.util.math.BlockPointer;
|
||
|
import net.minecraft.util.math.Direction;
|
||
|
|
||
|
public interface Dispensable {
|
||
|
default DispenserBehavior createDispenserBehaviour() {
|
||
|
return new ItemDispenserBehavior() {
|
||
|
private ActionResult result;
|
||
|
@Override
|
||
|
protected ItemStack dispenseSilently(BlockPointer source, ItemStack stack) {
|
||
|
TypedActionResult<ItemStack> result = dispenseStack(source, stack);
|
||
|
this.result = result.getResult();
|
||
|
|
||
|
if (!this.result.isAccepted()) {
|
||
|
return super.dispenseSilently(source, stack);
|
||
|
}
|
||
|
|
||
|
return result.getValue();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void playSound(BlockPointer pointer) {
|
||
|
if (!result.isAccepted()) {
|
||
|
super.playSound(pointer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void spawnParticles(BlockPointer pointer, Direction side) {
|
||
|
if (!result.isAccepted()) {
|
||
|
super.spawnParticles(pointer, side);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Called to dispense this stack.
|
||
|
*/
|
||
|
TypedActionResult<ItemStack> dispenseStack(BlockPointer source, ItemStack stack);
|
||
|
}
|