mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-09-13 18:59:25 +00:00
🐛 fix: align dashboard with secured APIs
This commit is contained in:
@@ -23,7 +23,11 @@ export function AdvancedPanel({
|
||||
return (
|
||||
<TabsContent value="advanced" className="space-y-4 mt-4">
|
||||
<div className="grid grid-cols-3 gap-4">
|
||||
<Field id="timezone" label="Timezone" tooltip="Timezone for server logs and scheduling (e.g., America/New_York)">
|
||||
<Field
|
||||
id="timezone"
|
||||
label="Timezone"
|
||||
tooltip="Timezone for server logs and scheduling (e.g., America/New_York)"
|
||||
>
|
||||
<Input
|
||||
id="timezone"
|
||||
value={formData.timezone}
|
||||
|
||||
@@ -11,7 +11,11 @@ export function ModsPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
{formData.type === "CUSTOM" && (
|
||||
<FormNotice>Mods/plugins automation is intended for Vanilla/Paper workflows.</FormNotice>
|
||||
)}
|
||||
<Field id="plugins" label="Plugins" tooltip="Comma-separated list of plugin URLs or filenames">
|
||||
<Field
|
||||
id="plugins"
|
||||
label="Plugins"
|
||||
tooltip="Comma-separated list of plugin URLs or filenames"
|
||||
>
|
||||
<Textarea
|
||||
id="plugins"
|
||||
value={formData.plugins || ""}
|
||||
|
||||
@@ -30,12 +30,18 @@ export function NetworkPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
max="65535"
|
||||
/>
|
||||
</Field>
|
||||
<Field id="serviceType" label="Service Type" tooltip="How the server is exposed in Kubernetes">
|
||||
<Field
|
||||
id="serviceType"
|
||||
label="Service Type"
|
||||
tooltip="How the server is exposed in Kubernetes"
|
||||
>
|
||||
<Select
|
||||
value={formData.serviceType}
|
||||
onValueChange={(value) => updateField("serviceType", value as ServiceType)}
|
||||
>
|
||||
<SelectTrigger id="serviceType"><SelectValue /></SelectTrigger>
|
||||
<SelectTrigger id="serviceType">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="CLUSTER_IP">ClusterIP (Internal Only)</SelectItem>
|
||||
<SelectItem value="NODE_PORT">NodePort (External Access)</SelectItem>
|
||||
|
||||
@@ -51,7 +51,11 @@ export function PerformancePanel({ formData, updateField }: ServerFormPanelProps
|
||||
rows={3}
|
||||
/>
|
||||
</Field>
|
||||
<Field id="jvmXxOpts" label="JVM -XX Options" tooltip="Space-separated -XX JVM flags for advanced tuning">
|
||||
<Field
|
||||
id="jvmXxOpts"
|
||||
label="JVM -XX Options"
|
||||
tooltip="Space-separated -XX JVM flags for advanced tuning"
|
||||
>
|
||||
<Textarea
|
||||
id="jvmXxOpts"
|
||||
value={formData.jvmXxOpts || ""}
|
||||
@@ -60,7 +64,11 @@ export function PerformancePanel({ formData, updateField }: ServerFormPanelProps
|
||||
rows={2}
|
||||
/>
|
||||
</Field>
|
||||
<Field id="jvmDdOpts" label="JVM -D System Properties" tooltip="Comma-separated key=value pairs for system properties">
|
||||
<Field
|
||||
id="jvmDdOpts"
|
||||
label="JVM -D System Properties"
|
||||
tooltip="Comma-separated key=value pairs for system properties"
|
||||
>
|
||||
<Textarea
|
||||
id="jvmDdOpts"
|
||||
value={formData.jvmDdOpts || ""}
|
||||
|
||||
@@ -10,7 +10,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
|
||||
{formData.type === "CUSTOM" && (
|
||||
<FormNotice>Resource pack settings may not apply to custom jars.</FormNotice>
|
||||
)}
|
||||
<Field id="resourcePack" label="Resource Pack URL" tooltip="URL or path to a resource pack ZIP file">
|
||||
<Field
|
||||
id="resourcePack"
|
||||
label="Resource Pack URL"
|
||||
tooltip="URL or path to a resource pack ZIP file"
|
||||
>
|
||||
<Input
|
||||
id="resourcePack"
|
||||
value={formData.resourcePack || ""}
|
||||
@@ -18,7 +22,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
|
||||
placeholder="https://example.com/resourcepack.zip"
|
||||
/>
|
||||
</Field>
|
||||
<Field id="resourcePackSha1" label="Resource Pack SHA1" tooltip="SHA1 checksum of the resource pack for verification">
|
||||
<Field
|
||||
id="resourcePackSha1"
|
||||
label="Resource Pack SHA1"
|
||||
tooltip="SHA1 checksum of the resource pack for verification"
|
||||
>
|
||||
<Input
|
||||
id="resourcePackSha1"
|
||||
value={formData.resourcePackSha1 || ""}
|
||||
@@ -34,7 +42,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
|
||||
>
|
||||
Enforce Resource Pack
|
||||
</CheckboxField>
|
||||
<Field id="serverIcon" label="Server Icon URL" tooltip="URL or path to a server icon image (PNG, 64x64 recommended)">
|
||||
<Field
|
||||
id="serverIcon"
|
||||
label="Server Icon URL"
|
||||
tooltip="URL or path to a server icon image (PNG, 64x64 recommended)"
|
||||
>
|
||||
<Input
|
||||
id="serverIcon"
|
||||
value={formData.serverIcon || ""}
|
||||
|
||||
@@ -106,8 +106,13 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<Field id="mode" label="Game Mode">
|
||||
<Select value={formData.mode} onValueChange={(value) => updateField("mode", toMode(value))}>
|
||||
<SelectTrigger id="mode"><SelectValue /></SelectTrigger>
|
||||
<Select
|
||||
value={formData.mode}
|
||||
onValueChange={(value) => updateField("mode", toMode(value))}
|
||||
>
|
||||
<SelectTrigger id="mode">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="survival">Survival</SelectItem>
|
||||
<SelectItem value="creative">Creative</SelectItem>
|
||||
@@ -121,7 +126,9 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
value={formData.difficulty}
|
||||
onValueChange={(value) => updateField("difficulty", toDifficulty(value))}
|
||||
>
|
||||
<SelectTrigger id="difficulty"><SelectValue /></SelectTrigger>
|
||||
<SelectTrigger id="difficulty">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="peaceful">Peaceful</SelectItem>
|
||||
<SelectItem value="easy">Easy</SelectItem>
|
||||
@@ -156,19 +163,39 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
<CheckboxField id="pvp" checked={formData.pvp} onCheckedChange={(value) => updateField("pvp", value)}>
|
||||
<CheckboxField
|
||||
id="pvp"
|
||||
checked={formData.pvp}
|
||||
onCheckedChange={(value) => updateField("pvp", value)}
|
||||
>
|
||||
Enable PvP (Player vs Player)
|
||||
</CheckboxField>
|
||||
<CheckboxField id="onlineMode" checked={formData.onlineMode} onCheckedChange={(value) => updateField("onlineMode", value)}>
|
||||
<CheckboxField
|
||||
id="onlineMode"
|
||||
checked={formData.onlineMode}
|
||||
onCheckedChange={(value) => updateField("onlineMode", value)}
|
||||
>
|
||||
Online Mode (Requires authenticated Minecraft accounts)
|
||||
</CheckboxField>
|
||||
<CheckboxField id="allowFlight" checked={formData.allowFlight} onCheckedChange={(value) => updateField("allowFlight", value)}>
|
||||
<CheckboxField
|
||||
id="allowFlight"
|
||||
checked={formData.allowFlight}
|
||||
onCheckedChange={(value) => updateField("allowFlight", value)}
|
||||
>
|
||||
Allow Flight
|
||||
</CheckboxField>
|
||||
<CheckboxField id="enableCommandBlock" checked={formData.enableCommandBlock} onCheckedChange={(value) => updateField("enableCommandBlock", value)}>
|
||||
<CheckboxField
|
||||
id="enableCommandBlock"
|
||||
checked={formData.enableCommandBlock}
|
||||
onCheckedChange={(value) => updateField("enableCommandBlock", value)}
|
||||
>
|
||||
Enable Command Blocks
|
||||
</CheckboxField>
|
||||
<CheckboxField id="hardcore" checked={formData.hardcore} onCheckedChange={(value) => updateField("hardcore", value)}>
|
||||
<CheckboxField
|
||||
id="hardcore"
|
||||
checked={formData.hardcore}
|
||||
onCheckedChange={(value) => updateField("hardcore", value)}
|
||||
>
|
||||
Hardcore Mode (Permanent Death)
|
||||
</CheckboxField>
|
||||
</div>
|
||||
|
||||
@@ -92,7 +92,7 @@ export interface ServerFormData {
|
||||
|
||||
export type UpdateServerField = <K extends keyof ServerFormData>(
|
||||
key: K,
|
||||
value: ServerFormData[K],
|
||||
value: ServerFormData[K]
|
||||
) => void;
|
||||
|
||||
export interface ServerFormPanelProps {
|
||||
|
||||
@@ -45,7 +45,9 @@ export function WorldPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
value={formData.levelType || "default"}
|
||||
onValueChange={(value) => updateField("levelType", value === "default" ? "" : value)}
|
||||
>
|
||||
<SelectTrigger id="levelType"><SelectValue placeholder="Default" /></SelectTrigger>
|
||||
<SelectTrigger id="levelType">
|
||||
<SelectValue placeholder="Default" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="default">Default</SelectItem>
|
||||
<SelectItem value="flat">Flat/Superflat</SelectItem>
|
||||
@@ -98,13 +100,25 @@ export function WorldPanel({ formData, updateField }: ServerFormPanelProps) {
|
||||
</Field>
|
||||
</div>
|
||||
<div className="space-y-3">
|
||||
<CheckboxField id="spawnAnimals" checked={formData.spawnAnimals} onCheckedChange={(value) => updateField("spawnAnimals", value)}>
|
||||
<CheckboxField
|
||||
id="spawnAnimals"
|
||||
checked={formData.spawnAnimals}
|
||||
onCheckedChange={(value) => updateField("spawnAnimals", value)}
|
||||
>
|
||||
Spawn Animals
|
||||
</CheckboxField>
|
||||
<CheckboxField id="spawnMonsters" checked={formData.spawnMonsters} onCheckedChange={(value) => updateField("spawnMonsters", value)}>
|
||||
<CheckboxField
|
||||
id="spawnMonsters"
|
||||
checked={formData.spawnMonsters}
|
||||
onCheckedChange={(value) => updateField("spawnMonsters", value)}
|
||||
>
|
||||
Spawn Monsters
|
||||
</CheckboxField>
|
||||
<CheckboxField id="spawnNpcs" checked={formData.spawnNpcs} onCheckedChange={(value) => updateField("spawnNpcs", value)}>
|
||||
<CheckboxField
|
||||
id="spawnNpcs"
|
||||
checked={formData.spawnNpcs}
|
||||
onCheckedChange={(value) => updateField("spawnNpcs", value)}
|
||||
>
|
||||
Spawn NPCs (Villagers)
|
||||
</CheckboxField>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user