Skip to content

Commit d0cfbe0

Browse files
committed
Fix eternal fabric and dimensional trapdoor
1 parent 5f8375a commit d0cfbe0

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

src/main/java/org/dimdev/dimdoors/shared/ModConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public static class General {
4848
@LangKey("dimdoors.general.riftCloseSpeed")
4949
@RangeDouble(min = 0)
5050
public float riftCloseSpeed = 1f;
51+
52+
@Name("depthSpreadFactor")
53+
@LangKey("dimdoors.general.depthSpreadFactor")
54+
public int depthSpreadFactor = 10;
5155
}
5256

5357
public static class Pockets {

src/main/java/org/dimdev/dimdoors/shared/blocks/BlockFabricEternal.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
import net.minecraft.util.ResourceLocation;
99
import net.minecraft.util.math.BlockPos;
1010
import net.minecraft.world.World;
11+
import org.dimdev.ddutils.Location;
12+
import org.dimdev.ddutils.RotatedLocation;
1113
import org.dimdev.dimdoors.DimDoors;
14+
import org.dimdev.dimdoors.shared.rifts.destinations.EscapeDestination;
1215

1316
public class BlockFabricEternal extends BlockEmptyDrops { // TODO: make this a glowing red liquid
1417

1518
public static final Material ETERNAL_FABRIC = new Material(MapColor.PINK);
1619
public static final String ID = "eternal_fabric";
20+
public static EscapeDestination exitLimbo = new EscapeDestination(true);
1721

1822
public BlockFabricEternal() {
1923
super(ETERNAL_FABRIC);
@@ -29,6 +33,6 @@ public BlockFabricEternal() {
2933

3034
@Override
3135
public void onEntityWalk(World world, BlockPos pos, Entity entity) {
32-
// TODO: implement using a destination
36+
exitLimbo.teleport(new RotatedLocation(new Location(world, pos), (int) (entity.rotationYaw / 90) * 90, 0), entity);
3337
}
3438
}

src/main/java/org/dimdev/dimdoors/shared/rifts/destinations/EscapeDestination.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@
1515
import lombok.ToString;
1616
import net.minecraft.entity.Entity;
1717
import net.minecraft.nbt.NBTTagCompound;
18+
import org.dimdev.pocketlib.VirtualLocation;
1819

1920
import java.util.UUID;
2021

2122
@Getter @AllArgsConstructor @Builder(toBuilder = true) @ToString
2223
public class EscapeDestination extends RiftDestination {
23-
//public EscapeDestination() {}
24+
boolean canEscapeLimbo = false;
25+
26+
public EscapeDestination() {}
2427

2528
@Override
2629
public void readFromNBT(NBTTagCompound nbt) {
@@ -35,19 +38,20 @@ public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
3538

3639
@Override
3740
public boolean teleport(RotatedLocation loc, Entity entity) {
38-
if (!ModDimensions.isDimDoorsPocketDimension(entity.world)) {
39-
if (entity.world.provider instanceof WorldProviderLimbo) {
40-
DimDoors.sendTranslatedMessage(entity, "rifts.destinations.escape.cannot_escape_limbo");
41-
} else {
42-
DimDoors.sendTranslatedMessage(entity, "rifts.destinations.escape.not_in_pocket_dim");
43-
}
41+
if (!ModDimensions.isDimDoorsPocketDimension(entity.world) && !(entity.world.provider instanceof WorldProviderLimbo)) {
42+
DimDoors.sendTranslatedMessage(entity, "rifts.destinations.escape.not_in_pocket_dim");
4443
return false;
4544
}
45+
if (entity.world.provider instanceof WorldProviderLimbo && !canEscapeLimbo) {
46+
DimDoors.sendTranslatedMessage(entity, "rifts.destinations.escape.cannot_escape_limbo");
47+
return false;
48+
}
49+
4650
UUID uuid = entity.getUniqueID();
4751
if (uuid != null) {
4852
Location destLoc = RiftRegistry.instance().getOverworldRift(uuid);
49-
if (destLoc != null && destLoc.getTileEntity() instanceof TileEntityRift) {
50-
//TeleportUtils.teleport(entity, new VirtualLocation(destLoc, rift.virtualLocation.getDepth()).projectToWorld()); // TODO
53+
if (destLoc != null && destLoc.getTileEntity() instanceof TileEntityRift || canEscapeLimbo) {
54+
TeleportUtils.teleport(entity, VirtualLocation.fromLocation(loc.getLocation()).projectToWorld(false));
5155
return true;
5256
} else {
5357
if (destLoc == null) {

src/main/java/org/dimdev/pocketlib/VirtualLocation.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import lombok.*;
44
import net.minecraft.nbt.NBTTagCompound;
5+
import net.minecraft.util.math.BlockPos;
6+
import net.minecraft.world.World;
57
import org.dimdev.annotatednbt.NBTSerializable;
68
import org.dimdev.annotatednbt.Saved;
79
import org.dimdev.ddutils.Location;
10+
import org.dimdev.ddutils.WorldUtils;
811
import org.dimdev.ddutils.nbt.INBTStorable;
912
import org.dimdev.ddutils.nbt.NBTUtils;
1013
import org.dimdev.dimdoors.shared.ModConfig;
@@ -38,4 +41,16 @@ public static VirtualLocation fromLocation(Location location) {
3841
}
3942
return virtualLocation;
4043
}
44+
45+
public Location projectToWorld(boolean limboConsideredWorld) {
46+
World world = WorldUtils.getWorld(dim);
47+
if (!limboConsideredWorld && world.provider instanceof WorldProviderLimbo) {
48+
world = WorldUtils.getWorld(0);
49+
}
50+
float spread = ModConfig.general.depthSpreadFactor * depth; // TODO: gaussian spread
51+
int newX = (int) (x + spread * 2 * (Math.random() - 0.5));
52+
int newZ = (int) (z + spread * 2 * (Math.random() - 0.5));
53+
BlockPos pos = world.getTopSolidOrLiquidBlock(new BlockPos(newX, 0, newZ));
54+
return new Location(world, pos);
55+
}
4156
}

0 commit comments

Comments
 (0)