Skrip wiwitan server Minecraft sing sampurna

Skrip wiwitan server Minecraft sing sampurna

Penulis seneng banget karo game kasebut, lan dheweke dhewe minangka administrator server cilik "murni kanggo kanca." Minangka biasanipun antarane amatir, kabeh ing server wis modded, lan iki entails kahanan kang ora tetep lan, minangka asil, tubrukan. Amarga penulis Powershell luwih ngerti tinimbang lokasi toko ing dalane, dheweke mutusake nggawe "Skrip paling apik kanggo mbukak Minecraft 2020" Skrip sing padha dadi basis kanggo cithakan ing Pasar Ruvds. Nanging kabeh sumber wis ana ing artikel kasebut. Saiki, ing urutan, carane iku kabeh rampung.

Prentah sing kita butuhake

logging alternatif

Sawijining dina, sawise nginstal sawetara mod liyane, aku nemokake manawa server kasebut nabrak tanpa ngumumake perang. Server ora nulis kesalahan ing latest.log utawa ing debug, lan console, sing miturut teori kudu nulis kesalahan iki lan mandheg, ditutup.

Yen dheweke ora pengin nulis, dheweke ora perlu. Kita duwe Powershell karo cmdlet Tee-Obyek, sing njupuk obyek lan output menyang file lan console ing wektu sing padha.

.handler.ps1 | Tee-Object .StandardOutput.txt -Append

Kanthi cara iki Powershell bakal njupuk StandardOutput lan nulis menyang file. Aja nyoba nggunakake Miwiti-Prosesamarga bakal bali System.ComponentModel.Component lan ora StandardOutput, lan -RedirectStandardOutput ora bisa mlebu menyang console, kang kita arep supaya.

Bukak argumen

Sawise nginstal pasangan mod sing padha, penulis ngerteni manawa server uga ora duwe cukup RAM. Lan iki mbutuhake ngganti argumen peluncuran. Tinimbang ngganti saben wektu ing start.bat, sing saben wong nggunakake, mung nggunakake script iki.

Wiwit Tee-Object mung maca StandardOutput nalika eksekusi kasebut diarani "Just Like This", sampeyan kudu nggawe skrip liyane. Skrip iki bakal diluncurake dening Minecraft dhewe. Ayo dadi miwiti karo bantahan.

Kanggo nyenengi kesed pungkasan ing mangsa ngarep, naskah kudu ngumpulake argumen peluncuran kanthi cepet. Kanggo nindakake iki, ayo miwiti kanthi nggoleki versi paling anyar forge.

$forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -last 1

Nggunakake Urut-obyek, kita bakal tansah njupuk obyek karo nomer paling gedhe, ora ketompo carane akeh sing sijine ana. Kesed pungkasan.

Saiki sampeyan kudu nemtokake memori menyang server. Kanggo nindakake iki, njupuk jumlah memori sistem lan nulis jumlah ing senar.

$ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
$xmx = "-Xms" + $ram + "G"

Wiwiti maneh otomatis kanthi bener

Penulis wis katon file .bat saka wong liya, nanging padha ora njupuk menyang akun alesan ngapa server iki mandegake. Iki ora trep, apa yen sampeyan mung kudu ngganti file mod utawa mbusak soko?
Saiki ayo miwiti maneh kanthi bener. Penulis sadurunge nemokake skrip aneh sing miwiti maneh server preduli saka ngapa server mati. Kita bakal nggunakake kode metu. Jawa nggunakake 0 minangka sukses, mula kita bakal nari saka kene.

Pisanan, ayo nggawe fungsi sing bakal miwiti maneh server yen gagal.

function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Write-Log
            Restart-Minecraft
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}

Skrip bakal tetep ing daur ulang nganti server mati normal saka console dhewe nggunakake printah / stop.

Yen kita mutusake kanggo ngotomatisasi kabeh, mula luwih becik ngumpulake tanggal wiwitan, tanggal rampung, lan uga alasan kanggo rampung.

Kanggo nindakake iki, kita nulis asil Start-Process menyang variabel. Ing skrip katon kaya iki:

$global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru

Banjur kita nulis asil menyang file. Iki sing bali menyang kita ing variabel:

$global:Process.StartTime
$global:Process.ExitCode	
$global:Process.ExitTime

Kabeh iki bisa ditambahake menyang file nggunakake Add-Content. Duwe combed iku sethitik, kita njaluk script iki, lan ayo kang nelpon handler.ps1.

Add-Content -Value "Start time:" -Path $Logfile 
$global:Process.StartTime
 
Add-Content -Value "Exit code:" -Path $Logfile 
$global:Process.ExitCode | Add-Content $Logfile
    
Add-Content -Value "Exit time:" -Path $Logfile 
$global:Process.ExitTime | Add-Content $Logfile

Saiki ayo nggawe skrip sing mbukak handler.

wiwitan sing bener

Penulis pengin mbukak macem-macem versi Minecraft saka dalan apa wae ing siji modul, lan uga bisa nyimpen log ing folder tartamtu.

Masalahe yaiku proses kasebut kudu diwiwiti dening pangguna sing mlebu menyang sistem. Iki bisa ditindakake liwat desktop utawa WinRm. Yen sampeyan mbukak server minangka pangguna sistem utawa malah administrator, nanging ora mlebu, banjur Server.jar malah ora bisa maca eula.txt lan miwiti.

Kita bisa ngaktifake login otomatis kanthi nambahake telung entri menyang pendaptaran.

New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password  -ErrorAction SilentlyContinue
New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1 -ErrorAction SilentlyContinue

Iku ora aman. Login lan sandhi dituduhake ing plaintext, supaya kanggo miwiti server sampeyan kudu nggawe pangguna kapisah sing nduweni akses ing tingkat pangguna, utawa ing grup sing luwih sempit. Ora dianjurake kanggo nggunakake administrator standar kanggo iki.

We diurutake metu otomatis mlebu. Saiki sampeyan kudu ndhaptar tugas anyar kanggo server. Kita bakal mbukak printah saka Powershell, supaya katon kaya iki:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

Ngrakit modul

Saiki ayo sijine kabeh menyang modul sing bisa digunakake mengko. Kabeh kode kanggo script siap-digawe kene, ngimpor lan nggunakake.

Sampeyan bisa nggunakake kabeh sing kasebut ing ndhuwur kanthi kapisah yen sampeyan ora pengin ngganggu modul.

Miwiti-Minecraft

Pisanan, ayo nggawe modul sing ora nindakake apa-apa tinimbang mbukak skrip sing bakal ngrungokake lan ngrekam output standar.

Ing blok paramèter, dheweke takon saka folder endi sing bakal diluncurake Minecraft lan ing endi kanggo nyelehake log kasebut.

Set-Location (Split-Path $MyInvocation.MyCommand.Path)
function Start-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]
        $Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $MinecraftPath
 
    )
    powershell.exe -file .handler.ps1 -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append
}
Export-ModuleMember -Function Start-Minecraft

Lan sampeyan kudu miwiti Minecraft kaya iki:

Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"

Saiki ayo pindhah menyang Handler.ps1 sing siap digunakake

Supaya skrip bisa nampa paramèter nalika diarani, kita uga kudu nemtokake blok parameter. Wigati dimangerteni, iki nganggo Oracle Java, yen sampeyan nggunakake distribusi sing beda, sampeyan kudu ngganti path menyang file sing bisa dieksekusi.

param (
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$type,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$MinecraftPath,
 
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$StandardOutput
)
 
Set-Location $MinecraftPath
 
function Restart-Minecraft {
 
    Write-host "=============== Starting godlike game server ============"
 
    $forge = ((Get-ChildItem | Where-Object Name -Like "forge*").Name | Sort-Object -Descending) | Select-Object -first 1
 
    $ram = ((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb)
    $xmx = "-Xms" + $ram + "G"
    $global:Process = Start-Process -FilePath  "C:Program Files (x86)common filesOracleJavajavapath_target_*java.exe" -ArgumentList "$xmx -server -jar $forge nogui" -Wait -NoNewWindow -PassThru
    
}
 
function Write-Log {
    Write-host "Start time:" $global:Process.StartTime
 
    Write-host "Exit code:" $global:Process.ExitCode
    
    Write-host "Exit time:" $global:Process.ExitTime
 
    Write-host "=============== Stopped godlike game server ============="
}
 
function Get-MinecraftExitCode {
   
    do {
        
        if ($global:Process.ExitCode -ne 0) {
            Restart-Minecraft
            Write-Log
        }
        else {
            Write-Log
        }
 
    } until ($global:Process.ExitCode -eq 0)
    
}
 
Get-MinecraftExitCode

Register-Minecraft

Skrip kasebut meh padha karo Start-Minecraft, kajaba mung ndhaptar tugas anyar. Nampa argumen sing padha. Jeneng pangguna, yen ora ditemtokake, njupuk jeneng sing saiki.

function Register-Minecraft {
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]
        $LogFile,
 
        [Parameter(Mandatory)]  
        [ValidateSet('Vanilla', 'Forge')]
        [ValidateNotNullOrEmpty()]
        [string]$Type,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$MinecraftPath,
 
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$User,
 
        [Parameter(Mandatory)]
        [string]$TaskName = $env:USERNAME
    )
 
    $Trigger = New-ScheduledTaskTrigger -AtLogOn
    $arguments = "Start-Minecraft -Type $Type -LogFile $LogFile -MinecraftPath $MinecraftPath"
    $PS = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-noexit -command $arguments"
    Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $PS -RunLevel Highest
    
}
 
Export-ModuleMember -Function Register-Minecraft

Register-Autologon

Ing blok paramèter, skrip nampa paramèter Jeneng Pangguna lan Sandi. Yen Jeneng pangguna ora ditemtokake, jeneng pangguna saiki digunakake.

function Set-Autologon {
 
    param (
        [Parameter(
        HelpMessage="Username for autologon")]
        $Username = $env:USERNAME,
 
        [Parameter(Mandatory=$true,
        HelpMessage="User password")]
        [ValidateNotNullOrEmpty()]
        $Password
    )
 
    $i = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
 
    if ($null -eq $i) {
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password 
        New-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
        Write-Verbose "Set-Autologon will enable user auto logon."
 
    }
    else {
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultUserName -Value $Username
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name DefaultPassword -Value $Password
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" -Name AutoAdminLogon -Value 1
    }
 
    
    Write-Verbose "Autologon was set successfully."
 
}

Nglakokake skrip iki katon kaya iki:

Set-Autologon -Password "PlaintextPassword"

Cara nggunakake

Saiki ayo dideleng carane penulis dhewe nggunakake kabeh iki. Cara masang server Minecraft umum ing Windows kanthi bener. Ayo diwiwiti saka wiwitan.

1. Nggawe pangguna

$pass = Get-Credential
New-LocalUser -Name "MinecraftServer" -Password $pass.Password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword

2. Register tugas kanggo mbukak script

Sampeyan bisa ndhaptar nggunakake modul kaya iki:

Register-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft" -User "MInecraftServer" -TaskName "MinecraftStarter"

Utawa gunakake alat standar:

$Trigger = New-ScheduledTaskTrigger -AtLogOn
$User = "ServerAdmin"
$PS = New-ScheduledTaskAction -Execute 'PowerShell.exe" -Argument "Start-Minecraft -Type Forge -LogFile "C:minecraftstdout.txt" -MinecraftPath "C:minecraft"'
Register-ScheduledTask -TaskName "StartSSMS" -Trigger $Trigger -User $User -Action $PS -RunLevel Highest

3. Aktifake otomatis mlebu lan urip maneh mesin

Set-Autologon -Username "MinecraftServer" -Password "Qw3"

Rampung

Penulis nggawe naskah, kalebu kanggo awake dhewe, mula dheweke bakal seneng ngrungokake saran sampeyan kanggo nambah naskah. Penulis ngarep-arep supaya kabeh kode iki paling sethithik migunani kanggo sampeyan, lan artikel kasebut menarik.

Skrip wiwitan server Minecraft sing sampurna

Source: www.habr.com

Add a comment