Jump to content

[1.12.2] Custom player model/skin


andreyshtern

Recommended Posts

Hello modders! I need to set (override defaults with) custom skin (or model) for player with my mod.

I can't find anything about changing player model with Forge and player rendering events for Minecraft 1.12.2.

(What i found didn't work for me)

And so, how can i do that?
Thank you for future answers!

p.s sry for my bad english. i'm stupid 14-yo from russia

Link to comment
Share on other sites

Okay i found out how fire up and cancel events. I need to change entity's texture.

I wrote code below but it just makes player model invisible, what am i doing wrong?

@SubscribeEvent
public void onPlayerRenderEvent(RenderPlayerEvent.Pre event){
    event.setCanceled(true);
    ResourceLocation texture = new ResourceLocation("rppassport", "textures/player/male.png");
    event.getRenderer().bindTexture(texture);



}
1 hour ago, diesieben07 said:

You can subscribe to RenderPlayerEvent.Pre, cancel it and do your own rendering.

 

Link to comment
Share on other sites

11 minutes ago, diesieben07 said:

There is no manual.

You need to do your own research by looking at the code and figuring it out.

Where i can find that code? i'm newbie and this is my first mod. Do you know something about it?

Edited by andreyshtern
Link to comment
Share on other sites

I readed some code in net.minecraft and wrote that:
 

@SubscribeEvent
public void onPlayerRenderEvent(RenderPlayerEvent.Pre event){
    event.setCanceled(true);
    ResourceLocation texture = new ResourceLocation("rppassport", "textures/player/male.png");
    event.getRenderer().bindTexture(texture);
    event.getRenderer().doRender((AbstractClientPlayer) event.getEntityPlayer(), event.getX(), event.getY(), event.getZ(), event.getEntity().rotationYaw, event.getPartialRenderTick());


}

 

And that error shows in runtime:

[13:55:53] [Client thread/ERROR] [FML]: Index: 1 Listeners:
[13:55:53] [Client thread/ERROR] [FML]: 0: NORMAL
[13:55:53] [Client thread/ERROR] [FML]: 1: ASM: com.andry.rppassport.RenderHandler@6145981c onPlayerRenderEvent(Lnet/minecraftforge/client/event/RenderPlayerEvent$Pre;)V
[13:55:53] [Client thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.client.event.RenderPlayerEvent$Pre@35cafcb5:
java.lang.StackOverflowError: null
many text...


Exception fires at:

event.getRenderer().doRender((AbstractClientPlayer)event.getEntityPlayer(),event.getX(),event.getY(),event.getZ(),event.getEntity().rotationYaw,event.getPartialRenderTick());


What am i doing wrong?

Link to comment
Share on other sites

On 8/2/2019 at 2:31 PM, diesieben07 said:

You are telling Minecraft to render a player. Which fires the RenderPlayerEvent (because a player is being rendered). That calls your event subscriber. Which tells Minecraft to render a player again. Which fires the RenderPlayerEvent...

Eventually Java gives up and says nope.

I'm so sorry, but i spent few days for research and i can't find anything, can you help me with render?
I just need Vanilla's RenderPlayer and player skin change. What i need to do?

Link to comment
Share on other sites

  • 5 months later...
Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.