package choonster.testmod3.block; import choonster.testmod3.Logger; import choonster.testmod3.capability.pigspawner.CapabilityPigSpawner; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.ModContainer; /** * A Block that prints the current state of the player's held {@link ItemStack}s on the client and server when left or right clicked. * * @author Choonster */ public class BlockItemDebugger extends BlockTestMod3 { public BlockItemDebugger() { super(Material.IRON, "item_debugger"); setBlockUnbreakable(); } private void logItem(ItemStack stack) { if (!stack.isEmpty()) { Logger.info("ItemStack: %s", stack.serializeNBT()); logCapability(stack, CapabilityPigSpawner.PIG_SPAWNER_CAPABILITY, EnumFacing.NORTH); final String modName; final ResourceLocation registryName = stack.getItem().getRegistryName(); if (registryName != null) { final ModContainer modContainer = Loader.instance().getIndexedModList().get(registryName.getResourceDomain()); if (modContainer != null) { modName = modContainer.getName(); } else { modName = "Unknown - No ModContainer"; } } else { modName = "Unknown - No Registry Name"; } Logger.info("Mod Name: %s", modName); } } private <T> void logCapability(ItemStack stack, Capability<T> capability, EnumFacing facing) { if (stack.hasCapability(capability, facing)) { final T instance = stack.getCapability(capability, facing); Logger.info("Capability: %s - %s", capability.getName(), instance); } } @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { logItem(playerIn.getHeldItem(hand)); return true; } @Override public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) { for (final EnumHand hand : EnumHand.values()) { logItem(playerIn.getHeldItem(hand)); } } }