Plusieurs problèmes de mise à jour
-
Ajoutes juste un null check.
-
J’ai testé ça, j’ai testé d’autres trucs et j’ai enfin trouvé (malgré que ça soit bizarre) : la fonction n’est pas appelé côté client. Ca peut paraître bizarre, mais pourtant c’est ça.```java
@SubscribeEvent
public void nightSound(TickEvent.WorldTickEvent event)
{
if(event.world.isRemote)
{
if (event.phase == TickEvent.Phase.END)
{
System.out.println(“test”);
//if(event.world != null && event.side.isClient() && event.type.WORLD != null && event.type.CLIENT != null && event.type.PLAYER != null)
{
System.out.println(“rien n’est nul”);
Minecraft mc = FMLClientHandler.instance().getClient();switch ((int)mc.theWorld.getWorldTime())
{
case 15000:
case 16000:
case 17000:
case 18000:
case 19000:
case 20000:
mc.theWorld.playSound(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, SoundsRegistering.ambient_nightSound, SoundCategory.AMBIENT, 0.2F, 1.0F, false);
break;
}
}
}
}
}Si j'enlève le world isRemote, ça crash. Or, si je le met ça marche bien mais il n'y a pas les messages (ce qui prouve que la fonction n'est pas appelé. Mais c'est quand même bizarre vu que la classe est enregistré dans le ClientProxy -
Utilises alors TickEvent.ClientTickEvent
-
J’ai testé, Minecraft charge bien mais il m’affiche le menu principal une demi-seconde et crash en me précisant cette ligne : ```java
switch ((int)mc.theWorld.getWorldTime())Sinon, j'ai réessayé PlayerTickEvent et ça marche bien seulement si je met :```java if(event.side.isClient()) ```Ca ne me gène pas de l'utiliser (au contraire, si c'est pour le bon fonctionnement je suis pour) mais pourquoi c'est aussi appelé côté serveur sinon ? C'est enregistrer dans le client proxy pourtant. -
Les events enregistrés dans le client proxy sont toujours appelés côté serveur intégré, vu que c’est le programme client, le seul endroit où ils ne sont pas appelés, c’est le serveur dédié, mais tu peux mettre un @SideOnly(Side.CLIENT) sur la fonction pour éviter ça.
Et pour le NPE, tu peux faire un null check sur mc.theWorld au lieu d’utiliser PlayerTickEvent. -
Ok merci

Je n’ai plus que deux problèmes dans le mod. Dans le blockPortal, j’utilisait
java mcServer.getConfigurationManager().transferPlayerToDimension(player, ThisisHalloween.DIMENSION_ID, new TeleporterFrightful(mcServer.worldServerForDimension(ThisisHalloween.DIMENSION_ID)));pour me tp dans ma dimension. Mais getConfigurationManager n’existe plus. J’ai cherché et j’ai trouvé ```java
entityIn.changeDimension(ThisisHalloween.DIMENSION_ID);Encore dans le blockPortal, cette fonction```java entity1.copyDataFromOld(entity); ``` est private. Là, on n'y peut malheureusement pas grand chose, mais est-elle importante ? Elle est dans cette fonction :```java private void travelToDimension(Entity entity, int id) { if (!entity.worldObj.isRemote && !entity.isDead) { entity.worldObj.theProfiler.startSection("changeDimension"); MinecraftServer minecraftserver = entity.getServer(); int j = entity.dimension; WorldServer worldserver = minecraftserver.worldServerForDimension(j); WorldServer worldserver1 = minecraftserver.worldServerForDimension(id); entity.dimension = id; if (j == 1 && id == 1) { worldserver1 = minecraftserver.worldServerForDimension(0); entity.dimension = 0; } entity.worldObj.removeEntity(entity); entity.isDead = false; entity.worldObj.theProfiler.startSection("reposition"); //. minecraftserver.getConfigurationManager().transferEntityToWorld(entity, j, worldserver, worldserver1, new Teleporter(worldserver1)); entity.worldObj.theProfiler.endStartSection("reloading"); Entity entity1 = EntityList.createEntityByName(EntityList.getEntityString(entity), worldserver1); if (entity1 != null) { // entity1.copyDataFromOld(entity); if (j == 1 && id == 1) { BlockPos spawnPoint = worldserver1.getSpawnPoint(); spawnPoint = entity.worldObj.getTopSolidOrLiquidBlock(spawnPoint); entity1.setLocationAndAngles(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ(), entity1.rotationYaw, entity1.rotationPitch); } worldserver1.spawnEntityInWorld(entity1); } entity.isDead = true; entity.worldObj.theProfiler.endSection(); worldserver.resetUpdateEntityTick(); worldserver1.resetUpdateEntityTick(); entity.worldObj.theProfiler.endSection(); } }Pour le problème de la création d’un monde à l’enregistrement du WorldProvider (voir dernier post page 1), c’est de ma faute, j’ai oublier un truc.```java
@Override
public DimensionType getDimensionType()
{
return ThisisHalloween.FRIGHTFUL_DIMENSION_TYPE;
}Merci d'avance -
getConfiguration doit avoir changé de nom, ou l’élément qu’elle return est passé en public, donc la fonction est devenue inutile, regarde si une fonction ou une field n’a pas un nom semblable dans la classe McServer.
Pour le copyDataFromOld, regarde dans la version de mc où cette fonction existe et essaye de le refaire, sinon, il faudra passer par de la réflexion pour accéder quand même à la fonction. -
-
Mais c’est là que viens le problème, elle retourne le fichier ServerConfigurationManager, qui n’existe plus en 1.9 (il a dû changer de nom et de package).
-
Je viens d’essayer, mais la fonction utilise des trucs en private, et d’autres en protégés. Du coup, je vais essayer d’utiliser la réflexion
EDIT : j’ai essayer d’utiliser le reflection, j’ai fait ```java
ObfuscationReflectionHelper.setPrivateValue(Entity.class, instance, entity1., “lastPortalPos”);
ObfuscationReflectionHelper.setPrivateValue(Entity.class, instance, entity1., “lastPortalVec”);
ObfuscationReflectionHelper.setPrivateValue(Entity.class, instance, entity1., “teleportDirection”);EDIT n°2 : je viens de trouver pour la 1\. Il faut remplacer ```java mcServer.getConfigurationManager().transferPlayerToDimension(player, 0, new TeleporterFrightful(mcServer.worldServerForDimension(0))); ``` par ```java playerList.transferPlayerToDimension(player, 0, new TeleporterFrightful(mcServer.worldServerForDimension(0))); ```. Je vais vous expliquer comment j'ai trouvé. J'ai ouvert eclipse avec mon mod en 1.8 et je suis aller dans le fichiers ServerConfigurationManager. J'ai utilisé la méthode que quelqu'un (désolé si tu lis ce post, je ne me souviens plus de ton pseudo) m'a donné pour voir où est appelé la classe UserListBans (elle est appelé dans convertUserBanlist et ServerConfigurationManager). Je suis retourné en 1.9, j'ai fait pareil et elle est appelé dans convertUserBanlist et dans PlayerList. Comme PlayerList n'est pas en 1.8, je l'ai ouvert et l'ai comparé à ServerConfigurationManager. C'est exactement pareil. Il me reste un seul problème : il faut initialiser la variable. J'utilise ```java PlayerList playerList; ``` et ensuite je l'utilise pour ```java playerList.transferPlayerToDimension( ``` mais je ne sais pas quoi mettre pour l'initialiser. -
-
- Je regarde ça

- Pour l’instance, c’est ton entité (donc entity1), et pour les valeurs, faut regarder dans la fonction en private les valeurs qu’elle utilise.
PS: Il y a aussi un moyen (plus compliqué) d’appeler directement la fonction copyDataFromOld, car là, si tu changes plusieurs valeurs, au niveau perfs c’est pas extra ^^
- Je regarde ça
-
Pour la 1, j’ai modifier le post d’au-dessus, regarde l’édit n°2.
Pour la 2, je vais voir
EDIT : je ne change que 3 valeurs par la reflection. Tu pense que ça va beaucoup jouer sur les performances ? -
Pour le playerList, tu dois pouvoir l’avoir via le mcServer.
Vu que le code n’est pas appelé souvent, oui ça ira. -
J’ai testé d’entre dans le portail, mais ça crash. J’ai donc essayé de modifier l’ID pour que ça me mène vers le Nether (pour savoir si c’est ma dimension qui bug) et ça crash pareil. Voilà les logs :
[23:07:26] [Server thread/FATAL]: Error executing task java.util.concurrent.ExecutionException: net.minecraft.util.ReportedException: Colliding entity with block at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_92] at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_92] at net.minecraft.util.Util.runTask(Util.java:24) [Util.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:738) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:683) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:155) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:532) [MinecraftServer.class:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_92] Caused by: net.minecraft.util.ReportedException: Colliding entity with block at net.minecraft.entity.Entity.moveEntity(Entity.java:962) ~[Entity.class:?] at net.minecraft.network.NetHandlerPlayServer.processPlayer(NetHandlerPlayServer.java:499) ~[NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.CPacketPlayer.processPacket(CPacketPlayer.java:36) ~[CPacketPlayer.class:?] at net.minecraft.network.play.client.CPacketPlayer$C06PacketPlayerPosLook.processPacket(CPacketPlayer.java:162) ~[CPacketPlayer$C06PacketPlayerPosLook.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_92] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_92] at net.minecraft.util.Util.runTask(Util.java:23) ~[Util.class:?] … 5 more Caused by: java.lang.NullPointerException at thisishalloween.world.frightful.TeleporterFrightful.placeInExistingPortal(TeleporterFrightful.java:139) ~[TeleporterFrightful.class:?] at thisishalloween.world.frightful.TeleporterFrightful.placeInPortal(TeleporterFrightful.java:43) ~[TeleporterFrightful.class:?] at net.minecraft.server.management.PlayerList.transferEntityToWorld(PlayerList.java:733) ~[PlayerList.class:?] at net.minecraft.server.management.PlayerList.transferPlayerToDimension(PlayerList.java:640) ~[PlayerList.class:?] at thisishalloween.block.BlockPortalFrightful.onEntityCollidedWithBlock(BlockPortalFrightful.java:242) ~[BlockPortalFrightful.class:?] at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1037) ~[Entity.class:?] at net.minecraft.entity.Entity.moveEntity(Entity.java:955) ~[Entity.class:?] at net.minecraft.network.NetHandlerPlayServer.processPlayer(NetHandlerPlayServer.java:499) ~[NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.CPacketPlayer.processPacket(CPacketPlayer.java:36) ~[CPacketPlayer.class:?] at net.minecraft.network.play.client.CPacketPlayer$C06PacketPlayerPosLook.processPacket(CPacketPlayer.java:162) ~[CPacketPlayer$C06PacketPlayerPosLook.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_92] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_92] at net.minecraft.util.Util.runTask(Util.java:23) ~[Util.class:?] … 5 more [23:07:26] [Server thread/WARN]: Can't keep up! Did the system time change, or is the server overloaded? Running 3689ms behind, skipping 73 tick(s) [23:07:26] [Server thread/INFO] [FML]: Unloading dimension -1Le crash me reporte à deux endroits différents : à cette ligne :```java
d6 = (double)(blockpattern$patternhelper.getPos().getY() + 1) - entityIn.getLastPortalVec().yCoord * (double)blockpattern$patternhelper.func_181119_e();qui est dans la fonction placeInExistingPortal dans le teleporter. Ca me reporte aussi à la ligne qui appelle placeInExistingPortal. Je vous met la fonction en entière :java
public boolean placeInExistingPortal(Entity entityIn, float rotationYaw)
{
int i = 128;
double d0 = -1.0D;
int j = MathHelper.floor_double(entityIn.posX);
int k = MathHelper.floor_double(entityIn.posZ);
boolean flag = true;
BlockPos blockpos = BlockPos.ORIGIN;
long l = ChunkCoordIntPair.chunkXZ2Int(j, k);if (this.destinationCoordinateCache.containsItem(l))
{
Teleporter.PortalPosition teleporter$portalposition = (Teleporter.PortalPosition)this.destinationCoordinateCache.getValueByKey(l);
d0 = 0.0D;
blockpos = teleporter$portalposition;
teleporter$portalposition.lastUpdateTime = this.worldServerInstance.getTotalWorldTime();
flag = false;
}
else
{
BlockPos blockpos3 = new BlockPos(entityIn);for (int i1 = -128; i1 <= 128; ++i1)
{
BlockPos blockpos2;for (int j1 = -128; j1 <= 128; ++j1)
{
for (BlockPos blockpos1 = blockpos3.add(i1, this.worldServerInstance.getActualHeight() - 1 - blockpos3.getY(), j1); blockpos1.getY() >= 0; blockpos1 = blockpos2)
{
blockpos2 = blockpos1.down();if (this.worldServerInstance.getBlockState(blockpos1).getBlock() == CreateBlocks.portalFrightful)
{
while (this.worldServerInstance.getBlockState(blockpos2 = blockpos1.down()).getBlock() == CreateBlocks.portalFrightful)
{
blockpos1 = blockpos2;
}double d1 = blockpos1.distanceSq(blockpos3);
if (d0 < 0.0D || d1 < d0)
{
d0 = d1;
blockpos = blockpos1;
}
}
}
}
}
}if (d0 >= 0.0D)
{
if (flag)
{
this.destinationCoordinateCache.add(l, new Teleporter.PortalPosition(blockpos, this.worldServerInstance.getTotalWorldTime()));
this.destinationCoordinateKeys.add(Long.valueOf(l));
}double d5 = (double)blockpos.getX() + 0.5D;
double d6 = (double)blockpos.getY() + 0.5D;
double d7 = (double)blockpos.getZ() + 0.5D;
BlockPattern.PatternHelper blockpattern$patternhelper = Blocks.portal.func_181089_f(this.worldServerInstance, blockpos);
boolean flag1 = blockpattern$patternhelper.getFinger().rotateY().getAxisDirection() == EnumFacing.AxisDirection.NEGATIVE;
double d2 = blockpattern$patternhelper.getFinger().getAxis() == EnumFacing.Axis.X ? (double)blockpattern$patternhelper.getPos().getZ() : (double)blockpattern$patternhelper.getPos().getX();
d6 = (double)(blockpattern$patternhelper.getPos().getY() + 1) - entityIn.getLastPortalVec().yCoord * (double)blockpattern$patternhelper.func_181119_e();if (flag1)
{
++d2;
}if (blockpattern$patternhelper.getFinger().getAxis() == EnumFacing.Axis.X)
{
d7 = d2 + (1.0D - entityIn.getLastPortalVec().xCoord) * (double)blockpattern$patternhelper.func_181118_d() * (double)blockpattern$patternhelper.getFinger().rotateY().getAxisDirection().getOffset();
}
else
{
d5 = d2 + (1.0D - entityIn.getLastPortalVec().xCoord) * (double)blockpattern$patternhelper.func_181118_d() * (double)blockpattern$patternhelper.getFinger().rotateY().getAxisDirection().getOffset();
}float f = 0.0F;
float f1 = 0.0F;
float f2 = 0.0F;
float f3 = 0.0F;if (blockpattern$patternhelper.getFinger().getOpposite() == entityIn.getTeleportDirection())
{
f = 1.0F;
f1 = 1.0F;
}
else if (blockpattern$patternhelper.getFinger().getOpposite() == entityIn.getTeleportDirection().getOpposite())
{
f = -1.0F;
f1 = -1.0F;
}
else if (blockpattern$patternhelper.getFinger().getOpposite() == entityIn.getTeleportDirection().rotateY())
{
f2 = 1.0F;
f3 = -1.0F;
}
else
{
f2 = -1.0F;
f3 = 1.0F;
}double d3 = entityIn.motionX;
double d4 = entityIn.motionZ;
entityIn.motionX = d3 * (double)f + d4 * (double)f3;
entityIn.motionZ = d3 * (double)f2 + d4 * (double)f1;
entityIn.rotationYaw = rotationYaw - (float)(entityIn.getTeleportDirection().getOpposite().getHorizontalIndex() * 90) + (float)(blockpattern$patternhelper.getFinger().getHorizontalIndex() * 90);if (entityIn instanceof EntityPlayerMP)
{
((EntityPlayerMP)entityIn).playerNetServerHandler.setPlayerLocation(d5, d6, d7, entityIn.rotationYaw, entityIn.rotationPitch);
}
else
{
entityIn.setLocationAndAngles(d5, d6, d7, entityIn.rotationYaw, entityIn.rotationPitch);
}return true;
}
else
{
return false;
}
}EDIT : j'ai testé en utilisant le teleporter de base, ça crash paeil. Même logs. Du coup, c'est bien les modifs que j'ai fait pour contrer le private de copyDataFromOld qui font buguer. Voilà ce que j'ai fait : ```java BlockPos lastPortalPos = new BlockPos(entity.posX, entity.posY, entity.posZ); Vec3d lastPortalVec = entity.getLastPortalVec(); EnumFacing teleportDirection = entity.getTeleportDirection(); entity.timeUntilPortal = entity1.timeUntilPortal; ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, lastPortalPos, "lastPortalPos"); ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, lastPortalVec, "lastPortalVec"); ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, teleportDirection, "teleportDirection"); -
Fais un print de “entityIn.getLastPortalVec()” dans ta fonction placeInExistingPortal. et regarde dans les logs si tu n’a pas une erreur sur le réflexion.
-
Arrêtez de debugger avec des prints …
Tu mets un point d’arret sur la ligne qui pose problème, tu lance en debug et tu fais du pas par pas …
C’est 1000x plus efficace et rapide.Si tu ne sais pas te servir du debuggueur Eclipse, cherche sur internet, ça te changera la vie
-
Salut
Ca doit être la reflection qui bug car[13:49:58] [Server thread/INFO] [STDOUT]: [thisishalloween.world.frightful.TeleporterFrightful:placeInExistingPortal:76]: lastPortalVec : null [13:49:58] [Server thread/INFO] [STDOUT]: [thisishalloween.world.frightful.TeleporterFrightful:placeInExistingPortal:77]: teleportDirection : nulllastPortalVec est nul.
Je vais voir le blockPortal vanilla voir ce qui change@‘RedRelay’:
Tu mets un point d’arret sur la ligne qui pose problème …
Si je sais pas c’est quelle ligne qui bug, ça va être plutôt dur

-
@‘Axaurus’:
@‘RedRelay’:
Tu mets un point d’arret sur la ligne qui pose problème …
Si je sais pas c’est quelle ligne qui bug, ça va être plutôt dur

thisishalloween.world.frightful.TeleporterFrightful.placeInExistingPortal(TeleporterFrightful.java:139)Elle est la ta ligne qui pose problème
-
Les logs disent ça mais c’est pas ça. Il ne faut pas trop se fier au crash report des fois. Par exemple, quand j’ai voulu mettre à jour mon mod en 1.8, j’ai eu un problème pour la dimension. J’avais cru que c’était le teleporter qui buguait (ça m’indiquait la même ligne) mais en fait c’était le worldChunkManager, ça marchait très bien pour m’emmener dans le Nether. Et pis là, j’ai testé en allant dans le Nether en utilisant le teleporter de base et ça crash quand même.
Mais merci quand même
-
Le crash report indique toujours la bonne raison, c’est juste que quelque fois il faut remonter un peu car le problème peut être dû à une autre classe
-
Tu remontes dans la StackTrace alors.
Ça aussi le débuggeur permet de le faire, et c’est monstrueusement plus efficace qu’un syso. -
Salut
J’ai modifier des tas de trucs et le tp marche plus ou moins.
Déjà, je vous donne le code :```java
@Override
public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
{
if (entityIn.getRidingEntity() == null && entityIn.getRidingEntity() == null && entityIn.timeUntilPortal <= 0)
{
int id = -1;if (entityIn.dimension == id)
{
id = 0;
}if (entityIn instanceof EntityPlayerMP)
{
EntityPlayerMP player = (EntityPlayerMP) entityIn;
MinecraftServer mcServer = entityIn.getServer();if (player.timeUntilPortal > 0)
{
player.timeUntilPortal = 100;
}
else if (player.dimension != ThisisHalloween.DIMENSION_ID)
{
ThisisHalloween.portal = false;
// mcServer.getPlayerList().transferPlayerToDimension(player, -1, new Teleporter(mcServer.worldServerForDimension(-1)));
//entityIn.changeDimension(-1);
travelToDimension(entityIn, id);
player.timeUntilPortal = 100;
System.out.println(“appel travel”);
ThisisHalloween.portal = true;
}
else
{
mcServer.getPlayerList().transferPlayerToDimension(player, 0, new TeleporterFrightful(mcServer.worldServerForDimension(0)));
// entityIn.changeDimension(0);
player.timeUntilPortal = 100;
}// System.out.println(“appel travel”);
// travelToDimension(entityIn, id);
// player.timeUntilPortal = 100;
}}
}private Entity travelToDimension(Entity entity, int id)
{
if (!entity.worldObj.isRemote && !entity.isDead)
{
if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(entity, id)) return null;
entity.worldObj.theProfiler.startSection(“changeDimension”);
MinecraftServer minecraftserver = entity.getServer();
int j = entity.dimension;
WorldServer worldserver = minecraftserver.worldServerForDimension(j);
WorldServer worldserver1 = minecraftserver.worldServerForDimension(id);
entity.dimension = id;if (j == 1 && id == 1) {
worldserver1 = minecraftserver.worldServerForDimension(0);
entity.dimension = 0;
}entity.worldObj.removeEntity(entity);
entity.isDead = false;
entity.worldObj.theProfiler.startSection(“reposition”);
BlockPos blockpos;if (id == 1)
{
blockpos = worldserver1.getSpawnCoordinate();
}
else
{
double d0 = entity.posX;
double d1 = entity.posZ;
double d2 = 8.0D;if (id == -1)
{
d0 = MathHelper.clamp_double(d0 / d2, worldserver1.getWorldBorder().minX() + 16.0D, worldserver1.getWorldBorder().maxX() - 16.0D);
d1 = MathHelper.clamp_double(d1 / d2, worldserver1.getWorldBorder().minZ() + 16.0D, worldserver1.getWorldBorder().maxZ() - 16.0D);
}
else if (id == 0)
{
d0 = MathHelper.clamp_double(d0 * d2, worldserver1.getWorldBorder().minX() + 16.0D, worldserver1.getWorldBorder().maxX() - 16.0D);
d1 = MathHelper.clamp_double(d1 * d2, worldserver1.getWorldBorder().minZ() + 16.0D, worldserver1.getWorldBorder().maxZ() - 16.0D);
}d0 = (double)MathHelper.clamp_int((int)d0, -29999872, 29999872);
d1 = (double)MathHelper.clamp_int((int)d1, -29999872, 29999872);
float f = entity.rotationYaw;
entity.setLocationAndAngles(d0, entity.posY, d1, 90.0F, 0.0F);
Teleporter teleporter = worldserver1.getDefaultTeleporter();
teleporter.placeInExistingPortal(entity, f);
blockpos = new BlockPos(entity);
}//TODO minecraftserver.getPlayerList().transferEntityToWorld(entity, j, worldserver, worldserver1, new Teleporter(worldserver1));
worldserver.updateEntityWithOptionalForce(entity, false);
entity.worldObj.theProfiler.endStartSection(“reloading”);
Entity entity1 = EntityList.createEntityByName(EntityList.getEntityString(entity), worldserver1);if (entity1 != null)
{
// entity1.copyDataFromOld(entity);
BlockPos lastPortalPos = new BlockPos(entity.posX, entity.posY, entity.posZ);
Vec3d lastPortalVec = entity.getLastPortalVec();
EnumFacing teleportDirection = entity.getTeleportDirection();entity.timeUntilPortal = entity1.timeUntilPortal;
ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, lastPortalPos, “lastPortalPos”);
ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, lastPortalVec, “lastPortalVec”);
ObfuscationReflectionHelper.setPrivateValue(Entity.class, entity1, teleportDirection, “teleportDirection”);if (j == 1 && id == 1)
{
BlockPos spawnPoint = worldserver1.getTopSolidOrLiquidBlock(worldserver1.getSpawnPoint());
entity1.moveToBlockPosAndAngles(spawnPoint, entity1.rotationYaw, entity1.rotationPitch);
}
else
{
entity1.moveToBlockPosAndAngles(blockpos, entity1.rotationYaw, entity1.rotationPitch);
}boolean flag = entity1.forceSpawn;
entity1.forceSpawn = true;
worldserver1.spawnEntityInWorld(entity1);
entity1.forceSpawn = flag;
worldserver1.updateEntityWithOptionalForce(entity1, false);
}entity.isDead = true;
entity.worldObj.theProfiler.endSection();
worldserver.resetUpdateEntityTick();
worldserver1.resetUpdateEntityTick();
entity.worldObj.theProfiler.endSection();
return entity1;
}
else
{
System.out.println(“null travel”);
return null;
}}
Ensuite, voilà le problème. Quand j'entre dans le portail, ça me tp, mais pas visuellement. Qu'est ce que je veux dire par là ? Quand je rentre dans le portail, le jeu me croie dans le Nether : les entités qui sont dans l'Overworld ne bouge plus et je ne peux plus intéragir avec mais à part ça tout fonctionne (le temps qui défile, le chat, …), j'ai fait afficher dans la console dans quel dimension je suis et dès que je rentre dans le portail, ça me dit -1\. Et quand je déco/reco, je me retrouve dans le nether. De plus, je vois dans la console que le Nether charge. Par contre, la console me spam à l'infini :[16:01:57] [Server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@574531d4)
[16:01:57] [Server thread/INFO] [FML]: Unloading dimension -1Donc, je pense que vous vous doutez de ma question : pourquoi ça fait ça et comment corriger ? Merci d'avance PS : je précise que j'utilise toujours le teleporter de base, ça ne peut donc pas être ça EDIT : j'ai testé c'est bien la fonction TravelToDimension qui bug.