Hello everyone!
I`m a novice in the forge modding, but have some basic skills and know basics about creating custom blocks, items and something else.
I work on rewriting a 1.7.10 mod for my new 1.12.2 server as author abandoned its developing.
I simply created main mod class, proxy, block and item registers, added new stone and wood blocks with metadata and create custom fence and gate with different textures.
But I have a problem with my custom walls. When my wall class inherits BlockWall class, I get two items in my inventory - one normal with texture and second bad. They are fully similar in the world and have similar IDs:
When I change BlockWall to BlockFence and make some changes in my constructor and models json files, everything is going fine and there are no more dublicates. But may be there is a right way to make them from BlockWall class, nor BlockFence? BlocksRegister.class
package de.shittyco.morematerials.blocks;
import de.shittyco.morematerials.blocks.fence.BlockBrickFence;
import de.shittyco.morematerials.blocks.fence.BlockBrickFenceGate;
import de.shittyco.morematerials.blocks.wall.BlockStainedBrickWall;
import de.shittyco.morematerials.utils.ColorUtility;
import de.shittyco.morematerials.utils.WoodUtility;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelBakery;
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;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BlocksRegister {
public static Block stainedBrickBlocks = new BlockStainedBricks();
public static Block woodenFrame = new BlockWoodenFrame();
public static Block backslashWoodenFrame = new BlockBackslashWoodenFrame();
public static Block crossWoodenFrame = new BlockCrossWoodenFrame();
public static Block slashWoodenFrame = new BlockSlashWoodenFrame();
public static Block brick_fence_black = new BlockBrickFence("brick_fence_black");
public static Block brick_fence_gate_black = new BlockBrickFenceGate("brick_fence_gate_black");
public static Block brick_fence_blue = new BlockBrickFence("brick_fence_blue");
public static Block brick_fence_gate_blue = new BlockBrickFenceGate("brick_fence_gate_blue");
public static Block brick_fence_brown = new BlockBrickFence("brick_fence_brown");
public static Block brick_fence_gate_brown = new BlockBrickFenceGate("brick_fence_gate_brown");
public static Block brick_fence_cyan = new BlockBrickFence("brick_fence_cyan");
public static Block brick_fence_gate_cyan = new BlockBrickFenceGate("brick_fence_gate_cyan");
public static Block brick_fence_gray = new BlockBrickFence("brick_fence_gray");
public static Block brick_fence_gate_gray = new BlockBrickFenceGate("brick_fence_gate_gray");
public static Block brick_fence_green = new BlockBrickFence("brick_fence_green");
public static Block brick_fence_gate_green = new BlockBrickFenceGate("brick_fence_gate_green");
public static Block brick_fence_light_blue = new BlockBrickFence("brick_fence_light_blue");
public static Block brick_fence_gate_light_blue = new BlockBrickFenceGate("brick_fence_gate_light_blue");
public static Block brick_fence_lime = new BlockBrickFence("brick_fence_lime");
public static Block brick_fence_gate_lime = new BlockBrickFenceGate("brick_fence_gate_lime");
public static Block brick_fence_magenta = new BlockBrickFence("brick_fence_magenta");
public static Block brick_fence_gate_magenta = new BlockBrickFenceGate("brick_fence_gate_magenta");
public static Block brick_fence_orange = new BlockBrickFence("brick_fence_orange");
public static Block brick_fence_gate_orange = new BlockBrickFenceGate("brick_fence_gate_orange");
public static Block brick_fence_pink = new BlockBrickFence("brick_fence_pink");
public static Block brick_fence_gate_pink = new BlockBrickFenceGate("brick_fence_gate_pink");
public static Block brick_fence_purple = new BlockBrickFence("brick_fence_purple");
public static Block brick_fence_gate_purple = new BlockBrickFenceGate("brick_fence_gate_purple");
public static Block brick_fence_red = new BlockBrickFence("brick_fence_red");
public static Block brick_fence_gate_red = new BlockBrickFenceGate("brick_fence_gate_red");
public static Block brick_fence_silver = new BlockBrickFence("brick_fence_silver");
public static Block brick_fence_gate_silver = new BlockBrickFenceGate("brick_fence_gate_silver");
public static Block brick_fence_white = new BlockBrickFence("brick_fence_white");
public static Block brick_fence_gate_white = new BlockBrickFenceGate("brick_fence_gate_white");
public static Block brick_fence_yellow = new BlockBrickFence("brick_fence_yellow");
public static Block brick_fence_gate_yellow = new BlockBrickFenceGate("brick_fence_gate_yellow");
public static Block[] stainedBrickWallBlocks = new BlockStainedBrickWall[ColorUtility.COLOR_COUNT];
public static void register()
{
setRegister(stainedBrickBlocks, new ItemBlockStainedBricks(stainedBrickBlocks));
setRegister(woodenFrame, new ItemBlockWoodenFrame(woodenFrame));
setRegister(backslashWoodenFrame, new ItemBlockWoodenFrame(backslashWoodenFrame));
setRegister(crossWoodenFrame, new ItemBlockWoodenFrame(crossWoodenFrame));
setRegister(slashWoodenFrame, new ItemBlockWoodenFrame(slashWoodenFrame));
for (int i = 0; i < ColorUtility.COLOR_COUNT; i++) {
BlockStainedBrickWall wall = new BlockStainedBrickWall(stainedBrickBlocks, i);
stainedBrickWallBlocks[i] = wall;
setRegister(wall);
}
}
@SideOnly(Side.CLIENT)
public static void registerRender()
{
setRender(stainedBrickBlocks, ColorUtility.COLOR_COUNT, ColorUtility.COLOR_IDS);
setRender(woodenFrame, WoodUtility.WOOD_TYPE_COUNT, WoodUtility.WOOD_TYPE_IDS);
setRender(backslashWoodenFrame, WoodUtility.WOOD_TYPE_COUNT, WoodUtility.WOOD_TYPE_IDS);
setRender(crossWoodenFrame, WoodUtility.WOOD_TYPE_COUNT, WoodUtility.WOOD_TYPE_IDS);
setRender(slashWoodenFrame, WoodUtility.WOOD_TYPE_COUNT, WoodUtility.WOOD_TYPE_IDS);
setRender(brick_fence_black);
setRender(brick_fence_gate_black);
setRender(brick_fence_blue);
setRender(brick_fence_gate_blue);
setRender(brick_fence_brown);
setRender(brick_fence_gate_brown);
setRender(brick_fence_cyan);
setRender(brick_fence_gate_cyan);
setRender(brick_fence_gray);
setRender(brick_fence_gate_gray);
setRender(brick_fence_green);
setRender(brick_fence_gate_green);
setRender(brick_fence_light_blue);
setRender(brick_fence_gate_light_blue);
setRender(brick_fence_lime);
setRender(brick_fence_gate_lime);
setRender(brick_fence_magenta);
setRender(brick_fence_gate_magenta);
setRender(brick_fence_orange);
setRender(brick_fence_gate_orange);
setRender(brick_fence_pink);
setRender(brick_fence_gate_pink);
setRender(brick_fence_purple);
setRender(brick_fence_gate_purple);
setRender(brick_fence_red);
setRender(brick_fence_gate_red);
setRender(brick_fence_silver);
setRender(brick_fence_gate_silver);
setRender(brick_fence_white);
setRender(brick_fence_gate_white);
setRender(brick_fence_yellow);
setRender(brick_fence_gate_yellow);
for (int i = 0; i < stainedBrickWallBlocks.length; i++) {
setRender(stainedBrickWallBlocks[i]);
}
}
private static void setRegister(Block block)
{
ForgeRegistries.BLOCKS.register(block);
ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(block.getRegistryName()));
}
public static void setRegister(Block block, ItemBlock itemBlock)
{
ForgeRegistries.BLOCKS.register(block);
ForgeRegistries.ITEMS.register(itemBlock.setRegistryName(block.getRegistryName()));
}
@SideOnly(Side.CLIENT)
private static void setRender(Block block, int meta_count, String[] meta_name)
{
for (int i = 0; i < meta_count; i++) {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), i, new ModelResourceLocation(block.getRegistryName() + "_" + meta_name[i], "inventory"));
ModelBakery.registerItemVariants(
Item.getItemFromBlock(block),
new ModelResourceLocation(
"morematerials:" + block.getRegistryName(),
"variant=" + block.getRegistryName() + "_" + meta_name[i]));
}
}
@SideOnly(Side.CLIENT)
private static void setRender(Block block)
{
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));
ModelBakery.registerItemVariants(
Item.getItemFromBlock(block),
new ModelResourceLocation(
"morematerials:" + block.getRegistryName(),
"variant=" + block.getRegistryName()));
}
}
BlocksStainedBrickWall.class
/**
* Copyright (C) Jon Rowlett. All rights reserved.
*/
package de.shittyco.morematerials.blocks.wall;
import de.shittyco.morematerials.MoreMaterialsMod;
import de.shittyco.morematerials.blocks.BlockStainedBricks;
import de.shittyco.morematerials.utils.ColorUtility;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFence;
import net.minecraft.block.BlockWall;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
/**
* Different color brick walls.
* @author jrowlett
*
*/
public class BlockStainedBrickWall extends BlockFence {
/**
* base unlocalized name of the block.
*/
private static final String NAME = "stainedBrickWall";
/**
* Block hardness.
*/
private static final float HARDNESS = 2.0f;
/**
* block resistance.
*/
private static final float RESISTANCE = 10.0f;
/**
* color of the bricks.
*/
private int color;
/**
* Initializes a new instance of the BlockStainedBrickWall class.
* @param stainedBrickBlocks the registered stained bricks block.
* @param brickColor color of the bricks.
*/
public BlockStainedBrickWall(Block stainedBrickBlocks, int brickColor) {
super(Material.ROCK, Material.ROCK.getMaterialMapColor());
//super(stainedBrickBlocks);
this.color = brickColor;
this.setRegistryName(getId());
this.setUnlocalizedName(NAME + "." + ColorUtility.COLOR_NAMES[this.color]);
this.setHardness(HARDNESS);
this.setResistance(RESISTANCE);
this.setCreativeTab(MoreMaterialsMod.creativeTab);
}
/**
* Gets the ID to use for registration.
* @return the unique name of the block.
*/
public final String getId() {
return BlockStainedBricks.ID + "_" + ColorUtility.COLOR_IDS[this.color] + "_wall";
}
/**
* Call on init to register the icons for inventory.
* @param proxy the proxy to register the models.
*/
/*
public final void registerModels(
final CommonProxy proxy) {
String id = this.getId();
Item itemBlock = GameUtility.getItemFromBlock(id);
proxy.addModelBakeryVariant(
itemBlock,
"morematerials:" + id);
proxy.registerInventoryModel(
itemBlock,
id,
0);
}
*/
}
ColorUtility.class (for different color blocks with different textures)
/**
* Copyright (C) Jon Rowlett. All rights reserved.
*/
package de.shittyco.morematerials.utils;
/**
* Common Definitions and helpers for color.
* @author jrowlett
*
*/
public final class ColorUtility {
/**
* Common color names (unlocalized) indexed by item damage.
*/
public static final String[] COLOR_NAMES = new String[] {
"black",
"red",
"green",
"brown",
"blue",
"purple",
"cyan",
"silver",
"gray",
"pink",
"lime",
"yellow",
"lightBlue",
"magenta",
"orange",
"white"
};
/**
* Count of total colors.
*/
public static final int COLOR_COUNT = COLOR_NAMES.length;
/**
* Common color tags used for icon name lookup indexed by item damage.
*/
public static final String[] COLOR_IDS = new String[] {
"black",
"red",
"green",
"brown",
"blue",
"purple",
"cyan",
"silver",
"gray",
"pink",
"lime",
"yellow",
"light_blue",
"magenta",
"orange",
"white"
};
/**
* Prevent instantiation of the ColorUtility class.
*/
private ColorUtility() {
}
}