Fixed the issue of rifts spreading through walls. We tried using
raytracing but rifts would always "leak" out of unbreakable enclosures.
With this latest change, rifts spread with the same logic that
determines which blocks are reachable to them.
Added a per-save config file called DimDoorsWorld.cfg. Its corresponding
class is DDWorldProperties. This class supports whitelisting and
blacklisting dimensions for Rift Cluster and Rift Gateway generation.
Note that our ban against generating gateways in the Nether and The End
still applies regardless of those settings. The new config file is
loaded before the server starts initializing terrain. Also moved
DDProperties to another package alongside DDWorldProperties - that
required updating references in most of the mod's files.
Added SK-RaceTheLight to our schematics. Changed the weights on
Cere-FloatingAltar and Cere-PuzzleWall to 75 (previously 100). Fixed
what appears to be a mistake pasted into ruins.txt and also updated it
for the latest dungeons.
Fixed the way textures are applied so that doors from our mod can appear
as double doors. Renamed door textures to be consistent with Minecraft
door textures. Got rid of a few obsolete textures. Unfortunately,
something broke with door blocks updating. I need to fix that in the
next commit.
Improved some of our door code by giving some of our variables real
names. Also found a hack in BaseDimDoor.isDropped() and a strange
comment that said "I have no idea, but sometimes this is returned as the
blockID instead of metadata." I finally figured out that due to some
random mistake introduced in another function, idDropped() sometimes
received a block ID instead of metadata, which is what that comment
referred to. I fixed the cause and removed the hack.
Shifted the duplicate code from our biome classes into a single parent
class. Also added checks so that Minecraft crashes if a biome ID
conflict occurs. This is to put an end to the recent streak of posts on
our MCF thread about people experiencing issues because DD and BoP have
conflicts out of the box.
I copied two functions from CommandBase into DDCommandBase because their
absence is breaking our builds on Technic and Dryware Jenkins. I have no
idea why that's happening. My copy of MC's source code has those
functions in CommandBase and my code compiles without a problem.
Dropped support for Minecraft's structure generation flag because
several other mods ignore it and supporting it can give the appearance
that DD isn't working properly. We already have settings for disabling
gateways in our config file.
Fixed rotations for hopper and droppers. Hoppers were failing because
powered hoppers have different metadata. Droppers were just missing from
the list of oriented blocks. Fixed the wooden buttons on Cerevisiae's
altar room and added her puzzle room once hoppers were working reliably.
Made some minor changes to the way that we register commands with
Minecraft. Also changed the way that we generate onCommandUsage()
strings so that the style of our outputs is consistent with that of
Minecraft and Forge commands. It seems the way the messages were
generated changed for MC 1.6. Finally, removed compareTo() from
DDCommandBase since it was completely unnecessary (CommandBase already
does the same) and casting objects to CommandBase was causing errors
with some Chicken Bones commands that directly implemented ICommand.
Fixed the issue with clients not receiving notifications of gateways
being built into the world because we were modifying chunk data
directly. Our schematic classes now support building through World
instead of directly writing to the underlying chunks. Also fixed an NPE
that was introduced last night when I changed which line
GatewayGenerator was initialized on in mod_pocketDim.
Fixed an NPE that would occur because mod_pocketDim.deathTracker was set
to null before the last onWorldSave event was triggered when a server
was shutting down.
There is 5% chance that grave chests will contain the head of a random
player that has died in a pocket dimension; there is a 20% chance of it
being a special head. Also moved Ghast Tears to grave chests and removed
Eyes of Enders as loot. Also made FoR loot more rare but increased the
amount given out so that the average amount picked up should be the same
as before. World Thread is slightly less common in response to being
easier to farm from rifts.
Added code to save DeathTracker data when then Overworld saves, but only
if it's been modified since the last time it was saved. Also changed how
we handle player deaths in pocket dimensions. Now we have two death
handlers. There is a high-priority one that sends players to Limbo only
when Limbo preserves their inventories. The other is a low-priority
handler that sends players to Limbo only when inventory preservation is
disabled. This gives players a chance to keep their inventories if
another mod would have revived them without that penalty.
Added DeathTracker - a class for tracking the deaths of players on the
server while in pocket dimensions. It'll be used for generating skulls
for grave chests. Also removed PlayerTracker since it wasn't being used
for anything at all. I'm guessing it was supposed to be used for
something later. We can restore it if it's ever needed.
Cleaned up the code for initializing GatewayGenerator. We had some
static fields that didn't need to be static and we could just initialize
gateways from the class's constructor.
Moved a little of the regeneration code to BlockRift to reduce duplicate
code. Changed RiftRegenerator to iterate over loaded worlds instead of
all worlds. Removed forced rift generation call in
EventHookContainer.onWorldLoad() - I feel it would have minimal
benefits. Rifts now drop World Thread upon regeneration. Generally
cleaned up the code in FastRiftRegenerator and RiftRegenerator.
Removed code related to a correction factor that would compensate for
gateway generation failing a lot more frequently in the Nether. We don't
use that approach in the Nether anymore.
Added config settings for the chance of generating a Rift Gateway in a
Nether Fortress. Also made it so that DD does not override Nether
Fortress generation if fortress gateways are disabled in some way.
Changed rifts to consider block blast resistance instead of block
hardness. Some mods offer defensive blocks that stop explosions but have
low hardness. This addresses that issue. The minimum resistance allows
obsidian to resist rifts.
Fixed the code for retrieving textures for ItemRiftBlade,
ItemRiftSignature, and ItemRiftRemover. Renamed Rift Blade item texture
again due to capitalization issues. Replaced World Thread texture with a
dark variant of MC's String - we can switch to another texture later.
Cleaned up the code in FastRiftRegenerator - mostly spacing, but also
removed a pointless null check. It wouldn't matter because the reference
was being accessed before it was checked and it should be impossible for
it to be null.
Updated our code to stop Fabric of Reality platforms from generating
under exits all the time. Now they generate only when the supporting
blocks are replaceable (in which case they're replaced by FoR) or when
they're not opaque solids or have tile entities (then FoR generates on
top). The exit search algorithm treats replaceable non-liquid blocks as
air, so an attempt is made to build against the ground and not on top of
replaceable blocks. The area around the door is cleared of blocks to
avoid killing the player with lingering replaceable blocks that might be
harmful, like poison ivy.
Fixed a bug in BaseGateway that would cause it to still crash servers
during world generation. The import filters must be applied before
searching for doors because GatewayBlockFilter uses Forge-provided block
IDs and not the standard export values. Also fixed a comment in
yCoordHelper that cut off strangely.
Added chunk.setChunkModified() to other classes that were missing it. We
have several copies of setBlockDirectly() spread around that needed
updating. Also made pockets use FoR instead of glowstone. =P
Updated DDTeleporter to have a fixed minimum chance of sending the
player to the Nether when using a dungeon exit. This also allows players
to reach the Nether without ever having been there before using a Nether
portal - that was previously impossible since DD would not "know" that
the Nether existed. Also cleaned up the code a bit and possibly fixed a
bug that would cause players to get teleported into walls.
Changed Monolith jittering to use trigonometric functions for a smoother
rate of change, and also made the speed and movement easily adjustable.
Made very minor changes to MobMonolith code - just reorganizing.
Added a line in our config file for setting the block ID of Corium. Even
though it's only temporary code that's going to be removed later, people
need that to run our dev builds properly.
Changed Rift Blade recipe to use Stable Fabric and a Blaze Rod. Changed
its base material from Gold to Diamond, which increases attack power and
decreases enchantability a little.
1. Made World Thread available as dungeon loot
2. Removed useless config options for loot that doesn't appear anymore
3. Tweaked some config names and variable names for consistency
Changed where we get block IDs from for GatewayBlockFilter. DDProperties
always has correct block IDs. It's only item IDs that are modified by
Forge so that DDProperties is wrong.
Fixed a bug I introduced during my previous commit that caused solo
rifts to spread and rifts with neighbors not to spread. Also cleaned up
the code a bit to cut back on the number of mysterious random rolls we
were using and commented the code.
--Changed BlockRift to use ITileEntityProvider instead of BlockContainer
--Reorganized some of the code in TileEntityRift to improve performance
and readability
Cleaned up the code in TileEntityRift. Fixed up some spacing and changed
as many functions and fields to private as possible. Added a performance
improvement by doing the random roll for Enderman spawning before
searching for nearby Endermen.
Changed rifts to using world.destroyBlock() instead of
world.setBlockToAir(). That has the advantage of causing block
destruction animations and sound effects instead of blocks vanishing
silently.
Changed MazeDesigner to prune out some unnecessary doorways at random by
removing edges from the room graph. Previous mazes allowed all side
paths to exist, which resulted in a kind of circular layout. Although
that was disorienting to people at first, if you realized it was a
circle, it became simple to navigate through the maze. This update makes
branching paths more common.
Doorways are now placed in different ways, depending on the dimensions
of the walls that they're on. This includes that large walls get two
doorways connecting to the same room.