aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/DemoMode.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/DemoMode.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/DemoMode.cpp')
-rw-r--r--Minecraft.Client/DemoMode.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/Minecraft.Client/DemoMode.cpp b/Minecraft.Client/DemoMode.cpp
new file mode 100644
index 00000000..3b24af7a
--- /dev/null
+++ b/Minecraft.Client/DemoMode.cpp
@@ -0,0 +1,125 @@
+#include "stdafx.h"
+#include "DemoMode.h"
+#include "..\Minecraft.World\net.minecraft.world.level.h"
+
+DemoMode::DemoMode(Minecraft *minecraft) : SurvivalMode(minecraft)
+{
+ demoHasEnded = false;
+ demoEndedReminder = 0;
+}
+
+void DemoMode::tick()
+{
+ SurvivalMode::tick();
+
+/* 4J - TODO - seems unlikely we need this demo mode anyway
+ __int64 time = minecraft->level->getTime();
+ __int64 day = (time / Level::TICKS_PER_DAY) + 1;
+
+ demoHasEnded = (time > (500 + Level::TICKS_PER_DAY * DEMO_DAYS));
+ if (demoHasEnded)
+ {
+ demoEndedReminder++;
+ }
+
+ if ((time % Level::TICKS_PER_DAY) == 500)
+ {
+ if (day <= (DEMO_DAYS + 1))
+ {
+ minecraft->gui->displayClientMessage(L"demo.day." + _toString<__int64>(day));
+ }
+ }
+ else if (day == 1)
+ {
+ Options *options = minecraft->options;
+ wstring message;
+
+ if (time == 100) {
+ minecraft.gui.addMessage("Seed: " + minecraft.level.getSeed());
+ message = language.getElement("demo.help.movement");
+ message = String.format(message, Keyboard.getKeyName(options.keyUp.key), Keyboard.getKeyName(options.keyLeft.key), Keyboard.getKeyName(options.keyDown.key),
+ Keyboard.getKeyName(options.keyRight.key));
+ } else if (time == 175) {
+ message = language.getElement("demo.help.jump");
+ message = String.format(message, Keyboard.getKeyName(options.keyJump.key));
+ } else if (time == 250) {
+ message = language.getElement("demo.help.inventory");
+ message = String.format(message, Keyboard.getKeyName(options.keyBuild.key));
+ }
+ if (message != null) {
+ minecraft.gui.addMessage(message);
+ }
+ } else if (day == DEMO_DAYS) {
+ if ((time % Level.TICKS_PER_DAY) == 22000) {
+ minecraft.gui.displayClientMessage("demo.day.warning");
+ }
+ }
+*/
+}
+
+void DemoMode::outputDemoReminder()
+{
+/* 4J - TODO
+ if (demoEndedReminder > 100) {
+ minecraft.gui.displayClientMessage("demo.reminder");
+ demoEndedReminder = 0;
+ }
+ */
+}
+
+void DemoMode::startDestroyBlock(int x, int y, int z, int face)
+{
+ if (demoHasEnded)
+ {
+ outputDemoReminder();
+ return;
+ }
+ SurvivalMode::startDestroyBlock(x, y, z, face);
+}
+
+void DemoMode::continueDestroyBlock(int x, int y, int z, int face)
+{
+ if (demoHasEnded)
+ {
+ return;
+ }
+ SurvivalMode::continueDestroyBlock(x, y, z, face);
+}
+
+bool DemoMode::destroyBlock(int x, int y, int z, int face)
+{
+ if (demoHasEnded)
+ {
+ return false;
+ }
+ return SurvivalMode::destroyBlock(x, y, z, face);
+}
+
+bool DemoMode::useItem(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item)
+{
+ if (demoHasEnded)
+ {
+ outputDemoReminder();
+ return false;
+ }
+ return SurvivalMode::useItem(player, level, item);
+}
+
+bool DemoMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face)
+{
+ if (demoHasEnded) {
+ outputDemoReminder();
+ return false;
+ }
+ return SurvivalMode::useItemOn(player, level, item, x, y, z, face);
+}
+
+void DemoMode::attack(shared_ptr<Player> player, shared_ptr<Entity> entity)
+{
+ if (demoHasEnded)
+ {
+ outputDemoReminder();
+ return;
+ }
+ SurvivalMode::attack(player, entity);
+}