java - 在我的世界 1.8 上使用 forge api 创建生物

标签 java minecraft minecraft-forge

首先抱歉,我第一次在这里问问题,之前语无伦次。

所以问题就在这里。我使用 forge api 来修改我正在通过 eclipse 运行的minecraft。我尝试修改的版本是 1.8 版,据我所知,1.8 在渲染方式方面带来了新的变化。

我试图做的是创建一个暴徒,我可以出于测试原因生成它。我想使用一个基本的人形模型,并在其上放置一个自定义(类似史蒂夫)的皮肤。 (我暂时忽略行为和声音等,我只想让它产生,然后我可以专注于额外的部分)。

我为生物创建了一个类,它扩展了实体生物,并尝试将其添加到实体列表中。

package com.drhydrolics.disccraft.entities;

import com.sun.prism.paint.Color;

import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.EntityCreature;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.EntityRegistry;

public class DEATH extends EntityCreature{

    public DEATH(World worldIn) {
        super(worldIn);
        int entityId =  EntityRegistry.findGlobalUniqueEntityId();
        EntityRegistry.registerGlobalEntityID(DEATH.class, "DEATH",  entityId);
        EntityRegistry.registerGlobalEntityID(DEATH.class, "DEATH", entityId, 1, 1);

    }




} 

在尝试查找纹理应用于类的位置时,我找到了 RenderManager 和 sculptureRenderer,并将自定义暴民添加到 renderManager 类中 包 net.minecraft.client.renderer.entity;

