49 lines
2.1 KiB
Java
49 lines
2.1 KiB
Java
package com.thebrokenrail.slightlyvanilla.dispenser;
|
|
|
|
import com.thebrokenrail.slightlyvanilla.SlightlyVanilla;
|
|
import com.thebrokenrail.slightlyvanilla.entity.SpawnEggEntity;
|
|
import net.minecraft.block.DispenserBlock;
|
|
import net.minecraft.block.dispenser.DispenserBehavior;
|
|
import net.minecraft.block.dispenser.ItemDispenserBehavior;
|
|
import net.minecraft.block.dispenser.ProjectileDispenserBehavior;
|
|
import net.minecraft.entity.EntityType;
|
|
import net.minecraft.entity.SpawnType;
|
|
import net.minecraft.entity.projectile.ProjectileEntity;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.item.SpawnEggItem;
|
|
import net.minecraft.util.math.BlockPointer;
|
|
import net.minecraft.util.math.Direction;
|
|
import net.minecraft.util.math.Position;
|
|
import net.minecraft.world.World;
|
|
|
|
public class SpawnEggDispenserBehavior implements DispenserBehavior {
|
|
private static class Default extends ItemDispenserBehavior {
|
|
@Override
|
|
protected ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) {
|
|
Direction direction = pointer.getBlockState().get(DispenserBlock.FACING);
|
|
EntityType<?> entityType = ((SpawnEggItem)stack.getItem()).getEntityType(stack.getTag());
|
|
entityType.spawnFromItemStack(pointer.getWorld(), stack, null, pointer.getBlockPos().offset(direction), SpawnType.DISPENSER, direction != Direction.UP, false);
|
|
stack.decrement(1);
|
|
return stack;
|
|
}
|
|
}
|
|
|
|
private static class Modified extends ProjectileDispenserBehavior {
|
|
@Override
|
|
protected ProjectileEntity createProjectile(World position, Position stack, ItemStack itemStack) {
|
|
SpawnEggEntity entity = new SpawnEggEntity(position, stack.getX(), stack.getY(), stack.getZ());
|
|
entity.setItem(itemStack);
|
|
return entity;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ItemStack dispense(BlockPointer pointer, ItemStack stack) {
|
|
if (SlightlyVanilla.getConfig().throwableSpawnEggs.dispenser) {
|
|
return new Modified().dispense(pointer, stack);
|
|
} else {
|
|
return new Default().dispense(pointer, stack);
|
|
}
|
|
}
|
|
}
|