Compatible With:
- Oxide
- Carbon
Features:
Supported Entities by Default:
Industrial Farming features an open API via custom hooks. These hooks are called whenever the plugin performs an automated action. Because these are standard Oxide/Carbon hooks, you do not need to add a [PluginReference] to your code; simply adding the method signature to your plugin is enough to receive the data.
Supported Hooks :
If you want to log these actions in a separate plugin or create a custom UI for farming stats, you can use the hooks like this:
Configuration :
- Automatically attaches Industrial Adapters and Lights to farming entities.
- Integrated "Hub" system: Spawns a storage box for Coops and Beehives to manage inputs/outputs.
- Automated Egg Collection: Moves eggs from Coops to the attached storage box (protecting the hatching slot).
- Automated Refilling: Moves food into Coops and refills water from jugs placed in the storage box.
- Automated Honey Collection: Moves honey from Beehives into the storage box.
- Highly Optimized: Uses a staggered initial scan and batch-processing coroutines to ensure zero impact on server performance.
- Custom Layouts: Fully configurable offsets and rotations for every supported entity.
Supported Entities by Default:
- Chicken Coops
- Beehives
- Composters
- Large/Small/Triangle Planters
- Fridges & Mini Fridges
- Hitch Troughs
- Bathtub & Minecart Planters
Industrial Farming features an open API via custom hooks. These hooks are called whenever the plugin performs an automated action. Because these are standard Oxide/Carbon hooks, you do not need to add a [PluginReference] to your code; simply adding the method signature to your plugin is enough to receive the data.
Supported Hooks :
- OnEggMoved(ChickenCoop coop, Item item, StorageContainer box)
- Triggered when a produced egg is moved from the coop to the external storage box.
- OnHoneyMoved(BaseEntity beehive, Item item, StorageContainer box)
- Triggered when honey is moved from a beehive to the external storage box.
- OnWaterFilled(ChickenCoop coop, int amount, StorageContainer box)
- Triggered when water is siphoned from a jug in the storage box into the coop.
- OnFoodMoved(ChickenCoop coop, Item item, StorageContainer box)
- Triggered when food is transferred from the storage box into the coop inventory.
If you want to log these actions in a separate plugin or create a custom UI for farming stats, you can use the hooks like this:
C#:
#region Debug API (also for testing example for other plugins)
private void OnEggMoved(ChickenCoop coop , Item item , StorageContainer box)
{
if (config.Debug) Puts($"[DEBUG] Moved {item.info.shortname} from Coop {coop.net.ID} to Box {box.net.ID}");
}
private void OnHoneyMoved(BaseEntity beehive , Item item , StorageContainer box)
{
if (config.Debug) Puts($"[DEBUG] Moved Honey from Beehive {beehive.net.ID} to Box {box.net.ID}");
}
private void OnWaterFilled(ChickenCoop coop , int amount , StorageContainer box)
{
if (config.Debug) Puts($"[DEBUG] Refilled {amount}ml Water into Coop {coop.net.ID} from Box {box.net.ID}");
}
private void OnFoodMoved(ChickenCoop coop , Item item , StorageContainer box)
{
if (config.Debug) Puts($"[DEBUG] Moved Food ({item.info.shortname}) into Coop {coop.net.ID} from Box {box.net.ID}");
}
#endregion
Configuration :
JSON:
{
"Prefix": "[IndustrialFarming] ",
"Debug": false,
"Plugin Settings": {
"Scan Interval (Seconds)": 120.0,
"Item Transfer Delay (Seconds)": 0.1,
"Chicken Coop Box Skin": 3555732160,
"Beehive Box Skin": 3438077533,
"Entities Processed Per Frame": 100
},
"Entity Layout Mappings": {
"chickencoop.deployed": {
"BoxOffset": {
"x": 0.7,
"y": 0.0,
"z": -1.0
},
"AdapterOffset": {
"x": 0.0,
"y": 0.55,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": {
"x": -0.32,
"y": 1.45,
"z": -0.56,
"normalized": {
"x": -0.201641068,
"y": 0.9136861,
"z": -0.352871865
},
"magnitude": 1.58697832,
"sqrMagnitude": 2.5185
},
"LampRotationEuler": null
},
"beehive.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 0.3,
"z": 0.35
},
"AdapterRotationEuler": {
"x": 90.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"composter": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 1.7,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"fridge.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 2.0,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"minifridge.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 1.055,
"z": -0.05
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"planter.small.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.65,
"y": 0.3,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"planter.large.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.65,
"y": 0.3,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"railroadplanter.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.65,
"y": 0.32,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"bathtub.planter.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.65,
"y": 0.55,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"minecart.planter.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 0.8,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"triangle_railroad_planter.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.3,
"y": 0.3,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 90.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"planter.triangle.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.3,
"y": 0.3,
"z": 0.0
},
"AdapterRotationEuler": {
"x": 0.0,
"y": 90.0,
"z": 0.0
},
"LampOffset": null,
"LampRotationEuler": null
},
"hitchtrough.deployed": {
"BoxOffset": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"AdapterOffset": {
"x": 0.0,
"y": 0.48,
"z": 0.32
},
"AdapterRotationEuler": {
"x": 105.0,
"y": 0.0,
"z": 0.0
},
"LampOffset": {
"x": 0.0,
"y": 1.05,
"z": -0.28,
"normalized": {
"x": 0.0,
"y": 0.9662349,
"z": -0.257662654
},
"magnitude": 1.08669221,
"sqrMagnitude": 1.18089986
},
"LampRotationEuler": {
"x": -90.0,
"y": 0.0,
"z": 0.0,
"normalized": {
"x": -1.0,
"y": 0.0,
"z": 0.0
},
"magnitude": 90.0,
"sqrMagnitude": 8100.0
}
}
}
}