package net.paladrill.paladrillmod.block; import net.paladrill.paladrillmod.procedure.ProcedureSlimePadEntityCollidesInTheBlock; import net.paladrill.paladrillmod.creativetab.TabPalaDrillMod; import net.paladrill.paladrillmod.ElementsPaladrillmodMod; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraft.world.World; import net.minecraft.world.IBlockAccess; import net.minecraft.util.math.BlockPos; import net.minecraft.util.IStringSerializable; import net.minecraft.util.EnumFacing; import net.minecraft.util.BlockRenderLayer; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSlab; import net.minecraft.item.Item; import net.minecraft.entity.Entity; import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.block.state.IBlockState; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.IProperty; import net.minecraft.block.material.Material; import net.minecraft.block.SoundType; import net.minecraft.block.BlockSlab; import net.minecraft.block.Block; import java.util.Random; import java.util.Map; import java.util.HashMap; @ElementsPaladrillmodMod.ModElement.Tag public class BlockSlimePad extends ElementsPaladrillmodMod.ModElement { @GameRegistry.ObjectHolder("paladrillmod:slimepad") public static final Block block = null; @GameRegistry.ObjectHolder("paladrillmod:slimepad_double") public static final Block block_slab_double = null; public BlockSlimePad(ElementsPaladrillmodMod instance) { super(instance, 65); } @Override public void initElements() { elements.blocks.add(() -> new BlockCustom().setRegistryName("slimepad")); elements.blocks.add(() -> new BlockCustom.Double().setRegistryName("slimepad_double")); elements.items.add(() -> new ItemSlab(block, (BlockSlab) block, (BlockSlab) block_slab_double).setRegistryName(block.getRegistryName())); } @SideOnly(Side.CLIENT) @Override public void registerModels(ModelRegistryEvent event) { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation("paladrillmod:slimepad", "inventory")); } public static class BlockCustom extends BlockSlab { public BlockCustom() { super(Material.SPONGE); setUnlocalizedName("slimepad"); setSoundType(SoundType.SLIME); setHarvestLevel("pickaxe", 1); setHardness(1F); setResistance(10F); setLightLevel(0F); setLightOpacity(0); setCreativeTab(TabPalaDrillMod.tab); IBlockState state = this.blockState.getBaseState().withProperty(VARIANT, BlockCustom.Variant.DEFAULT); if (!this.isDouble()) state = state.withProperty(BlockSlab.HALF, EnumBlockHalf.BOTTOM); this.setDefaultState(state); this.useNeighborBrightness = !this.isDouble(); setTickRandomly(true); } public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockCustom.Variant.class); @Override public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(block); } @Override public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) { return new ItemStack(block); } @Override protected net.minecraft.block.state.BlockStateContainer createBlockState() { return this.isDouble() ? new net.minecraft.block.state.BlockStateContainer(this, new IProperty[]{VARIANT}) : new net.minecraft.block.state.BlockStateContainer(this, new IProperty[]{HALF, VARIANT}); } @Override public IBlockState getStateFromMeta(int meta) { if (this.isDouble()) { return this.getDefaultState(); } else { return this.getDefaultState().withProperty(HALF, BlockSlab.EnumBlockHalf.values()[meta % 2]); } } @Override public int getMetaFromState(IBlockState state) { if (this.isDouble()) { return 0; } else { return state.getValue(HALF).ordinal(); } } @Override public String getUnlocalizedName(int meta) { return super.getUnlocalizedName(); } @Override public IProperty getVariantProperty() { return VARIANT; } @Override public Comparable getTypeForItem(ItemStack stack) { return BlockCustom.Variant.DEFAULT; } @Override public boolean isDouble() { return false; } @Override public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { if (isDouble()) return true; return super.doesSideBlockRendering(state, world, pos, face); } public enum Variant implements IStringSerializable { DEFAULT; public String getName() { return "default"; } } public static class Double extends BlockCustom { @Override public boolean isDouble() { return true; } } @SideOnly(Side.CLIENT) @Override public BlockRenderLayer getBlockLayer() { return BlockRenderLayer.CUTOUT; } @Override public boolean isOpaqueCube(IBlockState state) { return false; } @Override public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { super.onEntityCollidedWithBlock(world, pos, state, entity); int x = pos.getX(); int y = pos.getY(); int z = pos.getZ(); { Map $_dependencies = new HashMap<>(); $_dependencies.put("entity", entity); $_dependencies.put("x", x); $_dependencies.put("y", y); $_dependencies.put("z", z); ProcedureSlimePadEntityCollidesInTheBlock.executeProcedure($_dependencies); } } } }