mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-28 15:38:00 +01:00
123 lines
4.2 KiB
Java
123 lines
4.2 KiB
Java
package com.minelittlepony.unicopia.block;
|
|
|
|
import com.minelittlepony.unicopia.gas.CloudFarmlandBlock;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.block.Blocks;
|
|
import net.minecraft.block.CropBlock;
|
|
import net.minecraft.block.FarmlandBlock;
|
|
import net.minecraft.entity.EntityContext;
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemConvertible;
|
|
import net.minecraft.item.ItemPlacementContext;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.item.Items;
|
|
import net.minecraft.util.ActionResult;
|
|
import net.minecraft.util.Hand;
|
|
import net.minecraft.util.hit.BlockHitResult;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.math.Box;
|
|
import net.minecraft.util.math.Vec3d;
|
|
import net.minecraft.util.shape.VoxelShape;
|
|
import net.minecraft.util.shape.VoxelShapes;
|
|
import net.minecraft.world.BlockView;
|
|
import net.minecraft.world.World;
|
|
|
|
public class StickPlantBlock extends CropBlock {
|
|
|
|
private static final VoxelShape BOUNDING_BOX = VoxelShapes.cuboid(new Box(
|
|
7/16F, -1/16F, 7/16F,
|
|
9/16F, 15/16F, 9/16F
|
|
));
|
|
|
|
private final ItemConvertible seeds;
|
|
private final ItemConvertible crop;
|
|
private final ItemConvertible waste;
|
|
|
|
public StickPlantBlock(Settings settings, ItemConvertible seeds, ItemConvertible crop, ItemConvertible waste) {
|
|
super(settings);
|
|
this.seeds = seeds;
|
|
this.crop = crop;
|
|
this.waste = waste;
|
|
}
|
|
|
|
@Deprecated
|
|
@Override
|
|
public VoxelShape getOutlineShape(BlockState state, BlockView source, BlockPos pos, EntityContext context) {
|
|
Vec3d off = state.getOffsetPos(source, pos);
|
|
return BOUNDING_BOX.offset(off.x, off.y, off.z);
|
|
}
|
|
|
|
@Override
|
|
public Block.OffsetType getOffsetType() {
|
|
return Block.OffsetType.XZ;
|
|
}
|
|
|
|
@Override
|
|
public Item getSeedsItem() {
|
|
return seeds.asItem();
|
|
}
|
|
|
|
@Override
|
|
protected boolean canPlantOnTop(BlockState floor, BlockView view, BlockPos pos) {
|
|
Block block = floor.getBlock();
|
|
|
|
if (seeds.asItem() == Items.AIR) {
|
|
return block instanceof StickPlantBlock
|
|
|| block == Blocks.GRASS_BLOCK || block == Blocks.DIRT || block == Blocks.COARSE_DIRT
|
|
|| block == Blocks.PODZOL || block == Blocks.FARMLAND || block == UBlocks.CLOUD_FARMLAND;
|
|
}
|
|
return super.canPlantOnTop(floor, view, pos) || block == UBlocks.CLOUD_FARMLAND;
|
|
}
|
|
|
|
@Override
|
|
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
|
|
|
|
if (hand == Hand.MAIN_HAND && isMature(state)) {
|
|
if (player.getStackInHand(hand).isEmpty()) {
|
|
int good = getAge(state);
|
|
int rotten = world.random.nextInt(good);
|
|
|
|
good -= rotten;
|
|
|
|
if (good > 0) {
|
|
dropStack(world, pos, new ItemStack(crop.asItem(), good));
|
|
}
|
|
if (rotten > 0) {
|
|
dropStack(world, pos, new ItemStack(waste.asItem(), rotten));
|
|
}
|
|
|
|
world.setBlockState(pos, state.with(getAgeProperty(), 0));
|
|
|
|
return ActionResult.SUCCESS;
|
|
}
|
|
}
|
|
|
|
return ActionResult.PASS;
|
|
}
|
|
|
|
@Override
|
|
public void applyGrowth(World world, BlockPos pos, BlockState state) {
|
|
int age = Math.min(getAge(state) + getGrowthAmount(world), getMaxAge());
|
|
|
|
world.setBlockState(pos, state.with(getAgeProperty(), age), 2);
|
|
}
|
|
|
|
@Override
|
|
public BlockState getPlacementState(ItemPlacementContext context) {
|
|
return getPlacedState(context.getWorld(), context.getBlockPos().down(), context.getWorld().getBlockState(context.getBlockPos().down()));
|
|
}
|
|
|
|
public BlockState getPlacedState(World world, BlockPos pos, BlockState state) {
|
|
|
|
if (state.getBlock() instanceof CloudFarmlandBlock) {
|
|
return UBlocks.CLOUDSDALE_TOMATO_PLANT.getDefaultState();
|
|
}
|
|
if (state.getBlock() instanceof FarmlandBlock) {
|
|
return UBlocks.TOMATO_PLANT.getDefaultState();
|
|
}
|
|
|
|
return getDefaultState();
|
|
}
|
|
}
|