Files

182 lines
5.6 KiB
Java

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<BlockCustom.Variant> VARIANT = PropertyEnum.<BlockCustom.Variant>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<String, Object> $_dependencies = new HashMap<>();
$_dependencies.put("entity", entity);
$_dependencies.put("x", x);
$_dependencies.put("y", y);
$_dependencies.put("z", z);
ProcedureSlimePadEntityCollidesInTheBlock.executeProcedure($_dependencies);
}
}
}
}