mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-23 21:38:00 +01:00
Split tomato plants and sticks into separate blocks
This commit is contained in:
parent
90635394a3
commit
503c1c9eea
6 changed files with 118 additions and 28 deletions
|
@ -0,0 +1,91 @@
|
||||||
|
package com.minelittlepony.unicopia.block;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import com.minelittlepony.unicopia.init.UItems;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.IBlockAccess;
|
||||||
|
import net.minecraftforge.common.EnumPlantType;
|
||||||
|
import net.minecraftforge.common.IPlantable;
|
||||||
|
|
||||||
|
public class BlockStick extends Block implements IPlantable {
|
||||||
|
|
||||||
|
static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(
|
||||||
|
7/16F, -1/16F, 7/16F,
|
||||||
|
9/16F, 15/16F, 9/16F
|
||||||
|
);
|
||||||
|
|
||||||
|
public BlockStick(String domain, String name) {
|
||||||
|
super(Material.PLANTS);
|
||||||
|
|
||||||
|
setRegistryName(domain, name);
|
||||||
|
setTranslationKey(name);
|
||||||
|
setHardness(0.2F);
|
||||||
|
setSoundType(SoundType.WOOD);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOpaqueCube(IBlockState state) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public boolean isFullCube(IBlockState state) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
|
||||||
|
return BOUNDING_BOX.offset(state.getOffset(source, pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) {
|
||||||
|
return state.getBoundingBox(world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EnumOffsetType getOffsetType() {
|
||||||
|
return EnumOffsetType.XZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
|
||||||
|
return UItems.stick;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canSustainPlant(IBlockAccess world, BlockPos pos, IPlantable plantable) {
|
||||||
|
|
||||||
|
pos = pos.down();
|
||||||
|
|
||||||
|
IBlockState state = world.getBlockState(pos);
|
||||||
|
Block block = state.getBlock();
|
||||||
|
|
||||||
|
if (block instanceof BlockStick) {
|
||||||
|
return ((BlockStick)block).canSustainPlant(world, pos, plantable);
|
||||||
|
}
|
||||||
|
|
||||||
|
return block.canSustainPlant(state, world, pos, EnumFacing.UP, plantable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {
|
||||||
|
return EnumPlantType.Crop;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IBlockState getPlant(IBlockAccess world, BlockPos pos) {
|
||||||
|
return getDefaultState();
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import java.util.Random;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.init.UItems;
|
import com.minelittlepony.unicopia.init.UItems;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockCrops;
|
import net.minecraft.block.BlockCrops;
|
||||||
import net.minecraft.block.SoundType;
|
import net.minecraft.block.SoundType;
|
||||||
import net.minecraft.block.properties.PropertyEnum;
|
import net.minecraft.block.properties.PropertyEnum;
|
||||||
|
@ -30,11 +31,6 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
|
|
||||||
public static final PropertyEnum<Type> TYPE = PropertyEnum.create("type", Type.class);
|
public static final PropertyEnum<Type> TYPE = PropertyEnum.create("type", Type.class);
|
||||||
|
|
||||||
private static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(
|
|
||||||
7/16F, -1/16F, 7/16F,
|
|
||||||
9/16F, 15/16F, 9/16F
|
|
||||||
);
|
|
||||||
|
|
||||||
public BlockTomatoPlant(String domain, String name) {
|
public BlockTomatoPlant(String domain, String name) {
|
||||||
setRegistryName(domain, name);
|
setRegistryName(domain, name);
|
||||||
setTranslationKey(name);
|
setTranslationKey(name);
|
||||||
|
@ -47,7 +43,7 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
|
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
|
||||||
return BOUNDING_BOX.offset(state.getOffset(source, pos));
|
return BlockStick.BOUNDING_BOX.offset(state.getOffset(source, pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -96,10 +92,6 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
|
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
|
||||||
if (getAge(state) == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkAndDropBlock(world, pos, state);
|
checkAndDropBlock(world, pos, state);
|
||||||
|
|
||||||
if (world.isAreaLoaded(pos, 1) && world.getLightFromNeighbors(pos.up()) >= 9) {
|
if (world.isAreaLoaded(pos, 1) && world.getLightFromNeighbors(pos.up()) >= 9) {
|
||||||
|
@ -108,7 +100,7 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
if (i < getMaxAge()) {
|
if (i < getMaxAge()) {
|
||||||
float f = getGrowthChance(this, world, pos);
|
float f = getGrowthChance(this, world, pos);
|
||||||
|
|
||||||
if(ForgeHooks.onCropsGrowPre(world, pos, state, rand.nextInt((int)(25 / f) + 1) == 0)) {
|
if (ForgeHooks.onCropsGrowPre(world, pos, state, rand.nextInt((int)(25 / f) + 1) == 0)) {
|
||||||
world.setBlockState(pos, state.withProperty(getAgeProperty(), i + 1), 2);
|
world.setBlockState(pos, state.withProperty(getAgeProperty(), i + 1), 2);
|
||||||
|
|
||||||
ForgeHooks.onCropsGrowPost(world, pos, state, world.getBlockState(pos));
|
ForgeHooks.onCropsGrowPost(world, pos, state, world.getBlockState(pos));
|
||||||
|
@ -117,11 +109,6 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) {
|
|
||||||
return getAge(state) > 0 && super.canGrow(worldIn, pos, state, isClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int quantityDropped(IBlockState state, int fortune, Random random) {
|
public int quantityDropped(IBlockState state, int fortune, Random random) {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -134,9 +121,6 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
|
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
|
||||||
if (getAge(state) == 0) {
|
|
||||||
return Items.AIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMaxAge(state)) {
|
if (isMaxAge(state)) {
|
||||||
return state.getValue(TYPE) == Type.CLOUDSDALE ? UItems.cloudsdale_tomato : UItems.tomato;
|
return state.getValue(TYPE) == Type.CLOUDSDALE ? UItems.cloudsdale_tomato : UItems.tomato;
|
||||||
|
@ -195,9 +179,11 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean plant(World world, BlockPos pos, IBlockState state) {
|
public boolean plant(World world, BlockPos pos, IBlockState state) {
|
||||||
if (getAge(state) == 0) {
|
Block block = state.getBlock();
|
||||||
|
|
||||||
world.setBlockState(pos, state.withProperty(getAgeProperty(), 1));
|
if (block instanceof BlockStick && ((BlockStick)block).canSustainPlant(world, pos, this)) {
|
||||||
|
|
||||||
|
world.setBlockState(pos, getPlacedState(world, pos, state).withProperty(getAgeProperty(), 1));
|
||||||
|
|
||||||
SoundType sound = getSoundType(state, world, pos, null);
|
SoundType sound = getSoundType(state, world, pos, null);
|
||||||
|
|
||||||
|
@ -217,7 +203,12 @@ public class BlockTomatoPlant extends BlockCrops {
|
||||||
return withAge(age).withProperty(TYPE, Type.values()[half]);
|
return withAge(age).withProperty(TYPE, Type.values()[half]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IBlockState getPlacedState(IBlockState state) {
|
public IBlockState getPlacedState(World world, BlockPos pos, IBlockState state) {
|
||||||
|
if (state.getBlock() instanceof BlockStick) {
|
||||||
|
pos = pos.down();
|
||||||
|
return getPlacedState(world, pos, world.getBlockState(pos));
|
||||||
|
}
|
||||||
|
|
||||||
if (state.getBlock() instanceof BlockCloudFarm) {
|
if (state.getBlock() instanceof BlockCloudFarm) {
|
||||||
return getDefaultState().withProperty(TYPE, Type.CLOUDSDALE);
|
return getDefaultState().withProperty(TYPE, Type.CLOUDSDALE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.minelittlepony.unicopia.block.BlockGlowingGem;
|
||||||
import com.minelittlepony.unicopia.block.BlockGrowingCuccoon;
|
import com.minelittlepony.unicopia.block.BlockGrowingCuccoon;
|
||||||
import com.minelittlepony.unicopia.block.BlockHiveWall;
|
import com.minelittlepony.unicopia.block.BlockHiveWall;
|
||||||
import com.minelittlepony.unicopia.block.BlockSlimeLayer;
|
import com.minelittlepony.unicopia.block.BlockSlimeLayer;
|
||||||
|
import com.minelittlepony.unicopia.block.BlockStick;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudAnvil;
|
import com.minelittlepony.unicopia.block.BlockCloudAnvil;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudBanister;
|
import com.minelittlepony.unicopia.block.BlockCloudBanister;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudSlab;
|
import com.minelittlepony.unicopia.block.BlockCloudSlab;
|
||||||
|
@ -70,6 +71,7 @@ public class UBlocks {
|
||||||
|
|
||||||
public static final BlockAlfalfa alfalfa = new BlockAlfalfa(Unicopia.MODID, "alfalfa");
|
public static final BlockAlfalfa alfalfa = new BlockAlfalfa(Unicopia.MODID, "alfalfa");
|
||||||
|
|
||||||
|
public static final BlockStick stick = new BlockStick(Unicopia.MODID, "stick");
|
||||||
public static final BlockTomatoPlant tomato_plant = new BlockTomatoPlant(Unicopia.MODID, "tomato_plant");
|
public static final BlockTomatoPlant tomato_plant = new BlockTomatoPlant(Unicopia.MODID, "tomato_plant");
|
||||||
|
|
||||||
public static final BlockCloudFarm cloud_farmland = new BlockCloudFarm(Unicopia.MODID, "cloud_farmland");
|
public static final BlockCloudFarm cloud_farmland = new BlockCloudFarm(Unicopia.MODID, "cloud_farmland");
|
||||||
|
@ -104,7 +106,7 @@ public class UBlocks {
|
||||||
anvil, cloud_farmland,
|
anvil, cloud_farmland,
|
||||||
sugar_block, flower_pot,
|
sugar_block, flower_pot,
|
||||||
alfalfa,
|
alfalfa,
|
||||||
tomato_plant,
|
stick, tomato_plant,
|
||||||
enchanted_torch,
|
enchanted_torch,
|
||||||
apple_tree, apple_leaves);
|
apple_tree, apple_leaves);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,9 +33,9 @@ public class ItemStick extends ItemSeeds {
|
||||||
ItemStack itemstack = player.getHeldItem(hand);
|
ItemStack itemstack = player.getHeldItem(hand);
|
||||||
IBlockState state = worldIn.getBlockState(pos);
|
IBlockState state = worldIn.getBlockState(pos);
|
||||||
|
|
||||||
if (facing == EnumFacing.UP && player.canPlayerEdit(pos.offset(facing), facing, itemstack) && state.getBlock().canSustainPlant(state, worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up())) {
|
if (facing == EnumFacing.UP && player.canPlayerEdit(pos.offset(facing), facing, itemstack) && worldIn.isAirBlock(pos.up())) {
|
||||||
|
|
||||||
worldIn.setBlockState(pos.up(), UBlocks.tomato_plant.getPlacedState(state));
|
worldIn.setBlockState(pos.up(), UBlocks.stick.getDefaultState());
|
||||||
|
|
||||||
SoundType sound = state.getBlock().getSoundType(state, worldIn, pos, player);
|
SoundType sound = state.getBlock().getSoundType(state, worldIn, pos, player);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.minelittlepony.unicopia.item;
|
package com.minelittlepony.unicopia.item;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.block.BlockTomatoPlant;
|
import com.minelittlepony.unicopia.block.BlockStick;
|
||||||
|
import com.minelittlepony.unicopia.init.UBlocks;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
@ -28,8 +29,8 @@ public class ItemTomatoSeeds extends Item {
|
||||||
|
|
||||||
Block block = state.getBlock();
|
Block block = state.getBlock();
|
||||||
|
|
||||||
if (block instanceof BlockTomatoPlant) {
|
if (block instanceof BlockStick) {
|
||||||
if (((BlockTomatoPlant)block).plant(world, pos, state)) {
|
if (UBlocks.tomato_plant.plant(world, pos, state)) {
|
||||||
if (!player.capabilities.isCreativeMode) {
|
if (!player.capabilities.isCreativeMode) {
|
||||||
player.getHeldItem(hand).shrink(1);
|
player.getHeldItem(hand).shrink(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"normal": { "model": "unicopia:tomato_plant/stage0" }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue