Posted July 2, 20169 yr Hello, I want to modify the player view point to the one of a custom entity. So i just do : public class SoulstickEventListener { @SideOnly(Side.CLIENT) @SubscribeEvent public void entityInteract(EntityInteract event) { if(event.getTarget() != null) { if(event.getTarget() instanceof EntityPhantom) { if(event.getItemStack() != null && event.getItemStack().getItem() == ModItems.soulstick) { Minecraft.getMinecraft().setRenderViewEntity(event.getTarget()); } } } } } The viewpoint is correctly change but I can only see the entity face so I want to prevent the render if the pov is from the entity that tries to be rendered. I have a Render class like that : public class RendererPhantom extends RenderBiped<EntityPhantom> { public static final ResourceLocation PHANTOM_TEXTURES = new ResourceLocation(References.MOD_ID + ":textures/entities/phantom.png"); public RendererPhantom(RenderManager renderManager) { super(renderManager, new ModelPlayer(0.0F, false), 0.5F); } @Override protected ResourceLocation getEntityTexture(EntityPhantom entity) { return PHANTOM_TEXTURES; } @Override public void doRender(EntityPhantom entity, double x, double y, double z, float entityYaw, float partialTicks) { if(!(getRenderManager().renderViewEntity.isEntityEqual(entity))) { // DEBUG System.out.println(getRenderManager().renderViewEntity); System.out.println(entity); super.doRender(entity, x, y, z, entityYaw, partialTicks); } } } Now this is where it gets tricky, this does not prevent the render because i get in the log : [15:35:04] [Client thread/INFO] [sTDOUT]: [com.arsleust.aimod.renderers.RendererPhantom:doRender:31]: EntityPhantom['entity.aimod.EntityPhantom.name'/502, l='New World', x=1,00, y=70,00, z=5,00] [15:35:04] [Client thread/INFO] [sTDOUT]: [com.arsleust.aimod.renderers.RendererPhantom:doRender:32]: EntityPhantom['entity.aimod.EntityPhantom.name'/502, l='MpServer', x=1,00, y=70,00, z=5,00] So the first call getRenderManager().renderViewEntity gives the entity but says it is in world "New World" (which is right) but the entity given to my doRender is said to be in world "MpServer" (which is weird). Anyone would know the cause ?
July 2, 20169 yr I think you messed up sides/threads In your interaction event you assigned entity of other thread as your render view. More directly - you set entity owned by server thread as render view which should be client-side entity. Then your render class is using "getRenderManager().renderViewEntity" from server side, but "entity" from client side. I am quite amazed that you didn't get some crash or concurrency. Anyway - when assigning render view - always use client side entity. (world.isRemote) Also - I am not sure on what side (or if both) interaction event is fired, but just make sure you do it from client. If it is fired only by server, then you will need to send packet from server to client saying "please set entity with ID to your renderView". EDIT Now that I think about it - you WILL have to send packet, at least for safety reasons. Proper design/approach: (seriously, you should rewrite) 1. Use your Item (soulItem) class and override #itemInteractionForEntity. 2. ONLY ON SERVER: (!world.isRemote) 3. Check if entity is your EntityPhantom 4. If so - check needed stuff (NBT) and send packet to client (player using item) with entity ID. 5. In packet handler get entity (World#getEntityFromID) and set it as renderView. Note: example of itemInteractionForEntity can be found in ItemShears (sheeps) 1.7.10 is no longer supported by forge, you are on your own.
July 2, 20169 yr Author Thank you for the quick answer, I will try to do like that EDIT : About server/client behaviors and my game not crashing, render methods are called only client side and i used @SideOnly(Side.CLIENT) for the listener part. So I still don't get why there are different worlds.
July 2, 20169 yr http://mcforge.readthedocs.org/en/latest/concepts/sides/ Side.CLIENT = Client.jar SP = server (integrated) with one player online (your client). 1.7.10 is no longer supported by forge, you are on your own.
July 2, 20169 yr Author Works like a charm ! Thanks ! (for noobs like me this is a good link : http://www.minecraftforge.net/forum/index.php?topic=20138.0 )
July 2, 20169 yr As i am unsure if you did it fully right: 1. http://greyminecraftcoder.blogspot.com.au/2015/01/thread-safety-with-network-messages.html 2. You can post/link you github if you want further tips/checks. 1.7.10 is no longer supported by forge, you are on your own.
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.