Jump to content

[1.10.2] Render the players arm with an item in their hand


Nick82285

Recommended Posts

I came across a mod (with no source code), that uses the RenderPlayerAPI/ModelPlayerAPI called Amnesia Lights for 1.8.

I need a way to render the arm with the item in the player's hand like the picture below.

I tried changing the position of the model int the json but the arm doesn't show up, so is there a way with the GlStateManager to rotate the arm and force this functionality?

 

 

Example.jpg

Link to comment
Share on other sites

12 minutes ago, Nick82285 said:

is there a way with the GlStateManager to rotate the arm and force this functionality?

The thing is - the player's arm is not rendered if there is any item in the player's hand whatsoever. So you can't just rotate it into existance, you need to render it yourself. Since you can't use normal models for that(because the player's arm uses player skin as it's texture) you will have to use a custom renderer. Override Item#getTileEntityItemStackRenderer to return your custom renderer. I don't know if that method is present in 1.10 so you should update(I think there is another method to do that in that version but you should update to the latest version). Then in your custom renderer you can render the player's arm as you want - you can look at ItemRenderer#renderArmFirstPerson for an example.

Link to comment
Share on other sites

23 minutes ago, V0idWa1k3r said:

Then in your custom renderer you can render the player's arm as you want - you can look at ItemRenderer#renderArmFirstPerson for an example.

 

Don't feel obligated to answer because I know you probably get a secondary question but Item#getTileEntityItemStackRenderer doesn't exist, so how would I go about using ItemRenderer#renderArmFirstPerson?

Link to comment
Share on other sites

4 minutes ago, Nick82285 said:

Item#getTileEntityItemStackRenderer doesn't exist, so how would I go about

57 minutes ago, V0idWa1k3r said:

I don't know if that method is present in 1.10 so you should update

Any particular reason for using 1.10 anyway? I mean some people say that they refuse to update from 1.7 because of the model system, or others say that they refuse to update from 1.8 because of the combat system, but what's wrong with 1.10 -> 1.12? Nothing of significance was changed anyway, if anything more features were added both to the base game and forge.

 

I think that there might have been a ForgeHooksClient.registerTESRItemStack method. It exists in 1.12 but marked as deprecated so it must have existed, but I have no idea since when. If this method doesn't exist in 1.10 then I am afraid I don't know the answer here. You can trace the execution of TileEntityItemStackRenderer#renderByItem and see where forge code takes place and what do you need to do in order to hook into it though.

 

But you really should update.

Link to comment
Share on other sites

45 minutes ago, V0idWa1k3r said:

Any particular reason for using 1.10 anyway?

 

I'm an inexperienced modder looking to learn, however, the other mods I'm working with (specifically spongeforge mods like voxelsniper, worldedit and wizardry) don't have support for versions above 1.10.2.

 

It's more or less a catch 22

Edited by Nick82285
Link to comment
Share on other sites

9 minutes ago, Nick82285 said:

It's more or less a catch 22

There are many many mods written for the latest version AND you have people who know how to (and will) help you with any problems you may run into 

About Me

Spoiler

My Discord - Cadiboo#8887

My WebsiteCadiboo.github.io

My ModsCadiboo.github.io/projects

My TutorialsCadiboo.github.io/tutorials

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

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.