Jump to content

K10

Members
  • Posts

    19
  • Joined

  • Last visited

Posts posted by K10

  1. Hi.

     

    I want to rename vanilla prismarine block.

    In vanilla, prismarine's metadata is 1, prismarine bricks' metadata is 2, dark prismarine's metadata is 3.

    I want to remove these metadata and rename them new block name such as prismarine -> "prismarine", prismarine bricks -> "prismarine_block", dark prismarine -> "dark_prismarine".

    Anyone help me please.

     

    I think I should override vanilla prismarine block, so I tried this code but error occoured.

    @ObjectHolder(Reference.MODID)
    public class HamaBlocks {
    	@ObjectHolder("minecraft:prismarine")
    	public static Block prismarine = null;
    	@ObjectHolder("minecraft:prismarine_bricks")
    	public static Block prismarineBricks = null;
    	@ObjectHolder("minecraft:dark_prismarine")
    	public static Block darkPrismarine = null;
    
    	public static void onBlockRegister(RegistryEvent.Register<Block> event) {
    		event.getRegistry().registerAll(//
    				new Block(Material.ROCK).setCreativeTab(CreativeTabs.BUILDING_BLOCKS)//
    				.setRegistryName(new ResourceLocation("minecraft", "prismarine"))//
    				.setUnlocalizedName("prismarine"),//
    				new Block(Material.ROCK).setCreativeTab(CreativeTabs.BUILDING_BLOCKS)//
    				.setRegistryName(new ResourceLocation("minecraft", "prismarine_bricks"))//
    				.setUnlocalizedName("prismarine_bricks"),//
    				new Block(Material.ROCK).setCreativeTab(CreativeTabs.BUILDING_BLOCKS)//
    				.setRegistryName(new ResourceLocation("minecraft", "dark_prismarine"))//
    				.setUnlocalizedName("dark_prismarine")//
    				);
    	}
    }
    Spoiler

    [22:25:14] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
    // Oops.

    Time: 6/10/19 10:25 PM
    Description: Initializing game

    java.lang.NullPointerException: Initializing game
        at net.minecraft.block.properties.PropertyEnum.getName(PropertyEnum.java:53)
        at net.minecraft.block.properties.PropertyEnum.getName(PropertyEnum.java:14)
        at net.minecraft.client.renderer.block.statemap.StateMap.removeName(StateMap.java:60)
        at net.minecraft.client.renderer.block.statemap.StateMap.getModelResourceLocation(StateMap.java:42)
        at net.minecraft.client.renderer.block.statemap.StateMapperBase.putStateModelLocations(StateMapperBase.java:56)
        at net.minecraft.client.renderer.block.statemap.BlockStateMapper.getBlockstateLocations(BlockStateMapper.java:62)
        at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:221)
        at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:150)
        at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28)
        at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121)
        at net.minecraft.client.Minecraft.init(Minecraft.java:559)
        at net.minecraft.client.Minecraft.run(Minecraft.java:421)
        at net.minecraft.client.main.Main.main(Main.java:118)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
        at GradleStart.main(GradleStart.java:25)


    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------

    -- Head --
    Thread: Client thread
    Stacktrace:
        at net.minecraft.block.properties.PropertyEnum.getName(PropertyEnum.java:53)
        at net.minecraft.block.properties.PropertyEnum.getName(PropertyEnum.java:14)
        at net.minecraft.client.renderer.block.statemap.StateMap.removeName(StateMap.java:60)
        at net.minecraft.client.renderer.block.statemap.StateMap.getModelResourceLocation(StateMap.java:42)
        at net.minecraft.client.renderer.block.statemap.StateMapperBase.putStateModelLocations(StateMapperBase.java:56)
        at net.minecraft.client.renderer.block.statemap.BlockStateMapper.getBlockstateLocations(BlockStateMapper.java:62)
        at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:221)
        at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:150)
        at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28)
        at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121)
        at net.minecraft.client.Minecraft.init(Minecraft.java:559)

    -- Initialization --
    Details:
    Stacktrace:
        at net.minecraft.client.Minecraft.run(Minecraft.java:421)
        at net.minecraft.client.main.Main.main(Main.java:118)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
        at GradleStart.main(GradleStart.java:25)

    -- System Details --
    Details:
        Minecraft Version: 1.12.2
        Operating System: Windows 10 (amd64) version 10.0
        Java Version: 1.8.0_192, Oracle Corporation
        Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
        Memory: 99420064 bytes (94 MB) / 603455488 bytes (575 MB) up to 1901592576 bytes (1813 MB)
        JVM Flags: 0 total;
        IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
        FML: MCP 9.42 Powered by Forge 14.23.5.2768 5 mods loaded, 5 mods active
        States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

        | State | ID        | Version      | Source                           | Signature |
        |:----- |:--------- |:------------ |:-------------------------------- |:--------- |
        | UCH   | minecraft | 1.12.2       | minecraft.jar                    | None      |
        | UCH   | mcp       | 9.42         | minecraft.jar                    | None      |
        | UCH   | FML       | 8.0.99.99    | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
        | UCH   | forge     | 14.23.5.2768 | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
        | UCH   | hamacraft | 0.00         | bin                              | None      |

        Loaded coremods (and transformers):
        GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.6.0 NVIDIA 418.81' Renderer: 'GeForce GTX 1050/PCIe/SSE2'
        Launched Version: 1.12.2
        LWJGL: 2.9.4
        OpenGL: GeForce GTX 1050/PCIe/SSE2 GL version 4.6.0 NVIDIA 418.81, NVIDIA Corporation
        GL Caps: Using GL 1.3 multitexturing.
    Using GL 1.3 texture combiners.
    Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
    Shaders are available because OpenGL 2.1 is supported.
    VBOs are available because OpenGL 1.5 is supported.

        Using VBOs: Yes
        Is Modded: Definitely; Client brand changed to 'fml,forge'
        Type: Client (map_client.txt)
        Resource Packs:
        Current Language: 日本語 (日本)
        Profiler Position: N/A (disabled)
        CPU: 4x Intel(R) Pentium(R) CPU G4560 @ 3.50GHz

     

  2. Hi.

     

    I added forge 1.12.2 item which teleport any entity to specific position and block that determine the position. The data of teleportation is saved NBT of item.

    However, NBT data is lost.

     

    The scene is when I picked item on block's gui (without Shift).

     

    additionally, an entity does not teleport to the place set without opening the inventory at once.

     

    anyone help me ?

     

    https://github.com/nihotamor/pipocraft/tree/master/

  3. Hi. I'm trying to create a mod includes a block has tile entity like a minecraft:chest. However, when I opened a gui of the block, it returns custom name only when I am spectator. In other gamemode, tile entity returns default name such as "container.crate" as it doesn't have custom name.I tryed vanilla source from TileEntityChest, but it didn't work. Custom name is saved correctly to NBT. Even if I change custom name by using command, it is displayed only spectator mode.

     

    package doph.gpubg.tileentity;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.IInventory;
    import net.minecraft.inventory.ItemStackHelper;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.NonNullList;
    import net.minecraft.util.text.ITextComponent;
    import net.minecraft.util.text.TextComponentString;
    import net.minecraft.util.text.TextComponentTranslation;
    
    public class TileEntityCrate extends TileEntity implements IInventory {
        private NonNullList<ItemStack> inventory = NonNullList.<ItemStack>withSize(getSizeInventory(), ItemStack.EMPTY);
        private String customName;
    
        public void setName(String name) {
            this.customName = name;
        }
    
        public NonNullList<ItemStack> getInventory(){
            return inventory;
        }
    
        public void setItems(EntityPlayer player) {
            NonNullList<ItemStack> inv  = player.inventory.mainInventory;
            for(int i = 0; i < 36; i++) {
                this.inventory.set(i, inv.get(i));
            }
            inv  = player.inventory.armorInventory;
            for(int i = 0; i < 4; i++) {
                this.inventory.set(i + 36, inv.get(i));
            }
            inv  = player.inventory.offHandInventory;
            this.inventory.set(40, inv.get(0));
        }
    
        @Override
        public void readFromNBT(NBTTagCompound compound) {
            super.readFromNBT(compound);
            this.inventory = NonNullList.<ItemStack>withSize(this.getSizeInventory(), ItemStack.EMPTY);
            ItemStackHelper.loadAllItems(compound, this.inventory);
            if (compound.hasKey("CustomName", 8)) {
                this.customName = compound.getString("CustomName");
            }
        }
    
        @Override
        public ITextComponent getDisplayName() {
            return (ITextComponent) (this.hasCustomName() ? new TextComponentString(this.getName())
                    : new TextComponentTranslation(this.getName()));
        }
    
        @Override
        public NBTTagCompound writeToNBT(NBTTagCompound compound) {
            super.writeToNBT(compound);
            ItemStackHelper.saveAllItems(compound, this.inventory);
            if (this.hasCustomName()) {
                compound.setString("CustomName", this.customName);
            }
            return compound;
        }
    
        @Override
        public int getSizeInventory() {
            return 45;
        }
    
        @Override
        public boolean isEmpty() {
            for (ItemStack itemstack : this.inventory) {
                if (!itemstack.isEmpty()) {
                    return false;
                }
            }
            return true;
        }
    
        @Override
        public ItemStack getStackInSlot(int index) {
            if (index >= 0 && index < getSizeInventory()) {
                return this.inventory.get(index);
            }
            return ItemStack.EMPTY;
        }
    
        @Override
        public ItemStack decrStackSize(int index, int count) {
            return ItemStackHelper.getAndSplit(this.inventory, index, count);
        }
    
        @Override
        public ItemStack removeStackFromSlot(int index) {
            return ItemStackHelper.getAndRemove(inventory, index);
        }
    
        @Override
        public void setInventorySlotContents(int index, ItemStack stack) {
            ItemStack itemstack = getStackInSlot(index);
            boolean flag = !stack.isEmpty() && stack.isItemEqual(itemstack)
                    && ItemStack.areItemStacksEqual(stack, itemstack);
            this.inventory.set(index, stack);
            if (stack.getCount() > this.getInventoryStackLimit()) {
                stack.setCount(this.getInventoryStackLimit());
            }
            if (!flag) {
                this.markDirty();
            }
        }
    
        @Override
        public int getInventoryStackLimit() {
            return 64;
        }
    
        @Override
        public String getName() {
            return this.hasCustomName() ? this.customName : "container.crate";
        }
    
        @Override
        public boolean isUsableByPlayer(EntityPlayer player) {
            if (this.world.getTileEntity(this.pos) != this) {
                return false;
            } else {
                return player.getDistanceSq(this.pos.getX() + 0.5D, this.pos.getY() + 0.5D,
                        this.pos.getZ() + 0.5D) <= 64.0D;
            }
        }
    
        @Override
        public void openInventory(EntityPlayer player) {
    
        }
    
        @Override
        public void closeInventory(EntityPlayer player) {
    
        }
    
        @Override
        public boolean isItemValidForSlot(int index, ItemStack stack) {
            return false;
        }
    
        @Override
        public int getField(int id) {
            return 0;
        }
    
        @Override
        public void setField(int id, int value) {
    
        }
    
        @Override
        public int getFieldCount() {
            return 0;
        }
    
        @Override
        public void clear() {
            this.inventory.clear();
        }
    
        @Override
        public boolean hasCustomName() {
            return this.customName != null && !this.customName.isEmpty();
        }
    }

     

    Does anyone have a good idea?

  4. 2 hours ago, diesieben07 said:

    Post updated code.

    I addded these methods to BaseManaita which should have Tile Entity: 

        @Override
        public boolean hasTileEntity(IBlockState state) {
            return true;
        }
    
        @Override
        public TileEntity createTileEntity(World world, IBlockState state) {
            return new TileEntityManaita();
        }

     

    And I checked coord of BlockPos which is argument of getServerGuiEvent, it seems is not the correct block position. I didn't pass correct block position in openGui method. When I passed correct position, it worked well!

  5. Quote

    Why do some of your class files not have the .java file extension? How does this code even compile?

    I mistook file name when I create file on github because I didn't know way to drag and drop file at first. I already fixed.

     

    Quote

    Problematic code, issue 2.

    There are not enough document about forge tutorial in Japan, so I have to study old article...

     

    Quote

    You are referencing client-only classes (such as Minecraft and ModelLoader) in common code. This will crash on a server, you must encapsulate this using @SidedProxy.

    Oh, I missed it! I have to add it in my code.

     

    Quote

    ModelBakery.registerItemVariants is not needed if you are using ModelLoader.setCustomModelResourceLocation.

    OK, I see.

     

    Thank you for your advices. I hava to rewrite the majority of my codes, so I recreate project and restart from first. I will report and ask later.

  6. Hi. I added thin Block looks like wooden slab or wooden pressure plate in my Mod. However, There are some issue :

    • Block model is not loaded (or not adapted).
    • Block has a larger hit box than appearance.

     

    BlockRegisterer.java

    Spoiler
    
    package doph.niho.cookmod.init;
    
    import doph.niho.cookmod.block.BaseBlock;
    import doph.niho.cookmod.block.BlockManaita;
    import doph.niho.cookmod.block.BlockManaita2;
    import doph.niho.cookmod.itemblock.BaseItemBlock;
    import doph.niho.cookmod.itemblock.ItemBlockManaita;
    import doph.niho.cookmod.itemblock.ItemBlockManaita2;
    import net.minecraft.block.Block;
    import net.minecraft.client.renderer.block.model.ModelBakery;
    import net.minecraft.client.renderer.block.model.ModelResourceLocation;
    import net.minecraft.item.Item;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.event.RegistryEvent;
    
    public class BlockRegisterer {
    
    	public static BaseBlock manaita;
    	public static BaseBlock manaita2;
    
    	public static BaseItemBlock manaitaItem;
    	public static BaseItemBlock manaitaItem2;
    
    	public static void RegisterModel() {
    		RegisterRender(manaita);
    		RegisterRender(manaita2);
    	}
    
    	public static void RegisterBlock(RegistryEvent.Register<Block> e) {
    		e.getRegistry().register(manaita);
    		e.getRegistry().register(manaita2);
    	}
    
    	public static void RegisterItemBlock(RegistryEvent.Register<Item> e) {
    		e.getRegistry().register(manaitaItem);
    		e.getRegistry().register(manaitaItem2);
    	}
    
    	public static void RegisterRender(Block block, String... subName) {
    		int len = subName.length;
    		if (len == 0) {
    			ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,
    					new ModelResourceLocation(block.getRegistryName(), "inventory"));
    		} else {
    			ResourceLocation[] rl = new ResourceLocation[subName.length];
    			for(int i = 0; i < subName.length; i++) {
    				rl[i] = new ResourceLocation(block.getRegistryName() + subName[i]);
    			}
    			ModelBakery.registerItemVariants(Item.getItemFromBlock(block), rl);
    			for (int i = 0; i < len; i++) {
    				ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), i,
    						new ModelResourceLocation(block.getRegistryName() + subName[i], "inventory"));
    			}
    		}
    	}
    
    	public static void Init() {
    		manaita = new BlockManaita();
    		manaita2 = new BlockManaita2();
    
    		manaitaItem = new ItemBlockManaita();
    		manaitaItem2 = new ItemBlockManaita2();
    	}
    }

     

     

    BlockManaita.java

    Spoiler
    
    package doph.niho.cookmod.block;
    
    import doph.niho.cookmod.system.Define;
    import net.minecraft.block.BlockHorizontal;
    import net.minecraft.block.SoundType;
    import net.minecraft.block.material.MapColor;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.IProperty;
    import net.minecraft.block.properties.PropertyDirection;
    import net.minecraft.block.properties.PropertyEnum;
    import net.minecraft.block.state.BlockFaceShape;
    import net.minecraft.block.state.BlockStateContainer;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.EntityLivingBase;
    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.IStringSerializable;
    import net.minecraft.util.NonNullList;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.util.Rotation;
    import net.minecraft.util.math.AxisAlignedBB;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.util.text.TextComponentTranslation;
    import net.minecraft.world.IBlockAccess;
    import net.minecraft.world.World;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    
    public class BlockManaita extends BaseBlock {
    
    	public static final PropertyEnum<BlockManaita.EnumType> VARIANT = PropertyEnum.<BlockManaita.EnumType>create("meta",
    			BlockManaita.EnumType.class);
    	public static final PropertyDirection FACING = BlockHorizontal.FACING;
    	protected static final AxisAlignedBB X_AXIS_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.25D, 0.9375D, 0.0625D, 0.75D);
    	protected static final AxisAlignedBB Z_AXIS_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.0625D, 0.75D, 0.0625D, 0.9375D);
    
    	public BlockManaita() {
    		super(Material.WOOD);
    		this.setRegistryName(new ResourceLocation(Define.MODID, "manaita"));
    		this.setUnlocalizedName("manaita");
    		this.setHardness(0.25F);
    		this.setResistance(0.5F);
    		this.setSoundType(SoundType.WOOD);
    		this.setLightOpacity(1);
    		this.setLightLevel(0.0F);
    		this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(VARIANT,
    				BlockManaita.EnumType.OAK));
    	}
    
    	public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
    		EnumFacing enumfacing = (EnumFacing) state.getValue(FACING);
    		return enumfacing.getAxis() == EnumFacing.Axis.X ? X_AXIS_AABB : Z_AXIS_AABB;
    	}
    
    	public boolean isFulllCube(IBlockState state) {
    		return false;
    	}
    
    	public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) {
    		return BlockFaceShape.UNDEFINED;
    	}
    
    	public boolean isOpequeCube(IBlockState state) {
    		return false;
    	}
    
    	@SuppressWarnings("deprecation")
    	public boolean canPlaceBlockAt(World worldIn, BlockPos pos) {
    		IBlockState down = worldIn.getBlockState(pos.down());
    		return super.canPlaceBlockAt(worldIn, pos) && (down.isTopSolid() || down.getBlockFaceShape(worldIn, pos.down(), EnumFacing.UP) == BlockFaceShape.SOLID);
    	}
    
    	@SuppressWarnings("deprecation")
    	public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY,
    			float hitZ, int meta, EntityLivingBase placer) {
    		EnumFacing enumfacing = placer.getHorizontalFacing().rotateY();
    
    		try {
    			return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer)
    					.withProperty(FACING, enumfacing).withProperty(VARIANT, BlockManaita.EnumType.byMetadata(meta));
    		} catch (IllegalArgumentException var11) {
    			if (!worldIn.isRemote) {
    				if (placer instanceof EntityPlayer) {
    					placer.sendMessage(new TextComponentTranslation(
    							"Invalid damage property. Please pick in [0, 1, 2, 3]", new Object[0]));
    				}
    			}
    			return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer)
    					.withProperty(FACING, enumfacing).withProperty(VARIANT, BlockManaita.EnumType.OAK);
    		}
    	}
    
    	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn,
    			EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    		return true;
    	}
    
    	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
    		EnumFacing enumfacing = (EnumFacing) state.getValue(FACING);
    		return enumfacing.getAxis() == EnumFacing.Axis.X ? X_AXIS_AABB : Z_AXIS_AABB;
    	}
    
    	@SideOnly(Side.CLIENT)
    	public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos,
    			EnumFacing side) {
    		return true;
    	}
    
    	public String getUnlocalizedName(ItemStack item) {
    		return BlockManaita.EnumType.byMetadata(item.getMetadata()).getUnlocalizedName();
    	}
    
    	public int damageDropped(IBlockState state) {
    		return ((BlockManaita.EnumType) state.getValue(VARIANT)).getMetadata();
    	}
    
    	public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items) {
    		for (BlockManaita.EnumType blockmanaita$enumtype : BlockManaita.EnumType.values()) {
    			items.add(new ItemStack(this, 1, blockmanaita$enumtype.getMetadata()));
    		}
    	}
    
    	public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
    		return MapColor.AIR;
    	}
    
    	public IBlockState getStateFromMeta(int meta) {
    		return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 4)).withProperty(VARIANT,
    				BlockManaita.EnumType.byMetadata(meta));
    	}
    
    	public int getMetaFromState(IBlockState state) {
    		int i = 0;
    		i = i | ((EnumFacing) state.getValue(FACING)).getHorizontalIndex();
    		i = i | ((BlockManaita.EnumType) state.getValue(VARIANT)).getMetadata();
    		return i;
    	}
    
    	public IBlockState withRotation(IBlockState state, Rotation rot) {
    		return state.getBlock() != this ? state
    				: state.withProperty(FACING, rot.rotate((EnumFacing) state.getValue(FACING)));
    	}
    
    	protected BlockStateContainer createBlockState() {
    		return new BlockStateContainer(this, new IProperty[] { FACING, VARIANT });
    	}
    
    	public static enum EnumType implements IStringSerializable {
    		OAK(0, "oak"), SPRUCE(1, "spruce"), BIRCH(2, "birch"), JUNGLE(3, "jungle");
    
    		private static final BlockManaita.EnumType[] META_LOOKUP = new BlockManaita.EnumType[values().length];
    		private final int meta;
    		private final String name;
    
    		private EnumType(int metaIn, String nameIn) {
    			this.meta = metaIn;
    			this.name = nameIn;
    		}
    
    		public int getMetadata() {
    			return this.meta;
    		}
    
    		public String toString() {
    			return this.name;
    		}
    
    		public static BlockManaita.EnumType byMetadata(int meta) {
    			if (meta < 0 || meta >= META_LOOKUP.length) {
    				meta = 0;
    			}
    			return META_LOOKUP[meta];
    		}
    
    		public String getName() {
    			return this.name;
    		}
    
    		public String getUnlocalizedName() {
    			return this.name;
    		}
    
    		static {
    			for (BlockManaita.EnumType blockmanaita$enumtype : values()) {
    				META_LOOKUP[blockmanaita$enumtype.getMetadata()] = blockmanaita$enumtype;
    			}
    		}
    	}
    }

     

     

    blockstates\manaita.json

    Spoiler
    
    {
    	"variants" : {
    		"facing=south,meta=oak" : {"model":"cookmod:block/manaita_oak"},
    		"facing=west,meta=oak" : {"model":"cookmod:block/manaita_oak", "y" : 90},
    		"facing=north,meta=oak" : {"model":"cookmod:block/manaita_oak", "y" : 180},
    		"facing=east,meta=oak" : {"model":"cookmod:block/manaita_oak", "y" : 270},
    		"facing=south,meta=spruce" : {"model":"cookmod:block/manaita_spruce"},
    		"facing=west,meta=spruce" : {"model":"cookmod:block/manaita_spruce", "y" : 90},
    		"facing=north,meta=spruce" : {"model":"cookmod:block/manaita_spruce", "y" : 180},
    		"facing=east,meta=spruce" : {"model":"cookmod:block/manaita_spruce", "y" : 270},
    		"facing=south,meta=birch" : {"model":"cookmod:block/manaita_birch"},
    		"facing=west,meta=birch" : {"model":"cookmod:block/manaita_birch", "y" : 90},
    		"facing=north,meta=birch" : {"model":"cookmod:block/manaita_birch", "y" : 180},
    		"facing=east,meta=birch" : {"model":"cookmod:block/manaita_birch", "y" : 270},
    		"facing=south,meta=jungle" : {"model":"cookmod:block/manaita_jungle"},
    		"facing=west,meta=jungle" : {"model":"cookmod:block/manaita_jungle", "y" : 90},
    		"facing=north,meta=jungle" : {"model":"cookmod:block/manaita_jungle", "y" : 180},
    		"facing=east,meta=jungle" : {"model":"cookmod:block/manaita_jungle", "y" : 270}
    	}
    }

     

     

    models\block\manaita_oak.json

    Spoiler
    
    {
    	"parent" : "block/cube_all",
    	"textures" : {
    		"all" : "block/planks_oak"
    	}
    }

     

     

    models\block\manaita_birch

    Spoiler
    
    {
    	"parent" : "cookmod:block/manaita",
    	"textures" : {
    		"texture" : "blocks/planks_birch"
    	}
    }

     

     

    models\block\manaita

    Spoiler
    
    {
    	"parent" : "block/thin_block",
    	"textures" : {
    		"particle" : "#texture"
    	},
    	"elements" : [
    		{
    			"from" : [ 1, 0, 4 ],
    			"to" : [ 15, 2, 12],
    			"faces" : {
    				"down" : { "uv" : [ 1,  4, 15, 12 ], "texture" : "#texture", "cullface" : "down" },
    				"up"   : { "uv" : [ 1,  4, 15, 12 ], "texture" : "#texture" },
    				"north": { "uv" : [ 1, 14, 15, 16 ], "texture" : "#texture" },
    				"south": { "uv" : [ 1, 14, 15, 16 ], "texture" : "#texture" },
    				"west" : { "uv" : [ 4, 14, 12, 16 ], "texture" : "#texture" },
    				"east" : { "uv" : [ 4, 14, 12, 16 ], "texture" : "#texture" }
    			}
    		}
    	]
    }

     

     

    Can anyone tell me why model is not adapted and block has strange collision box?

  7. Thank you for your advice.

    I tried following codes, However NullPointerException occured.

    package doph.niho.cookmod.init;
    
    import doph.niho.cookmod.block.BlockManaita;
    import doph.niho.cookmod.itemblock.BaseItemBlock;
    import doph.niho.cookmod.itemblock.ItemBlockManaita;
    import net.minecraft.block.Block;
    import net.minecraft.client.renderer.block.model.ModelResourceLocation;
    import net.minecraft.item.Item;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.fml.common.registry.ForgeRegistries;
    
    public class BlockRegisterer {
    
    	public static Block manaita;
    
    	public static BaseItemBlock manaitaItem;
    
    	public static void RegisterModel() {
    		RegisterRender(manaita, "_oak", "_spruce", "_birch", "_jungle", "_acacia", "_dark_oak");
    	}
    
    	public static void RegisterFood() {
    		ForgeRegistries.BLOCKS.register(manaita);
    	}
    
    	public static void RegisterItemBlock() {
    		ForgeRegistries.ITEMS.register(manaitaItem);
    	}
    
    	public static void RegisterRender(Block block, String... subName) {
    		int len = subName.length;
    		if (len == 0) {
    			ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,
    					new ModelResourceLocation(block.getRegistryName(), "inventory"));
    		} else {
    			for (String str : subName) {
    				ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,
    						new ModelResourceLocation(block.getRegistryName() + str, "inventory"));
    			}
    		}
    	}
    
    	public static void Init() {
    		manaita = new BlockManaita();
    		manaitaItem = new ItemBlockManaita();
    	}
    }

     

    package doph.niho.cookmod.itemblock;
    
    import doph.niho.cookmod.init.BlockRegisterer;
    import doph.niho.cookmod.system.Define;
    import net.minecraft.util.ResourceLocation;
    
    public class ItemBlockManaita extends BaseItemBlock{
    
    	public ItemBlockManaita() {
    		super(BlockRegisterer.manaita);
    		this.setRegistryName(new ResourceLocation(Define.MODID, "manaita"));
    		this.setUnlocalizedName("manaita");
    	}
    
    }

     

    Error Log :

    java.lang.NullPointerException: Can't use a null-name for the registry, object null.
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:864) ~[guava-21.0.jar:?]
        at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:287) ~[ForgeRegistry.class:?]
        at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:281) ~[ForgeRegistry.class:?]
        at net.minecraftforge.registries.ForgeRegistry.register(ForgeRegistry.java:114) ~[ForgeRegistry.class:?]
        at doph.niho.cookmod.init.BlockRegisterer.RegisterFood(BlockRegisterer.java:23) ~[BlockRegisterer.class:?]
        at doph.niho.cookmod.system.Main.OnBlocksRegistered(Main.java:37) ~[Main.class:?]
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_Main_OnBlocksRegistered_Register.invoke(.dynamic) ~[?:?]
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
        at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:143) ~[EventBus$1.class:?]
        at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:179) [EventBus.class:?]
        at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:736) [GameData.class:?]
        at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:604) [Loader.class:?]
        at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:270) [FMLClientHandler.class:?]
        at net.minecraft.client.Minecraft.init(Minecraft.java:513) [Minecraft.class:?]
        at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
        at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
        at GradleStart.main(GradleStart.java:26) [start/:?]

     

    java.lang.NullPointerException: Can't use a null-name for the registry, object null.
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:864)
        at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:287)
        at net.minecraftforge.registries.ForgeRegistry.add(ForgeRegistry.java:281)
        at net.minecraftforge.registries.ForgeRegistry.register(ForgeRegistry.java:114)
        at doph.niho.cookmod.init.BlockRegisterer.RegisterFood(BlockRegisterer.java:23)
        at doph.niho.cookmod.system.Main.OnBlocksRegistered(Main.java:37)
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_Main_OnBlocksRegistered_Register.invoke(.dynamic)
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
        at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:143)
        at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:179)
        at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:736)
        at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:604)
        at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:270)
        at net.minecraft.client.Minecraft.init(Minecraft.java:513)
        at net.minecraft.client.Minecraft.run(Minecraft.java:421)
        at net.minecraft.client.main.Main.main(Main.java:118)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
        at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
        at GradleStart.main(GradleStart.java:26)

  8. Hello. This is my first topic.

     

    I am trying to add new block on forge 1.12.2. I Succeeded to add new Block with following code : 

    // Main.java
    package doph.niho.cookmod.system;
    
    import java.util.Iterator;
    
    import doph.niho.cookmod.init.BlockRegisterer;
    import doph.niho.cookmod.init.CookModFood;
    import doph.niho.cookmod.init.RecipeDeleter;
    import net.minecraft.advancements.Advancement;
    import net.minecraft.block.Block;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemFood;
    import net.minecraft.item.crafting.IRecipe;
    import net.minecraftforge.common.DimensionManager;
    import net.minecraftforge.event.RegistryEvent;
    import net.minecraftforge.event.world.WorldEvent;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
    import net.minecraftforge.fml.common.Mod.EventHandler;
    import net.minecraftforge.fml.common.event.FMLInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
    import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
    
    @Mod(modid = Define.MODID, name = Define.MOD_NAME, version = Define.MOD_VERSION, acceptedMinecraftVersions = Define.MOD_MC_VERSION)
    @EventBusSubscriber
    public class Main {
    
    	@SubscribeEvent
    	public static void OnItemsRegistered(RegistryEvent.Register<Item> e) {
    		CookModFood.RegisterFood();
    		BlockRegisterer.Init();
    		BlockRegisterer.RegisterItemBlock();
    	}
    
    	@SubscribeEvent
    	public static void OnBlocksRegistered(RegistryEvent.Register<Block> e) {
    		BlockRegisterer.RegisterFood();
    	}
    
    	@SubscribeEvent
    	public static void OnRecipesRegistered(RegistryEvent.Register<IRecipe> e) {
    		RecipeDeleter.DeleteRecipe();
    	}
    
    	// ファイルの読み込みやブロック等の登録
    	@EventHandler
    	public void PreInit(FMLPreInitializationEvent e) {
    	}
    
    	// レシピ追加、Mod用の各種データ設定
    	@EventHandler
    	public void Init(FMLInitializationEvent e) {
    		BlockRegisterer.RegisterModel();
    		CookModFood.RegisterModel();
    	}
    
    	// 他MODとの連携
    	@EventHandler
    	public void PostInit(FMLPostInitializationEvent e) {
    	}
    }
    //BlockRegisterer.java
    package doph.niho.cookmod.init;
    
    import doph.niho.cookmod.block.BlockManaita;
    import net.minecraft.block.Block;
    import net.minecraft.client.renderer.block.model.ModelResourceLocation;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.fml.common.registry.ForgeRegistries;
    
    public class BlockRegisterer {
    
    	public static Block manaita;
    
    	public static ItemBlock manaitaItem;
    
    	public static void RegisterModel() {
    		RegisterRender(manaita, "_oak", "_spruce", "_birch", "_jungle", "_acacia", "_dark_oak");
    	}
    
    	public static void RegisterFood() {
    		ForgeRegistries.BLOCKS.register(manaita);
    	}
    
    	public static void RegisterItemBlock() {
    		ForgeRegistries.ITEMS.register(manaitaItem);
    	}
    
    	public static void RegisterRender(Block block, String... subName) {
    		int len = subName.length;
    		if (len == 0) {
    			ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,
    					new ModelResourceLocation(block.getRegistryName(), "inventory"));
    		} else {
    			for (String str : subName) {
    				ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0,
    						new ModelResourceLocation(block.getRegistryName() + str, "inventory"));
    			}
    		}
    	}
    
    	public static void Init() {
    		manaita = new BlockManaita();
    		manaitaItem = new ItemBlock(manaita);
    	}
    }

    I could add Block, but when try to register ItemBlock, NullPointerException occur, so I can't register Block as Item.

    How to register or create instance of ItemBlock?

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.