Work on mimics as well as some structure tinkering.

This commit is contained in:
WayofTime 2020-11-18 13:51:58 -05:00
parent 545b50ac82
commit 546215ab37
31 changed files with 1183 additions and 5 deletions

View file

@ -0,0 +1,133 @@
package wayoftime.bloodmagic.common.block;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import wayoftime.bloodmagic.tile.TileMimic;
public class BlockMimic extends Block
{
private static final VoxelShape SHAPE = VoxelShapes.create(0.01, 0, 0.01, 0.99, 1, 0.99);
public BlockMimic(Properties prop)
{
super(prop);
}
// @Override
// public void addInformation(ItemStack stack, @Nullable IBlockReader reader, List<ITextComponent> list, ITooltipFlag flags)
// {
// list.add(new TranslationTextComponent("message.fancyblock"));
// }
// @Override
// public int getLightValue(BlockState state, IBlockReader world, BlockPos pos)
// {
// TileEntity te = world.getTileEntity(pos);
// if (te instanceof TileMimic)
// {
// BlockState mimic = ((TileMimic) te).getMimic();
// if (mimic != null && !(mimic.getBlock() instanceof BlockMimic))
// {
// return mimic.getLightValue(world, pos);
// }
// }
// return super.getLightValue(state, world, pos);
// }
@Override
public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context)
{
TileEntity te = reader.getTileEntity(pos);
if (te instanceof TileMimic)
{
BlockState mimic = ((TileMimic) te).getMimic();
if (mimic != null && !(mimic.getBlock() instanceof BlockMimic))
{
return mimic.getShape(reader, pos, context);
}
}
return SHAPE;
}
@Override
public boolean hasTileEntity(BlockState state)
{
return true;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world)
{
return new TileMimic();
}
@Override
public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult trace)
{
TileMimic mimic = (TileMimic) world.getTileEntity(pos);
return (mimic != null && mimic.onBlockActivated(world, pos, state, player, hand, player.getHeldItem(hand), trace.getFace()))
? ActionResultType.SUCCESS
: ActionResultType.FAIL;
// ItemStack item = player.getHeldItem(hand);
// if (!item.isEmpty() && item.getItem() instanceof BlockItem)
// {
// if (!world.isRemote)
// {
// TileEntity te = world.getTileEntity(pos);
// if (te instanceof TileMimic)
// {
// BlockState mimicState = ((BlockItem) item.getItem()).getBlock().getDefaultState();
// ((TileMimic) te).setMimic(mimicState);
// }
// }
// return ActionResultType.SUCCESS;
// }
// return super.onBlockActivated(state, world, pos, player, hand, trace);
}
// public boolean canMimicBlock(World world, BlockPos pos, BlockState state)
// {
// return state.getBlock()
// }
@Override
public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState)
{
TileMimic altar = (TileMimic) world.getTileEntity(blockPos);
if (altar != null)
altar.dropItems();
super.onPlayerDestroy(world, blockPos, blockState);
}
@Override
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving)
{
if (!state.isIn(newState.getBlock()))
{
TileEntity tileentity = worldIn.getTileEntity(pos);
if (tileentity instanceof TileMimic)
{
((TileMimic) tileentity).dropItems();
}
super.onReplaced(state, worldIn, pos, newState, isMoving);
}
}
}

View file

@ -3,6 +3,7 @@ package wayoftime.bloodmagic.common.block;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.AbstractBlock.Properties;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FenceGateBlock;
import net.minecraft.block.FlowingFluidBlock;
import net.minecraft.block.RotatedPillarBlock;
@ -17,6 +18,8 @@ import net.minecraft.item.BucketItem;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fluids.FluidAttributes;
@ -98,6 +101,9 @@ public class BloodMagicBlocks
public static final RegistryObject<Block> OBSIDIAN_PATH = BASICBLOCKS.register("obsidianbrickpath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3)));
public static final RegistryObject<Block> OBSIDIAN_TILE_PATH = BASICBLOCKS.register("obsidiantilepath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3)));
public static final RegistryObject<Block> MIMIC = BLOCKS.register("mimic", () -> new BlockMimic(Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(2.0f).setOpaque(BloodMagicBlocks::isntSolid).setSuffocates(BloodMagicBlocks::isntSolid).setBlocksVision(BloodMagicBlocks::isntSolid).notSolid()));
public static final RegistryObject<Block> ETHEREAL_MIMIC = BLOCKS.register("ethereal_mimic", () -> new BlockMimic(Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(2.0f).setOpaque(BloodMagicBlocks::isntSolid).setSuffocates(BloodMagicBlocks::isntSolid).setBlocksVision(BloodMagicBlocks::isntSolid).notSolid().doesNotBlockMovement()));
private static ForgeFlowingFluid.Properties makeProperties()
{
return new ForgeFlowingFluid.Properties(LIFE_ESSENCE_FLUID, LIFE_ESSENCE_FLUID_FLOWING, FluidAttributes.builder(FLUID_STILL, FLUID_FLOWING)).bucket(LIFE_ESSENCE_BUCKET).block(LIFE_ESSENCE_BLOCK);
@ -142,6 +148,10 @@ public class BloodMagicBlocks
public static final RegistryObject<Block> DUNGEON_BRICK_GATE = BLOCKS.register("dungeon_brick_gate", () -> new FenceGateBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool()));
public static final RegistryObject<Block> DUNGEON_POLISHED_GATE = BLOCKS.register("dungeon_polished_gate", () -> new FenceGateBlock(Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).sound(SoundType.STONE).harvestTool(ToolType.PICKAXE).harvestLevel(2).setRequiresTool()));
private static boolean isntSolid(BlockState state, IBlockReader reader, BlockPos pos)
{
return false;
}
//
//// private static <T extends Block> RegistryObject<T> register(String name, Supplier<? extends T> sup, Function<RegistryObject<T>, Supplier<? extends Item>> itemCreator)
//// {