PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/thaumic/tinkerer/common/block/BlockRPlacer.java

https://gitlab.com/MineYourMind/ThaumicTinkerer
Java | 194 lines | 153 code | 38 blank | 3 comment | 18 complexity | c52dc4d5828dc67d26a552e2903dc923 MD5 | raw file
  1. package thaumic.tinkerer.common.block;
  2. import net.minecraft.block.Block;
  3. import net.minecraft.block.BlockPistonBase;
  4. import net.minecraft.block.material.Material;
  5. import net.minecraft.client.renderer.texture.IIconRegister;
  6. import net.minecraft.entity.EntityLivingBase;
  7. import net.minecraft.entity.player.EntityPlayer;
  8. import net.minecraft.init.Blocks;
  9. import net.minecraft.init.Items;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.tileentity.TileEntity;
  12. import net.minecraft.util.IIcon;
  13. import net.minecraft.world.IBlockAccess;
  14. import net.minecraft.world.World;
  15. import thaumcraft.api.aspects.Aspect;
  16. import thaumcraft.api.aspects.AspectList;
  17. import thaumcraft.api.research.ResearchPage;
  18. import thaumcraft.api.wands.IWandable;
  19. import thaumcraft.common.config.ConfigBlocks;
  20. import thaumcraft.common.config.ConfigItems;
  21. import thaumic.tinkerer.client.core.helper.IconHelper;
  22. import thaumic.tinkerer.common.ThaumicTinkerer;
  23. import thaumic.tinkerer.common.block.tile.TileCamo;
  24. import thaumic.tinkerer.common.block.tile.TileRPlacer;
  25. import thaumic.tinkerer.common.lib.LibBlockNames;
  26. import thaumic.tinkerer.common.lib.LibGuiIDs;
  27. import thaumic.tinkerer.common.lib.LibResearch;
  28. import thaumic.tinkerer.common.registry.ThaumicTinkererArcaneRecipe;
  29. import thaumic.tinkerer.common.registry.ThaumicTinkererRecipe;
  30. import thaumic.tinkerer.common.research.IRegisterableResearch;
  31. import thaumic.tinkerer.common.research.ResearchHelper;
  32. import thaumic.tinkerer.common.research.TTResearchItem;
  33. import java.util.ArrayList;
  34. import java.util.Random;
  35. /**
  36. * Created by nekosune on 28/06/14.
  37. */
  38. public class BlockRPlacer extends BlockCamo implements IWandable {
  39. IIcon[] icons = new IIcon[2];
  40. public BlockRPlacer() {
  41. super(Material.rock);
  42. }
  43. @Override
  44. public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
  45. TileEntity tile = par1World.getTileEntity(par2, par3, par4);
  46. TileRPlacer dislocator = (TileRPlacer) tile;
  47. ItemStack currentStack = par5EntityPlayer.getCurrentEquippedItem();
  48. if (currentStack != null && currentStack.getItem() == ConfigItems.itemWandCasting) {
  49. dislocator.orientation = par6;
  50. par1World.playSoundEffect(par2, par3, par4, "thaumcraft:tool", 0.6F, 1F);
  51. par1World.markBlockForUpdate(par2, par3, par4);
  52. return true;
  53. }
  54. return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
  55. }
  56. @Override
  57. public Class<? extends TileEntity> getTileEntity() {
  58. return TileRPlacer.class;
  59. }
  60. @Override
  61. public void registerBlockIcons(IIconRegister par1IconRegister) {
  62. icons[0] = IconHelper.forBlock(par1IconRegister, this, 0);
  63. icons[1] = IconHelper.forBlock(par1IconRegister, this, 1);
  64. }
  65. @Override
  66. public TileCamo createNewTileEntity(World world, int var2) {
  67. return new TileRPlacer();
  68. }
  69. @Override
  70. public ArrayList<Object> getSpecialParameters() {
  71. return null;
  72. }
  73. @Override
  74. public String getBlockName() {
  75. return LibBlockNames.REMOTE_PLACER;
  76. }
  77. @Override
  78. public boolean shouldRegister() {
  79. return false;
  80. }
  81. @Override
  82. public boolean shouldDisplayInTab() {
  83. return true;
  84. }
  85. @Override
  86. public IRegisterableResearch getResearchItem() {
  87. return (IRegisterableResearch) new TTResearchItem(LibResearch.KEY_REMOTE_PLACER, new AspectList().add(Aspect.MECHANISM, 2).add(Aspect.MOTION, 1).add(Aspect.SENSES, 1), -6, 3, 3, new ItemStack(this)).setParents(LibResearch.KEY_ANIMATION_TABLET).setConcealed()
  88. .setPages(new ResearchPage("0"), new ResearchPage("1"), ResearchHelper.arcaneRecipePage(LibResearch.KEY_REMOTE_PLACER));
  89. }
  90. @Override
  91. public ThaumicTinkererRecipe getRecipeItem() {
  92. return new ThaumicTinkererArcaneRecipe(LibResearch.KEY_REMOTE_PLACER, LibResearch.KEY_REMOTE_PLACER, new ItemStack(this), new AspectList().add(Aspect.AIR, 20).add(Aspect.ORDER, 5).add(Aspect.EARTH, 15).add(Aspect.ENTROPY, 5), "ses", "sds", "sss", 's', ConfigBlocks.blockStoneDevice, 'e', Items.ender_pearl, 'd', Blocks.dispenser);
  93. }
  94. @Override
  95. public IIcon getIcon(int par1, int par2) {
  96. return icons[0];
  97. }
  98. @Override
  99. public IIcon getIconFromSideAfterCheck(TileEntity tile, int meta, int side) {
  100. return icons[((TileRPlacer) tile).orientation == side ? 1 : 0];
  101. }
  102. @Override
  103. public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack) {
  104. TileEntity tile = par1World.getTileEntity(par2, par3, par4);
  105. ((TileRPlacer) tile).orientation = BlockPistonBase.determineOrientation(par1World, par2, par3, par4, par5EntityLivingBase);
  106. par1World.markBlockForUpdate(par2, par3, par4);
  107. }
  108. @Override
  109. public int onWandRightClick(World world, ItemStack itemStack, EntityPlayer entityPlayer, int i, int i2, int i3, int i4, int i5) {
  110. if (!world.isRemote) {
  111. if (entityPlayer.isSneaking()) {
  112. entityPlayer.openGui(ThaumicTinkerer.instance, LibGuiIDs.GUI_ID_REMOTE_PLACER, world, i, i2, i3);
  113. }
  114. }
  115. return 0;
  116. }
  117. @Override
  118. public ItemStack onWandRightClick(World world, ItemStack itemStack, EntityPlayer entityPlayer) {
  119. return itemStack;
  120. }
  121. @Override
  122. public void onUsingWandTick(ItemStack itemStack, EntityPlayer entityPlayer, int i) {
  123. }
  124. @Override
  125. public void onWandStoppedUsing(ItemStack itemStack, World world, EntityPlayer entityPlayer, int i) {
  126. }
  127. @Override
  128. public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block par5) {
  129. if (par1World.isRemote)
  130. return;
  131. boolean power = par1World.isBlockIndirectlyGettingPowered(par2, par3, par4) || par1World.isBlockIndirectlyGettingPowered(par2, par3 + 1, par4);
  132. int meta = par1World.getBlockMetadata(par2, par3, par4);
  133. boolean on = meta != 0;
  134. if (power && !on) {
  135. par1World.scheduleBlockUpdate(par2, par3, par4, this, tickRate(par1World));
  136. par1World.setBlockMetadataWithNotify(par2, par3, par4, 1, 4);
  137. } else if (!power && on)
  138. par1World.setBlockMetadataWithNotify(par2, par3, par4, 0, 4);
  139. }
  140. @Override
  141. public int tickRate(World par1World) {
  142. return 1;
  143. }
  144. @Override
  145. public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side) {
  146. return true;
  147. }
  148. @Override
  149. public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) {
  150. TileEntity tile = par1World.getTileEntity(par2, par3, par4);
  151. if (tile != null && tile instanceof TileRPlacer) {
  152. TileRPlacer placer = (TileRPlacer) tile;
  153. placer.receiveRedstonePulse();
  154. }
  155. }
  156. }