3d04e9b9cc
Made rifts check block hardness while replacing blocks so that we can avoid destroying strong or indestructible blocks from other mods. Updated references throughout the code to use a function in BlockRift for this purpose.
72 lines
2.1 KiB
Java
72 lines
2.1 KiB
Java
package StevenDimDoors.mod_pocketDim.ticking;
|
|
|
|
import net.minecraft.world.World;
|
|
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
import StevenDimDoors.mod_pocketDim.LinkData;
|
|
import StevenDimDoors.mod_pocketDim.TileEntityRift;
|
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
|
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
public class RiftRegenerator implements IRegularTickReceiver {
|
|
|
|
private static final int RIFT_REGENERATION_INTERVAL = 100; //Regenerate random rifts every 100 ticks
|
|
|
|
private DDProperties properties;
|
|
|
|
public RiftRegenerator(IRegularTickSender sender, DDProperties properties)
|
|
{
|
|
sender.registerForTicking(this, RIFT_REGENERATION_INTERVAL, false);
|
|
this.properties = properties;
|
|
}
|
|
|
|
@Override
|
|
public void notifyTick()
|
|
{
|
|
regenerate();
|
|
}
|
|
|
|
private void regenerate()
|
|
{
|
|
try
|
|
{
|
|
//Regenerate rifts that have been replaced (not permanently removed) by players
|
|
|
|
int i = 0;
|
|
|
|
while (i < 15 && FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER)
|
|
{
|
|
i++;
|
|
LinkData link;
|
|
|
|
//actually gets the random rift based on the size of the list
|
|
link = (LinkData) dimHelper.instance.getRandomLinkData(true);
|
|
|
|
if (link != null)
|
|
{
|
|
World world = dimHelper.getWorld(link.locDimID);
|
|
|
|
if (world != null && !mod_pocketDim.blockRift.isBlockImmune(world, link.locXCoord, link.locYCoord, link.locZCoord))
|
|
{
|
|
if (dimHelper.instance.getLinkDataFromCoords(link.locXCoord, link.locYCoord, link.locZCoord, link.locDimID) != null)
|
|
{
|
|
world.setBlock(link.locXCoord, link.locYCoord, link.locZCoord, properties.RiftBlockID);
|
|
TileEntityRift rift = (TileEntityRift) world.getBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord);
|
|
if (rift == null)
|
|
{
|
|
dimHelper.getWorld(link.locDimID).setBlockTileEntity(link.locXCoord, link.locYCoord, link.locZCoord, new TileEntityRift());
|
|
}
|
|
rift.hasGrownRifts = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.err.println("An exception occurred in RiftRegenerator.regenerate():");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|