Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2015
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.69 KB | None | 0 0
  1. package de.zootaxz.zevolution.common.block;
  2.  
  3.  
  4. import de.zootaxz.zevolution.ZCreativeTabs;
  5. import de.zootaxz.zevolution.ZRegistry;
  6. import de.zootaxz.zevolution.core.block.BlockBase;
  7. import de.zootaxz.zevolution.core.block.IBlockMeta;
  8. import de.zootaxz.zevolution.core.block.ItemBlock;
  9. import net.minecraft.block.material.Material;
  10. import net.minecraft.block.properties.IProperty;
  11. import net.minecraft.block.properties.PropertyEnum;
  12. import net.minecraft.block.state.BlockState;
  13. import net.minecraft.block.state.IBlockState;
  14. import net.minecraft.creativetab.CreativeTabs;
  15. import net.minecraft.entity.EntityLivingBase;
  16. import net.minecraft.item.Item;
  17. import net.minecraft.item.ItemStack;
  18. import net.minecraft.util.BlockPos;
  19. import net.minecraft.util.EnumFacing;
  20. import net.minecraft.util.EnumWorldBlockLayer;
  21. import net.minecraft.util.IStringSerializable;
  22. import net.minecraft.world.IBlockAccess;
  23. import net.minecraft.world.World;
  24. import net.minecraftforge.fml.relauncher.Side;
  25. import net.minecraftforge.fml.relauncher.SideOnly;
  26.  
  27. import java.util.List;
  28. import java.util.Random;
  29.  
  30. public class BlockOre extends BlockBase implements IBlockMeta{
  31.  
  32. public enum Variant implements IStringSerializable {
  33. UNKNOWN(0, "Unknown", 1, 1, 1, 1, 0xFF0000),
  34. MANGANESE(1, "Manganese", 5, 2, 1, 4, 0x635762),
  35. NICKEL(2, "Nickel", 5, 2, 1, 4, 0x747752),
  36. COBALT(3, "Cobalt", 5, 2, 1, 4, 0x170F87),
  37. TUNGSTEN(4, "Tungsten", 5, 2, 1, 4, 0x3C3B3A),
  38. MOLYBDENUM(5, "Molybdenum", 5, 2, 1, 4, 0xD2E2FF),
  39. VANADIUM(6, "Vanadium", 5, 2, 1, 4, 0xACF2A4),
  40. COPPER(7, "Copper", 5, 2, 1, 4, 0xF2BE6A),
  41. SILVER(8, "Silver", 5, 2, 1, 4, 0xEEEEEE),
  42. LEAD(9, "Lead", 5, 2, 1, 4, 0x97A1D0),
  43. TIN(10, "Tin", 5, 2, 1, 4, 0xD1D8BF),
  44. ZINC(11, "Zinc", 5, 2, 1, 4, 0xD0CCB4),
  45. ALUMINUM(12, "Aluminum", 5, 2, 1, 4, 0xBEBAB8),
  46. MAGNESIUM(13, "Magnesium", 5, 2, 1, 4, 0xAFB493),
  47. BERYLLIUM(14, "Beryllium", 5, 2, 1, 4, 0xACA351),
  48. LITHIUM(15, "Lithium", 5, 2, 1, 4, 0xF7D4B2),
  49. MITHRIL(16, "Mithril", 5, 2, 1, 4, 0x9DF2F7);
  50.  
  51. protected final int id;
  52. protected final String name;
  53. protected final float hardness;
  54. protected final int harvestLevel;
  55. protected final int quantityDropMin;
  56. protected final int quantityDropMax;
  57. protected final int color;
  58.  
  59. Variant(int id, String name, float hardness, int harvestLevel, int quantityDropMin, int quantityDropMax, int color) {
  60. this.id = id;
  61. this.name = name;
  62. this.hardness = hardness;
  63. this.harvestLevel = harvestLevel;
  64. this.quantityDropMin = quantityDropMin;
  65. this.quantityDropMax = quantityDropMax;
  66. this.color = color;
  67. }
  68.  
  69. public static Variant byID(int meta){
  70. for(Variant variant : Variant.values()){
  71. if (variant.id == meta){
  72. return variant;
  73. }
  74. }
  75. return Variant.UNKNOWN;
  76. }
  77.  
  78. public String getName() {
  79. return this.name;
  80. }
  81. }
  82.  
  83. public enum Type implements IStringSerializable{
  84. ORE(0, "Ore"),
  85. BLOCK(1, "Block");
  86.  
  87. protected final int id;
  88. protected final String name;
  89. Type(int id, String name){
  90. this.id = id;
  91. this.name = name;
  92. }
  93.  
  94. public String getName(){
  95. return this.name;
  96. }
  97.  
  98. public static Type byID(int id){
  99. for(Type type : Type.values()){
  100. if (type.id == id){
  101. return type;
  102. }
  103. }
  104. return Type.ORE;
  105. }
  106. }
  107.  
  108. private static final PropertyEnum PROPERTY_VARIANT = PropertyEnum.create("variant", Variant.class);
  109. private static final PropertyEnum PROPERTY_TYPE = PropertyEnum.create("type", Type.class);
  110.  
  111. public BlockOre(){
  112. super(Material.rock);
  113. this.setUnlocalizedName("blockOre");
  114. this.setCreativeTab(ZCreativeTabs.blocks);
  115. ZRegistry.registerBlock(this, ItemBlock.class);
  116. }
  117.  
  118. @SideOnly(Side.CLIENT)
  119. @Override
  120. public EnumWorldBlockLayer getBlockLayer() {
  121. return EnumWorldBlockLayer.CUTOUT;
  122. }
  123.  
  124. @Override
  125. public int damageDropped(IBlockState state) {
  126. Variant variant = (Variant)state.getValue(PROPERTY_VARIANT);
  127. Type type = (Type)state.getValue(PROPERTY_TYPE);
  128. int meta = encryptBlockData(variant, type);
  129. System.out.println("ID: " + meta + " Variant: " + variant.name + " Type: " + type.name);
  130. return meta;
  131. }
  132.  
  133. @Override
  134. @SideOnly(Side.CLIENT)
  135. public void getSubBlocks(Item item, CreativeTabs tab, List list) {
  136. for (Variant variant : Variant.values()) {
  137. for(Type type : Type.values()){
  138. list.add(new ItemStack(item, 1, encryptBlockData(variant, type)));
  139. }
  140. }
  141. }
  142.  
  143. @Override
  144. public IBlockState getStateFromMeta(int meta) {
  145. BlockData blockData = this.decryptBlockData(meta);
  146. return this.getDefaultState().withProperty(PROPERTY_VARIANT, blockData.variant).withProperty(PROPERTY_TYPE, blockData.type);
  147. }
  148.  
  149. @Override
  150. public int getMetaFromState(IBlockState state) {
  151. Type type = (Type)state.getValue(PROPERTY_TYPE);
  152. Variant variant = (Variant)state.getValue(PROPERTY_VARIANT);
  153. return encryptBlockData(variant, type);
  154. }
  155.  
  156. @Override
  157. protected BlockState createBlockState() {
  158. return new BlockState(this, new IProperty[] {PROPERTY_VARIANT, PROPERTY_TYPE});
  159. }
  160.  
  161. @Override
  162. public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing blockFaceClickedOn, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
  163. return getStateFromMeta(meta);
  164. }
  165.  
  166.  
  167. @Override
  168. public String getMetaName(int meta) {
  169. BlockData blockData = this.decryptBlockData(meta);
  170. return blockData.variant.getName() + blockData.type.getName();
  171. }
  172.  
  173.  
  174. @Override
  175. public int getColorFromItemStack(ItemStack itemStack, int renderPass) {
  176. return getColor(itemStack.getItemDamage(), renderPass);
  177. }
  178.  
  179. @SideOnly(Side.CLIENT)
  180. @Override
  181. public int colorMultiplier(IBlockAccess blockAccess, BlockPos pos, int renderPass) {
  182. int meta = this.getMetaFromState(blockAccess.getBlockState(pos));
  183. return getColor(meta, renderPass);
  184. }
  185.  
  186. private int getColor(int meta, int renderPass){
  187. BlockData blockData = this.decryptBlockData(meta);
  188. if ((renderPass == 1 && blockData.type == Type.ORE) || (renderPass == 0 && blockData.type == Type.BLOCK)){
  189. return blockData.variant.color;
  190. }
  191. return 16777215;
  192. }
  193.  
  194.  
  195. @Override
  196. public String getHarvestTool(IBlockState state) {
  197. return "pickaxe";
  198. }
  199.  
  200.  
  201. @Override
  202. public int getHarvestLevel(IBlockState state) {
  203. BlockData blockData = this.decryptBlockData(this.getMetaFromState(state));
  204. return blockData.variant.harvestLevel;
  205. }
  206.  
  207. @Override
  208. public float getBlockHardness(World world, BlockPos pos) {
  209. IBlockState state = world.getBlockState(pos);
  210. if (state.getBlock() == this){
  211. BlockData metaData = this.decryptBlockData(this.getMetaFromState(state));
  212. return metaData.variant.hardness;
  213. }
  214. return 0f;
  215. }
  216.  
  217. @Override
  218. public Item getItemDropped(IBlockState state, Random random, int fortune){
  219. return new ItemStack(this).getItem();
  220. }
  221.  
  222. @Override
  223. public int quantityDropped(IBlockState state, int fortune, Random random) {
  224. BlockData blockData = this.decryptBlockData(this.getMetaFromState(state));
  225. if (blockData.variant.quantityDropMin == blockData.variant.quantityDropMax)
  226. return blockData.variant.quantityDropMin;
  227. int quantity = blockData.variant.quantityDropMin + (fortune == 0 ? 0 : random.nextInt(fortune));
  228. return quantity > blockData.variant.quantityDropMax ? blockData.variant.quantityDropMin : quantity;
  229. }
  230.  
  231.  
  232.  
  233. private int encryptBlockData(Variant variant, Type type){
  234. return (variant.id << 4) | type.id;
  235. }
  236.  
  237. private BlockData decryptBlockData(int meta){
  238. Variant variant = Variant.byID(meta >> 4);
  239. Type type = Type.byID(meta & 0xF);
  240. return new BlockData(variant, type);
  241. }
  242.  
  243. private class BlockData {
  244. public final Variant variant;
  245. public final Type type;
  246.  
  247. public BlockData(Variant variant, Type type){
  248. this.variant = variant;
  249. this.type = type;
  250. }
  251. }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement