K10
-
Posts
19 -
Joined
-
Last visited
Posts posted by K10
-
-
Thanks, I see.
However, How can I add other 15 prismarine metadata? Are there any way to add block metadata over 16? I thisk it is not able.
Do you have any idea for adding other 15 blocks in existing prismarine block?
Must I add block which has 15 other metadata in my mod?
-
Thanks for your advice. I want to change not item name but registry name. Otherwise, I want to add variant as other 15 colored prismarine block.
In my ideal, my mod have "prismarine block" and "prismarine bricks block" and "colored prismarine block" registry name.
-
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 gamejava.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 -
Thanks for a lot of advices!
I tried them and it worked well!
-
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 ?
-
Sorry, I have not updated and get tile entity packet anytime.
So now Tile Entity returns custom name!!
-
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?
-
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!
-
Thanks for your advice. However, The method still returns null
-
Hello. I created a block which has a tile entity. However, when I access to the tile entity by using getTileEntity(BlockPos), the return value is null. In spite of I create tile entity by createNewTileEntity(World, int) method, it seems tile entity does not exist. Can anyone tell why this happened? Here is my all source code.
-
Sorry I used github via web browser.
-
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.
QuoteProblematic code, issue 2.
There are not enough document about forge tutorial in Japan, so I have to study old article...
QuoteYou 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.
QuoteModelBakery.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.
-
OK, here is a my all code.
-
Sorry, I forgot to say that these methods is called from
@SubscribeEvent
public static void OnBlockRegistered(RegistryEvent.Register<Block> e);
@SubscribeEvent
public static void OnItemRegistered(RegistryEvent.Register<Item> e);
-
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
Spoilerpackage 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
Spoilerpackage 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?
-
Thank you. I called method creates instance of ItemBlock at FMLPreInitializationEvent, Error disappered. Finally, I could add ItemBlock to minecraft!
-
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) -
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?
[SOLVED] [1.12.2] How to devide vanilla block with their variant
in Modder Support
Posted
OK, I see.
Thanks for your easy and gentle advises.