Water plants still suck
This commit is contained in:
parent
a3c211c953
commit
93aa27cd66
2 changed files with 9 additions and 90 deletions
|
@ -66,15 +66,15 @@ public class DoubleWaterPlantBlock extends DoublePlantBlock implements IWaterLog
|
|||
{
|
||||
if (state.get(HALF) != DoubleBlockHalf.UPPER)
|
||||
{
|
||||
BlockPos blockpos = pos.down();
|
||||
BlockPos posBelow = pos.down();
|
||||
Block existingBlock = worldIn.getBlockState(pos).getBlock();
|
||||
return (existingBlock == this || existingBlock.getMaterial(state) == Material.WATER) && worldIn.getBlockState(blockpos).func_224755_d(worldIn, blockpos, Direction.UP);
|
||||
return (existingBlock == this || existingBlock.getMaterial(state) == Material.WATER) && this.isExposed(worldIn, pos.up()) && worldIn.getBlockState(posBelow).func_224755_d(worldIn, posBelow, Direction.UP);
|
||||
}
|
||||
else
|
||||
{
|
||||
BlockState blockstate = worldIn.getBlockState(pos.down());
|
||||
if (state.getBlock() != this) return worldIn.isAirBlock(pos); // This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check.
|
||||
return blockstate.getBlock() == this && blockstate.get(HALF) == DoubleBlockHalf.LOWER && blockstate.get(WATERLOGGED);
|
||||
return this.isExposed(worldIn, pos) && blockstate.getBlock() == this && blockstate.get(HALF) == DoubleBlockHalf.LOWER && blockstate.get(WATERLOGGED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,4 +99,10 @@ public class DoubleWaterPlantBlock extends DoublePlantBlock implements IWaterLog
|
|||
public IFluidState getFluidState(BlockState state) {
|
||||
return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state);
|
||||
}
|
||||
|
||||
protected boolean isExposed(IWorldReader world, BlockPos pos)
|
||||
{
|
||||
BlockState state = world.getBlockState(pos);
|
||||
return state.getBlock() == this ? !state.get(WATERLOGGED) : world.isAirBlock(pos);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
package biomesoplenty.common.item;
|
||||
|
||||
import biomesoplenty.api.block.BOPBlocks;
|
||||
import net.minecraft.advancements.CriteriaTriggers;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.fluid.IFluidState;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.stats.Stats;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.RayTraceContext;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class WaterPlantItem extends BlockItem
|
||||
{
|
||||
public WaterPlantItem(Block blockIn, Item.Properties builder)
|
||||
{
|
||||
super(blockIn, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onItemUse(ItemUseContext context)
|
||||
{
|
||||
return ActionResultType.PASS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn)
|
||||
{
|
||||
ItemStack itemstack = playerIn.getHeldItem(handIn);
|
||||
RayTraceResult raytraceresult = rayTrace(worldIn, playerIn, RayTraceContext.FluidMode.SOURCE_ONLY);
|
||||
if (raytraceresult.getType() == RayTraceResult.Type.MISS) {
|
||||
return new ActionResult<>(ActionResultType.PASS, itemstack);
|
||||
} else {
|
||||
if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) {
|
||||
BlockRayTraceResult blockraytraceresult = (BlockRayTraceResult)raytraceresult;
|
||||
BlockPos blockpos = blockraytraceresult.getPos();
|
||||
Direction direction = blockraytraceresult.getFace();
|
||||
if (!worldIn.isBlockModifiable(playerIn, blockpos) || !playerIn.canPlayerEdit(blockpos.offset(direction), direction, itemstack)) {
|
||||
return new ActionResult<>(ActionResultType.FAIL, itemstack);
|
||||
}
|
||||
|
||||
BlockPos blockpos1 = blockpos.up();
|
||||
BlockState blockstate = worldIn.getBlockState(blockpos);
|
||||
Material material = blockstate.getMaterial();
|
||||
IFluidState ifluidstate = worldIn.getFluidState(blockpos);
|
||||
|
||||
Block ground = worldIn.getBlockState(blockpos.down()).getBlock();
|
||||
if ((ifluidstate.getFluid() == Fluids.WATER || material == Material.ICE) && worldIn.isAirBlock(blockpos1) && (ground == Blocks.DIORITE || ground == Blocks.GRANITE || ground == Blocks.ANDESITE || ground == Blocks.STONE || ground == Blocks.DIRT || ground == Blocks.COARSE_DIRT || ground == Blocks.GRASS_BLOCK || ground == Blocks.GRAVEL || ground == Blocks.SAND || ground == Blocks.RED_SAND || ground == BOPBlocks.white_sand || ground == BOPBlocks.mud || ground == BOPBlocks.dried_sand))
|
||||
{
|
||||
// special case for handling block placement with water lilies
|
||||
net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(worldIn, blockpos1);
|
||||
worldIn.setBlockState(blockpos1, this.getBlock().getDefaultState(), 11);
|
||||
if (net.minecraftforge.event.ForgeEventFactory.onBlockPlace(playerIn, blocksnapshot, net.minecraft.util.Direction.UP)) {
|
||||
blocksnapshot.restore(true, false);
|
||||
return new ActionResult<ItemStack>(ActionResultType.FAIL, itemstack);
|
||||
}
|
||||
|
||||
if (playerIn instanceof ServerPlayerEntity) {
|
||||
CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity)playerIn, blockpos1, itemstack);
|
||||
}
|
||||
|
||||
if (!playerIn.abilities.isCreativeMode) {
|
||||
itemstack.shrink(1);
|
||||
}
|
||||
|
||||
playerIn.addStat(Stats.ITEM_USED.get(this));
|
||||
worldIn.playSound(playerIn, blockpos, SoundEvents.BLOCK_LILY_PAD_PLACE, SoundCategory.BLOCKS, 1.0F, 1.0F);
|
||||
return new ActionResult<>(ActionResultType.SUCCESS, itemstack);
|
||||
}
|
||||
}
|
||||
|
||||
return new ActionResult<>(ActionResultType.FAIL, itemstack);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue