Correct various weirdness with personal doors in pocket dimensions
This commit is contained in:
parent
bb2525d94e
commit
44a0d4b3ec
5 changed files with 25 additions and 9 deletions
|
@ -1,5 +1,6 @@
|
||||||
package StevenDimDoors.mod_pocketDim.blocks;
|
package StevenDimDoors.mod_pocketDim.blocks;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.world.PersonalPocketProvider;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -28,7 +29,10 @@ public class PersonalDimDoor extends BaseDimDoor
|
||||||
DimLink link = dimension.getLink(x, y, z);
|
DimLink link = dimension.getLink(x, y, z);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
{
|
{
|
||||||
dimension.createLink(x, y, z, LinkType.PERSONAL, world.getBlockMetadata(x, y - 1, z));
|
if (world.provider instanceof PersonalPocketProvider)
|
||||||
|
dimension.createLink(x, y, z, LinkType.LIMBO, world.getBlockMetadata(x, y-1, z));
|
||||||
|
else
|
||||||
|
dimension.createLink(x, y, z, LinkType.PERSONAL, world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package StevenDimDoors.mod_pocketDim.core;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||||
import cpw.mods.fml.common.FMLCommonHandler;
|
import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -499,13 +500,22 @@ public class DDTeleporter
|
||||||
case POCKET:
|
case POCKET:
|
||||||
return PocketBuilder.generateNewPocket(link, properties, door, DimensionType.POCKET);
|
return PocketBuilder.generateNewPocket(link, properties, door, DimensionType.POCKET);
|
||||||
case PERSONAL:
|
case PERSONAL:
|
||||||
return setupPersonalLink(link, properties, (EntityPlayer)entity, door);
|
return setupPersonalLink(link, properties, entity, door);
|
||||||
case SAFE_EXIT:
|
case SAFE_EXIT:
|
||||||
return generateSafeExit(link, properties);
|
return generateSafeExit(link, properties);
|
||||||
case DUNGEON_EXIT:
|
case DUNGEON_EXIT:
|
||||||
return generateDungeonExit(link, properties);
|
return generateDungeonExit(link, properties);
|
||||||
case UNSAFE_EXIT:
|
case UNSAFE_EXIT:
|
||||||
return generateUnsafeExit(link);
|
return generateUnsafeExit(link);
|
||||||
|
case LIMBO:
|
||||||
|
if(!(entity instanceof EntityPlayer))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point4D dest = LimboProvider.getLimboSkySpawn((EntityPlayer)entity, DDProperties.instance());
|
||||||
|
link.tail.setDestination(dest);
|
||||||
|
return true;
|
||||||
case NORMAL:
|
case NORMAL:
|
||||||
case REVERSE:
|
case REVERSE:
|
||||||
case RANDOM:
|
case RANDOM:
|
||||||
|
@ -515,13 +525,14 @@ public class DDTeleporter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean setupPersonalLink(DimLink link, DDProperties properties,EntityPlayer player, Block door)
|
private static boolean setupPersonalLink(DimLink link, DDProperties properties,Entity entity, Block door)
|
||||||
{
|
{
|
||||||
if(!(player instanceof EntityPlayer))
|
if(!(entity instanceof EntityPlayer))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EntityPlayer player = (EntityPlayer)entity;
|
||||||
NewDimData dim = PocketManager.getPersonalDimensionForPlayer(player.getGameProfile().getId().toString());
|
NewDimData dim = PocketManager.getPersonalDimensionForPlayer(player.getGameProfile().getId().toString());
|
||||||
if(dim == null)
|
if(dim == null)
|
||||||
{
|
{
|
||||||
|
@ -533,8 +544,7 @@ public class DDTeleporter
|
||||||
{
|
{
|
||||||
PocketManager.getDimensionData(link.source().getDimension()).setLinkDestination(personalHomeLink, link.source().getX(), link.source().getY(), link.source().getZ());
|
PocketManager.getDimensionData(link.source().getDimension()).setLinkDestination(personalHomeLink, link.source().getX(), link.source().getY(), link.source().getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
dim.setLinkDestination(link, dim.origin.getX(), dim.origin.getY(), dim.origin.getZ());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ public enum LinkType
|
||||||
UNSAFE_EXIT(6),
|
UNSAFE_EXIT(6),
|
||||||
REVERSE(7),
|
REVERSE(7),
|
||||||
PERSONAL(8),
|
PERSONAL(8),
|
||||||
|
LIMBO(9),
|
||||||
CLIENT(-1337);
|
CLIENT(-1337);
|
||||||
|
|
||||||
LinkType(int index)
|
LinkType(int index)
|
||||||
|
|
|
@ -428,7 +428,8 @@ public abstract class NewDimData implements IPackable<PackedDimData>
|
||||||
}
|
}
|
||||||
|
|
||||||
// Raise deletion event
|
// Raise deletion event
|
||||||
linkWatcher.onDeleted(new ClientLinkData(link));
|
if (linkWatcher != null)
|
||||||
|
linkWatcher.onDeleted(new ClientLinkData(link));
|
||||||
target.clear();
|
target.clear();
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ public class TileEntityRift extends DDTileEntityBase
|
||||||
if (growth <= 0 && !worldObj.isRemote)
|
if (growth <= 0 && !worldObj.isRemote)
|
||||||
{
|
{
|
||||||
DimLink link = PocketManager.getLink(this.xCoord, this.yCoord, this.zCoord, worldObj);
|
DimLink link = PocketManager.getLink(this.xCoord, this.yCoord, this.zCoord, worldObj);
|
||||||
if (link != null)
|
if (link != null && !worldObj.isRemote)
|
||||||
{
|
{
|
||||||
dimension.deleteLink(link);
|
dimension.deleteLink(link);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue