Jump to content

Recommended Posts

Posted

After fixing an issue in my models, another one arose. I have an IPerspectiveAwareModel containing two IBakedModels, and combining them by returning a list of both the models' quads in one. My problem is that I need to combine the two models, with the first model to have its own transform (rotation, translation, scale), as well as the second model to have its own transform (rotation, translation, scale). Basically, I want two models combined in one with both of them using their own independent transform values. I really hope this is possible, otherwise my models are toast and its back to square one! Anyway, I really appreciate any help or responses, thanks!

 

Current Code (Taken from IPerspectiveAwareModel combining two IBakedModels)

@Override
public ItemCameraTransforms getItemCameraTransforms()
{

	return this.bakedmodelone.getItemCameraTransforms(); //Only uses the first model's transform values (problem) - this method forces you to provide only one transform value for the combined model as a whole.

}

@Override
public Pair<IBakedModel, Matrix4f> handlePerspective(TransformType transformtype)
{

	this.transformtype = transformtype;

	switch(transformtype)
	{
	case FIRST_PERSON : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().firstPerson); break; }
	case THIRD_PERSON : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().thirdPerson); break; }
	case GUI : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().gui); break; }
	case HEAD : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().head); break; }
	default : break;
	}

	return Pair.of(this, null);

}

 

As a side note, I realize that the above method "getItemCameraTransforms()" requires you to return transformation values for the model as a whole. Remember, I want the model to be combined as a whole, but still be able to have the two combined models use their own independent transform values. Hope that makes a little sense.

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

Off topic, sort of, but I still don't see why you even need IPerspectiveAwareModel if all you are going to do is apply the vanilla transformations... that would be done for you with a standard model.

 

Anyway, to your problem: the only way I can think of to have 2 models with different transformations is to actually have 2 models, each with its own JSON defining its transformations for each perspective, and probably to render them separately so that the different transformations don't interfere with each other.

 

Note that you can actually render other models independently, though I don't know how recommended this is... there is very likely a better way, but this is what I hacked together for my mod when I wanted to render different arrow items dynamically into a bow while it is in use.

 

I'm sure you'll get better ideas soon, but that might get you started towards something that at least works in the meantime. ;)

Posted

Thanks, @coolAlias. The reason for using IPerspectiveAwareModel is because I am rendering / de-rendering models based on first / third person / gui / head and not altering they're transform values. When combining the two models, the new transform is added to the new wrapped model (contains the two IBakedModels). For future reference, the first model is a gun and the second is an arm, the arm only renders in first person. The arm and gun have seperate transforms that need to stay when combined - IPerspectiveAwareModel makes the arm model use the gun model's transforms. Wouldn't it make sense to be able to keep independent transforms when combining general baked quads (combining models)? Anyway, I really need a fix! I am missing IItemrenderer already!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

You should probably render the arm model using RenderPlayerEvent or RenderHandEvent rather than trying to jam it on to the item model, but you should still be able to use the technique I showed in my link above if you really want to do them 'together'. Basically, you would render the arm model separately anyway, irrespective of whatever model you will return for the actual gun.

 

While I'm sure there is probably a way to do what you set out to do (merge 2 separate models with 2 separate transformation matrices together into 1), it's very likely far more technically challenging than it would be worth. Is there any particular reason you can't render the 2 models separately?

Posted

Those are good suggestions, but I think they won't work. First, RenderPlayerEvent and RenderHandEvent might as well be the same, canceling the RenderHandEvent de-renders the whole player model completely, and the first person arm is still there - same with the RenderPlayerEvent. I have tried this before, and the problems that arose were:

1.) The rendered arm needs to only be rendered in first person.

2.) The rendered arm doesn't rotate along with the player - it stays in the exact same place.

3.) How would the equip animation play when switching items for the arm? I.E. the arm rising up and down while switching items

4.) How to know when to render said arm

 

So as you can see, there would be many, many problems when rendering a "generic model" arm separate from an item. This is why IItemRenderer needs to come back - maybe they could improve it by letting models written in code be combined with .JSON models (yes, this isn't the suggestion board ;))

 

Anyway, would you happen to know a way to render a java model (models just like from Techne) with a regular .JSON together? Thanks, and I am happy to hear all comments and suggestions!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

Oh, you don't want the original arm to render either? I thought you were rendering a 2nd arm in addition to the first, in which case you wouldn't cancel any of the events at all, just render your extra model at that time and leave everything else as is.

 

You can still render Java models the same as before, btw - that's how Entities are rendered, even in 1.8. I have yet to do so within the same context as an Item being rendered, but I don't imagine there would be any technical reason preventing one from doing so, though you may have to deal with unexpected GL states depending on when you do it.

 

Hopefully someone else more knowledgeable with OpenGL / rendering in Minecraft can help out - it's not exactly my strong suit :P

Posted

I know what you mean about rendering - not my preferred modding subject! This is a must-have feature for my mod, I've already made a suggestion for an interface doing exactly what I need (it's actually a very useful suggestion, IMO), though I can't depend on it being added. Back when IItemRenderer was implemented, the way it was done was to create Java models (the arm) and then another Java model (gun) - you would then render them together in first person, and the gun by itself in every other perspective including entity item. Even with the benefits of the new model system, implementing many interfaces and modifying the code just reduces readability, especially when RainWarrior marks everything as deprecated (saying to use the new IFlexibleBaledModel to replace deprecated IBakedModel, but IFlexibleBakedModel is a child class of IBakedModel ;)). Anyway, this is going to be hard, hopefully I can make it happen!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Posted

Also, with IItemRenderer before, the models could have independent transforms using a bit of GL11 work. Hope the new interfaces can recreate something like that.

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

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

    • When i try to join my friends server with mods it just says failed to log in: the authentication servers are currently not reachable. I've been having this issue for a while now and no method I've tried to fix it works. I've seen a lot of people fixing it by modifying the host.txt file and removing anything related to Mojang but when I open mine there's nothing related to Mojang there. I also tried flushing DNS cache, and changing my IPV6 to 8888, but nothing works.  It only happens when the mods are on too. When I join my friends server on vanilla it works, but not with mods. I can join multiplayer servers like hypixel. I can also play singleplayer with the mods and it works perfectly. The mods are up to date with the versions and the servers, but it just never gets past "Logging in" when i try to join their server. I use Curseforge to launch my mods, so that could maybe have something to do with it because it's technically a third party server, but it hasn't given me any trouble besides this one issue. I do not have MCLeaks and don't know what that is, but how can i search for it anyway to make sure? I have uninstalled minecraft launcher, updated my microsoft and my videocard drivers, reset my wifi and checked my parental settings (I am the owner on my computer), flushed my dns, modifying my host file to delete mojang but there's nothing with mojang on there, disabled my firewall, changed my IPV6 domain to 8888, restarted my router, and none of that works. I have researched this issue thoroughly and tried every solution I have came across and nothing is fixing the problem so i have come here as a last ditch effort. All i want to do is play mods with my friend. My friend has no issues with the server or mods and he has it through curseforge too. I would like further assistance in any way you think could help or even refer me to another forum that could help with this. Genuinely I cannot figure out why it doesn't work I would love any sort of further help.  
    • been getting this error and followed the old tick loop post however i cant figure out what file to delete Description: Exception in server tick loop java.lang.NullPointerException: Cannot invoke "net.minecraft.world.level.LevelAccessor.m_7654_()" because the return value of "net.minecraftforge.event.level.LevelEvent$Unload.getLevel()" is null     at com.lion.graveyard.platform.forge.HordeSpawner.onWorldUnload(HordeSpawner.java:41) ~[The_Graveyard_3.1_(FORGE)_for_1.20.1.jar%23196!/:?] {re:classloading}     at com.lion.graveyard.platform.forge.__HordeSpawner_onWorldUnload_Unload.invoke(.dynamic) ~[The_Graveyard_3.1_(FORGE)_for_1.20.1.jar%23196!/:?] {re:classloading,pl:eventbus:B}     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.mehvahdjukaar.moonlight.api.platform.forge.PlatHelperImpl.invokeLevelUnload(PlatHelperImpl.java:279) ~[moonlight-1.20-2.13.66-forge.jar%23185!/:?] {re:classloading}     at net.mehvahdjukaar.moonlight.api.platform.PlatHelper.invokeLevelUnload(PlatHelper.java) ~[moonlight-1.20-2.13.66-forge.jar%23185!/:?] {re:mixin,re:classloading}     at net.mehvahdjukaar.moonlight.core.misc.FakeLevelManager.invalidate(FakeLevelManager.java:29) ~[moonlight-1.20-2.13.66-forge.jar%23185!/:?] {re:classloading}     at net.mehvahdjukaar.supplementaries.common.utils.fake_level.BlockTestLevel.invalidate(BlockTestLevel.java:34) ~[supplementaries-1.20-3.1.13.jar%23192!/:?] {re:classloading}     at net.mehvahdjukaar.supplementaries.common.block.faucet.FaucetBehaviorsManager.onReloadWithLevel(FaucetBehaviorsManager.java:129) ~[supplementaries-1.20-3.1.13.jar%23192!/:?] {re:classloading}     at net.mehvahdjukaar.supplementaries.common.events.ServerEvents.onServerStart(ServerEvents.java:160) ~[supplementaries-1.20-3.1.13.jar%23192!/:?] {re:mixin,re:classloading}     at net.mehvahdjukaar.supplementaries.common.events.forge.ServerEventsForge.onServerStart(ServerEventsForge.java:119) ~[supplementaries-1.20-3.1.13.jar%23192!/:?] {re:classloading}     at net.mehvahdjukaar.supplementaries.common.events.forge.__ServerEventsForge_onServerStart_ServerStartedEvent.invoke(.dynamic) ~[supplementaries-1.20-3.1.13.jar%23192!/:?] {re:classloading,pl:eventbus:B}     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.server.ServerLifecycleHooks.handleServerStarted(ServerLifecycleHooks.java:115) ~[forge-1.20.1-47.3.29-universal.jar%23212!/:?] {re:classloading}     at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:638) ~[server-1.20.1-20230612.114412-srg.jar%23207!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:APP:unionlib.mixins.json:MinecraftServerMixin,pl:mixin:APP:citadel.mixins.json:MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23207!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:APP:unionlib.mixins.json:MinecraftServerMixin,pl:mixin:APP:citadel.mixins.json:MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:A}     at java.lang.Thread.run(Thread.java:833) ~[?:?] {}  
    • Online forums in general seem to be declining in popularity imo. There’s still value here for certain types of content, such as written tutorials and blog posts which would otherwise get lost in the chat history fairly quickly on Discord. Also for those that prefer the forums format ofc. But for faster support related topics, I agree that the Discord is probably your best bet at the moment. The speed of responses is also down to the ratio of volunteers - the player support forum still seems pretty active, but the coding ones much less so. Once you’re feeling more confident in your modding skills, be the change you want to see
    • try the same link, i swapped logs after sitting in the world for a few minutes then leaving. Lmk if it keeps happening then ill just send a video of the live log on modrinth
    • It is an issue with chimes
  • Topics

×
×
  • Create New...

Important Information

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