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
[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
PS : je précise que j
EDIT : j