Remove foodbenefits and use rely on kubejs + hunger strike
This commit is contained in:
146
pack/kubejs/client_scripts/food.js
Normal file
146
pack/kubejs/client_scripts/food.js
Normal 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)
|
||||
// }
|
||||
})
|
||||
Reference in New Issue
Block a user