package choonster.testmod3.init;
import choonster.testmod3.TestMod3;
import choonster.testmod3.block.*;
import choonster.testmod3.block.pipe.BlockPipeBasic;
import choonster.testmod3.block.pipe.BlockPipeFluid;
import choonster.testmod3.item.block.ItemFluidTank;
import choonster.testmod3.tileentity.*;
import choonster.testmod3.util.Constants;
import com.google.common.base.Preconditions;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemCloth;
import net.minecraft.item.ItemMultiTexture;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityCommandBlock;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
import net.minecraftforge.fml.common.registry.IForgeRegistry;
import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("WeakerAccess")
@ObjectHolder(TestMod3.MODID)
public class ModBlocks {
public static final BlockWaterGrass WATER_GRASS = new BlockWaterGrass();
public static final BlockLargeCollisionTest LARGE_COLLISION_TEST = new BlockLargeCollisionTest();
public static final BlockRightClickTest RIGHT_CLICK_TEST = new BlockRightClickTest();
public static final BlockClientPlayerRightClick CLIENT_PLAYER_RIGHT_CLICK = new BlockClientPlayerRightClick();
public static final BlockRotatableLamp ROTATABLE_LAMP = new BlockRotatableLamp();
public static final BlockItemCollisionTest ITEM_COLLISION_TEST = new BlockItemCollisionTest();
public static final BlockFluidTank<TileEntityFluidTank> FLUID_TANK = new BlockFluidTank<>("fluid_tank");
public static final BlockItemDebugger ITEM_DEBUGGER = new BlockItemDebugger();
public static final Block END_PORTAL_FRAME_FULL = new BlockTestMod3(Material.ROCK, "end_portal_frame_full");
public static final BlockColoredRotatable COLORED_ROTATABLE = new BlockColoredRotatable(Material.CLOTH, "colored_rotatable");
public static final BlockColoredMultiRotatable COLORED_MULTI_ROTATABLE = new BlockColoredMultiRotatable(Material.CLOTH, "colored_multi_rotatable");
public static final BlockPotionEffect POTION_EFFECT = new BlockPotionEffect();
public static final BlockVariants VARIANTS = new BlockVariants(Material.IRON);
public static final BlockClientPlayerRotation CLIENT_PLAYER_ROTATION = new BlockClientPlayerRotation();
public static final BlockPigSpawnerRefiller PIG_SPAWNER_REFILLER = new BlockPigSpawnerRefiller();
public static final BlockPlane MIRROR_PLANE = new BlockPlane(Material.IRON, "mirror_plane");
public static final BlockTestMod3 VANILLA_MODEL_TEST = new BlockTestMod3(Material.IRON, "vanilla_model_test");
public static final BlockTestMod3 FULLBRIGHT = (BlockTestMod3) new BlockTestMod3(Material.ROCK, "fullbright").setLightLevel(1);
public static final BlockTestMod3 NORMAL_BRIGHTNESS = new BlockTestMod3(Material.ROCK, "normal_brightness");
public static final BlockMaxHealthSetter MAX_HEALTH_SETTER = new BlockMaxHealthSetter();
public static final BlockMaxHealthGetter MAX_HEALTH_GETTER = new BlockMaxHealthGetter();
public static final BlockSmallCollisionTest SMALL_COLLISION_TEST = new BlockSmallCollisionTest();
public static final BlockModChest CHEST = new BlockModChest();
public static final BlockHidden HIDDEN = new BlockHidden(Material.ROCK, "hidden");
public static final BlockPipeBasic BASIC_PIPE = new BlockPipeBasic("basic_pipe");
public static final BlockPipeFluid FLUID_PIPE = new BlockPipeFluid();
public static final BlockSurvivalCommandBlock SURVIVAL_COMMAND_BLOCK = new BlockSurvivalCommandBlock(TileEntityCommandBlock.Mode.REDSTONE, "survival_command_block");
public static final BlockSurvivalCommandBlock REPEATING_SURVIVAL_COMMAND_BLOCK = new BlockSurvivalCommandBlock(TileEntityCommandBlock.Mode.AUTO, "repeating_survival_command_block");
public static final BlockSurvivalCommandBlock CHAIN_SURVIVAL_COMMAND_BLOCK = new BlockSurvivalCommandBlock(TileEntityCommandBlock.Mode.SEQUENCE, "chain_survival_command_block");
public static final BlockSaplingTestMod3 SAPLING = new BlockSaplingTestMod3();
public static final BlockInvisible INVISIBLE = new BlockInvisible();
public static final BlockFluidTankRestricted FLUID_TANK_RESTRICTED = new BlockFluidTankRestricted();
public static class Slabs {
public static final BlockColouredSlab.ColouredSlabGroup STAINED_CLAY_SLABS = new BlockColouredSlab.ColouredSlabGroup("stained_clay_slab", Material.ROCK);
}
@Mod.EventBusSubscriber
public static class RegistrationHandler {
public static final Set<ItemBlock> ITEM_BLOCKS = new HashSet<>();
/**
* Register this mod's {@link Block}s.
*
* @param event The event
*/
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
final IForgeRegistry<Block> registry = event.getRegistry();
final Block[] blocks = {
WATER_GRASS,
LARGE_COLLISION_TEST,
RIGHT_CLICK_TEST,
CLIENT_PLAYER_RIGHT_CLICK,
ROTATABLE_LAMP,
ITEM_COLLISION_TEST,
FLUID_TANK,
ITEM_DEBUGGER,
END_PORTAL_FRAME_FULL,
COLORED_ROTATABLE,
COLORED_MULTI_ROTATABLE,
POTION_EFFECT,
VARIANTS,
CLIENT_PLAYER_ROTATION,
PIG_SPAWNER_REFILLER,
MIRROR_PLANE,
VANILLA_MODEL_TEST,
FULLBRIGHT,
NORMAL_BRIGHTNESS,
MAX_HEALTH_SETTER,
MAX_HEALTH_GETTER,
SMALL_COLLISION_TEST,
CHEST,
HIDDEN,
BASIC_PIPE,
FLUID_PIPE,
SURVIVAL_COMMAND_BLOCK,
REPEATING_SURVIVAL_COMMAND_BLOCK,
CHAIN_SURVIVAL_COMMAND_BLOCK,
SAPLING,
INVISIBLE,
FLUID_TANK_RESTRICTED,
};
registry.registerAll(blocks);
registerSlabGroup(registry, Slabs.STAINED_CLAY_SLABS.high);
registerSlabGroup(registry, Slabs.STAINED_CLAY_SLABS.low);
}
/**
* Register the {@link Block}s of a {@link BlockSlabTestMod3.SlabGroup}.
*
* @param registry The registry
* @param slabGroup The slab group
*/
private static void registerSlabGroup(IForgeRegistry<Block> registry, BlockSlabTestMod3.SlabGroup<?, ?, ?> slabGroup) {
registry.register(slabGroup.singleSlab);
registry.register(slabGroup.doubleSlab);
}
/**
* Register this mod's {@link ItemBlock}s.
*
* @param event The event
*/
@SubscribeEvent
public static void registerItemBlocks(RegistryEvent.Register<Item> event) {
final ItemBlock[] items = {
new ItemBlock(WATER_GRASS),
new ItemBlock(LARGE_COLLISION_TEST),
new ItemBlock(RIGHT_CLICK_TEST),
new ItemBlock(CLIENT_PLAYER_RIGHT_CLICK),
new ItemBlock(ROTATABLE_LAMP),
new ItemBlock(ITEM_COLLISION_TEST),
new ItemFluidTank(FLUID_TANK),
new ItemBlock(ITEM_DEBUGGER),
new ItemBlock(END_PORTAL_FRAME_FULL),
new ItemCloth(COLORED_ROTATABLE),
new ItemCloth(COLORED_MULTI_ROTATABLE),
new ItemBlock(POTION_EFFECT),
new ItemMultiTexture(VARIANTS, VARIANTS, VARIANTS::getName),
new ItemBlock(CLIENT_PLAYER_ROTATION),
new ItemBlock(PIG_SPAWNER_REFILLER),
new ItemBlock(MIRROR_PLANE),
new ItemBlock(VANILLA_MODEL_TEST),
new ItemBlock(FULLBRIGHT),
new ItemBlock(NORMAL_BRIGHTNESS),
new ItemBlock(MAX_HEALTH_SETTER),
new ItemBlock(MAX_HEALTH_GETTER),
new ItemBlock(SMALL_COLLISION_TEST),
new ItemBlock(CHEST),
new ItemBlock(HIDDEN),
new ItemBlock(BASIC_PIPE),
new ItemBlock(FLUID_PIPE),
new ItemBlock(SURVIVAL_COMMAND_BLOCK),
new ItemBlock(REPEATING_SURVIVAL_COMMAND_BLOCK),
new ItemBlock(CHAIN_SURVIVAL_COMMAND_BLOCK),
new ItemMultiTexture(SAPLING, SAPLING, BlockSaplingTestMod3::getName),
new ItemBlock(INVISIBLE),
new ItemFluidTank(FLUID_TANK_RESTRICTED),
Slabs.STAINED_CLAY_SLABS.low.item,
Slabs.STAINED_CLAY_SLABS.high.item,
};
final IForgeRegistry<Item> registry = event.getRegistry();
for (final ItemBlock item : items) {
final Block block = item.getBlock();
final ResourceLocation registryName = Preconditions.checkNotNull(block.getRegistryName(), "Block %s has null registry name", block);
registry.register(item.setRegistryName(registryName));
ITEM_BLOCKS.add(item);
}
}
}
public static void registerTileEntities() {
registerTileEntity(TileEntitySurvivalCommandBlock.class, "survival_command_block", "SurvivalCommandBlock");
registerTileEntity(TileEntityFluidTank.class, "fluid_tank", "FluidTank");
registerTileEntity(TileEntityColoredRotatable.class, "colored_rotatable", "ColoredRotatable");
registerTileEntity(TileEntityColoredMultiRotatable.class, "colored_multi_rotatable", "ColoredMultiRotatable");
registerTileEntity(TileEntityPotionEffect.class, "potion_effect", "PotionEffect");
registerTileEntity(TileEntityModChest.class, "mod_chest", "ModChest");
registerTileEntity(TileEntityHidden.class, "hidden");
registerTileEntity(TileEntityFluidTankRestricted.class, "fluid_tank_restricted");
}
private static void registerTileEntity(Class<? extends TileEntity> tileEntityClass, String name) {
GameRegistry.registerTileEntity(tileEntityClass, Constants.RESOURCE_PREFIX + name);
}
private static void registerTileEntity(Class<? extends TileEntity> tileEntityClass, String name, String legacyName) {
GameRegistry.registerTileEntityWithAlternatives(tileEntityClass, Constants.RESOURCE_PREFIX + name, Constants.RESOURCE_PREFIX + legacyName);
}
}