Files
ATM8/minecraft/kubejs/server_scripts/mods/mysticalagriculture/crops.js
2023-12-18 20:22:40 +00:00

172 lines
6.1 KiB
JavaScript

const CropRegistry = Java.loadClass('com.blakebr0.mysticalagriculture.registry.CropRegistry')
// sets the chance for a seed to drop
const SecondarySeed = 0.01
const TierSecondaryCutoff = 5
ServerEvents.tags('item', event => {
let CropRegistryInstance = CropRegistry.getInstance()
let cropTiers = CropRegistryInstance.getTiers()
let tiers = Array.apply(null, Array(cropTiers.length))
for (const CropTier of cropTiers) {
tiers[CropTier.getValue() - 1] = CropTier.getFarmland()
if (CropTier.getValue() >= TierSecondaryCutoff) {
CropTier.setSecondarySeedDrop(false)
CropTier.setBaseSecondaryChance(0)
} else {
CropTier.setBaseSecondaryChance(SecondarySeed)
}
}
for (let i = 0; i < tiers.length; i++) {
let farmA = tiers[i]
let farmB = null
if (i + 1 < tiers.length) {
if (!farmA.equals(tiers[i + 1])) {
farmB = tiers[i + 1]
}
}
let tierA = farmA.getIdLocation().getPath().replace('_farmland', '')
event.add(`kubejs:farmland/${tierA}`, farmA.getId())
if (farmB) {
let tierB = farmB.getIdLocation().getPath().replace('_farmland', '')
event.add(`kubejs:farmland/${tierA}`, `#kubejs:farmland/${tierB}`)
} else {
break
}
}
})
ServerEvents.recipes(event => {
let JsonExport = { enabled: [], disabled: [] }
let CropRegistryInstance = CropRegistry.getInstance()
let CropList = CropRegistryInstance.getCrops()
for (const Crop of CropList) {
let CropName = Crop.getName()
if (Crop.isEnabled()) {
JsonExport.enabled.push(CropName)
} else {
JsonExport.disabled.push(CropName)
event.remove({ id: `mysticalagriculture:seed/infusion/${CropName}` })
}
}
JsonIO.write('kubejs/server_scripts/mods/mysticalagriculture/cropInfo.json', JsonExport)
// Botany Pots
if (Platform.isLoaded('botanypots')) {
let seenSeeds = []
let crux = {}
// Fix drops, fix cruxes, check for missing
event.forEachRecipe({ type: 'botanypots:crop' }, recipe => {
let seed = Ingredient.of(recipe.json.get('seed')).getFirst()
if (seed.getMod().contains('mystical')) {
let seedName = seed.getIdLocation().getPath().replace('_seeds', '')
let newDrops = []
let Crop = CropRegistryInstance.getCropByName(seedName)
let cruxBlock = Crop.getCruxBlock()
if (cruxBlock) {
recipe.json.add('categories', [`${cruxBlock.getIdLocation().getPath()}`])
crux[cruxBlock.getId()] = cruxBlock.getIdLocation().getPath()
}
for (const drop of recipe.json.get('drops')) {
if (Ingredient.of(drop.get('output')).test(seed)) {
if (SecondarySeed > 0 && Crop.getTier().hasSecondarySeedDrop()) {
drop.add('chance', SecondarySeed)
newDrops.push(drop)
}
} else {
newDrops.push(drop)
}
}
recipe.json.add('drops', newDrops)
seenSeeds.push(seedName)
}
})
// add missing recipes
for (const seed of JsonExport.enabled) {
if (!seenSeeds.includes(seed)) {
let Crop = CropRegistryInstance.getCropByName(seed)
let drops = [{ chance: 1.0, output: Ingredient.of(Crop.getEssenceItem()).toJson() }]
if (SecondarySeed > 0 && Crop.getTier().hasSecondarySeedDrop()) {
drops.push({ chance: SecondarySeed, output: Ingredient.of(Crop.getSeedsItem()).toJson() })
}
drops.push({ chance: 0.01, output: Ingredient.of("mysticalagriculture:fertilized_essence").toJson(), minRolls: 1, maxRolls: 1 })
let category = `${Crop.getTier().getFarmland().getIdLocation().getPath().replace('_farmland', '')}`
let cruxBlock = Crop.getCruxBlock()
if (cruxBlock) {
category = `${cruxBlock.getIdLocation().getPath()}`
crux[cruxBlock.getId()] = cruxBlock.getIdLocation().getPath()
}
event.custom({
type: 'botanypots:crop',
seed: Ingredient.of(Crop.getSeedsItem()).toJson(),
categories: [category],
growthTicks: 1200 + (600 * Crop.getTier().getValue()),
display: {
type: 'botanypots:aging',
block: Crop.getCropBlock().getId()
},
drops: drops
}).id(`kubejs:botanypots/mysticalagriculture/${seed}`)
}
}
// add crux 'soils'
for (const block in crux) {
let category = crux[block]
event.custom({
type: 'botanypots:soil',
input: { item: block },
display: { block: block },
categories: [category],
growthModifier: 1.0
}).id(`kubejs:botanypots/mysticalagriculture/crux/${category}`)
}
}
// Thermal Insolator
if (Platform.isLoaded('thermal')) {
JsonExport.enabled.forEach(cropName => {
let Crop = CropRegistryInstance.getCropByName(cropName)
event.custom({
type: 'thermal:insolator',
ingredient: Ingredient.of(Crop.getSeedsItem()).toJson(),
result: [
{
item: Crop.getEssenceItem().getId(),
chance: 1 + SecondarySeed
},
{
item: Crop.getSeedsItem().getId(),
chance: Crop.getTier().hasSecondarySeedDrop() ? (1 + SecondarySeed) : 1,
locked: true
}
]
}).id(`kubejs:thermal/machines/insolator/mysticalagriculture/${cropName}`)
})
}
// Immersive Engineering Cloche
if (Platform.isLoaded('immersiveengineering')) {
JsonExport.enabled.forEach(cropName => {
let Crop = CropRegistryInstance.getCropByName(cropName)
event.custom({
type: 'immersiveengineering:cloche',
results: [
{
item: Crop.getEssenceItem().getId(),
count: 2
}
],
input: Ingredient.of(Crop.getSeedsItem()).toJson(),
soil: Ingredient.of(Crop.getCruxBlock() ?? `#kubejs:farmland/${Crop.getTier().getFarmland().getIdLocation().getPath().replace('_farmland', '')}`).toJson(),
time: 250 + (750 * Crop.getTier().getValue()),
render: {
type: 'crop',
block: Crop.getCropBlock().getId()
}
}).id(`kubejs:immersiveengineering/cloche/mysticalagriculture/${cropName}`)
})
}
})