diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index d77d9ba3..47f8803e 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -288,6 +288,7 @@ public class Constants DEMON_CRYSTAL("BlockDemonCrystal"), DIMENSIONAL_PORTAL("BlockDimensionalPortal"), BLOOD_TANK("BlockBloodTank"), + MIMIC("BlockMimic"), ALCHEMY_TABLE("BlockAlchemyTable"); @Getter diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java b/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java new file mode 100644 index 00000000..53267877 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java @@ -0,0 +1,132 @@ +package WayofTime.bloodmagic.block; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +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.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.block.base.BlockStringContainer; +import WayofTime.bloodmagic.client.IVariantProvider; +import WayofTime.bloodmagic.tile.TileMimic; +import WayofTime.bloodmagic.util.Utils; + +public class BlockMimic extends BlockStringContainer implements IVariantProvider +{ + public static final String[] names = { "nohitbox" }; + + public BlockMimic() + { + super(Material.ROCK, names); + + setUnlocalizedName(Constants.Mod.MODID + ".mimic."); + setCreativeTab(BloodMagic.tabBloodMagic); + setHardness(2.0F); + setResistance(5.0F); + setSoundType(SoundType.STONE); + setHarvestLevel("pickaxe", 0); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) + { + return NULL_AABB; + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileMimic mimic = (TileMimic) world.getTileEntity(pos); + + if (mimic == null || player.isSneaking()) + return false; + + Utils.insertItemToTile(mimic, player); + + world.notifyBlockUpdate(pos, state, state, 3); + return true; + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileMimic) + { + TileMimic mimic = (TileMimic) tile; + ItemStack stack = mimic.getStackInSlot(0); + if (stack != null && stack.getItem() instanceof ItemBlock) + { + Block block = ((ItemBlock) stack.getItem()).getBlock(); + IBlockState mimicState = block.getStateFromMeta(stack.getItemDamage()); + return mimicState; + } + } + return state; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) + { + return false; + } + + @Override + public boolean isVisuallyOpaque() + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return layer == BlockRenderLayer.CUTOUT_MIPPED || layer == BlockRenderLayer.TRANSLUCENT; + } + + @Override + public List> getVariants() + { + List> ret = new ArrayList>(); + for (int i = 0; i < names.length; i++) + ret.add(new ImmutablePair(i, "type=" + names[i])); + return ret; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileMimic(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java new file mode 100644 index 00000000..ad8bf900 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java @@ -0,0 +1,27 @@ +package WayofTime.bloodmagic.item.block; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.block.BlockMimic; + +public class ItemBlockMimic extends ItemBlock +{ + public ItemBlockMimic(Block block) + { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName(stack) + BlockMimic.names[stack.getItemDamage()]; + } + + @Override + public int getMetadata(int meta) + { + return meta; + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 017977da..4021181a 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -28,6 +28,7 @@ import WayofTime.bloodmagic.block.BlockInputRoutingNode; import WayofTime.bloodmagic.block.BlockItemRoutingNode; import WayofTime.bloodmagic.block.BlockLifeEssence; import WayofTime.bloodmagic.block.BlockMasterRoutingNode; +import WayofTime.bloodmagic.block.BlockMimic; import WayofTime.bloodmagic.block.BlockOutputRoutingNode; import WayofTime.bloodmagic.block.BlockPath; import WayofTime.bloodmagic.block.BlockPedestal; @@ -43,6 +44,7 @@ import WayofTime.bloodmagic.item.block.ItemBlockBloodStoneBrick; import WayofTime.bloodmagic.item.block.ItemBlockBloodTank; import WayofTime.bloodmagic.item.block.ItemBlockCrystal; import WayofTime.bloodmagic.item.block.ItemBlockDemonCrystal; +import WayofTime.bloodmagic.item.block.ItemBlockMimic; import WayofTime.bloodmagic.item.block.ItemBlockPath; import WayofTime.bloodmagic.item.block.ItemBlockPedestal; import WayofTime.bloodmagic.item.block.ItemBlockRitualController; @@ -60,6 +62,7 @@ import WayofTime.bloodmagic.tile.TileDimensionalPortal; import WayofTime.bloodmagic.tile.TileImperfectRitualStone; import WayofTime.bloodmagic.tile.TileIncenseAltar; import WayofTime.bloodmagic.tile.TileMasterRitualStone; +import WayofTime.bloodmagic.tile.TileMimic; import WayofTime.bloodmagic.tile.TilePhantomBlock; import WayofTime.bloodmagic.tile.TilePlinth; import WayofTime.bloodmagic.tile.TileSoulForge; @@ -108,6 +111,8 @@ public class ModBlocks public static Block dimensionalPortal; public static Block bloodTank; + public static Block mimic; + public static void init() { FluidRegistry.registerFluid(BlockLifeEssence.getLifeEssence()); @@ -143,6 +148,8 @@ public class ModBlocks dimensionalPortal = registerBlock(new BlockDimensionalPortal(), Constants.BloodMagicBlock.DIMENSIONAL_PORTAL.getRegName()); bloodTank = registerBlock(new ItemBlockBloodTank(new BlockBloodTank()), Constants.BloodMagicBlock.BLOOD_TANK.getRegName()); + mimic = registerBlock(new ItemBlockMimic(new BlockMimic()), Constants.BloodMagicBlock.MIMIC.getRegName()); + // testSpellBlock = registerBlock(new BlockTestSpellBlock()); BloodMagicAPI.addToTeleposerBlacklist(inputRoutingNode); @@ -181,6 +188,7 @@ public class ModBlocks GameRegistry.registerTileEntity(TileDimensionalPortal.class, Constants.Mod.MODID + ":" + TileDimensionalPortal.class.getSimpleName()); GameRegistry.registerTileEntity(TileBloodTank.class, Constants.Mod.MODID + ":" + TileBloodTank.class.getSimpleName()); + GameRegistry.registerTileEntity(TileMimic.class, Constants.Mod.MODID + ":" + TileMimic.class.getSimpleName()); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java new file mode 100644 index 00000000..4b629921 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java @@ -0,0 +1,32 @@ +package WayofTime.bloodmagic.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class TileMimic extends TileInventory +{ + public TileMimic() + { + super(1, "mimic"); + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + super.readFromNBT(tagCompound); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + super.writeToNBT(tagCompound); + + return tagCompound; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack itemstack) + { + return slot == 0; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockMimic.json b/src/main/resources/assets/bloodmagic/blockstates/BlockMimic.json new file mode 100644 index 00000000..f6fd033a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockMimic.json @@ -0,0 +1,18 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { }, + "model": "cube_all", + "uvlock": true + }, + "variants": { + "type": { + "nohitbox": { + "textures": { + "all": "bloodmagic:blocks/LargeBloodStoneBrick" + } + } + } + } +} + diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 1fae2b36..9e201d3d 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -250,6 +250,8 @@ tile.BloodMagic.demonCrystalDESTRUCTIVE.name=Destructive Will Crystal Cluster tile.BloodMagic.demonCrystalVENGEFUL.name=Vengeful Will Crystal Cluster tile.BloodMagic.demonCrystalSTEADFAST.name=Steadfast Will Crystal Cluster +tile.BloodMagic.mimic.nohitbox.name=Ethereal Mimic Block + # Fluids fluid.lifeEssence=Life Essence