13 août 2016, 14:09

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 -1


Donc, 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.