import com.google.common.collect.Maps;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBed;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.model.ModelChicken;
import net.minecraft.client.model.ModelCow;
import net.minecraft.client.model.ModelHorse;
import net.minecraft.client.model.ModelOcelot;
import net.minecraft.client.model.ModelPig;
import net.minecraft.client.model.ModelRabbit;
import net.minecraft.client.model.ModelSheep2;
import net.minecraft.client.model.ModelSlime;
import net.minecraft.client.model.ModelSquid;
import net.minecraft.client.model.ModelWolf;
import net.minecraft.client.model.ModelZombie;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.culling.ICamera;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.tileentity.RenderEnderCrystal;
import net.minecraft.client.renderer.tileentity.RenderItemFrame;
import net.minecraft.client.renderer.tileentity.RenderWitherSkull;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLeashKnot;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.ai.EntityMinecartMobSpawner;
import net.minecraft.entity.boss.EntityDragon;
import net.minecraft.entity.boss.EntityWither;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.entity.item.EntityBoat;
import net.minecraft.entity.item.EntityEnderCrystal;
import net.minecraft.entity.item.EntityEnderEye;
import net.minecraft.entity.item.EntityEnderPearl;
import net.minecraft.entity.item.EntityExpBottle;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.entity.item.EntityFireworkRocket;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.item.EntityMinecartTNT;
import net.minecraft.entity.item.EntityPainting;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityCaveSpider;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.monster.EntityEndermite;
import net.minecraft.entity.monster.EntityGhast;
import net.minecraft.entity.monster.EntityGiantZombie;
import net.minecraft.entity.monster.EntityGuardian;
import net.minecraft.entity.monster.EntityIronGolem;
import net.minecraft.entity.monster.EntityMagmaCube;
import net.minecraft.entity.monster.EntityPigZombie;
import net.minecraft.entity.monster.EntitySilverfish;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntitySlime;
import net.minecraft.entity.monster.EntitySnowman;
import net.minecraft.entity.monster.EntitySpider;
import net.minecraft.entity.monster.EntityWitch;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityBat;
import net.minecraft.entity.passive.EntityChicken;
import net.minecraft.entity.passive.EntityCow;
import net.minecraft.entity.passive.EntityHorse;
import net.minecraft.entity.passive.EntityMooshroom;
import net.minecraft.entity.passive.EntityOcelot;
import net.minecraft.entity.passive.EntityPig;
import net.minecraft.entity.passive.EntityRabbit;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.passive.EntitySquid;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.passive.EntityWolf;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityEgg;
import net.minecraft.entity.projectile.EntityFishHook;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.entity.projectile.EntityPotion;
import net.minecraft.entity.projectile.EntitySmallFireball;
import net.minecraft.entity.projectile.EntitySnowball;
import net.minecraft.entity.projectile.EntityWitherSkull;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ReportedException;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class RenderManager
{
    public Map entityRenderMap = Maps.newHashMap();
    private Map skinMap = Maps.newHashMap();
    private RenderPlayer field_178637_m;
    private FontRenderer textRenderer;
    private double renderPosX;
    private double renderPosY;
    private double renderPosZ;
    public TextureManager renderEngine;
    public World worldObj;
    public Entity livingPlayer;
    public Entity pointedEntity;
    public float playerViewY;
    public float playerViewX;
    public GameSettings options;
    public double viewerPosX;
    public double viewerPosY;
    public double viewerPosZ;
    private boolean renderOutlines = false;
    private boolean renderShadow = true;
    private boolean debugBoundingBox = false;
    private static final String __OBFID = "CL_00000991";

    public RenderManager(TextureManager p_i46180_1_, RenderItem p_i46180_2_)
    {
        this.renderEngine = p_i46180_1_;
        this.entityRenderMap.put(DEATH.class, new RenderDEATH(this));
        this.entityRenderMap.put(EntityCaveSpider.class, new RenderCaveSpider(this));
        this.entityRenderMap.put(EntitySpider.class, new RenderSpider(this));
        this.entityRenderMap.put(EntityPig.class, new RenderPig(this, new ModelPig(), 0.7F));
        this.entityRenderMap.put(EntitySheep.class, new RenderSheep(this, new ModelSheep2(), 0.7F));
        this.entityRenderMap.put(EntityCow.class, new RenderCow(this, new ModelCow(), 0.7F));
        this.entityRenderMap.put(EntityMooshroom.class, new RenderMooshroom(this, new ModelCow(), 0.7F));
        this.entityRenderMap.put(EntityWolf.class, new RenderWolf(this, new ModelWolf(), 0.5F));
        this.entityRenderMap.put(EntityChicken.class, new RenderChicken(this, new ModelChicken(), 0.3F));
        this.entityRenderMap.put(EntityOcelot.class, new RenderOcelot(this, new ModelOcelot(), 0.4F));
        this.entityRenderMap.put(EntityRabbit.class, new RenderRabbit(this, new ModelRabbit(), 0.3F));
        this.entityRenderMap.put(EntitySilverfish.class, new RenderSilverfish(this));
        this.entityRenderMap.put(EntityEndermite.class, new RenderEndermite(this));
        this.entityRenderMap.put(EntityCreeper.class, new RenderCreeper(this));
        this.entityRenderMap.put(EntityEnderman.class, new RenderEnderman(this));
        this.entityRenderMap.put(EntitySnowman.class, new RenderSnowMan(this));
        this.entityRenderMap.put(EntitySkeleton.class, new RenderSkeleton(this));
        this.entityRenderMap.put(EntityWitch.class, new RenderWitch(this));
        this.entityRenderMap.put(EntityBlaze.class, new RenderBlaze(this));
        this.entityRenderMap.put(EntityPigZombie.class, new RenderPigZombie(this));
        this.entityRenderMap.put(EntityZombie.class, new RenderZombie(this));
        this.entityRenderMap.put(EntitySlime.class, new RenderSlime(this, new ModelSlime(16), 0.25F));
        this.entityRenderMap.put(EntityMagmaCube.class, new RenderMagmaCube(this));
        this.entityRenderMap.put(EntityGiantZombie.class, new RenderGiantZombie(this, new ModelZombie(), 0.5F, 6.0F));
        this.entityRenderMap.put(EntityGhast.class, new RenderGhast(this));
        this.entityRenderMap.put(EntitySquid.class, new RenderSquid(this, new ModelSquid(), 0.7F));
        this.entityRenderMap.put(EntityVillager.class, new RenderVillager(this));
        this.entityRenderMap.put(EntityIronGolem.class, new RenderIronGolem(this));
        this.entityRenderMap.put(EntityBat.class, new RenderBat(this));
        this.entityRenderMap.put(EntityGuardian.class, new RenderGuardian(this));
        this.entityRenderMap.put(EntityDragon.class, new RenderDragon(this));
        this.entityRenderMap.put(EntityEnderCrystal.class, new RenderEnderCrystal(this));
        this.entityRenderMap.put(EntityWither.class, new RenderWither(this));
        this.entityRenderMap.put(Entity.class, new RenderEntity(this));
        this.entityRenderMap.put(EntityPainting.class, new RenderPainting(this));
        this.entityRenderMap.put(EntityItemFrame.class, new RenderItemFrame(this, p_i46180_2_));
        this.entityRenderMap.put(EntityLeashKnot.class, new RenderLeashKnot(this));
        this.entityRenderMap.put(EntityArrow.class, new RenderArrow(this));
        this.entityRenderMap.put(EntitySnowball.class, new RenderSnowball(this, Items.snowball, p_i46180_2_));
        this.entityRenderMap.put(EntityEnderPearl.class, new RenderSnowball(this, Items.ender_pearl, p_i46180_2_));
        this.entityRenderMap.put(EntityEnderEye.class, new RenderSnowball(this, Items.ender_eye, p_i46180_2_));
        this.entityRenderMap.put(EntityEgg.class, new RenderSnowball(this, Items.egg, p_i46180_2_));
        this.entityRenderMap.put(EntityPotion.class, new RenderPotion(this, p_i46180_2_));
        this.entityRenderMap.put(EntityExpBottle.class, new RenderSnowball(this, Items.experience_bottle, p_i46180_2_));
        this.entityRenderMap.put(EntityFireworkRocket.class, new RenderSnowball(this, Items.fireworks, p_i46180_2_));
        this.entityRenderMap.put(EntityLargeFireball.class, new RenderFireball(this, 2.0F));
        this.entityRenderMap.put(EntitySmallFireball.class, new RenderFireball(this, 0.5F));
        this.entityRenderMap.put(EntityWitherSkull.class, new RenderWitherSkull(this));
        this.entityRenderMap.put(EntityItem.class, new RenderEntityItem(this, p_i46180_2_));
        this.entityRenderMap.put(EntityXPOrb.class, new RenderXPOrb(this));
        this.entityRenderMap.put(EntityTNTPrimed.class, new RenderTNTPrimed(this));
        this.entityRenderMap.put(EntityFallingBlock.class, new RenderFallingBlock(this));
        this.entityRenderMap.put(EntityArmorStand.class, new ArmorStandRenderer(this));
        this.entityRenderMap.put(EntityMinecartTNT.class, new RenderTntMinecart(this));
        this.entityRenderMap.put(EntityMinecartMobSpawner.class, new RenderMinecartMobSpawner(this));
        this.entityRenderMap.put(EntityMinecart.class, new RenderMinecart(this));
        this.entityRenderMap.put(EntityBoat.class, new RenderBoat(this));
        this.entityRenderMap.put(EntityFishHook.class, new RenderFish(this));
        this.entityRenderMap.put(EntityHorse.class, new RenderHorse(this, new ModelHorse(), 0.75F));
        this.entityRenderMap.put(EntityLightningBolt.class, new RenderLightningBolt(this));
        this.field_178637_m = new RenderPlayer(this);
        this.skinMap.put("default", this.field_178637_m);
        this.skinMap.put("slim", new RenderPlayer(this, true));
    }

    public void setRenderPosition(double p_178628_1_, double p_178628_3_, double p_178628_5_)
    {
        this.renderPosX = p_178628_1_;
        this.renderPosY = p_178628_3_;
        this.renderPosZ = p_178628_5_;
    }

    public Render getEntityClassRenderObject(Class p_78715_1_)
    {
        Render render = (Render)this.entityRenderMap.get(p_78715_1_);

        if (render == null && p_78715_1_ != Entity.class)
        {
            render = this.getEntityClassRenderObject(p_78715_1_.getSuperclass());
            this.entityRenderMap.put(p_78715_1_, render);
        }

        return render;
    }

    public Render getEntityRenderObject(Entity p_78713_1_)
    {
        if (p_78713_1_ instanceof AbstractClientPlayer)
        {
            String s = ((AbstractClientPlayer)p_78713_1_).getSkinType();
            RenderPlayer renderplayer = (RenderPlayer)this.skinMap.get(s);
            return renderplayer != null ? renderplayer : this.field_178637_m;
        }
        else
        {
            return this.getEntityClassRenderObject(p_78713_1_.getClass());
        }
    }

    public void cacheActiveRenderInfo(World worldIn, FontRenderer p_180597_2_, Entity p_180597_3_, Entity p_180597_4_, GameSettings p_180597_5_, float p_180597_6_)
    {
        this.worldObj = worldIn;
        this.options = p_180597_5_;
        this.livingPlayer = p_180597_3_;
        this.pointedEntity = p_180597_4_;
        this.textRenderer = p_180597_2_;

        if (p_180597_3_ instanceof EntityLivingBase && ((EntityLivingBase)p_180597_3_).isPlayerSleeping())
        {
            IBlockState iblockstate = worldIn.getBlockState(new BlockPos(p_180597_3_));
            Block block = iblockstate.getBlock();

            if (block.isBed(worldIn, new BlockPos(p_180597_3_), (EntityLivingBase)p_180597_3_))
            {
                int i = block.getBedDirection(worldIn, new BlockPos(p_180597_3_)).getHorizontalIndex();
                this.playerViewY = (float)(i * 90 + 180);
                this.playerViewX = 0.0F;
            }
        }
        else
        {
            this.playerViewY = p_180597_3_.prevRotationYaw + (p_180597_3_.rotationYaw - p_180597_3_.prevRotationYaw) * p_180597_6_;
            this.playerViewX = p_180597_3_.prevRotationPitch + (p_180597_3_.rotationPitch - p_180597_3_.prevRotationPitch) * p_180597_6_;
        }

        if (p_180597_5_.thirdPersonView == 2)
        {
            this.playerViewY += 180.0F;
        }

        this.viewerPosX = p_180597_3_.lastTickPosX + (p_180597_3_.posX - p_180597_3_.lastTickPosX) * (double)p_180597_6_;
        this.viewerPosY = p_180597_3_.lastTickPosY + (p_180597_3_.posY - p_180597_3_.lastTickPosY) * (double)p_180597_6_;
        this.viewerPosZ = p_180597_3_.lastTickPosZ + (p_180597_3_.posZ - p_180597_3_.lastTickPosZ) * (double)p_180597_6_;
    }

    public void setPlayerViewY(float p_178631_1_)
    {
        this.playerViewY = p_178631_1_;
    }

    public boolean isRenderShadow()
    {
        return this.renderShadow;
    }

    public void setRenderShadow(boolean p_178633_1_)
    {
        this.renderShadow = p_178633_1_;
    }

    public void setDebugBoundingBox(boolean p_178629_1_)
    {
        this.debugBoundingBox = p_178629_1_;
    }

    public boolean isDebugBoundingBox()
    {
        return this.debugBoundingBox;
    }

    public boolean renderEntitySimple(Entity p_147937_1_, float p_147937_2_)
    {
        return this.renderEntityStatic(p_147937_1_, p_147937_2_, false);
    }

    public boolean shouldRender(Entity p_178635_1_, ICamera p_178635_2_, double p_178635_3_, double p_178635_5_, double p_178635_7_)
    {
        Render render = this.getEntityRenderObject(p_178635_1_);
        return render != null && render.shouldRender(p_178635_1_, p_178635_2_, p_178635_3_, p_178635_5_, p_178635_7_);
    }

    public boolean renderEntityStatic(Entity entity, float partialTicks, boolean p_147936_3_)
    {
        if (entity.ticksExisted == 0)
        {
            entity.lastTickPosX = entity.posX;
            entity.lastTickPosY = entity.posY;
            entity.lastTickPosZ = entity.posZ;
        }

        double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks;
        double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks;
        double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks;
        float f1 = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks;
        int i = entity.getBrightnessForRender(partialTicks);

        if (entity.isBurning())
        {
            i = 15728880;
        }

        int j = i % 65536;
        int k = i / 65536;
        OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
        GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
        return this.doRenderEntity(entity, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ, f1, partialTicks, p_147936_3_);
    }

    public void renderWitherSkull(Entity p_178630_1_, float p_178630_2_)
    {
        double d0 = p_178630_1_.lastTickPosX + (p_178630_1_.posX - p_178630_1_.lastTickPosX) * (double)p_178630_2_;
        double d1 = p_178630_1_.lastTickPosY + (p_178630_1_.posY - p_178630_1_.lastTickPosY) * (double)p_178630_2_;
        double d2 = p_178630_1_.lastTickPosZ + (p_178630_1_.posZ - p_178630_1_.lastTickPosZ) * (double)p_178630_2_;
        Render render = this.getEntityRenderObject(p_178630_1_);

        if (render != null && this.renderEngine != null)
        {
            int i = p_178630_1_.getBrightnessForRender(p_178630_2_);
            int j = i % 65536;
            int k = i / 65536;
            OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
            GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
            render.renderName(p_178630_1_, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ);
        }
    }

    public boolean renderEntityWithPosYaw(Entity p_147940_1_, double p_147940_2_, double p_147940_4_, double p_147940_6_, float p_147940_8_, float p_147940_9_)
    {
        return this.doRenderEntity(p_147940_1_, p_147940_2_, p_147940_4_, p_147940_6_, p_147940_8_, p_147940_9_, false);
    }

    public boolean doRenderEntity(Entity entity, double x, double y, double z, float p_147939_8_, float partialTicks, boolean p_147939_10_)
    {
        Render render = null;

        try
        {
            render = this.getEntityRenderObject(entity);

            if (render != null && this.renderEngine != null)
            {
                try
                {
                    if (render instanceof RendererLivingEntity)
                    {
                        ((RendererLivingEntity)render).setRenderOutlines(this.renderOutlines);
                    }

                    render.doRender(entity, x, y, z, p_147939_8_, partialTicks);
                }
                catch (Throwable throwable2)
                {
                    throw new ReportedException(CrashReport.makeCrashReport(throwable2, "Rendering entity in world"));
                }

                try
                {
                    if (!this.renderOutlines)
                    {
                        render.doRenderShadowAndFire(entity, x, y, z, p_147939_8_, partialTicks);
                    }
                }
                catch (Throwable throwable1)
                {
                    throw new ReportedException(CrashReport.makeCrashReport(throwable1, "Post-rendering entity in world"));
                }

                if (this.debugBoundingBox && !entity.isInvisible() && !p_147939_10_)
                {
                    try
                    {
                        this.renderDebugBoundingBox(entity, x, y, z, p_147939_8_, partialTicks);
                    }
                    catch (Throwable throwable)
                    {
                        throw new ReportedException(CrashReport.makeCrashReport(throwable, "Rendering entity hitbox in world"));
                    }
                }
            }
            else if (this.renderEngine != null)
            {
                return false;
            }

            return true;
        }
        catch (Throwable throwable3)
        {
            CrashReport crashreport = CrashReport.makeCrashReport(throwable3, "Rendering entity in world");
            CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity being rendered");
            entity.addEntityCrashInfo(crashreportcategory);
            CrashReportCategory crashreportcategory1 = crashreport.makeCategory("Renderer details");
            crashreportcategory1.addCrashSection("Assigned renderer", render);
            crashreportcategory1.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(x, y, z));
            crashreportcategory1.addCrashSection("Rotation", Float.valueOf(p_147939_8_));
            crashreportcategory1.addCrashSection("Delta", Float.valueOf(partialTicks));
            throw new ReportedException(crashreport);
        }
    }

    private void renderDebugBoundingBox(Entity p_85094_1_, double p_85094_2_, double p_85094_4_, double p_85094_6_, float p_85094_8_, float p_85094_9_)
    {
        GlStateManager.depthMask(false);
        GlStateManager.disableTexture2D();
        GlStateManager.disableLighting();
        GlStateManager.disableCull();
        GlStateManager.disableBlend();
        float f2 = p_85094_1_.width / 2.0F;
        AxisAlignedBB axisalignedbb = p_85094_1_.getEntityBoundingBox();
        AxisAlignedBB axisalignedbb1 = new AxisAlignedBB(axisalignedbb.minX - p_85094_1_.posX + p_85094_2_, axisalignedbb.minY - p_85094_1_.posY + p_85094_4_, axisalignedbb.minZ - p_85094_1_.posZ + p_85094_6_, axisalignedbb.maxX - p_85094_1_.posX + p_85094_2_, axisalignedbb.maxY - p_85094_1_.posY + p_85094_4_, axisalignedbb.maxZ - p_85094_1_.posZ + p_85094_6_);
        RenderGlobal.drawOutlinedBoundingBox(axisalignedbb1, 16777215);

        if (p_85094_1_ instanceof EntityLivingBase)
        {
            float f3 = 0.01F;
            RenderGlobal.drawOutlinedBoundingBox(new AxisAlignedBB(p_85094_2_ - (double)f2, p_85094_4_ + (double)p_85094_1_.getEyeHeight() - 0.009999999776482582D, p_85094_6_ - (double)f2, p_85094_2_ + (double)f2, p_85094_4_ + (double)p_85094_1_.getEyeHeight() + 0.009999999776482582D, p_85094_6_ + (double)f2), 16711680);
        }

        Tessellator tessellator = Tessellator.getInstance();
        WorldRenderer worldrenderer = tessellator.getWorldRenderer();
        Vec3 vec3 = p_85094_1_.getLook(p_85094_9_);
        worldrenderer.startDrawing(3);
        worldrenderer.setColorOpaque_I(255);
        worldrenderer.addVertex(p_85094_2_, p_85094_4_ + (double)p_85094_1_.getEyeHeight(), p_85094_6_);
        worldrenderer.addVertex(p_85094_2_ + vec3.xCoord * 2.0D, p_85094_4_ + (double)p_85094_1_.getEyeHeight() + vec3.yCoord * 2.0D, p_85094_6_ + vec3.zCoord * 2.0D);
        tessellator.draw();
        GlStateManager.enableTexture2D();
        GlStateManager.enableLighting();
        GlStateManager.enableCull();
        GlStateManager.disableBlend();
        GlStateManager.depthMask(true);
    }

    public void set(World worldIn)
    {
        this.worldObj = worldIn;
    }

    public double getDistanceToCamera(double p_78714_1_, double p_78714_3_, double p_78714_5_)
    {
        double d3 = p_78714_1_ - this.viewerPosX;
        double d4 = p_78714_3_ - this.viewerPosY;
        double d5 = p_78714_5_ - this.viewerPosZ;
        return d3 * d3 + d4 * d4 + d5 * d5;
    }

    public FontRenderer getFontRenderer()
    {
        return this.textRenderer;
    }

    public void setRenderOutlines(boolean p_178632_1_)
    {
        this.renderOutlines = p_178632_1_;
    }
}

