Some small steps regarding teleportation
This commit is contained in:
parent
30c86f1e16
commit
3ffbe2ad03
5 changed files with 69 additions and 12 deletions
|
@ -7,6 +7,7 @@ package com.zixiken.dimdoors;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
|
||||||
|
@ -24,5 +25,7 @@ public interface IDDProxy {
|
||||||
|
|
||||||
public EntityPlayer getLocalPlayer();
|
public EntityPlayer getLocalPlayer();
|
||||||
|
|
||||||
|
public WorldServer getWorldServer(int dimId);
|
||||||
|
|
||||||
public World getDefWorld();
|
public World getDefWorld();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import com.zixiken.dimdoors.tileentities.TileEntityTransTrapdoor;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
|
||||||
|
@ -38,6 +38,11 @@ public class DDProxyClient extends DDProxyCommon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public World getDefWorld() {
|
public World getDefWorld() {
|
||||||
return Minecraft.getMinecraft().getIntegratedServer().worldServerForDimension(0); //gets the client world dim 0 handler
|
return getWorldServer(0); //gets the client world dim 0 handler
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorldServer getWorldServer(int dimId) {
|
||||||
|
return Minecraft.getMinecraft().getIntegratedServer().worldServerForDimension(dimId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ package com.zixiken.dimdoors.server;
|
||||||
import com.zixiken.dimdoors.DDProxyCommon;
|
import com.zixiken.dimdoors.DDProxyCommon;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,7 +29,12 @@ public class DDProxyServer extends DDProxyCommon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public World getDefWorld() {
|
public World getDefWorld() {
|
||||||
return DimensionManager.getWorld(0); //gets the server world dim 0 handler
|
return getWorldServer(0); //gets the server world dim 0 handler
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorldServer getWorldServer(int dimId) {
|
||||||
|
return DimensionManager.getWorld(dimId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,7 +47,7 @@ public class Location {
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public World getWorld() {
|
public WorldServer getWorld() {
|
||||||
return DimensionManager.getWorld(dimensionID);
|
return DimensionManager.getWorld(dimensionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,25 @@
|
||||||
package com.zixiken.dimdoors.shared;
|
package com.zixiken.dimdoors.shared;
|
||||||
|
|
||||||
|
import com.zixiken.dimdoors.DimDoors;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
|
import net.minecraft.client.multiplayer.WorldClient;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.network.play.server.SPacketUpdateHealth;
|
||||||
|
import net.minecraft.server.management.PlayerList;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.Teleporter;
|
import net.minecraft.world.Teleporter;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
|
|
||||||
public class TeleportHelper extends Teleporter {
|
public class TeleportHelper extends Teleporter {
|
||||||
|
|
||||||
Location location;
|
private final Location location;
|
||||||
|
|
||||||
public TeleportHelper(Location location) {
|
public TeleportHelper(Location location) {//@todo make TeleportHelper static
|
||||||
super((WorldServer) location.getWorld());
|
super((WorldServer) location.getWorld());
|
||||||
|
this.location = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -21,11 +29,45 @@ public class TeleportHelper extends Teleporter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void teleport(Entity entity, Location location) {
|
public static void teleport(Entity entity, Location location) {
|
||||||
Teleporter tele = new TeleportHelper(location);
|
if (entity instanceof EntityPlayerSP) {
|
||||||
if (entity instanceof EntityPlayerMP) {
|
return;
|
||||||
location.getWorld().getMinecraftServer().getPlayerList().transferPlayerToDimension((EntityPlayerMP) entity, location.getDimensionID(), tele);
|
}
|
||||||
|
|
||||||
|
BlockPos newPos = location.getPos();
|
||||||
|
int oldDimID = entity.dimension;
|
||||||
|
int newDimID = location.getDimensionID();
|
||||||
|
WorldServer oldWorldServer = DimDoors.proxy.getWorldServer(oldDimID);
|
||||||
|
WorldServer newWorldServer = DimDoors.proxy.getWorldServer(newDimID);
|
||||||
|
|
||||||
|
if (oldDimID == newDimID) {
|
||||||
|
if (entity instanceof EntityPlayer) {
|
||||||
|
EntityPlayerMP player = (EntityPlayerMP) entity;
|
||||||
|
|
||||||
|
player.setPositionAndUpdate(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5);
|
||||||
|
player.world.updateEntityWithOptionalForce(player, false);
|
||||||
|
//player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel()));
|
||||||
|
player.timeUntilPortal = 150;
|
||||||
} else {
|
} else {
|
||||||
location.getWorld().getMinecraftServer().getPlayerList().transferEntityToWorld(entity, entity.world.provider.getDimension(), (WorldServer) entity.world, (WorldServer) location.getWorld(), tele);
|
WorldServer world = (WorldServer) entity.world;
|
||||||
|
|
||||||
|
entity.setPosition(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5);
|
||||||
|
entity.timeUntilPortal = 150;
|
||||||
|
world.resetUpdateEntityTick();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entity instanceof EntityPlayer) {
|
||||||
|
EntityPlayerMP player = (EntityPlayerMP) entity;
|
||||||
|
player.changeDimension(newDimID);
|
||||||
|
player.setPositionAndUpdate(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5);
|
||||||
|
player.world.updateEntityWithOptionalForce(player, false);
|
||||||
|
//player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel()));
|
||||||
|
} else if (!entity.world.isRemote) {
|
||||||
|
entity.changeDimension(newDimID);
|
||||||
|
entity.setPosition(newPos.getX() + 0.5, newPos.getY() + 0.5, newPos.getZ() + 0.5);
|
||||||
|
oldWorldServer.resetUpdateEntityTick();
|
||||||
|
newWorldServer.resetUpdateEntityTick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//@todo set player angle in front of and facing away from the door
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue