minecraft-src/net/minecraft/client/tutorial/PunchTreeTutorialStepInstance.java
2025-07-04 03:15:13 +03:00

93 lines
2.8 KiB
Java

package net.minecraft.client.tutorial;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.toasts.TutorialToast;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class PunchTreeTutorialStepInstance implements TutorialStepInstance {
private static final int HINT_DELAY = 600;
private static final Component TITLE = Component.translatable("tutorial.punch_tree.title");
private static final Component DESCRIPTION = Component.translatable("tutorial.punch_tree.description", Tutorial.key("attack"));
private final Tutorial tutorial;
@Nullable
private TutorialToast toast;
private int timeWaiting;
private int resetCount;
public PunchTreeTutorialStepInstance(Tutorial tutorial) {
this.tutorial = tutorial;
}
@Override
public void tick() {
this.timeWaiting++;
if (!this.tutorial.isSurvival()) {
this.tutorial.setStep(TutorialSteps.NONE);
} else {
Minecraft minecraft = this.tutorial.getMinecraft();
if (this.timeWaiting == 1) {
LocalPlayer localPlayer = minecraft.player;
if (localPlayer != null) {
if (localPlayer.getInventory().contains(ItemTags.LOGS)) {
this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS);
return;
}
if (FindTreeTutorialStepInstance.hasPunchedTreesPreviously(localPlayer)) {
this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS);
return;
}
}
}
if ((this.timeWaiting >= 600 || this.resetCount > 3) && this.toast == null) {
this.toast = new TutorialToast(minecraft.font, TutorialToast.Icons.TREE, TITLE, DESCRIPTION, true);
minecraft.getToastManager().addToast(this.toast);
}
}
}
@Override
public void clear() {
if (this.toast != null) {
this.toast.hide();
this.toast = null;
}
}
@Override
public void onDestroyBlock(ClientLevel level, BlockPos pos, BlockState state, float diggingStage) {
boolean bl = state.is(BlockTags.LOGS);
if (bl && diggingStage > 0.0F) {
if (this.toast != null) {
this.toast.updateProgress(diggingStage);
}
if (diggingStage >= 1.0F) {
this.tutorial.setStep(TutorialSteps.OPEN_INVENTORY);
}
} else if (this.toast != null) {
this.toast.updateProgress(0.0F);
} else if (bl) {
this.resetCount++;
}
}
@Override
public void onGetItem(ItemStack stack) {
if (stack.is(ItemTags.LOGS)) {
this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS);
}
}
}