Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
package io.github.skydynamic.quickbakcupmulti.client.screen;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.BufferUploader;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import io.github.skydynamic.quickbakcupmulti.translate.Translate;
import lombok.Setter;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import org.joml.Matrix4f;

public class RestoreScreen extends Screen {
private final Button cancelButton;
@Setter
private String state = Translate.tr("quickbackupmulti.screen.restore_screen.title");
private String state = Translate.tr("quickbackupmulti.screen.restore_screen.waiting_for_server");
@Setter
private String progress = "0%";
private float progress = 0;

public RestoreScreen(Button.OnPress onCancelButtonPress) {
super(Component.nullToEmpty(Translate.tr("quickbackupmulti.screen.restore_screen.title")));
Expand All @@ -29,12 +39,21 @@ protected void init() {
@Override
public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) {
super.render(guiGraphics, mouseX, mouseY, delta);
guiGraphics.drawCenteredString(font, Component.nullToEmpty(this.state), this.width / 2, this.height / 2, 0xFFFFFF);
float centerX = this.width / 2f;
float centerY = this.height / 2f;
guiGraphics.drawCenteredString(font, Component.nullToEmpty(this.state), (int) centerX, (int) centerY - 20, 0xFFFFFF);
drawProgressBar(
guiGraphics.pose(),
centerX - 70,
centerY - 5,
centerX + 70,
centerY + 5
);
guiGraphics.drawCenteredString(
font,
Component.nullToEmpty(Translate.tr("quickbackupmulti.screen.restore_screen.progress") + this.progress),
this.width / 2,
this.height / 2 + 20,
Component.nullToEmpty(Translate.tr("quickbackupmulti.screen.restore_screen.progress", this.getPercentString())),
(int) centerX,
(int) (centerY + 10),
0xFFFFFF
);
}
Expand All @@ -49,6 +68,63 @@ protected boolean shouldNarrateNavigation() {
return false;
}

private String getPercentString() {
return String.format("%.2f", this.progress * 100);
}

private void drawProgressBar(PoseStack poseStack, float x0, float y0, float x1, float y1) {
Matrix4f pose = poseStack.last().pose();
Tesselator tesselator = Tesselator.getInstance();
BufferBuilder builder = tesselator.begin(
VertexFormat.Mode.QUADS,
DefaultVertexFormat.POSITION_COLOR
);

float barX0 = x0 + 2;
float barY0 = y0 + 2;
float barX1 = x0 + (x1 - x0) * progress;
float barY1 = y1 - 2;

int progressBarColor = colorFromRatio(progress, true);

builder.addVertex(pose, x0, y0, 0.1f)
.setColor(0xffffffff);
builder.addVertex(pose, x0, y1, 0.1f)
.setColor(0xffffffff);
builder.addVertex(pose, x1, y1, 0.1f)
.setColor(0xffffffff);
builder.addVertex(pose, x1, y0, 0.1f)
.setColor(0xffffffff);

builder.addVertex(pose, barX0, barY0, 0.1f)
.setColor(progressBarColor);
builder.addVertex(pose, barX0, barY1, 0.1f)
.setColor(progressBarColor);
builder.addVertex(pose, barX1, barY1, 0.1f)
.setColor(progressBarColor);
builder.addVertex(pose, barX1, barY0, 0.1f)
.setColor(progressBarColor);

MeshData data = builder.build();
if (data == null) return;
RenderSystem.disableDepthTest();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
BufferUploader.drawWithShader(data);
}

private static int colorFromRatio(double ratio, boolean oneIsGreen) {
double p = ratio;

if (!oneIsGreen) {
p = 1 - p;
}

int r = (int) (255d * (Math.max(0, Math.min(2 - 2 * p, 1))));
int g = (int) (255d * (Math.max(0, Math.min(2 * p, 1))));

return 0xFF000000 + (r << 16) + (g << 8);
}

@Override
public void renderBackground(GuiGraphics guiGraphics, int i, int j, float f) {
this.renderPanorama(guiGraphics, f);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ public void run() {

restoreFuture = CompletableFuture.runAsync(() -> {
screen.setState(Translate.tr("quickbackupmulti.restoring_backup.state.make_temp_backup"));
screen.setProgress(0.05f);
BackupManager.makeTempBackup();
screen.setProgress("5%");

screen.setState(Translate.tr("quickbackupmulti.restoring_backup.state.delete_origin_save"));
screen.setProgress(0.1f);
deleteWorld();
screen.setProgress("10%");

if (isCancelled.get()) {
handleCancellation();
Expand All @@ -46,8 +46,7 @@ public void run() {

BackupManager.RestoreExtraRunnable extraRunnable = (totalProgress, currentProgress) -> {
screen.setState(Translate.tr("quickbackupmulti.restoring_backup.state.restoring_backup"));
int progress = (int) ((currentProgress / (double) totalProgress) * 0.9 * 100);
screen.setProgress(progress + "%");
screen.setProgress((float) currentProgress / totalProgress * 0.9f);
};
BackupManager.restoreBackup(QuickbakcupmultiReforged.getModContainer().getCurrentSelectionBackup(), extraRunnable);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"quickbackupmulti.restoring_backup.state.restore_temp_backup": "Restoring save from before backup execution...",
"quickbackupmulti.restoring_backup.state.cancel": "Cancelling restore backup...",
"quickbackupmulti.screen.restore_screen.title": "Restore Visualization Screen",
"quickbackupmulti.screen.restore_screen.progress": "Progress: ",
"quickbackupmulti.screen.restore_screen.waiting_for_server": "Waiting for server",
"quickbackupmulti.screen.restore_screen.progress": "Progress: %s",
"quickbackupmulti.screen.restore_screen.cancel_button": "Cancel"
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"quickbackupmulti.restoring_backup.state.restore_temp_backup": "正在还原执行备份前的存档...",
"quickbackupmulti.restoring_backup.state.cancel": "正在取消还原备份...",
"quickbackupmulti.screen.restore_screen.title": "回档可视化页面",
"quickbackupmulti.screen.restore_screen.progress": "进度: ",
"quickbackupmulti.screen.restore_screen.waiting_for_server": "等待服务器关闭",
"quickbackupmulti.screen.restore_screen.progress": "进度: %s",
"quickbackupmulti.screen.restore_screen.cancel_button": "取消"
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@
import io.github.skydynamic.quickbakcupmulti.ModContainer;
import io.github.skydynamic.quickbakcupmulti.QuickbakcupmultiReforged;
import lombok.Getter;
import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;

public final class QuickbakcupmultiReforgedFabric implements ModInitializer {
public final class QuickbackupmultiReforgedFabric implements ModInitializer {
@Getter
private static final ModContainer modContainer = new ModContainer();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.skydynamic.quickbakcupmulti.fabric.events;

import io.github.skydynamic.quickbakcupmulti.fabric.QuickbakcupmultiReforgedFabric;
import io.github.skydynamic.quickbakcupmulti.fabric.QuickbackupmultiReforgedFabric;
import io.github.skydynamic.quickbakcupmulti.QuickbakcupmultiReforged;
import io.github.skydynamic.quickbakcupmulti.ServerManager;
import io.github.skydynamic.quickbakcupmulti.event.OnServerStoppedHandler;
Expand All @@ -13,7 +13,7 @@ public static void register() {
ServerLifecycleEvents.SERVER_STARTED.register(FabricEvents::onServerStarted);
CommandRegistrationCallback.EVENT.register(
(commandDispatcher, registryAccess, environment) -> {
QuickbakcupmultiReforgedFabric.getModContainer().setDispatcher(commandDispatcher);
QuickbackupmultiReforgedFabric.getModContainer().setDispatcher(commandDispatcher);
QuickbakcupmultiReforged.registerCommand();
}
);
Expand Down
2 changes: 1 addition & 1 deletion fabric/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"environment": "*",
"entrypoints": {
"main": [
"io.github.skydynamic.quickbakcupmulti.fabric.QuickbakcupmultiReforgedFabric"
"io.github.skydynamic.quickbakcupmulti.fabric.QuickbackupmultiReforgedFabric"
],
"client": [
"io.github.skydynamic.quickbakcupmulti.fabric.client.QuickbakcupmultiReforgedFabricClient"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,18 @@
import io.github.skydynamic.quickbakcupmulti.QuickbakcupmultiReforged;
import lombok.Getter;
import lombok.Setter;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.fml.loading.FMLPaths;

@Mod(value = QuickbakcupmultiReforged.MOD_ID)
public final class QuickbakcupmultiReforgedNeoForge {
public final class QuickbackupmultiReforgedNeoForge {
@Getter
private static final ModContainer modContainer = new ModContainer();
@Setter @Getter
private static String[] boostArgs = null;

public QuickbakcupmultiReforgedNeoForge() {
public QuickbackupmultiReforgedNeoForge() {
modContainer.setConfigPath(FMLPaths.CONFIGDIR.get());
modContainer.setEnvType(FMLLoader.getDist().isClient() ? ModEnvType.CLIENT : ModEnvType.SERVER);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.github.skydynamic.quickbakcupmulti.neoforge.events;

import io.github.skydynamic.quickbakcupmulti.config.ModConfig;
import io.github.skydynamic.quickbakcupmulti.neoforge.QuickbakcupmultiReforgedNeoForge;
import io.github.skydynamic.quickbakcupmulti.neoforge.QuickbackupmultiReforgedNeoForge;
import io.github.skydynamic.quickbakcupmulti.QuickbakcupmultiReforged;
import io.github.skydynamic.quickbakcupmulti.event.OnServerStoppedHandler;
import io.github.skydynamic.quickbakcupmulti.neoforge.ServerManagerNeoforge;
Expand All @@ -18,7 +18,7 @@
public class NeoForgeEvents {
@SubscribeEvent
public static void onRegisterCommands(RegisterCommandsEvent event) {
QuickbakcupmultiReforgedNeoForge.getModContainer().setDispatcher(event.getDispatcher());
QuickbackupmultiReforgedNeoForge.getModContainer().setDispatcher(event.getDispatcher());
QuickbakcupmultiReforged.registerCommand();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.skydynamic.quickbakcupmulti.neoforge.mixin;

import io.github.skydynamic.quickbakcupmulti.neoforge.QuickbakcupmultiReforgedNeoForge;
import io.github.skydynamic.quickbakcupmulti.neoforge.QuickbackupmultiReforgedNeoForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
Expand All @@ -13,6 +13,6 @@ public class MixinNeoforgeServerMain {
at = @At("HEAD")
)
private static void injectServerMain(String[] strings, CallbackInfo ci) {
QuickbakcupmultiReforgedNeoForge.setBoostArgs(strings);
QuickbackupmultiReforgedNeoForge.setBoostArgs(strings);
}
}