Résolu Problème Render projectile dispenser
-
Bonjour.
Voila alors je me suis lancé dans la création d’un mod qui permettrait de lancer un projectile à partir d’un dispenser.
Je créée l’item, l’entity, jusque là pas de problème.
Sauf que, dès la création du rendu et du model, on me parle d’un monster nommé OpenGL avec GlStateManager.
Moi en tant que débutant, je ne connais rien de OpenGL, alors je suis ici en recherche d’aide potentielle.RENDER :
package fr.freshblock.freshrocket.proxy; import fr.freshblock.freshrocket.entity.projectile.EntityFreshRocket; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; public class RenderFreshRocket extends Render { private static final ResourceLocation Textures = new ResourceLocation("ut:textures/entity/Rocket.png"); //Texture protected ModelRocket modelRocket = new ModelRocket(); //Model public RenderFreshRocket(RenderManager p_i46193_1_, ModelRocket model, float shadow) { super((Minecraft.getMinecraft()).getRenderManager()); } public void doRender(EntityFreshRocket p_180551_1_, double p_180551_2_, double p_180551_4_, double p_180551_6_, float p_180551_8_, float p_180551_9_) { this.bindEntityTexture(p_180551_1_); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.pushMatrix(); GlStateManager.translate((float)p_180551_2_, (float)p_180551_4_ - 1.50D, (float)p_180551_6_); GlStateManager.rotate(p_180551_1_.prevRotationYaw + (p_180551_1_.rotationYaw - p_180551_1_.prevRotationYaw) * p_180551_9_ - 90.0F, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(p_180551_1_.prevRotationPitch + (p_180551_1_.rotationPitch - p_180551_1_.prevRotationPitch) * p_180551_9_, 0.0F, 0.0F, 1.0F); GlStateManager.disableRescaleNormal(); this.modelRocket.render(p_180551_1_, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); GlStateManager.popMatrix(); } protected ResourceLocation getEntityTexture(EntityFreshRocket p_180550_1_) { return Textures; } /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(Entity entity) { return this.getEntityTexture((EntityFreshRocket)entity); } /** * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic * (Render<t extends="" entity="">) and this method has signature public void func_76986_a(T entity, double d, double d1, * double d2, float f, float f1). But JAD is pre 1.5 so doe */ public void doRender(Entity entity, double x, double y, double z, float p_76986_8_, float partialTicks) { this.doRender((EntityFreshRocket)entity, x, y, z, p_76986_8_, partialTicks); } }
package fr.freshblock.freshrocket.proxy; import fr.freshblock.freshrocket.entity.projectile.EntityFreshRocket; public class ModelRocket { public void render(EntityFreshRocket p_180551_1_, float f, float g, float h, float i, float j, float k) { } }
package fr.freshblock.freshrocket.proxy; import cpw.mods.fml.client.registry.RenderingRegistry; import fr.freshblock.freshrocket.entity.projectile.EntityFreshRocket; import net.minecraft.client.Minecraft; import fr.freshblock.freshrocket.proxy.RenderFreshRocket; public class ClientProxy extends CommonProxy { @Override public void registerRender() { RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket(new ModelRocket())); } }
[18:43:08] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // Sorry :( Time: 20/12/15 18:43 Description: There was a severe problem during mod loading that has caused the game to fail cpw.mods.fml.common.LoaderException: java.lang.Error: Unresolved compilation problem: The constructor RenderFreshRocket(ModelRocket) is undefined at cpw.mods.fml.common.LoadController.transition(LoadController.java:163) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:739) at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:311) at net.minecraft.client.Minecraft.startGame(Minecraft.java:597) at net.minecraft.client.Minecraft.run(Minecraft.java:942) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) Caused by: java.lang.Error: Unresolved compilation problem: The constructor RenderFreshRocket(ModelRocket) is undefined at fr.freshblock.freshrocket.proxy.ClientProxy.registerRender(ClientProxy.java:13) at fr.freshblock.freshrocket.common.ModFreshrocket.init(ModFreshrocket.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119) at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737) ... 12 more]
Merci à ceux qui m’aideront :)</t>
-
Revoie tes spoilers et tes balises java parce là, pour y comprendre quelquechose …
-
Salut,
J’ai modifié ton message pour qu’il soit lisible. Utilises la balise Java de cette façon la prochaine fois :```java ton code ici
Il y a plusieurs problèmes. Déjà public RenderFreshRocket(RenderManager p_i46193_1_, ModelRocket model, float shadow) devrait être : public RenderFreshRocket() Idem pour dans ton proxy : RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket(new ModelRocket())); devrait être : RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket()); ça va déjà résoudre le crash. Par contre tu n'aura pas de rendu en jeu (car ton modèle n'est pas vraiment un modèle). Tu veux rendre quoi exactement ? l'item en question ? Car si oui il suffit de reprendre le code du rendu de la boule de neige.
-
@‘BrokenSwing’:
Revoie tes spoilers et tes balises java parce là, pour y comprendre quelquechose …
ouais dsl j’ai tout foirer :/___@‘robin4002’:
Salut,
J’ai modifié ton message pour qu’il soit lisible. Utilises la balise Java de cette façon la prochaine fois :```java ton code ici
Il y a plusieurs problèmes. Déjà public RenderFreshRocket(RenderManager p_i46193_1_, ModelRocket model, float shadow) devrait être : public RenderFreshRocket() Idem pour dans ton proxy : RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket(new ModelRocket())); devrait être : RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket()); ça va déjà résoudre le crash. Par contre tu n'aura pas de rendu en jeu (car ton modèle n'est pas vraiment un modèle). Tu veux rendre quoi exactement ? l'item en question ? Car si oui il suffit de reprendre le code du rendu de la boule de neige.
bon ben je vais test tout ça et je vais up si 'est bon___Alors après avoir bien modifier tout les codes comme vous m’aviez dit j’ai un petit problème maintenant c’est un problème de “}” elle est souligné en rouge ligne 89 en me demandant de la supprimer et lorsque je la supprime ça me dit qu’une fonction n’a pas été déclaré (ligne 33)
package fr.freshblock.freshrocket.proxy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import fr.freshblock.freshrocket.entity.projectile.EntityFreshRocket; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.EntityPotion; import net.minecraft.item.Item; import net.minecraft.item.ItemPotion; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionHelper; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; public class RenderFreshRocket extends Render { private static final HashMap field_77925_n; private static final HashMap potionRequirements = new HashMap(); private Item field_94151_a; private static final ResourceLocation Textures = new ResourceLocation("ut:textures/entity/Rocket.png"); //Texture protected ModelRocket modelRocket = new ModelRocket(); //Model public RenderFreshRocket(Item FreshRocket, int i) { } public RenderFreshRocket(Item FreshRocket) { this(FreshRocket, 0); } /** * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic * (Render <t extends="" entity)="" and="" this="" method="" has="" signature="" public="" void="" func_76986_a(t="" entity,="" double="" d,="" d1,<br="">* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. */ public void doRender(Entity EntityFreshRocket, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { IIcon iicon = this.field_94151_a.getIconFromDamage((int) this.shadowOpaque); if (iicon != null) { GL11.glPushMatrix(); GL11.glTranslatef((float)p_76986_2_, (float)p_76986_4_, (float)p_76986_6_); GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glScalef(0.5F, 0.5F, 0.5F); this.bindEntityTexture(EntityFreshRocket); Tessellator tessellator = Tessellator.instance; if (iicon == ItemPotion.func_94589_d("explosion")) { int i = PotionHelper.func_77915_a(((EntityPotion)EntityFreshRocket).getPotionDamage(), false); float f2 = (float)(i >> 16 & 255) / 255.0F; float f3 = (float)(i >> 8 & 255) / 255.0F; float f4 = (float)(i & 255) / 255.0F; GL11.glColor3f(f2, f3, f4); GL11.glPushMatrix(); this.func_77026_a(tessellator, ItemPotion.func_94589_d("overlay")); GL11.glPopMatrix(); GL11.glColor3f(1.0F, 1.0F, 1.0F); } this.func_77026_a(tessellator, iicon); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } } } @Override protected ResourceLocation getEntityTexture(Entity p_110775_1_) { return TextureMap.locationItemsTexture; } private void func_77026_a(Tessellator p_77026_1_, IIcon p_77026_2_) { float f = p_77026_2_.getMinU(); float f1 = p_77026_2_.getMaxU(); float f2 = p_77026_2_.getMinV(); float f3 = p_77026_2_.getMaxV(); float f4 = 1.0F; float f5 = 0.5F; float f6 = 0.25F; GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); p_77026_1_.startDrawingQuads(); p_77026_1_.setNormal(0.0F, 1.0F, 0.0F); p_77026_1_.addVertexWithUV((double)(0.0F - f5), (double)(0.0F - f6), 0.0D, (double)f, (double)f3); p_77026_1_.addVertexWithUV((double)(f4 - f5), (double)(0.0F - f6), 0.0D, (double)f1, (double)f3); p_77026_1_.addVertexWithUV((double)(f4 - f5), (double)(f4 - f6), 0.0D, (double)f1, (double)f2); p_77026_1_.addVertexWithUV((double)(0.0F - f5), (double)(f4 - f6), 0.0D, (double)f, (double)f2); p_77026_1_.draw(); } } ```</t>
-
Sans des color qui n’ont rien à faire là ça serait mieux.
Vérifies bien que toutes les accolades que tu ouvres sont bien fermées. -
Ligne 177 tu l’enlève et t’en met une tout à la fin
-
@‘BrokenSwing’:
Ligne 177 tu l’enlève et t’en met une tout à la fin
Je viens de le faire ça ne change strictement rien toujours le même problème___@‘robin4002’:
Sans des color qui n’ont rien à faire là ça serait mieux.
Vérifies bien que toutes les accolades que tu ouvres sont bien fermées.Ok je viens de vérifier c’est juste l’accolade qui ne devait pas être là sauf que maintenant ```java
private static final HashMap field_77925_n; -
Il est final, donc il faut que tu l’initialise
-
@‘BrokenSwing’:
Il est final, donc il faut que tu l’initialise
Je l’ai supprimé parce qu’il ne servait strictement à rien dans le code sauf que ça crash encore parce que je n’ai pas défini le constructeur renderFreshRocket___@‘BrokenSwing’:
Il est final, donc il faut que tu l’initialise
Je viens de définir le constructeur sauf qu’il crash pour la même raison ```java
public RenderFreshRocket(Item FreshRocket, int i)
{
{
this.field_94151_a = FreshRocket;
this.shadowOpaque = i;
}
}public RenderFreshRocket(Item FreshRocket)
{
this(FreshRocket, 0);
} -
Ça serait bien de renommer tes variables parce que entre field_94151_a et field_94451_a bah c’est pas facile de s’y retrouver
Tu parle de la HashMap et ensuite tu parle de ton constructeur, je suis perdu
-
@‘BrokenSwing’:
Ça serait bien de renommer tes variables parce que entre field_94151_a et field_94451_a bah c’est pas facile de s’y retrouver
Tu parle de la HashMap et ensuite tu parle de ton constructeur, je suis perdu
Ok je suis dsl c’est pas clair en effet mais si tu veux je suis aller voir dans le crash report et le problème ne vient pas cette classe en faite le problème vient de la déclaration du rendu (RegisterRender….)___dernière question que dois-je mettre dans l’enregistrement à la place de ModelBiped pour un projectile ?
-
Je viens de voir en effet
Dans ta classe RenderFreshRocket tu as un constructeur avec un RenderManager, un ModelFreshRocket, et un float.
Et puis dans ton ClientProxy tu appelle le constructeur comme ça :
new RenderFreshRocket(new ModelRocket())
Là il n’y a que le model, faut rajouter le reste pour qu’ils correspondent
-
Ok maintenant que j’ai changer le register render, le model maintenant retour au RenderFreshRocket c’est le IconFromDamage qui déconne ```java
public void doRender(Entity EntityFreshRocket, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
IIcon iicon = this.field_94151_a.getIconFromDamage((int) this.shadowOpaque);if (iicon != null)
{
GL11.glPushMatrix();
GL11.glTranslatef((float)p_76986_2_, (float)p_76986_4_, (float)p_76986_6_);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glScalef(0.5F, 0.5F, 0.5F);
this.bindEntityTexture(EntityFreshRocket);
Tessellator tessellator = Tessellator.instance;if (iicon == ItemPotion.func_94589_d(“explosion”))
{
int i = PotionHelper.func_77915_a(((EntityPotion)EntityFreshRocket).getPotionDamage(), false);
float f2 = (float)(i >> 16 & 255) / 255.0F;
float f3 = (float)(i >> 8 & 255) / 255.0F;
float f4 = (float)(i & 255) / 255.0F;
GL11.glColor3f(f2, f3, f4);
GL11.glPushMatrix();
this.func_77026_a(tessellator, ItemPotion.func_94589_d(“overlay”));
GL11.glPopMatrix();
GL11.glColor3f(1.0F, 1.0F, 1.0F);
}this.func_77026_a(tessellator, iicon);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
}
___et quand je regarde le crash report toujours le registerrender undefined
java
RenderingRegistry.registerEntityRenderingHandler(EntityFreshRocket.class, new RenderFreshRocket(new ModelRocket(), 0.5F)); -
Bah il manque toujours le RenderManager dans ton constructeur, et ensuite comme je te l’ai déjà dit “field_94151_a” c’est pas vraiment explicite
-
@‘BrokenSwing’:
Bah il manque toujours le RenderManager dans ton constructeur, et ensuite comme je te l’ai déjà dit “field_94151_a” c’est pas vraiment explicite
je ne sais vraiment p___je ne sais vraiment pas quoi mettre dans le constructeur si quelqu’un avait un tut ça serait sympa :p___UP!
Le problème ne vient plus de là mais de cette ligne :java FMLLog.fine("Skipping automatic mod %s entity registration for already registered class %s", mc.getModId(), entityClass.getName());
___```java
[10:54:46] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ----
// SorryTime: 22/12/15 10:54
Description: Initializing gamejava.lang.NullPointerException: Initializing game
at cpw.mods.fml.common.registry.EntityRegistry.doModEntityRegistration(EntityRegistry.java:171)
at cpw.mods.fml.common.registry.EntityRegistry.registerModEntity(EntityRegistry.java:150)
at fr.freshblock.freshrocket.common.ModFreshrocket.init(ModFreshrocket.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737)
at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:311)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:597)
at net.minecraft.client.Minecraft.run(Minecraft.java:942)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
at GradleStart.main(Unknown Source) -
java.lang.NullPointerException
Tu essaie d’enregistrer un entité null at fr.freshblock.freshrocket.common.ModFreshrocket.init(ModFreshrocket.java:55)
-
L’init de la classe principale :
@EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); GameRegistry.addRecipe(new ItemStack (freshRocket), new Object []{"BSB","BTB","BRB",'B', Blocks.gold_block, 'S', Items.slime_ball, 'T', Blocks.tnt, 'R', Items.blaze_rod}); BlockDispenser.dispenseBehaviorRegistry.putObject(freshRocket, new BehaviorDefault()); EntityRegistry.registerModEntity(EntityFreshRocket.class,"EntityFreshRocket", 420, this.instance, 40, 1, true); EntityRegistry.registerGlobalEntityID(EntityFreshRocket.class,"EntityfreshRocket", EntityRegistry.findGlobalUniqueEntityId()); }
-
Essai d’inverser les deux lignes avec EntityRegistry (la 7 et la
-
toujours le même problème
-
Envoie ta classe principale et ta classe de l’entité