Bit more work on the tree farm, balancing, cosmetics and recipes to do!

This commit is contained in:
DarkholmeTenk 2014-02-25 07:58:46 +00:00
parent 726417a320
commit bd0485d62f
5 changed files with 140 additions and 50 deletions

View file

@ -28,7 +28,7 @@ public class WarpDriveConfig
public int[] IC2_Air;
public int[] IC2_Empty;
public int CC_Computer = 0, CC_peripheral = 0, CCT_Turtle = 0, CCT_Upgraded = 0, CCT_Advanced = 0, GT_Ores = 0, GT_Granite = 0, GT_Machine = 0, ASP = 0, AS_Turbine = 0, ICBM_Machine = 0, ICBM_Missile = 0, MFFS_Field = 0;
public Set<Integer> SpaceHelmets, Jetpacks, MinerOres, MinerLogs, scannerIgnoreBlocks;
public Set<Integer> SpaceHelmets, Jetpacks, MinerOres, MinerLogs, MinerLeaves, scannerIgnoreBlocks;
private Class<?> AEBlocks;
private Class<?> AEMaterials;
private Class<?> AEItems;
@ -232,6 +232,7 @@ public class WarpDriveConfig
Jetpacks = new HashSet<Integer>();
MinerOres = new HashSet<Integer>();
MinerLogs = new HashSet<Integer>();
MinerLeaves = new HashSet<Integer>();
scannerIgnoreBlocks = new HashSet<Integer>();
config.load();
coreID = config.getBlock("core", 500).getInt();
@ -294,30 +295,7 @@ public class WarpDriveConfig
MinerOres.add(Block.web.blockID);
MinerOres.add(Block.fence.blockID);
//MinerOres.add(Block.torchWood.blockID);
String[] oreNames = OreDictionary.getOreNames();
for(String oreName: oreNames)
{
if(oreName.substring(0,3).equals("ore"))
{
ArrayList<ItemStack> item = OreDictionary.getOres(oreName);
for(ItemStack i: item)
{
MinerOres.add(i.itemID);
WarpDrive.debugPrint("WD: Added ore ID: "+i.itemID);
}
}
if(oreName.contains("log") || oreName.contains("Log"))
{
ArrayList<ItemStack> item = OreDictionary.getOres(oreName);
for(ItemStack i: item)
{
MinerLogs.add(i.itemID);
WarpDrive.debugPrint("WD: Added log ID: "+i.itemID);
}
}
}
LoadOreDict();
// Ignore WarpDrive blocks (which potentially will be duplicated by cheaters using ship scan/deploy)
scannerIgnoreBlocks.add(coreID);
scannerIgnoreBlocks.add(controllerID);
@ -335,6 +313,42 @@ public class WarpDriveConfig
loadWarpDriveConfig();
config.save();
}
private void LoadOreDict()
{
String[] oreNames = OreDictionary.getOreNames();
for(String oreName: oreNames)
{
String lowerOreName = oreName.toLowerCase();
if(oreName.substring(0,3).equals("ore"))
{
ArrayList<ItemStack> item = OreDictionary.getOres(oreName);
for(ItemStack i: item)
{
MinerOres.add(i.itemID);
WarpDrive.debugPrint("WD: Added ore ID: "+i.itemID);
}
}
if(lowerOreName.contains("log"))
{
ArrayList<ItemStack> item = OreDictionary.getOres(oreName);
for(ItemStack i: item)
{
MinerLogs.add(i.itemID);
WarpDrive.debugPrint("WD: Added log ID: "+i.itemID);
}
}
if(lowerOreName.contains("leave") || lowerOreName.contains("leaf"))
{
ArrayList<ItemStack> item = OreDictionary.getOres(oreName);
for(ItemStack i: item)
{
MinerLeaves.add(i.itemID);
WarpDrive.debugPrint("WD: Added leaf ID: "+i.itemID);
}
}
}
}
private void LoadIC2()
{

View file

@ -94,7 +94,7 @@ public abstract class TileEntityAbstractMiner extends WarpChunkTE implements IGr
Block block = Block.blocksList[blockID];
if (block == null)
return null;
if (silkTouch)
if (silkTouch())
{
if (block.canSilkHarvest(worldObj, null, i, j, k, blockMeta))
{
@ -131,16 +131,16 @@ public abstract class TileEntityAbstractMiner extends WarpChunkTE implements IGr
//GETTERSETTERS
protected boolean silkTouch()
{
return silkTouch;
}
protected int fortune()
{
return fortuneLevel;
}
protected boolean silkTouch()
{
return silkTouch;
}
protected boolean silkTouch(boolean b)
{
silkTouch = canSilktouch && b;
@ -451,6 +451,8 @@ public abstract class TileEntityAbstractMiner extends WarpChunkTE implements IGr
protected void defineMiningArea(int minX, int minZ, int maxX, int maxZ)
{
if(worldObj == null)
return;
ChunkCoordIntPair a = worldObj.getChunkFromBlockCoords(minX, minZ).getChunkCoordIntPair();
ChunkCoordIntPair b = worldObj.getChunkFromBlockCoords(maxX, maxZ).getChunkCoordIntPair();
if(a.equals(minChunk))
@ -503,6 +505,14 @@ public abstract class TileEntityAbstractMiner extends WarpChunkTE implements IGr
}
//OVERRIDES
@Override
public void updateEntity()
{
if(shouldChunkLoad() != areChunksLoaded)
refreshLoading();
}
@Override
public float getPowerDrainPerTick()
{

View file

@ -2,6 +2,7 @@ package cr0s.WarpDrive.machines;
import java.util.ArrayList;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreDictionary;
import cr0s.WarpDrive.Vector3;
import cr0s.WarpDrive.WarpDrive;
@ -20,10 +21,14 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
Boolean active = false;
private int mode = 0;
private boolean doLeaves = false;
private final int defSize = 8;
private final int scanWait = 20;
private final int mineWait = 20;
private final int scanWait = 40;
private final int mineWait = 4;
private int delayMul = 4;
private int totalHarvested=0;
private int scan=0;
private int xSize = defSize;
@ -36,7 +41,8 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
"start",
"stop",
"area",
"silktouch",
"leaves",
"silkTouch",
"state"
};
@ -48,6 +54,8 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
@Override
public void updateEntity()
{
super.updateEntity();
if(active)
{
if(mode == 0)
@ -63,7 +71,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
}
else
{
if(++scan >= mineWait)
if(++scan >= mineWait * delayMul)
{
scan = 0;
int cost = calculateBlockCost();
@ -76,17 +84,23 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
}
Vector3 pos = logs.get(logIndex);
int blockID = worldObj.getBlockId(pos.intX(), pos.intY(), pos.intZ());
if(WarpDriveConfig.i.MinerLogs.contains(blockID))
if(isLog(blockID) || (doLeaves && isLeaf(blockID)))
{
delayMul = 1;
if(isRoomForHarvest())
{
if(collectEnergyPacketFromBooster(cost,false))
{
if(isLog(blockID))
delayMul = 4;
totalHarvested++;
harvestBlock(pos);
}
else
return;
}
else
return;
}
logIndex++;
}
@ -100,6 +114,11 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
return WarpDriveConfig.i.MinerLogs.contains(blockID);
}
private boolean isLeaf(int blockID)
{
return WarpDriveConfig.i.MinerLeaves.contains(blockID);
}
private void addTree(ArrayList<Vector3> list,Vector3 newTree)
{
WarpDrive.debugPrint("Adding tree position:" + newTree.x + "," + newTree.y + "," + newTree.z);
@ -140,20 +159,21 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
private void scanNearby(ArrayList<Vector3> current,int x,int y,int z,int d)
{
for(int dx=-1;dx<=1;dx++)
int[] deltas = {0,-1,1};
for(int dx : deltas)
{
for(int dy=0;dy<=1;dy++)
for(int dy=1;dy>=0;dy--)
{
for(int dz=-1;dz<=1;dz++)
for(int dz : deltas)
{
int blockID = worldObj.getBlockId(x+dx, y+dy, z+dz);
if(isLog(blockID))
if(isLog(blockID) || (doLeaves && isLeaf(blockID)))
{
Vector3 pos = new Vector3(x+dx,y+dy,z+dz);
if(!current.contains(pos))
{
addTree(current,pos);
if(d < 18)
if(d < 35)
scanNearby(current,x+dx,y+dy,z+dz,d+1);
}
}
@ -162,6 +182,28 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
}
}
@Override
public void writeToNBT(NBTTagCompound tag)
{
super.writeToNBT(tag);
tag.setInteger("xSize", xSize);
tag.setInteger("zSize", zSize);
tag.setBoolean("doLeaves", doLeaves);
tag.setBoolean("active", active);
}
@Override
public void readFromNBT(NBTTagCompound tag)
{
super.readFromNBT(tag);
xSize = tag.getInteger("xSize");
zSize = tag.getInteger("zSize");
defineMiningArea(xSize,zSize);
doLeaves = tag.getBoolean("doLeaves");
active = tag.getBoolean("active");
}
@Override
public boolean shouldChunkLoad()
{
@ -185,10 +227,20 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
{
String methodStr = methodsArray[method];
if(methodStr == "start")
active = true;
{
if(!active)
{
mode = 0;
totalHarvested = 0;
active = true;
}
return new Boolean[] { true };
}
if(methodStr == "stop")
{
active = false;
}
if(methodStr == "area")
{
@ -211,11 +263,25 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
zSize = defSize;
}
defineMiningArea(xSize,zSize);
return new Integer[] {xSize,zSize};
return new Integer[] { xSize , zSize };
}
if(methodStr == "silktouch")
if(methodStr == "leaves")
{
try
{
if(arguments.length > 0)
doLeaves = toBool(arguments[0]);
}
catch(Exception e)
{
}
return new Boolean[] { doLeaves };
}
if(methodStr == "silkTouch")
{
try
{
@ -225,13 +291,13 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner implements
{
silkTouch(false);
}
return new Boolean[] { silkTouch() };
return new Object[] { silkTouch() };
}
if(methodStr == "state")
{
String state = active ? "active" : "inactive";
return new Object[] { state, xSize,zSize,energy() };
return new Object[] { state, xSize,zSize,energy(),totalHarvested };
}
return null;
}

View file

@ -37,8 +37,8 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner implements IP
{
int enPerBlock = isOnEarth() ? WarpDriveConfig.i.ML_EU_PER_BLOCK_EARTH : WarpDriveConfig.i.ML_EU_PER_BLOCK_SPACE;
if(silkTouch())
return (int) Math.round(enPerBlock * WarpDriveConfig.i.ML_EU_MUL_SILKTOUCH);
return (int) Math.round(enPerBlock * (Math.pow(WarpDriveConfig.i.ML_EU_MUL_FORTUNE, fortune())));
return (int) Math.round(enPerBlock * WarpDriveConfig.i.ML_EU_MUL_SILKTOUCH * speedMul);
return (int) Math.round(enPerBlock * (Math.pow(WarpDriveConfig.i.ML_EU_MUL_FORTUNE, fortune())) * speedMul);
}
private String[] methodsArray =
@ -71,8 +71,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner implements IP
@Override
public void updateEntity()
{
if(shouldChunkLoad() != areChunksLoaded)
refreshLoading();
super.updateEntity();
if(minLayer > yCoord - 1)
minLayer = yCoord - 1;

View file

@ -7,6 +7,7 @@ import com.google.common.collect.ImmutableSet;
import cr0s.WarpDrive.WarpDrive;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraftforge.common.ForgeChunkManager;