182 lines
5.6 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|