Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.8.9] Semi-Transparent rendering with .obj files


Pythonschlange
 Share

Recommended Posts

I'm right now updating my mod from 1.7.10 to 1.8.9 and I need semitransparent rendering for one of my blocks and a lot of items. The block and the items are rendered as an .obj File and are modeled in blender. Problem: I have no idea on how to do this and I need to know if minecraft and/or forge as implemented some sort of Distance based rendering for 1.8.9 yet.

 

I hope someone can help me.

Link to comment
Share on other sites

Ok, after a lot of testing i found a method that lets me render semitransparent Block in the correct order, but from time to time the block gets rendered wrong and I don't know why (the method, that does it is "public EnumWorldBlockLayer getBlockLayer()" from the slime block). I think this could be a forge bug. I still need a way to render .obj items semitransparent.

How the block should look like:

 

 

How the block from time to time looks like:

 

 

Code:

 

 

TileEntity:

package tileEntitys;

import java.util.ArrayList;
import java.util.List;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ITickable;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.client.model.obj.OBJModel;

public class TileEntity_TestBlock extends TileEntity implements ITickable{
    
    public TileEntity_TestBlock(){
    }
    
    @Override
    public void writeToNBT(NBTTagCompound compound) {
    	super.writeToNBT(compound);
    }
    @Override
    public void readFromNBT(NBTTagCompound compound) {
    	super.readFromNBT(compound);
    }

@Override
public void update() {
}

}

 

BlockClass:

package blocks.TestCreations;

import com.google.common.collect.Lists;

import reference.Constants;
import reference.Methref;
import tileEntitys.TileEntity_TestBlock;
import base.MainClass;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumWorldBlockLayer;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.OBJModel;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;


/**
* A block, created only for testing purposes.
* @since 14.02.2016
* @author Pythonschlange
*
*/
public class Block_TestBlock extends Block implements ITileEntityProvider{
/**
 * The constructor for the TestBlock.
 * @param material -The material of the block.
 * 
 * @since 14.02.2016
 * @author Pythonschlange
 */
public Block_TestBlock(Material material) {
	super(material);
	this.setCreativeTab(Constants.tabStuffForMC);
	this.setLightLevel(1.0F);
	this.setHardness(5.0F);
	this.setStepSound(Block.soundTypeStone);
	this.setUnlocalizedName(Constants.UnlocalizedNameBlock_TestBlock);
	//this.setBlockTextureName(Constants.ModID + ":" + "testblock");
}
    @Override
    public boolean isOpaqueCube() { return false; }

    @Override
    public boolean isFullCube() { return false; }

    @Override
    public boolean isVisuallyOpaque() { return false; }
    
    @SideOnly(Side.CLIENT)
    public EnumWorldBlockLayer getBlockLayer(){
        return EnumWorldBlockLayer.TRANSLUCENT;
    }
    
@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
	return new TileEntity_TestBlock();
}
}

 

ClientProxy:

package base.Proxies;


import blocks.AllBlocks;
import items.AllItems;
import reference.Constants;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

/**
* Here go things that only the Client has to do.
* @since 14.02.2016
* @author Pythonschlange
*
*/
public class ClientProxy extends CommonProxy {


@Override
public void preInit(FMLPreInitializationEvent e){
	super.preInit(e);

	OBJLoader.instance.addDomain(Constants.ModID.toLowerCase());
        Item item2 = Item.getItemFromBlock(AllBlocks.blockTestblock);
        ModelLoader.setCustomModelResourceLocation(item2, 0, new ModelResourceLocation(Constants.ModID.toLowerCase() + ":" + AllBlocks.blockTestblock.getUnlocalizedName().substring(5)));
}

@Override
public void load(FMLInitializationEvent event){
	super.load(event);
	blocks.BlockRenderRegister.registerBlockRenderer();
	items.ItemRenderRegister.registerItemRenderer();
}
@Override
public void postInit(FMLPostInitializationEvent event){
	super.postInit(event);
}
}

blockstate.json:

{
    "forge_marker": 1,
    "defaults": {
        "textures": {
            "#Material.001": "stuffformc:blocks/TestBlock_TsTexture",
            "#Material.002": "stuffformc:blocks/TestBlock_SphereTexture",
            "#Material.003": "stuffformc:blocks/TestBlock_CasingTexture"},
        "model": "stuffformc:TestBlock_Casing.obj"
     },
    "variants": {
        "normal": [{}],
        "inventory": [{
            "transform": "forge:default-block"
        }]
    }
}