最后,我创建了一个渲染死亡类,它扩展了我从骨架渲染器扩展的骨架,希望能得到一些工作,但我现在把头撞在墙上,包 com.drHydrolics.disccraft.entities.Renderers;

import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderSkeleton;
import net.minecraft.util.ResourceLocation;

public class renderDEATH extends RenderSkeleton {

    public renderDEATH(RenderManager p_i46143_1_) {
        super(p_i46143_1_);
        // TODO Auto-generated constructor stub
    }

    private static final ResourceLocation DeathTextures = new ResourceLocation("assets/textures/entities/DEATH.png");


}

我真的很感谢任何帮助,如果我在格式或我提出问题的方式上做错了什么,请指出:)

最佳答案

哎呀..让我们恢复到良好状态。

您希望避免更改任何原始 Minecraft 代码,并且仅将其用作绝对的最后手段。其实你们已经很接近了。

我会放弃你所拥有的并重新开始,只是因为除非你现在开始使用自定义模型、纹理和类,否则以后很难改变。

您现在应该使用 registerModEntity 方法,但为此我将向您展示如何使用 registerGlobalEntityID 方法

好的,让我们开始吧:

前往 Youtube 并按照 Mr.Crayfish 的指南在 1.8 中设置模组环境。 (这是为了确保您正确设置了公共(public)代理和客户端代理)

