Remove foodbenefits and use rely on kubejs + hunger strike

This commit is contained in:
2026-03-07 04:49:19 -07:00
parent d5938858bd
commit 5498d90683
97 changed files with 1294 additions and 1121 deletions

View File

@@ -0,0 +1,146 @@
let data = JsonIO.read('kubejs/config/food.json') // GSON object
const MobEffectInstance = Java.loadClass('net.minecraft.world.effect.MobEffectInstance')
console.log('Loaded tooltips')
const nutritionTooltip = (item, lines) => {
let healing = item.foodProperties.getNutrition() / 2
if(healing == 0) {
return
}
let codes = '0'.repeat(parseInt(healing / 2))
if(healing % 2) {
codes += '1'
}
lines.add(1, { text: codes, font: "pwb:healing" })
// return [ { text: codes, font: "pwb:healing" } ]
}
const formatDuration = duration => {
let ticks = parseInt(duration / 20)
let minute = Math.floor(ticks / 60).toString().padStart(2, '0')
let seconds = parseInt(ticks % 60).toString().padStart(2, '0')
return minute + ':' + seconds
}
const formatEffect = mobEffect => {
const effect = mobEffect.effect
return {
color: effect.beneficial ? "blue" : "red",
text: `${effect.displayName.getString()} (${formatDuration(mobEffect.duration)})`
}
}
const formatChance = chance => {
return {
text: Math.floor(chance * 100) + "% "
}
}
const givesEffectTooltip = (mobEffect, chance, lines) => {
let components = []
if(chance < 1) {
components.push(formatChance(chance))
}
components.push(formatEffect(mobEffect))
lines.push(components)
// lines.add(components)
}
const queueAttributeTooltips = (mobEffect, attrLines) => {
mobEffect.effect.attributeModifiers.forEach((attribute, modifier) => {
let attrName = Text.translate(attribute.descriptionId).getString();
let prefix = "+"
if (modifier.operation.ordinal() == 0) {
let amount = modifier.amount;
prefix += Number.isInteger(amount) ? amount.toString() : amount.toFixed(2);
} else {
let amount = modifier.amount * 100;
prefix += Number.isInteger(amount) ? amount.toString() : amount.toFixed(2);
prefix += "%"
}
let effectString = modifier.amount > 0 ? "§9" : "§c";
attrLines.push(`${effectString}${prefix} ${attrName}`)
})
}
const attributeTooltips = (lines, attrLines) => {
if (attrLines.length > 0) {
lines.add("")
lines.add({
translate: "tooltip.kubejs.effect.applied",
color: "dark_purple"
})
lines.addAll(attrLines)
}
}
const tooltipForCustomEffect = (dataEntry, lines, attrLines) => {
for(let effectDef of dataEntry.effects) {
switch(effectDef.type) {
case "give":
const mobEffect = new MobEffectInstance(effectDef.effect, effectDef.time, effectDef.level, false, false)
givesEffectTooltip(mobEffect, effectDef.chance, lines)
// queueAttributeTooltips(mobEffect, attrLines)
break
}
}
}
const hasFoodProperties = (stack) => {
let foodProperties = stack.item.foodProperties;
return foodProperties != null && !foodProperties.effects.isEmpty()
}
ItemEvents.tooltip(event => {
console.log('Reloading tooltips')
// for(let item of Ingredient.all.itemTypes.toArray()) {
// let foodProperties = item.foodProperties
// if(foodProperties == null) {
// continue
// }
// event.add(nutritionTooltip(item))
// }
event.addAdvanced(Ingredient.all.itemIds, (stack, advanced, lines) => {
let foodProperties = stack.item.foodProperties
if(foodProperties == null) {
return
}
// let attrLines = []
nutritionTooltip(stack.item, lines)
// let dataEntry = data[stack.item.arch$registryName().toString()]
// if(dataEntry != null) {
// tooltipForCustomEffect(dataEntry, lines, attrLines)
// }
// attributeTooltips(lines, attrLines)
})
for(let itemId of Object.keys(data)) {
let lines = []
tooltipForCustomEffect(data[itemId], lines)
event.add(itemId, lines)
}
// const addEffect = (targets, effects) => {
// }
// for(let id in data) {
// console.log(id)
// addEffect(id, data[id].effects)
// }
})

1112
pack/kubejs/config/food.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
let data = JsonIO.read('kubejs/config/food.json')
ItemEvents.modification(event => {
event.modify(Object.keys(data), item => {
item.foodProperties = food => {
let dataEntry = data[item.arch$registryName().toString()]
food.hunger(dataEntry.heal * 2)
for(let effectDef of dataEntry.effects) {
switch(effectDef.type) {
case "give":
food.effect(effectDef.effect, effectDef.time, effectDef.level, effectDef.chance)
break
}
}
}
})
})