diff --git a/src/main/java/org/dimdev/ddutils/schem/Schematic.java b/src/main/java/org/dimdev/ddutils/schem/Schematic.java index b658ed31..16e8b42f 100644 --- a/src/main/java/org/dimdev/ddutils/schem/Schematic.java +++ b/src/main/java/org/dimdev/ddutils/schem/Schematic.java @@ -395,7 +395,7 @@ public class Schematic { // CubicChunks makes cubic worlds implement ICubicWorld // Just "world instanceof ICubicWorld" would throw a class not found error //noinspection InstanceofIncompatibleInterface - if (cubicChunks && world instanceof ICubicWorld) { + if (cubicChunks && ((ICubicWorld) world).isCubicWorld()) { DimDoors.log.info("Setting cube blockstates"); ICubicWorld cubicWorld = (ICubicWorld) world; for (int cubeX = 0; cubeX <= (width >> 4) + 1; cubeX++) { diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalPortal.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalPortal.java index b804c7c7..533710c9 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalPortal.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalPortal.java @@ -21,6 +21,7 @@ public class BlockDimensionalPortal extends BlockDimensionalDoor { // TODO: conv public BlockDimensionalPortal() { super(Material.PORTAL); // This is the only way to make it collide with water but not other entities, but still have a collision box. setHardness(1.0F); + setLightLevel(0.5F); setUnlocalizedName(ID); setRegistryName(new ResourceLocation(DimDoors.MODID, ID)); setDefaultState(super.getDefaultState().withProperty(OPEN, true)); diff --git a/src/main/java/org/dimdev/dimdoors/shared/items/ItemRiftBlade.java b/src/main/java/org/dimdev/dimdoors/shared/items/ItemRiftBlade.java index 6d8f26e2..003214ec 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/items/ItemRiftBlade.java +++ b/src/main/java/org/dimdev/dimdoors/shared/items/ItemRiftBlade.java @@ -20,6 +20,7 @@ import net.minecraft.util.math.*; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import org.dimdev.dimdoors.shared.tileentities.TileEntityRift; import java.util.List; @@ -51,7 +52,7 @@ public class ItemRiftBlade extends ItemSword { RayTraceResult hit = rayTrace(world, player, true); if (world.isRemote) { - if (RayTraceHelper.isFloatingRift(hit, world) || RayTraceHelper.isLivingEntity(hit)) { + if (RayTraceHelper.isRift(hit, world) || RayTraceHelper.isLivingEntity(hit)) { return new ActionResult<>(EnumActionResult.SUCCESS, stack); } else { player.sendStatusMessage(new TextComponentTranslation(getUnlocalizedName() + ".rift_miss"), true); @@ -60,8 +61,8 @@ public class ItemRiftBlade extends ItemSword { } } - if (RayTraceHelper.isFloatingRift(hit, world)) { - TileEntityFloatingRift rift = (TileEntityFloatingRift) world.getTileEntity(hit.getBlockPos()); + if (RayTraceHelper.isRift(hit, world)) { + TileEntityRift rift = (TileEntityRift) world.getTileEntity(hit.getBlockPos()); rift.teleport(player); stack.damageItem(1, player); diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java index d4b9f08d..61dd32e7 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java @@ -75,6 +75,7 @@ public class PocketTemplate { rift.setPos(new BlockPos(x, y, z)); rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); rift.setDestination(DefaultDungeonDestinations.deeperDungeonDestination); + rift.setLeaveRiftOnBreak(true); newNBT = rift.serializeNBT(); break; case "less_deep_depth_door": @@ -82,6 +83,7 @@ public class PocketTemplate { rift.setPos(new BlockPos(x, y, z)); rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); rift.setDestination(DefaultDungeonDestinations.shallowerDungeonDestination); + rift.setLeaveRiftOnBreak(true); newNBT = rift.serializeNBT(); break; case "overworld_door": @@ -89,6 +91,7 @@ public class PocketTemplate { rift.setPos(new BlockPos(x, y, z)); rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); rift.setDestination(DefaultDungeonDestinations.overworldDestination); + rift.setLeaveRiftOnBreak(true); newNBT = rift.serializeNBT(); break; case "entrance_door": @@ -96,6 +99,7 @@ public class PocketTemplate { rift.setPos(new BlockPos(x, y, z)); rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); rift.setDestination(DefaultDungeonDestinations.twoWayPocketEntrance); + rift.setLeaveRiftOnBreak(true); newNBT = rift.serializeNBT(); break; case "gateway_portal": @@ -104,6 +108,7 @@ public class PocketTemplate { rift.setProperties(DefaultDungeonDestinations.overworldLinkProperties); rift.setDestination(DefaultDungeonDestinations.gatewayDestination); rift.setCloseAfterPassThrough(true); + rift.setLeaveRiftOnBreak(true); newNBT = rift.serializeNBT(); break; default: diff --git a/src/main/java/org/dimdev/dimdoors/shared/rifts/registry/RiftRegistry.java b/src/main/java/org/dimdev/dimdoors/shared/rifts/registry/RiftRegistry.java index bf855404..e197f04d 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/rifts/registry/RiftRegistry.java +++ b/src/main/java/org/dimdev/dimdoors/shared/rifts/registry/RiftRegistry.java @@ -27,6 +27,7 @@ public class RiftRegistry extends WorldSavedData { protected Map subregistries = new HashMap<>(); private static RiftRegistry riftRegistry = null; // For use by RiftSubregistry only + private static int currentDim; // For use by RiftSubregistry only protected DefaultDirectedGraph graph = new DefaultDirectedGraph<>(DefaultEdge.class); // TODO: add methods that automatically add vertices/edges and mark appropriate subregistries as dirty @@ -54,9 +55,8 @@ public class RiftRegistry extends WorldSavedData { } @Override public void readFromNBT(NBTTagCompound nbt) { - // Registry is already loaded + dim = currentDim; if (riftRegistry.subregistries.get(dim) != null) return; - if (riftRegistry == null) RiftRegistry.instance(); // Read rifts in this dimension NBTTagList riftsNBT = (NBTTagList) nbt.getTag("rifts"); @@ -158,13 +158,14 @@ public class RiftRegistry extends WorldSavedData { // Trigger the subregistry reading code for all dimensions. It would be better if there was some way of forcing // them to be read from somewhere else, since this is technically more than just reading the NBT and can cause - // problems with recursion without riftRegistry. This has to be done last since links are only + // problems with recursion without riftRegistry. This has to be done first since links are only // in the subregistries. // TODO: If non-dirty but new WorldSavedDatas aren't automatically saved, then create the subregistries here // TODO: rather then in the markSubregistryDirty method. // TODO: try to get rid of this code: for (int dim : DimensionManager.getStaticDimensionIDs()) { MapStorage storage = WorldUtils.getWorld(dim).getPerWorldStorage(); + currentDim = dim; RiftSubregistry instance = (RiftSubregistry) storage.getOrLoadData(RiftSubregistry.class, SUBREGISTRY_DATA_NAME); if (instance != null) { instance.dim = dim; @@ -430,7 +431,7 @@ public class RiftRegistry extends WorldSavedData { } public void setLastPrivatePocketExit(UUID playerUUID, Location rift) { - DimDoors.log.info("Setting last used private pocket entrance for " + playerUUID + " at " + rift); + DimDoors.log.info("Setting last used private pocket exit for " + playerUUID + " at " + rift); setPlayerRiftPointer(playerUUID, rift, lastPrivatePocketExits); } @@ -441,7 +442,7 @@ public class RiftRegistry extends WorldSavedData { } public void setOverworldRift(UUID playerUUID, Location rift) { - DimDoors.log.info("Setting last used private pocket entrance for " + playerUUID + " at " + rift); + DimDoors.log.info("Setting last used overworld rift for " + playerUUID + " at " + rift); setPlayerRiftPointer(playerUUID, rift, overworldRifts); } diff --git a/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityEntranceRift.java b/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityEntranceRift.java index eb32bc0c..804b8923 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityEntranceRift.java +++ b/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityEntranceRift.java @@ -1,7 +1,9 @@ package org.dimdev.dimdoors.shared.tileentities; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLiving; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -19,6 +21,8 @@ import lombok.Getter; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import org.dimdev.dimdoors.shared.blocks.BlockDimensionalDoor; +import org.dimdev.dimdoors.shared.blocks.ModBlocks; import java.util.Random; @@ -146,4 +150,14 @@ import java.util.Random; public float getDestinationPitch(float entityPitch) { return 0; } + + @SideOnly(Side.CLIENT) + @Override + public AxisAlignedBB getRenderBoundingBox() { + Block block = getBlockType(); + if (block instanceof BlockDimensionalDoor) { + return new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return super.getRenderBoundingBox(); + } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityFloatingRift.java b/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityFloatingRift.java index 9ddcb0a0..bc4b82d4 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityFloatingRift.java +++ b/src/main/java/org/dimdev/dimdoors/shared/tileentities/TileEntityFloatingRift.java @@ -225,4 +225,9 @@ import java.util.Random; } return curve; } + @SideOnly(Side.CLIENT) + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(pos.add(-50, -50, -50), pos.add(50, 50, 50)); + } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/world/limbo/WorldProviderLimbo.java b/src/main/java/org/dimdev/dimdoors/shared/world/limbo/WorldProviderLimbo.java index 4a14dc55..92f1c358 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/world/limbo/WorldProviderLimbo.java +++ b/src/main/java/org/dimdev/dimdoors/shared/world/limbo/WorldProviderLimbo.java @@ -56,7 +56,9 @@ public class WorldProviderLimbo extends WorldProvider { @Override public BlockPos getSpawnPoint() { - return getRandomizedSpawnPoint(); + int x = MathHelper.clamp(world.rand.nextInt(), -500, 500); + int z = MathHelper.clamp(world.rand.nextInt(), -500, 500); + return new BlockPos(x, 700, z); } @Override diff --git a/src/main/resources/assets/dimdoors/lang/en_US.lang b/src/main/resources/assets/dimdoors/lang/en_US.lang index c2ad76cf..67158a3e 100644 --- a/src/main/resources/assets/dimdoors/lang/en_US.lang +++ b/src/main/resources/assets/dimdoors/lang/en_US.lang @@ -11,7 +11,7 @@ tile.quartz_dimensional_door.name=Quartz Dimensional Door tile.unstable_dimensional_door.name=Unstable Dimensional Door tile.oak_dimensional_door.name=Oak Dimensional Door tile.dimensional_trapdoor.name=Oak Dimensional Trapdoor -tile.dimensional_portal.name=Transient Portal +tile.dimensional_portal.name=Dimensional Portal tile.fabric.black.name=Fabric of Reality tile.fabric.white.name=Altered Fabric @@ -165,13 +165,13 @@ dimdoors.pockets.loadAllSchematics.tooltip= When true, all available Pocket Sche dimdoors.world=World Generation Settings dimdoors.world.tooltip=Settings that determine where dimensional gateways and rift clusters can be generated and at what frequency dimdoors.world.clusterGenChance=Cluster Generation Chance -dimdoors.world.clusterGenChance.tooltip=Sets the chance (out of 1.0) that a cluster of Rift Scars will generate in a given chunk. +dimdoors.world.clusterGenChance.tooltip=Sets the chance (out of 1) that a cluster of rifts will generate in a given chunk. dimdoors.world.gatewayGenChance=Gateway Generation Chance -dimdoors.world.gatewayGenChance.tooltip=Sets the chance (out of 1.0) that a Transient Portal gateway will generate in a given chunk. +dimdoors.world.gatewayGenChance.tooltip=Sets the chance (out of 1) that a dimensional gateway will generate in a given chunk. dimdoors.world.clusterDimBlacklist=Cluster Dimension Blacklist dimdoors.world.clusterDimBlacklist.tooltip=Dimension Blacklist for the generation of Rift Scar clusters. Add a dimension ID here to prevent generation in certain dimensions. dimdoors.world.gatewayDimBlacklist=Gateway Dimension Blacklist -dimdoors.world.gatewayDimBlacklist.tooltip=Dimension Blacklist for the generation of Transient Portal gateways. Add a dimension ID here to prevent generation in certain dimensions. +dimdoors.world.gatewayDimBlacklist.tooltip=Dimension Blacklist for the generation of Dimensional Portal gateways. Add a dimension ID here to prevent generation in certain dimensions. dimdoors.dungeons=Dungeon Settings dimdoors.dungeons.tooltip=Settings that affect the generation of pocket dungeons