Crossdimensional Teleposition (including entities, into unloaded chunks etc) (#1385)
* AWAITING ALLOWANCE FROM BRANDON3055 (PERMISSION TO USE CODE SNIPPET FOR INTERDIMENSIONAL/CROSSDIMENSIONAL TELEPORT) COPYRIGHT ALL RIGHTS RESERVED FOR BRANDON3055 (CODE SNIPPET) AWAITING ALLOWANCE FROM TEHNUT, WAYOFTIME TO USE FOREIGN CODE (AS IT NEEDS ALLOWANCE & POSSIBLE CREDITS) DO NOT USE. * Forgot something. Requires permission from Brandon3055 (copyright on code snippet) Requires permission from WayofTime, TehNut (because it uses foreign code that might need attribution) Do not use. * License permits usage. Sorry for bothering everyone involved. Don't merge. Teleposer broken. Teleposition sigil works though. * IT WORKS!!!! - re-enabled cross dimensional telepositioning - works even if target teleposer is unloaded at the time of activation (force loads the chunk so the teleposer can be found, releases ticket when player arrives) - entity teleposition works properly - I'm tired and slightly insane - nobody asked for this. closes #973 (rewrite might still be needed though) might be able to close the following issue: - #1198 (improved cross dimensional teleportation code thanks to brandon3055) * Zombies stop holding onto tickets now. * Oversight.
This commit is contained in:
parent
c0570af36f
commit
2c92a9e0c1
3 changed files with 90 additions and 43 deletions
|
@ -22,6 +22,7 @@ import net.minecraft.world.World;
|
|||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class TileTeleposer extends TileInventory implements ITickable {
|
||||
//TODO FUTURE: Make AreaDescriptor for Teleposer perhaps?
|
||||
|
@ -98,34 +99,33 @@ public class TileTeleposer extends TileInventory implements ITickable {
|
|||
originalWorldEntities = getWorld().getEntitiesWithinAABB(Entity.class, originalArea);
|
||||
AxisAlignedBB focusArea = new AxisAlignedBB(focusPos.getX(), focusPos.getY() + 1, focusPos.getZ(), focusPos.getX() + 1, Math.min(focusWorld.getHeight(), focusPos.getY() + 2 * focusLevel), focusPos.getZ() + 1).expand(focusLevel - 1, 0, focusLevel - 1);
|
||||
focusWorldEntities = focusWorld.getEntitiesWithinAABB(Entity.class, focusArea);
|
||||
|
||||
UUID bindingOwnerID = binding.getOwnerId();
|
||||
if (focusWorld.equals(getWorld())) {
|
||||
if (!originalWorldEntities.isEmpty()) {
|
||||
for (Entity entity : originalWorldEntities) {
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, binding.getOwnerId(), true));
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, true));
|
||||
}
|
||||
}
|
||||
|
||||
if (!focusWorldEntities.isEmpty()) {
|
||||
for (Entity entity : focusWorldEntities) {
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, binding.getOwnerId(), true));
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, true));
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!originalWorldEntities.isEmpty()) {
|
||||
for (Entity entity : originalWorldEntities) {
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, getWorld(), focusWorld.provider.getDimension(), true));
|
||||
}
|
||||
}
|
||||
|
||||
if (!focusWorldEntities.isEmpty()) {
|
||||
for (Entity entity : focusWorldEntities) {
|
||||
TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, focusWorld, getWorld().provider.getDimension(), true));
|
||||
}
|
||||
}
|
||||
}
|
||||
// FIXME - Fix cross-dimension teleports causing major desync
|
||||
// } else {
|
||||
// if (!originalWorldEntities.isEmpty()) {
|
||||
// for (Entity entity : originalWorldEntities) {
|
||||
// TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), getWorld(), focusWorld.provider.getDimension(), true));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (!focusWorldEntities.isEmpty()) {
|
||||
// for (Entity entity : focusWorldEntities) {
|
||||
// TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), focusWorld, getWorld().provider.getDimension(), true));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue