Rebalanced mining laser
Made mining laser current and minimum layer controllable Mining laser saves mining area size Fixed bug in ship scanner
This commit is contained in:
parent
630212d253
commit
e5b1b4baaf
3 changed files with 79 additions and 24 deletions
|
@ -61,11 +61,11 @@ public class WarpDriveConfig
|
||||||
public int ML_SCAN_DELAY = 20 * 5;
|
public int ML_SCAN_DELAY = 20 * 5;
|
||||||
public int ML_MINE_DELAY = 10;
|
public int ML_MINE_DELAY = 10;
|
||||||
public int ML_EU_PER_LAYER_SPACE = 100;
|
public int ML_EU_PER_LAYER_SPACE = 100;
|
||||||
public int ML_EU_PER_LAYER_EARTH = 1000;
|
public int ML_EU_PER_LAYER_EARTH = 2500;
|
||||||
public int ML_EU_PER_BLOCK_SPACE = ML_EU_PER_LAYER_SPACE / 10;
|
public int ML_EU_PER_BLOCK_SPACE = 10;
|
||||||
public int ML_EU_PER_BLOCK_EARTH = ML_EU_PER_LAYER_EARTH / 10;
|
public int ML_EU_PER_BLOCK_EARTH = 50;
|
||||||
public double ML_EU_MUL_SILKTOUCH = 1.25;
|
public double ML_EU_MUL_SILKTOUCH = 2.5;
|
||||||
public double ML_EU_MUL_FORTUNE = 1.25;
|
public double ML_EU_MUL_FORTUNE = 1.5;
|
||||||
public double ML_MAX_SPEED = 10;
|
public double ML_MAX_SPEED = 10;
|
||||||
public double ML_MIN_SPEED = 0.1;
|
public double ML_MIN_SPEED = 0.1;
|
||||||
public int ML_MAX_SIZE = 128;
|
public int ML_MAX_SIZE = 128;
|
||||||
|
@ -180,10 +180,14 @@ public class WarpDriveConfig
|
||||||
ML_SCAN_DELAY = 20 * config.get("MiningLaser", "scan_delay_seconds", 5).getInt();
|
ML_SCAN_DELAY = 20 * config.get("MiningLaser", "scan_delay_seconds", 5).getInt();
|
||||||
ML_MINE_DELAY = config.get("MiningLaser", "mine_delay_ticks", 10).getInt();
|
ML_MINE_DELAY = config.get("MiningLaser", "mine_delay_ticks", 10).getInt();
|
||||||
ML_EU_PER_LAYER_SPACE = config.get("MiningLaser", "eu_per_layer_space", 100).getInt();
|
ML_EU_PER_LAYER_SPACE = config.get("MiningLaser", "eu_per_layer_space", 100).getInt();
|
||||||
ML_EU_PER_LAYER_EARTH = config.get("MiningLaser", "eu_per_layer_earth", 1000).getInt();
|
ML_EU_PER_LAYER_EARTH = config.get("MiningLaser", "eu_per_layer_earth", 2500).getInt();
|
||||||
ML_EU_PER_BLOCK_SPACE = config.get("MiningLaser", "eu_per_block_space", 5).getInt();
|
ML_EU_PER_BLOCK_SPACE = config.get("MiningLaser", "eu_per_block_space", 10).getInt();
|
||||||
ML_EU_PER_BLOCK_EARTH = config.get("MiningLaser", "eu_per_block_earth", 50).getInt();
|
ML_EU_PER_BLOCK_EARTH = config.get("MiningLaser", "eu_per_block_earth", 50).getInt();
|
||||||
ML_MAX_SIZE = config.get("MiningLaser", "max_size", 128).getInt();
|
ML_MAX_SIZE = config.get("MiningLaser", "max_size", 128).getInt();
|
||||||
|
ML_EU_MUL_SILKTOUCH = config.get("MiningLaser", "silktouch_power_mul", 2.5).getDouble(2.5);
|
||||||
|
ML_EU_MUL_FORTUNE = config.get("MiningLaser", "fortune_power_base", 1.5).getDouble(1.5);
|
||||||
|
ML_MAX_SPEED = config.get("MiningLaser", "max_speed_mul", 10).getDouble(10);
|
||||||
|
ML_MIN_SPEED = config.get("MiningLaser", "min_speed_mul", 0.1).getDouble(0.1);
|
||||||
|
|
||||||
// Laser Emitter
|
// Laser Emitter
|
||||||
LE_MAX_BOOSTERS_NUMBER = config.get("LaserEmitter", "max_boosters_number", 10).getInt();
|
LE_MAX_BOOSTERS_NUMBER = config.get("LaserEmitter", "max_boosters_number", 10).getInt();
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
|
|
||||||
private final int MAX_BOOSTERS_NUMBER = 1;
|
private final int MAX_BOOSTERS_NUMBER = 1;
|
||||||
|
|
||||||
private int digX,digZ = 10;
|
private int digX,digZ = 8;
|
||||||
private final int CUBE_SIDE = 8;
|
private final int CUBE_SIDE = 8;
|
||||||
|
|
||||||
private int dx, dz, dy;
|
private int dx, dz, dy;
|
||||||
|
@ -66,6 +66,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
private int fortuneLevel = 0;
|
private int fortuneLevel = 0;
|
||||||
|
|
||||||
private int miningDelay = 0;
|
private int miningDelay = 0;
|
||||||
|
private int minLayer = 1;
|
||||||
|
|
||||||
public void setNetworkReady( boolean isReady )
|
public void setNetworkReady( boolean isReady )
|
||||||
{
|
{
|
||||||
|
@ -85,9 +86,11 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
"quarry", //3
|
"quarry", //3
|
||||||
"state", //4
|
"state", //4
|
||||||
"offset", //5
|
"offset", //5
|
||||||
"setSilktouch", //6
|
"silktouch", //6
|
||||||
"setFortune", //7
|
"fortune", //7
|
||||||
"setSpeedMul"
|
"speedMul", //8
|
||||||
|
"layer", //9
|
||||||
|
"minLayer" //10
|
||||||
};
|
};
|
||||||
|
|
||||||
private int delayTicksScan = 0;
|
private int delayTicksScan = 0;
|
||||||
|
@ -111,6 +114,8 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity()
|
public void updateEntity()
|
||||||
{
|
{
|
||||||
|
if(minLayer > yCoord - 1)
|
||||||
|
minLayer = yCoord - 1;
|
||||||
if(speedMul == 0)
|
if(speedMul == 0)
|
||||||
speedMul = 1;
|
speedMul = 1;
|
||||||
speedMul = Math.max(WarpDriveConfig.i.ML_MIN_SPEED,Math.min(WarpDriveConfig.i.ML_MAX_SPEED,speedMul));
|
speedMul = Math.max(WarpDriveConfig.i.ML_MIN_SPEED,Math.min(WarpDriveConfig.i.ML_MAX_SPEED,speedMul));
|
||||||
|
@ -134,7 +139,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
valuableIndex = 0;
|
valuableIndex = 0;
|
||||||
if (!collectEnergyPacketFromBooster(calculateLayerCost(), true))
|
if (!collectEnergyPacketFromBooster(calculateLayerCost(), true))
|
||||||
return;
|
return;
|
||||||
while (currentLayer > 0)
|
while (currentLayer > (minLayer - 1))
|
||||||
{
|
{
|
||||||
scanLayer();
|
scanLayer();
|
||||||
if (valuablesInLayer.size() > 0)
|
if (valuablesInLayer.size() > 0)
|
||||||
|
@ -148,7 +153,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
else
|
else
|
||||||
--currentLayer;
|
--currentLayer;
|
||||||
}
|
}
|
||||||
if (currentLayer <= 0)
|
if (currentLayer < minLayer)
|
||||||
{
|
{
|
||||||
refreshLoading();
|
refreshLoading();
|
||||||
isMining = false;
|
isMining = false;
|
||||||
|
@ -196,7 +201,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
miningDelay++;
|
miningDelay= Math.min(miningDelay+1, 20);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -599,9 +604,15 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
isMining = tag.getBoolean("isMining");
|
isMining = tag.getBoolean("isMining");
|
||||||
isQuarry = tag.getBoolean("isQuarry");
|
isQuarry = tag.getBoolean("isQuarry");
|
||||||
currentLayer = tag.getInteger("currentLayer");
|
currentLayer = tag.getInteger("currentLayer");
|
||||||
|
minLayer= tag.getInteger("minLayer");
|
||||||
|
|
||||||
|
digX = tag.getInteger("digX");
|
||||||
|
digZ = tag.getInteger("digZ");
|
||||||
|
|
||||||
silkTouch = tag.getBoolean("silkTouch");
|
silkTouch = tag.getBoolean("silkTouch");
|
||||||
fortuneLevel = tag.getInteger("fortuneLevel");
|
fortuneLevel = tag.getInteger("fortuneLevel");
|
||||||
speedMul = tag.getDouble("speedMul");
|
speedMul = tag.getDouble("speedMul");
|
||||||
|
|
||||||
minerVector = new Vector3(xCoord, yCoord - 1, zCoord).add(0.5);
|
minerVector = new Vector3(xCoord, yCoord - 1, zCoord).add(0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,6 +623,11 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
tag.setBoolean("isMining", isMining);
|
tag.setBoolean("isMining", isMining);
|
||||||
tag.setBoolean("isQuarry", isQuarry);
|
tag.setBoolean("isQuarry", isQuarry);
|
||||||
tag.setInteger("currentLayer", currentLayer);
|
tag.setInteger("currentLayer", currentLayer);
|
||||||
|
tag.setInteger("minLayer", minLayer);
|
||||||
|
|
||||||
|
tag.setInteger("digX", digX);
|
||||||
|
tag.setInteger("digZ", digZ);
|
||||||
|
|
||||||
tag.setBoolean("silkTouch", silkTouch);
|
tag.setBoolean("silkTouch", silkTouch);
|
||||||
tag.setInteger("fortuneLevel", fortuneLevel);
|
tag.setInteger("fortuneLevel", fortuneLevel);
|
||||||
tag.setDouble("speedMul", speedMul);
|
tag.setDouble("speedMul", speedMul);
|
||||||
|
@ -630,6 +646,11 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
return methodsArray;
|
return methodsArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int toInt(Object o)
|
||||||
|
{
|
||||||
|
return (int) Math.round(Double.parseDouble(o.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws Exception
|
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws Exception
|
||||||
{
|
{
|
||||||
|
@ -646,8 +667,8 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
{
|
{
|
||||||
if(arguments.length >= 2)
|
if(arguments.length >= 2)
|
||||||
{
|
{
|
||||||
digX = (int) Math.round(Double.parseDouble(arguments[0].toString()));
|
digX = Math.min(toInt(arguments[0]),WarpDriveConfig.i.ML_MAX_SIZE);
|
||||||
digZ = (int) Math.round(Double.parseDouble(arguments[1].toString()));
|
digZ = Math.min(toInt(arguments[1]),WarpDriveConfig.i.ML_MAX_SIZE);
|
||||||
|
|
||||||
isQuarry = false;
|
isQuarry = false;
|
||||||
delayTicksScan = 0;
|
delayTicksScan = 0;
|
||||||
|
@ -687,8 +708,8 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
{
|
{
|
||||||
if(arguments.length >= 2)
|
if(arguments.length >= 2)
|
||||||
{
|
{
|
||||||
digX = (int) Math.round(Double.parseDouble(arguments[0].toString()));
|
digX = Math.min(toInt(arguments[0]),WarpDriveConfig.i.ML_MAX_SIZE);
|
||||||
digZ = (int) Math.round(Double.parseDouble(arguments[1].toString()));
|
digZ = Math.min(toInt(arguments[1]),WarpDriveConfig.i.ML_MAX_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(NumberFormatException e)
|
catch(NumberFormatException e)
|
||||||
|
@ -704,7 +725,8 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
if (booster != null)
|
if (booster != null)
|
||||||
energy = booster.getCurrentEnergyValue();
|
energy = booster.getCurrentEnergyValue();
|
||||||
String state = "not mining";
|
String state = "not mining";
|
||||||
Integer valuablesInLayer, valuablesMined;
|
int valuablesMined = 0;
|
||||||
|
int valuablesInLayer = 0;
|
||||||
if (isMining)
|
if (isMining)
|
||||||
{
|
{
|
||||||
valuablesInLayer = this.valuablesInLayer.size();
|
valuablesInLayer = this.valuablesInLayer.size();
|
||||||
|
@ -712,9 +734,9 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
state = "mining" + ((isQuarry) ? " (quarry mode)" : "");
|
state = "mining" + ((isQuarry) ? " (quarry mode)" : "");
|
||||||
if (energy < 0)
|
if (energy < 0)
|
||||||
state = "out of energy";
|
state = "out of energy";
|
||||||
return new Object[] {state, energy, currentLayer, valuablesMined, valuablesInLayer};
|
|
||||||
}
|
}
|
||||||
return new Object[] {state, energy, currentLayer, 0, 0};
|
return new Object[] {state, energy, currentLayer, valuablesMined, valuablesInLayer,
|
||||||
|
digX, digZ, speedMul, fortuneLevel, silkTouch};
|
||||||
|
|
||||||
case 5: // Offset
|
case 5: // Offset
|
||||||
if (arguments.length == 1)
|
if (arguments.length == 1)
|
||||||
|
@ -725,11 +747,11 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
layerOffset = t + 1;
|
layerOffset = t + 1;
|
||||||
}
|
}
|
||||||
return new Integer[] { layerOffset-1 };
|
return new Integer[] { layerOffset-1 };
|
||||||
case 6: // setSilkTouch(1/boolean)
|
case 6: // silktouch(1/boolean)
|
||||||
if (arguments.length == 1)
|
if (arguments.length == 1)
|
||||||
silkTouch = arguments[0].toString() == "true" || arguments[0].toString() == "1";
|
silkTouch = arguments[0].toString() == "true" || arguments[0].toString() == "1";
|
||||||
return new Boolean[] { silkTouch };
|
return new Boolean[] { silkTouch };
|
||||||
case 7: // setFortuneLevel(int)
|
case 7: // fortune(int)
|
||||||
if (arguments.length == 1)
|
if (arguments.length == 1)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -742,7 +764,7 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new Integer[] { fortuneLevel };
|
return new Integer[] { fortuneLevel };
|
||||||
case 8: // setSpeedMul(double)
|
case 8: // speedMul(double)
|
||||||
if (arguments.length == 1)
|
if (arguments.length == 1)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -756,6 +778,32 @@ public class TileEntityMiningLaser extends WarpChunkTE implements IPeripheral, I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new Double[] { speedMul };
|
return new Double[] { speedMul };
|
||||||
|
case 9: //layer
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(arguments.length >= 1)
|
||||||
|
currentLayer = Math.min(yCoord-1, Math.max(1, toInt(arguments[0])));
|
||||||
|
}
|
||||||
|
catch(NumberFormatException e)
|
||||||
|
{
|
||||||
|
return new String[] { "NaN" };
|
||||||
|
}
|
||||||
|
return new Integer[] { currentLayer };
|
||||||
|
}
|
||||||
|
case 10: //setMinLayer
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(arguments.length >= 1)
|
||||||
|
minLayer = Math.min(yCoord-1, Math.max(1, toInt(arguments[0])));
|
||||||
|
}
|
||||||
|
catch(NumberFormatException e)
|
||||||
|
{
|
||||||
|
return new String[] { "NaN" };
|
||||||
|
}
|
||||||
|
return new Integer[] { currentLayer };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,6 +444,9 @@ public class TileEntityShipScanner extends TileEntity implements IEnergySink,
|
||||||
private void scanShip() {
|
private void scanShip() {
|
||||||
// Enable scanner
|
// Enable scanner
|
||||||
switchState(1);
|
switchState(1);
|
||||||
|
File f = new File(SCHEMATICS_DIR);
|
||||||
|
if (!f.exists() || !f.isDirectory())
|
||||||
|
f.mkdirs();
|
||||||
|
|
||||||
// Generate unique file name
|
// Generate unique file name
|
||||||
do {
|
do {
|
||||||
|
|
Loading…
Reference in a new issue