Added fuel reserve, source priority, only refill own settings
This commit is contained in:
@@ -4,6 +4,11 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace AutoRefillFires
|
namespace AutoRefillFires
|
||||||
{
|
{
|
||||||
|
public enum FuelSourcePriority
|
||||||
|
{
|
||||||
|
PlayerFirst,
|
||||||
|
ContainersFirst
|
||||||
|
}
|
||||||
|
|
||||||
[BepInPlugin(
|
[BepInPlugin(
|
||||||
Plugin.PluginGuid,
|
Plugin.PluginGuid,
|
||||||
@@ -31,6 +36,9 @@ namespace AutoRefillFires
|
|||||||
private ConfigEntry<bool> _fillWallTorches;
|
private ConfigEntry<bool> _fillWallTorches;
|
||||||
private ConfigEntry<bool> _fillBraziers;
|
private ConfigEntry<bool> _fillBraziers;
|
||||||
private ConfigEntry<bool> _fillOtherFireplaces;
|
private ConfigEntry<bool> _fillOtherFireplaces;
|
||||||
|
private ConfigEntry<int> _keepFuelReserve;
|
||||||
|
private ConfigEntry<FuelSourcePriority> _fuelSourcePriority;
|
||||||
|
private ConfigEntry<bool> _onlyRefillOwnPieces;
|
||||||
private ConfigEntry<KeyboardShortcut> _toggleHotkey;
|
private ConfigEntry<KeyboardShortcut> _toggleHotkey;
|
||||||
private bool _modEnabled = true;
|
private bool _modEnabled = true;
|
||||||
|
|
||||||
@@ -136,6 +144,27 @@ namespace AutoRefillFires
|
|||||||
"Hotkey used to enable or disable automatic refilling."
|
"Hotkey used to enable or disable automatic refilling."
|
||||||
);
|
);
|
||||||
|
|
||||||
|
_keepFuelReserve = Config.Bind(
|
||||||
|
"Fuel",
|
||||||
|
"KeepFuelReserve",
|
||||||
|
0,
|
||||||
|
"Minimum amount of fuel to keep in the source inventory. 10 means the last 10 Wood/Resin will not be used."
|
||||||
|
);
|
||||||
|
|
||||||
|
_fuelSourcePriority = Config.Bind(
|
||||||
|
"Fuel",
|
||||||
|
"FuelSourcePriority",
|
||||||
|
FuelSourcePriority.PlayerFirst,
|
||||||
|
"Select whether player inventory or nearby containers should be used first."
|
||||||
|
);
|
||||||
|
|
||||||
|
_onlyRefillOwnPieces = Config.Bind(
|
||||||
|
"General",
|
||||||
|
"OnlyRefillOwnPieces",
|
||||||
|
false,
|
||||||
|
"If enabled, only refill fireplaces and torches built by the local player."
|
||||||
|
);
|
||||||
|
|
||||||
Logger.LogInfo("Auto Refill Fires loaded!");
|
Logger.LogInfo("Auto Refill Fires loaded!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,10 +262,31 @@ namespace AutoRefillFires
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsOwnPiece(Player player, Fireplace fireplace)
|
||||||
|
{
|
||||||
|
Piece piece = fireplace.GetComponent<Piece>();
|
||||||
|
|
||||||
|
if (piece == null)
|
||||||
|
piece = fireplace.GetComponentInParent<Piece>();
|
||||||
|
|
||||||
|
if (piece == null)
|
||||||
|
{
|
||||||
|
// Unknown/modded fireplace without a Piece component.
|
||||||
|
// Don't block it.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return piece.GetCreator() == player.GetPlayerID();
|
||||||
|
}
|
||||||
|
|
||||||
private void TryRefillFireplace(Player player, Fireplace fireplace)
|
private void TryRefillFireplace(Player player, Fireplace fireplace)
|
||||||
{
|
{
|
||||||
if (!ShouldRefillFireplace(fireplace))
|
if (!ShouldRefillFireplace(fireplace))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (_onlyRefillOwnPieces.Value && !IsOwnPiece(player, fireplace))
|
||||||
|
return;
|
||||||
|
|
||||||
ZNetView nview = fireplace.GetComponent<ZNetView>();
|
ZNetView nview = fireplace.GetComponent<ZNetView>();
|
||||||
|
|
||||||
if (nview == null)
|
if (nview == null)
|
||||||
@@ -326,18 +376,55 @@ namespace AutoRefillFires
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryConsumeFuel(Player player, Fireplace fireplace, string fuelName)
|
private bool TryConsumeFuelFromPlayer(Player player, string fuelName)
|
||||||
{
|
{
|
||||||
Inventory playerInventory = player.GetInventory();
|
Inventory inventory = player.GetInventory();
|
||||||
|
|
||||||
if (playerInventory.CountItems(fuelName) > 0)
|
if (inventory == null)
|
||||||
{
|
return false;
|
||||||
playerInventory.RemoveItem(fuelName, 1);
|
|
||||||
|
|
||||||
Logger.LogDebug(
|
int availableFuel =
|
||||||
$"Fuel {fuelName} taken from player inventory."
|
inventory.CountItems(fuelName);
|
||||||
|
|
||||||
|
if (availableFuel <= _keepFuelReserve.Value)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
inventory.RemoveItem(
|
||||||
|
fuelName,
|
||||||
|
1
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Logger.LogDebug(
|
||||||
|
$"Fuel {fuelName} taken from player inventory. " +
|
||||||
|
$"Remaining: {availableFuel - 1}"
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TryConsumeFuel(Player player, Fireplace fireplace, string fuelName)
|
||||||
|
{
|
||||||
|
if (_fuelSourcePriority.Value == FuelSourcePriority.ContainersFirst)
|
||||||
|
{
|
||||||
|
if (_useNearbyContainers.Value &&
|
||||||
|
TryConsumeFuelFromNearbyContainer(
|
||||||
|
fireplace,
|
||||||
|
fuelName))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TryConsumeFuelFromPlayer(
|
||||||
|
player,
|
||||||
|
fuelName
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PlayerFirst
|
||||||
|
if (TryConsumeFuelFromPlayer(
|
||||||
|
player,
|
||||||
|
fuelName))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,9 +437,7 @@ namespace AutoRefillFires
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryConsumeFuelFromNearbyContainer(
|
private bool TryConsumeFuelFromNearbyContainer(Fireplace fireplace, string fuelName)
|
||||||
Fireplace fireplace,
|
|
||||||
string fuelName)
|
|
||||||
{
|
{
|
||||||
Container[] containers =
|
Container[] containers =
|
||||||
Object.FindObjectsByType<Container>(
|
Object.FindObjectsByType<Container>(
|
||||||
@@ -376,12 +461,24 @@ namespace AutoRefillFires
|
|||||||
if (distance > _containerRadius.Value)
|
if (distance > _containerRadius.Value)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Inventory inventory = container.GetInventory();
|
Inventory inventory =
|
||||||
|
container.GetInventory();
|
||||||
|
|
||||||
if (inventory == null)
|
if (inventory == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (inventory.CountItems(fuelName) <= 0)
|
int availableFuel =
|
||||||
|
inventory.CountItems(fuelName);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Never use the configured reserve.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* reserve = 10
|
||||||
|
* chest contains 10 -> skip
|
||||||
|
* chest contains 11 -> usable
|
||||||
|
*/
|
||||||
|
if (availableFuel <= _keepFuelReserve.Value)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (distance < closestDistance)
|
if (distance < closestDistance)
|
||||||
@@ -400,15 +497,22 @@ namespace AutoRefillFires
|
|||||||
if (chestInventory == null)
|
if (chestInventory == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (chestInventory.CountItems(fuelName) <= 0)
|
int chestFuel =
|
||||||
|
chestInventory.CountItems(fuelName);
|
||||||
|
|
||||||
|
if (chestFuel <= _keepFuelReserve.Value)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
chestInventory.RemoveItem(fuelName, 1);
|
chestInventory.RemoveItem(
|
||||||
|
fuelName,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
Logger.LogInfo(
|
Logger.LogDebug(
|
||||||
$"Fuel {fuelName} taken from container " +
|
$"Fuel {fuelName} taken from container " +
|
||||||
$"{closestContainer.name} " +
|
$"{closestContainer.name} " +
|
||||||
$"({closestDistance:0.0}m)"
|
$"({closestDistance:0.0}m). " +
|
||||||
|
$"Remaining: {chestFuel - 1}"
|
||||||
);
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user