当前位置: 首页 > 知识库问答 >
问题:

Minecraft Forge Moding-带有变体的块没有正确呈现

戚建华
2023-03-14

Minecraft 1.8.9

我已经成功地制作了一个只有一个纹理的块,并且它呈现得很好。我看了一些youtube教程,它起作用了。耶!

然而,我的问题是另一个块,它应该有多个纹理。它最初有一个像另一个块一样的纹理(只是为了练习我的块),但后来我决定它需要元数据和状态。为此,我遵循了本教程,直到它出现BlockRenderRegister.class。我没有制作这个类,它也没有详细说明放在哪里,所以我试着自己去弄清楚剩下的。

package com.cellularautomaton.mod.blocks;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;

public class CellularAutomatonGrid extends Block implements IMetaBlockName{
    public CellularAutomatonGrid(String unlocalizedName, Material material, float hardness, float resistance){
        super(material);
        this.setUnlocalizedName(unlocalizedName);
        this.setCreativeTab(CreativeTabs.tabBlock);
        this.setHardness(hardness);
        this.setResistance(resistance);
        this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE,  EnumType.WHITE));
    }

    @Override
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) {
        list.add(new ItemStack(itemIn, 1, 0)); //Meta 0
        list.add(new ItemStack(itemIn, 1, 1)); //Meta 1
    }
    public CellularAutomatonGrid(String unlocalizedName, float hardness, float resistance){
        this(unlocalizedName, Material.rock, hardness, resistance);
    }

    public CellularAutomatonGrid(String unlocalizedName)
    {
        this(unlocalizedName, 2.0f, 10.0f);
    }

    @Override
    protected BlockState createBlockState(){
        return new BlockState (this, new IProperty[] { TYPE } );
    }

    @Override
    public IBlockState getStateFromMeta(int meta){
        return getDefaultState().withProperty(TYPE,  meta == 0 ?EnumType.WHITE : EnumType.BLACK);
    }

    @Override
    public int getMetaFromState(IBlockState state){
        EnumType type = (EnumType) state.getValue(TYPE);
        return type.getID();
    }

    @Override
    public int damageDropped(IBlockState state){
        return getMetaFromState(state);
    }
    public static final PropertyEnum TYPE = PropertyEnum.create("type", CellularAutomatonGrid.EnumType.class);

    public enum EnumType implements IStringSerializable {
        WHITE(0, "white"),
        BLACK(1, "black");

        private int ID;
        private String name;

        private EnumType(int ID, String name) {
            this.ID = ID;
            this.name = name;
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public String toString(){
            return getName();
        }

        public int getID() {
            return ID;
        }
    }

    @Override
    public String getSpecialName(ItemStack stack) {
        return stack.getItemDamage() == 0 ?"white" :"black";
    }

    @Override
    public ItemStack getPickBlock(MovingObjectPosition target, World world, BlockPos pos){
        return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(world.getBlockState(pos)));

    }

}

我的CellularAutomatonBlocks类:

package com.cellularautomaton.mod.blocks;

import com.cellularautomaton.mod.Reference;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class CellularAutomatonBlocks {

    public static Block cellauto1;
    public static Block cellauto2;

    public static void init(){
        cellauto1 = new CellularAutomatonFrame("cellauto1");
        cellauto2 = new CellularAutomatonGrid("cellauto2");
    }
    public static void register(){
        GameRegistry.registerBlock(cellauto1, cellauto1.getUnlocalizedName().substring(5));
        GameRegistry.registerBlock(cellauto2, ItemBlockMeta.class, "cellauto2");
    }

    public static void registerRenders(){
        registerRender(cellauto1);
        registerRender(cellauto2);
    }
    public static void registerRender(Block block){
        Item item = Item.getItemFromBlock(block);
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
    }
}

如果你需要其他文件就告诉我。谢谢你!

共有1个答案

康赞
2023-03-14

好吧...你跟着教程走,碰到了和我碰到的一样的症结。至少我不是唯一一个;-)

对我有帮助的是下载提供的源代码。
在bedrockminers教程中,您通常会发现隐藏的链接

您可以从这里下载本教程中使用的代码作为.zip文件

 类似资料:
  • 我正在使用Jpa和Hibernate。 我的项目中发生了一件非常奇怪的事情。 我有两个实体:学生和课程,多对多的关系。 很长一段时间内,一切都运行得很好,但突然我遇到了这个问题: 当我找到一个特定的学生(em.find)并使用getter(student.getcourses)返回其课程列表时,我只收到列表的一部分!如果我使用一个查询(“Select s.cources from Students

  • 为了解决这个问题,我尝试了许多JDK版本,但似乎无论我使用哪个java,结果总是一样的。 MavenReportException:创建存档时出错:无法找到javadoc命令:未正确设置环境变量JAVA_HOME。 我跑了: 导出JAVA_HOME=/usr/lib/jvm/JAVA-8-openjdk-amd64 : MavenReportException:创建存档时出错:无法找到javado

  • 我已经用Gradle 4.0.1安装了Android Studio 2.3.3,它工作得很好,但有一天它似乎没有正确加载。我构建了Gradle,清理并重建了我的项目,它表明构建是正确的,我甚至可以编译,但IDE中的所有内容都是红色的,就像它没有加载库一样。会是什么?很抱歉解释得太短,但这是我的全部。

  • 问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一

  • 问题内容: 在FF或Chrome中渲染时,红色div的高度为26px,而黄色div的高度为20px。如何使红色的div呈现与黄色的div相同,但不包含任何文本呢? 问题答案: 只是一个想法: 只要div中没有​​文本,就将其视为行内图像(或其他内容),因此将vertical-align设置为“基准”(或文本底部或其他内容)而不是“底部”。 解决方案: 要更正此问题,请在您的内部div上进行设置。绝

  • 我正在加密字符串并将其存储在客户端的cookie中。。但是,当我从js向java代码发送完全加密的字符串时,它给出了前面提到的异常。 我用于加密和解密的代码是: 你能告诉我问题是什么吗??我尝试过stackoverflow上提到的解决方案。com和其他一些解决方案,但都不起作用。。我收到这个错误是因为我将加密字符串发送到JS,而它正在更改字符串的填充吗?