Fixed the "look at water" task not working. (#882)

This commit is contained in:
Nebby
2025-04-18 01:53:24 -04:00
committed by GitHub
parent a22cdf309c
commit 91978fff3c
4 changed files with 87 additions and 34 deletions

View File

@@ -89,12 +89,10 @@
subtitle: "{quests.stone_age.find_potable_water.subtitle}"
tasks: [{
icon: "minecraft:water_bucket"
id: "73E3594A5481E63F"
observe_type: 0
timer: 0L
title: "{quests.tasktype.lookat} {quests.stone_age.find_potable_water.task}"
to_observe: "minecraft:water"
type: "observation"
id: "3601D2311BB1383F"
stage: "tfg.stages.quests.drank_fresh_water_with_hand"
title: "{quests.stone_age.find_potable_water.task}"
type: "gamestage"
}]
title: "{quests.stone_age.find_potable_water.title}"
x: 4.5d

View File

@@ -1076,8 +1076,8 @@
"quests.stone_age.garlic_bread.task": "1024 slices of Garlic Bread",
"quests.stone_age.find_potable_water.title": "Thirsty?",
"quests.stone_age.find_potable_water.subtitle": "Remember to drink water!",
"quests.stone_age.find_potable_water.desc": "Thirst is represented by the blue bar above your hunger. You can and will die of dehydration if you dont keep your thirst meter filled! The easiest way to have a drink is by drinking from natural ponds in the wild, by right-clicking on them with an empty hand.\n\nYou don't have to worry about purifying water here, though Salt Water will just make you more thirsty.",
"quests.stone_age.find_potable_water.task": "A source of fresh Water",
"quests.stone_age.find_potable_water.desc": "Thirst is represented by the blue bar above your hunger. You can and will die of dehydration if you dont keep your thirst meter filled! The easiest way to have a drink is by drinking from natural ponds in the wild, by right-clicking on them with an empty hand.\nTo complete this quest, you need to drink a Potable source of water, can be regular or river water. You may need to drink multiple times so the quest completes properly\n\nYou don't have to worry about purifying water here, though Salt Water will just make you more thirsty.",
"quests.stone_age.find_potable_water.task": "Drink from a Water Source with your Hand. (Not Salty or Hot)",
"quests.stone_age.hydration.title": "Mechanic: Hydration",
"quests.stone_age.hydration.subtitle": "Yet another bar to keep full...",
"quests.stone_age.hydration.desc": "Water is an important resource, not just for staying hydrated! Setting up a base near a fresh lake or river is recommended, so you have easy access to the stuff. Other items can quench your thirst, such as certain types of food or drinks.\n\nWater won't always be available when you go exploring, however, so here are some ways to carry drinks around with you. Drinking consumes 100mB from the container.",

View File

@@ -0,0 +1,41 @@
// 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);
})

View File

@@ -83,35 +83,49 @@ salvo_event.forEach(salvo_event => {
});
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
player.runCommandSilent(`effect give ${username} minecraft:absorption 480 4 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
player.runCommandSilent(`effect give ${username} minecraft:absorption 480 4 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
player.runCommandSilent(`effect give ${username} minecraft:instant_health 1 1 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
player.runCommandSilent(`effect give ${username} minecraft:instant_health 1 1 true`)
server.runCommandSilent(`playsound minecraft:item.glow_ink_sac.use player ${username} ${x} ${y} ${z} 10 2 1`)
});
// Vase Sounds
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}})
});
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != 'tfg:decorative_vase') {return}{
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
}})
});
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
if (block.id != 'tfg:decorative_vase') {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
/**
*
* @param {Internal.Player} player
* @returns {Internal.CompoundTag}
*/
function getTFGPersistentDataRoot(player)
{
if(!player.persistentData.contains("tfg:custom_data"))
{
player.persistentData.put("tfg:custom_data", {});
}
return player.persistentData.getCompound("tfg:custom_data")
}