neuralgia/kubejs/server_scripts/ftb_quests/CustomQuests.js
2025-07-21 13:52:18 +10:00

43 lines
No EOL
1.6 KiB
JavaScript

"use strict";
// Handles the quest for drinking water. The drinking water quest checks if the player has this stage.
ItemEvents.firstRightClicked(evt =>
{
const FORGE_CAPS = "ForgeCaps";
const TFC_PLAYERDATA = "tfc:player_data";
const FOOD = "food";
const THIRST = "thirst";
const PREVIOUS_THIRST = "previous_thirst";
const STAGE = "tfg.stages.quests.drank_fresh_water_with_hand";
const {player, level} = evt;
if(evt.target.block == null)
return;
//We reach for the "food" compound tag, that contains the tfc thirst.
let forgecaps = player.nbt.getCompound(FORGE_CAPS);
let tfc_playerdata = forgecaps.getCompound(TFC_PLAYERDATA);
let food = tfc_playerdata.getCompound(FOOD);
let thirstValue = food.getFloat(THIRST);
//Do we already keep track of the previous thirst value? if not, put it and then return.
let customData = getTFGPersistentDataRoot(player);
let containsPreviousThirst = customData.contains(PREVIOUS_THIRST);
if(!containsPreviousThirst)
{
customData.putFloat(PREVIOUS_THIRST, thirstValue);
return;
}
let previousThirstValue = customData.getFloat(PREVIOUS_THIRST);
//As long as our new thirst is greater than our previous, it means we hydrated ourselves. OFC we need to make sure the block clicked was potable.
let blockID = evt.target.block.id;
let isFreshWater = blockID == "minecraft:water" || blockID == "tfc:fluid/river_water";
if(isFreshWater && thirstValue > previousThirstValue && !player.stages.has(STAGE))
{
player.stages.add(STAGE);
}
//Put it back in.
customData.putFloat(PREVIOUS_THIRST, thirstValue);
})