block.json(I don't know for sure, but i think this doesn't get called):

{
    "parent": "stuffformc:blockstates/testblock",
    "textures": {
        "all": "stuffformc:blocks/TestBlock_CasingTexture"
    }
}

Item.json(doesn't work right now, if you know how to do the ItemRenderer for .obj models please tell me):

{
    "parent":"stuffformc:blockstates/testblock",
    "display": {
        "thirdperson": {
            "rotation": [ 10, -45, 170 ],
            "translation": [ 0, 1.5, -2.75 ],
            "scale": [ 0.375, 0.375, 0.375 ]
        }
    }
}

 

 

EDIT: I also would like to know, how to animate an .obj model (item and/or block). I'm happy for any response :D

Link to comment
Share on other sites

Okay, this is new stuff... is there anywere a place where the Json file (and it's arguments, functions...) is explained? Because I searched for way to long and found nothing. And if there isn't, would someone be kind enough to quickly explain how Jsons work (background would be nice, but I just need to know what all the arguments in the file are doing and how they work)

I'm thankfull for every respond. :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Launcher screenshot: https://tinypic.host/i/YL1x  Launcher Log: https://pastebin.com/WLFuyCMY  I'm not really sure which log would be considered the complete log so these are just all of the logs I have Launcher cef log: https://pastebin.com/xQ3ZeeKd  Debug Log: https://pastebin.com/BSeKG56y  And this one is under "latest": https://pastebin.com/ABSYWX3N 
    • I am trying to create a custom horse, but I am getting an error in bakeLayer.     ModEntityRenderer @Mod.EventBusSubscriber( modid = TutorialMod.MOD_ID, value = {Dist.CLIENT}, bus = Mod.EventBusSubscriber.Bus.MOD ) @OnlyIn(Dist.CLIENT) public class ModEntityRenderers{ private static final Set<ModelLayerLocation> ALL_MODELS = Sets.newHashSet(); public static ModelLayerLocation TUTORIAL_PIG_LAYER = new ModelLayerLocation(new ResourceLocation(TutorialMod.MOD_ID, "tutorial_pig"), "tutorial_pig"); public static ModelLayerLocation TUTORIAL_HORSE_LAYER = new ModelLayerLocation(new ResourceLocation(TutorialMod.MOD_ID, "tutorial_horse"), "tutorial_horse"); public static final ModelLayerLocation HORSEE = register("tutorial_horse"); private static ModelLayerLocation register(String p_171294_) { return register(p_171294_, "main"); } private static ModelLayerLocation register(String p_171296_, String p_171297_) { ModelLayerLocation modellayerlocation = createLocation(p_171296_, p_171297_); if (!ALL_MODELS.add(modellayerlocation)) { throw new IllegalStateException("Duplicate registration for " + modellayerlocation); } else { return modellayerlocation; } } private static ModelLayerLocation createLocation(String p_171301_, String p_171302_) { return new ModelLayerLocation(new ResourceLocation("minecraft", p_171301_), p_171302_); } public static void init() { } //registry list @SubscribeEvent public static void registerEntityRenders(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(ModEntityType.TUTORIAL_PIG, TutorialPigRenderer::new); event.registerEntityRenderer(ModEntityType.TUTORIAL_HORSE, TutorialHorseRenderer::new); } //renderer list @SubscribeEvent public static void registerLayerDefinition(EntityRenderersEvent.RegisterLayerDefinitions event) { LayerDefinition ModlayerTutorialHorse = LayerDefinition.create(TutorialHorseModel.createBodyMesh(CubeDeformation.NONE), 64, 64); ImmutableMap.Builder<ModelLayerLocation, LayerDefinition> builder = ImmutableMap.builder(); event.registerLayerDefinition(TUTORIAL_PIG_LAYER, TutorialPigModel::createBodyLayer); // event.registerLayerDefinition(TUTORIAL_HORSE_LAYER, TutorialHorseModel::createMesh); builder.put(HORSEE, ModlayerTutorialHorse); } }   Model @OnlyIn(Dist.CLIENT) public class TutorialHorseModel<T extends AbstractHorse> extends AgeableListModel<T> { private static final float DEG_125 = 2.1816616F; private static final float DEG_60 = ((float)Math.PI / 3F); private static final float DEG_45 = ((float)Math.PI / 4F); private static final float DEG_30 = ((float)Math.PI / 6F); private static final float DEG_15 = 0.2617994F; protected static final String HEAD_PARTS = "head_parts"; private static final String LEFT_HIND_BABY_LEG = "left_hind_baby_leg"; private static final String RIGHT_HIND_BABY_LEG = "right_hind_baby_leg"; private static final String LEFT_FRONT_BABY_LEG = "left_front_baby_leg"; private static final String RIGHT_FRONT_BABY_LEG = "right_front_baby_leg"; private static final String SADDLE = "saddle"; private static final String LEFT_SADDLE_MOUTH = "left_saddle_mouth"; private static final String LEFT_SADDLE_LINE = "left_saddle_line"; private static final String RIGHT_SADDLE_MOUTH = "right_saddle_mouth"; private static final String RIGHT_SADDLE_LINE = "right_saddle_line"; private static final String HEAD_SADDLE = "head_saddle"; private static final String MOUTH_SADDLE_WRAP = "mouth_saddle_wrap"; protected final ModelPart body; protected final ModelPart headParts; private final ModelPart rightHindLeg; private final ModelPart leftHindLeg; private final ModelPart rightFrontLeg; private final ModelPart leftFrontLeg; private final ModelPart rightHindBabyLeg; private final ModelPart leftHindBabyLeg; private final ModelPart rightFrontBabyLeg; private final ModelPart leftFrontBabyLeg; private final ModelPart tail; private final ModelPart[] saddleParts; private final ModelPart[] ridingParts; public TutorialHorseModel(ModelPart p_170668_) { super(true, 16.2F, 1.36F, 2.7272F, 2.0F, 20.0F); this.body = p_170668_.getChild("body"); this.headParts = p_170668_.getChild("head_parts"); this.rightHindLeg = p_170668_.getChild("right_hind_leg"); this.leftHindLeg = p_170668_.getChild("left_hind_leg"); this.rightFrontLeg = p_170668_.getChild("right_front_leg"); this.leftFrontLeg = p_170668_.getChild("left_front_leg"); this.rightHindBabyLeg = p_170668_.getChild("right_hind_baby_leg"); this.leftHindBabyLeg = p_170668_.getChild("left_hind_baby_leg"); this.rightFrontBabyLeg = p_170668_.getChild("right_front_baby_leg"); this.leftFrontBabyLeg = p_170668_.getChild("left_front_baby_leg"); this.tail = this.body.getChild("tail"); ModelPart modelpart = this.body.getChild("saddle"); ModelPart modelpart1 = this.headParts.getChild("left_saddle_mouth"); ModelPart modelpart2 = this.headParts.getChild("right_saddle_mouth"); ModelPart modelpart3 = this.headParts.getChild("left_saddle_line"); ModelPart modelpart4 = this.headParts.getChild("right_saddle_line"); ModelPart modelpart5 = this.headParts.getChild("head_saddle"); ModelPart modelpart6 = this.headParts.getChild("mouth_saddle_wrap"); this.saddleParts = new ModelPart[]{modelpart, modelpart1, modelpart2, modelpart5, modelpart6}; this.ridingParts = new ModelPart[]{modelpart3, modelpart4}; } public static MeshDefinition createBodyMesh(CubeDeformation p_170670_) { MeshDefinition meshdefinition = new MeshDefinition(); PartDefinition partdefinition = meshdefinition.getRoot(); PartDefinition partdefinition1 = partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 32).addBox(-5.0F, -8.0F, -17.0F, 10.0F, 10.0F, 22.0F, new CubeDeformation(0.05F)), PartPose.offset(0.0F, 11.0F, 5.0F)); PartDefinition partdefinition2 = partdefinition.addOrReplaceChild("head_parts", CubeListBuilder.create().texOffs(0, 35).addBox(-2.05F, -6.0F, -2.0F, 4.0F, 12.0F, 7.0F), PartPose.offsetAndRotation(0.0F, 4.0F, -12.0F, ((float)Math.PI / 6F), 0.0F, 0.0F)); PartDefinition partdefinition3 = partdefinition2.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 13).addBox(-3.0F, -11.0F, -2.0F, 6.0F, 5.0F, 7.0F, p_170670_), PartPose.ZERO); partdefinition2.addOrReplaceChild("mane", CubeListBuilder.create().texOffs(56, 36).addBox(-1.0F, -11.0F, 5.01F, 2.0F, 16.0F, 2.0F, p_170670_), PartPose.ZERO); partdefinition2.addOrReplaceChild("upper_mouth", CubeListBuilder.create().texOffs(0, 25).addBox(-2.0F, -11.0F, -7.0F, 4.0F, 5.0F, 5.0F, p_170670_), PartPose.ZERO); partdefinition.addOrReplaceChild("left_hind_leg", CubeListBuilder.create().texOffs(48, 21).mirror().addBox(-3.0F, -1.01F, -1.0F, 4.0F, 11.0F, 4.0F, p_170670_), PartPose.offset(4.0F, 14.0F, 7.0F)); partdefinition.addOrReplaceChild("right_hind_leg", CubeListBuilder.create().texOffs(48, 21).addBox(-1.0F, -1.01F, -1.0F, 4.0F, 11.0F, 4.0F, p_170670_), PartPose.offset(-4.0F, 14.0F, 7.0F)); partdefinition.addOrReplaceChild("left_front_leg", CubeListBuilder.create().texOffs(48, 21).mirror().addBox(-3.0F, -1.01F, -1.9F, 4.0F, 11.0F, 4.0F, p_170670_), PartPose.offset(4.0F, 14.0F, -12.0F)); partdefinition.addOrReplaceChild("right_front_leg", CubeListBuilder.create().texOffs(48, 21).addBox(-1.0F, -1.01F, -1.9F, 4.0F, 11.0F, 4.0F, p_170670_), PartPose.offset(-4.0F, 14.0F, -12.0F)); CubeDeformation cubedeformation = p_170670_.extend(0.0F, 5.5F, 0.0F); partdefinition.addOrReplaceChild("left_hind_baby_leg", CubeListBuilder.create().texOffs(48, 21).mirror().addBox(-3.0F, -1.01F, -1.0F, 4.0F, 11.0F, 4.0F, cubedeformation), PartPose.offset(4.0F, 14.0F, 7.0F)); partdefinition.addOrReplaceChild("right_hind_baby_leg", CubeListBuilder.create().texOffs(48, 21).addBox(-1.0F, -1.01F, -1.0F, 4.0F, 11.0F, 4.0F, cubedeformation), PartPose.offset(-4.0F, 14.0F, 7.0F)); partdefinition.addOrReplaceChild("left_front_baby_leg", CubeListBuilder.create().texOffs(48, 21).mirror().addBox(-3.0F, -1.01F, -1.9F, 4.0F, 11.0F, 4.0F, cubedeformation), PartPose.offset(4.0F, 14.0F, -12.0F)); partdefinition.addOrReplaceChild("right_front_baby_leg", CubeListBuilder.create().texOffs(48, 21).addBox(-1.0F, -1.01F, -1.9F, 4.0F, 11.0F, 4.0F, cubedeformation), PartPose.offset(-4.0F, 14.0F, -12.0F)); partdefinition1.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(42, 36).addBox(-1.5F, 0.0F, 0.0F, 3.0F, 14.0F, 4.0F, p_170670_), PartPose.offsetAndRotation(0.0F, -5.0F, 2.0F, ((float)Math.PI / 6F), 0.0F, 0.0F)); partdefinition1.addOrReplaceChild("saddle", CubeListBuilder.create().texOffs(26, 0).addBox(-5.0F, -8.0F, -9.0F, 10.0F, 9.0F, 9.0F, new CubeDeformation(0.5F)), PartPose.ZERO); partdefinition2.addOrReplaceChild("left_saddle_mouth", CubeListBuilder.create().texOffs(29, 5).addBox(2.0F, -9.0F, -6.0F, 1.0F, 2.0F, 2.0F, p_170670_), PartPose.ZERO); partdefinition2.addOrReplaceChild("right_saddle_mouth", CubeListBuilder.create().texOffs(29, 5).addBox(-3.0F, -9.0F, -6.0F, 1.0F, 2.0F, 2.0F, p_170670_), PartPose.ZERO); partdefinition2.addOrReplaceChild("left_saddle_line", CubeListBuilder.create().texOffs(32, 2).addBox(3.1F, -6.0F, -8.0F, 0.0F, 3.0F, 16.0F, p_170670_), PartPose.rotation((-(float)Math.PI / 6F), 0.0F, 0.0F)); partdefinition2.addOrReplaceChild("right_saddle_line", CubeListBuilder.create().texOffs(32, 2).addBox(-3.1F, -6.0F, -8.0F, 0.0F, 3.0F, 16.0F, p_170670_), PartPose.rotation((-(float)Math.PI / 6F), 0.0F, 0.0F)); partdefinition2.addOrReplaceChild("head_saddle", CubeListBuilder.create().texOffs(1, 1).addBox(-3.0F, -11.0F, -1.9F, 6.0F, 5.0F, 6.0F, new CubeDeformation(0.2F)), PartPose.ZERO); partdefinition2.addOrReplaceChild("mouth_saddle_wrap", CubeListBuilder.create().texOffs(19, 0).addBox(-2.0F, -11.0F, -4.0F, 4.0F, 5.0F, 2.0F, new CubeDeformation(0.2F)), PartPose.ZERO); partdefinition3.addOrReplaceChild("left_ear", CubeListBuilder.create().texOffs(19, 16).addBox(0.55F, -13.0F, 4.0F, 2.0F, 3.0F, 1.0F, new CubeDeformation(-0.001F)), PartPose.ZERO); partdefinition3.addOrReplaceChild("right_ear", CubeListBuilder.create().texOffs(19, 16).addBox(-2.55F, -13.0F, 4.0F, 2.0F, 3.0F, 1.0F, new CubeDeformation(-0.001F)), PartPose.ZERO); return meshdefinition; } public void setupAnim(T p_102785_, float p_102786_, float p_102787_, float p_102788_, float p_102789_, float p_102790_) { boolean flag = p_102785_.isSaddled(); boolean flag1 = p_102785_.isVehicle(); for(ModelPart modelpart : this.saddleParts) { modelpart.visible = flag; } for(ModelPart modelpart1 : this.ridingParts) { modelpart1.visible = flag1 && flag; } this.body.y = 11.0F; } public Iterable<ModelPart> headParts() { return ImmutableList.of(this.headParts); } protected Iterable<ModelPart> bodyParts() { return ImmutableList.of(this.body, this.rightHindLeg, this.leftHindLeg, this.rightFrontLeg, this.leftFrontLeg, this.rightHindBabyLeg, this.leftHindBabyLeg, this.rightFrontBabyLeg, this.leftFrontBabyLeg); } public void prepareMobModel(T p_102780_, float p_102781_, float p_102782_, float p_102783_) { super.prepareMobModel(p_102780_, p_102781_, p_102782_, p_102783_); float f = Mth.rotlerp(p_102780_.yBodyRotO, p_102780_.yBodyRot, p_102783_); float f1 = Mth.rotlerp(p_102780_.yHeadRotO, p_102780_.yHeadRot, p_102783_); float f2 = Mth.lerp(p_102783_, p_102780_.xRotO, p_102780_.getXRot()); float f3 = f1 - f; float f4 = f2 * ((float)Math.PI / 180F); if (f3 > 20.0F) { f3 = 20.0F; } if (f3 < -20.0F) { f3 = -20.0F; } if (p_102782_ > 0.2F) { f4 += Mth.cos(p_102781_ * 0.4F) * 0.15F * p_102782_; } float f5 = p_102780_.getEatAnim(p_102783_); float f6 = p_102780_.getStandAnim(p_102783_); float f7 = 1.0F - f6; float f8 = p_102780_.getMouthAnim(p_102783_); boolean flag = p_102780_.tailCounter != 0; float f9 = (float)p_102780_.tickCount + p_102783_; this.headParts.y = 4.0F; this.headParts.z = -12.0F; this.body.xRot = 0.0F; this.headParts.xRot = ((float)Math.PI / 6F) + f4; this.headParts.yRot = f3 * ((float)Math.PI / 180F); float f10 = p_102780_.isInWater() ? 0.2F : 1.0F; float f11 = Mth.cos(f10 * p_102781_ * 0.6662F + (float)Math.PI); float f12 = f11 * 0.8F * p_102782_; float f13 = (1.0F - Math.max(f6, f5)) * (((float)Math.PI / 6F) + f4 + f8 * Mth.sin(f9) * 0.05F); this.headParts.xRot = f6 * (0.2617994F + f4) + f5 * (2.1816616F + Mth.sin(f9) * 0.05F) + f13; this.headParts.yRot = f6 * f3 * ((float)Math.PI / 180F) + (1.0F - Math.max(f6, f5)) * this.headParts.yRot; this.headParts.y = f6 * -4.0F + f5 * 11.0F + (1.0F - Math.max(f6, f5)) * this.headParts.y; this.headParts.z = f6 * -4.0F + f5 * -12.0F + (1.0F - Math.max(f6, f5)) * this.headParts.z; this.body.xRot = f6 * (-(float)Math.PI / 4F) + f7 * this.body.xRot; float f14 = 0.2617994F * f6; float f15 = Mth.cos(f9 * 0.6F + (float)Math.PI); this.leftFrontLeg.y = 2.0F * f6 + 14.0F * f7; this.leftFrontLeg.z = -6.0F * f6 - 10.0F * f7; this.rightFrontLeg.y = this.leftFrontLeg.y; this.rightFrontLeg.z = this.leftFrontLeg.z; float f16 = ((-(float)Math.PI / 3F) + f15) * f6 + f12 * f7; float f17 = ((-(float)Math.PI / 3F) - f15) * f6 - f12 * f7; this.leftHindLeg.xRot = f14 - f11 * 0.5F * p_102782_ * f7; this.rightHindLeg.xRot = f14 + f11 * 0.5F * p_102782_ * f7; this.leftFrontLeg.xRot = f16; this.rightFrontLeg.xRot = f17; this.tail.xRot = ((float)Math.PI / 6F) + p_102782_ * 0.75F; this.tail.y = -5.0F + p_102782_; this.tail.z = 2.0F + p_102782_ * 2.0F; if (flag) { this.tail.yRot = Mth.cos(f9 * 0.7F); } else { this.tail.yRot = 0.0F; } this.rightHindBabyLeg.y = this.rightHindLeg.y; this.rightHindBabyLeg.z = this.rightHindLeg.z; this.rightHindBabyLeg.xRot = this.rightHindLeg.xRot; this.leftHindBabyLeg.y = this.leftHindLeg.y; this.leftHindBabyLeg.z = this.leftHindLeg.z; this.leftHindBabyLeg.xRot = this.leftHindLeg.xRot; this.rightFrontBabyLeg.y = this.rightFrontLeg.y; this.rightFrontBabyLeg.z = this.rightFrontLeg.z; this.rightFrontBabyLeg.xRot = this.rightFrontLeg.xRot; this.leftFrontBabyLeg.y = this.leftFrontLeg.y; this.leftFrontBabyLeg.z = this.leftFrontLeg.z; this.leftFrontBabyLeg.xRot = this.leftFrontLeg.xRot; boolean flag1 = p_102780_.isBaby(); this.rightHindLeg.visible = !flag1; this.leftHindLeg.visible = !flag1; this.rightFrontLeg.visible = !flag1; this.leftFrontLeg.visible = !flag1; this.rightHindBabyLeg.visible = flag1; this.leftHindBabyLeg.visible = flag1; this.rightFrontBabyLeg.visible = flag1; this.leftFrontBabyLeg.visible = flag1; this.body.y = flag1 ? 10.8F : 0.0F; } }   Renderer @OnlyIn(Dist.CLIENT) public final class TutorialHorseRenderer extends ModAbstractHorseRenderer<TutorialHorse, TutorialHorseModel<TutorialHorse>> { private static final Map<Variant, ResourceLocation> LOCATION_BY_VARIANT = Util.make(Maps.newEnumMap(Variant.class), (p_114874_) -> { p_114874_.put(Variant.WHITE, new ResourceLocation("textures/entity/horse/horse_white.png")); p_114874_.put(Variant.CREAMY, new ResourceLocation("textures/entity/horse/horse_creamy.png")); p_114874_.put(Variant.CHESTNUT, new ResourceLocation("textures/entity/horse/horse_chestnut.png")); p_114874_.put(Variant.BROWN, new ResourceLocation("textures/entity/horse/horse_brown.png")); p_114874_.put(Variant.BLACK, new ResourceLocation("textures/entity/horse/horse_black.png")); p_114874_.put(Variant.GRAY, new ResourceLocation("textures/entity/horse/horse_gray.png")); p_114874_.put(Variant.DARKBROWN, new ResourceLocation("textures/entity/horse/horse_darkbrown.png")); }); public TutorialHorseRenderer(EntityRendererProvider.Context p_174167_) { super(p_174167_, new TutorialHorseModel<>(p_174167_.bakeLayer(ModEntityRenderers.HORSEE)), 1.1F); //this.addLayer(new HorseMarkingLayer(this)); //this.addLayer(new HorseArmorLayer(this, p_174167_.getModelSet())); } public ResourceLocation getTextureLocation(TutorialHorse p_114872_) { return LOCATION_BY_VARIANT.get(p_114872_.getVariant()); } } I'm trying to make the code equivalent to Vanilla, but I think I'm wrong. Please help me
    • Also please show the registration of the MenuType.
    • Same as before, NetworkHooks.openGui.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.