现在,将我的以下方法添加到您的 init() 类中:

public static void registerSpawnEntity(Class entityClass, String name, int id, int primaryColor, int secondaryColor, boolean addSpawn, EnumCreatureType typeOfCreature) 
{
    EntityRegistry.registerGlobalEntityID(entityClass, name, id, primaryColor, secondaryColor);
    if(addSpawn)
    {
        EntityRegistry.addSpawn(entityClass, 5, 1, 1, typeOfCreature, new BiomeGenBase[] { BiomeGenBase.plains });
    }
}

现在,您可以在 register() 方法中调用此方法,以注册一个带有刷怪蛋的整洁 mod 实体,准备进入创造模式。只需调用 registerSpawnEntity(...);

是时候处理渲染和行为了。

行为:创建一个新类并扩展一个类似的类,无需额外的代码。 渲染:渲染自定义实体需要三件事:实体必须注册,实体必须有 RenderMyEntity.java 文件和 ModelMyEntity.java 文件。

// The ModelMyEntity.java file contains the texture location, the texture
// UVs, the 3D render instructions etc.

// The RenderMyEntity.java file should only need to extend the
// RenderOriginalEntity.java file. You can @Override the getEntityTexture
// method to set a custom texture.

// Finally the custom entity needs to have its custom render registered:
RenderingRegistry.registerEntityRenderingHandler(EntityMyEntity.class, new RenderMyEntity(Minecraft.getMinecraft().getRenderManager()));

如果我没有忘记某些东西,并且您正确地注册、扩展、建模和纹理您的实体,您应该在创造模式下拥有一个整洁的小刷怪蛋,并使用注册方法时指定的颜色。它们也会随机在平原上生成。您可以根据您的需要调整我的代码。

祝你好运,希望这会有所帮助。

关于java - 在我的世界 1.8 上使用 forge api 创建生物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974146/

相关文章:

java - 用于打开PlayerInventory的Minecraft Bukkit API事件

java - 如何将事件处理程序添加到 Minecraft Forge 中的 block 控制杆?

java - 为什么我得到 "Unidentified mapping from registry minecraft:block"?

java - 爆炸后方 block 不更新

java - Java 8 中的致命钻石

java - LibGDX 和 GoogleApiClient 设置/集成(第一次)

java - 通过串行连接将minecraft插件连接到arduino

java - 好的做法? REST 中的一两个对象模型用于创建和获取资源

java - 在没有 XML 的情况下以编程方式运行 testng 会抛出 NoSuchMethodError XmlPackage

java - NullPointerException 带有滴答声实体 Minecraft modding 1.8