Qoraalka bilowga server-ka ugu habboon ee Minecraft

Qoraalka bilowga server-ka ugu habboon ee Minecraft

Qoraagu aad buu u jecel yahay ciyaarta, isaga laftiisuna waa maamulaha server yar "oo saaxiibbo u gaar ah." Sida caadiga ah ee ka mid ah hiwaayadda, wax kasta oo ku jira server-ka waa la bedelay, tani waxay keenaysaa xasillooni darro iyo, natiijada, shilalka. Maaddaama qoraaga Powershell uu ka yaqaanno si ka wanaagsan goobta dukaamada ku yaal jidkiisa, wuxuu go'aansaday inuu sameeyo "Qoraalka ugu Wanaagsan ee lagu Daah-furayo Minecraft 2020" Qoraal la mid ah ayaa u adeegay aasaaska qaab-dhismeedka gudaha Ruvds suuqa. Laakiin dhammaan ilaha ayaa horeyba ugu jira maqaalka. Hadda, siday u kala horreeyaan, sida loo dhammeeyey.

Awaamiirta aan u baahanahay

Goynta beddelka ah

Maalin maalmaha ka mid ah, ka dib markii aan rakibay dhowr mods oo dheeraad ah, waxaan ogaaday in server-ka, sida muuqata, uu burburay isaga oo aan ku dhawaaqin dagaal. Seerfarku khalad kuma qorin latest.log ama debug, iyo console-ka, kaas oo aragti ahaan ay ahayd in uu khaladkan qoro oo uu joojiyo, waa la xidhay.

Haddii uusan rabin inuu qoro, uma baahna. Waxaan leenahay Powershell oo leh cmdlet Tee-Wax, kaas oo qaada shay oo u soo saaraya faylka iyo console-ka isku mar.

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

Sidan, Powershell waxay soo qaadan doontaa StandardOutput oo u qori doonta fayl. Ha isku dayin inaad isticmaasho Habka Bilawgasababtoo ah waxay soo celin doontaa System.ComponentModel.Component halkii ay ka ahaan lahayd StandardOutput, iyo -RedirectStandardOutput waxay ka dhigaysaa mid aan macquul ahayn in la galo console-ka, taas oo ah waxa aan rabno inaan iska ilaalino.

Bilaw doodaha

Ka dib markii la rakibay isla labada nooc ee mods, qoraagu wuxuu ogaaday in server-ku aanu sidoo kale haysan RAM ku filan. Tanina waxay u baahan tahay in la beddelo doodaha bilawga ah. Halkii aad ka beddeli lahayd mar kasta start.bat, oo qof kastaa isticmaalo, kaliya isticmaal qoraalkan.

Maadaama Tee-Object kaliya akhriyo StandardOutput marka la fulin karo loo yaqaan "Just Like This", waa inaad samaysaa qoraal kale. Qoraalkan waxaa bilaabi doona Minecraft lafteeda. Aan ku bilowno doodaha.

Si loo galo caajisnimada kama dambaysta ah ee mustaqbalka, qoraalku waa inuu ururiyaa doodaha bilawga ah ee duulista. Si tan loo sameeyo, aan ku bilowno raadinta nuqulkii ugu dambeeyay Gadaal.

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

Adigoo adeegsanayna shayga kala-soocidda, waxaan had iyo jeer qaadan doonnaa shayga lambarka ugu weyn, iyadoon loo eegayn inta aad dhigto. caajisnimada ugu dambeysa.

Hadda waxaad u baahan tahay inaad ku meelayso xusuusta server-ka. Si tan loo sameeyo, qaado qaddarka xusuusta nidaamka oo ku qor qaddarkeeda xadhig.

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

Si toos ah dib u bilaabo

Qoraagu wuxuu arkay .faylalka fiidka ee dad kale, laakiin ma aysan xisaabtamin sababta loo joojiyay server-ka. Tani waa dhib, ka waran haddii aad u baahan tahay oo kaliya inaad bedesho faylka mod ama wax tirtirto?
Hadda aan sameyno dib u bilow habboon. Qoraagu waxa uu hore ula kulmay qoraallo yaab leh oo dib u bilaabay seerfarka iyada oo aan loo eegin sababta uu seerfarku u xidhay. Waxaan isticmaali doonaa exitcode. Java waxay u isticmaashaa 0 guul ahaan, markaa halkan ayaan ka dheeli doonaa.

Marka hore, aan abuurno shaqo dib u bilaabi doonta server-ka haddii uu ku guuldareysto.

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

Qoraalku wuxuu ku sii jirayaa wareegga ilaa uu seerfarku si caadi ah uga xidhmo konsole-kiisa iyadoo la isticmaalayo amarka/joojinta.

Haddii aan go'aansanno in aan wax walba si otomaatig ah u samayno, markaa way fiicnaan lahayd in la ururiyo taariikhda bilawga, taariikhda dhamaystirka, iyo sidoo kale sababta dhamaystirka.

Si tan loo sameeyo, waxaan u qornaa natiijada habka-Bilow doorsoome. Qoraalku wuxuu u eg yahay sidan:

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

Kadibna natiijada waxaan ku qornaa fayl. Kani waa waxa nagu soo noqday doorsoomayaasha:

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

Waxaas oo dhan waxaa lagu dari karaa fayl iyadoo la isticmaalayo Add-Content. Inaga oo inyar u shanlaynay, waxa aanu helnaa qoraalkan, oo aynu ugu yeedhno 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

Hadda aynu abuurno qoraal bilaabaya maamulaha.

Bilawga saxda ah

Qoraagu wuxuu rabaa in uu ku socodsiiyo noocyo kala duwan oo Minecraft ah waddo kasta oo ku taal hal cutub, iyo sidoo kale in uu awood u yeesho in uu ku kaydiyo diiwaannada gal gaar ah.

Dhibaatadu waxay tahay in habka waa in uu bilaabo isticmaalaha soo galay nidaamka. Tan waxaa lagu samayn karaa desktop-ka ama WinRm. Haddii aad u maamusho server-ka sidii nidaam isticmaale ama xitaa maamule, laakiin aadan soo galin, markaa Server.jar xitaa ma awoodi doono inuu akhriyo eula.txt oo bilaabo.

Waxaan awood u siin karnaa galitaanka tooska ah annagoo ku darayna saddex gelis diiwaanka.

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

Ma aha ammaan. Gelitaanka iyo erayga sirta ah ayaa halkan lagu muujiyey qoraal cad, markaa si aad u bilowdo server-ka waxaad u baahan tahay inaad abuurto isticmaale gooni ah oo geli kara heerka isticmaale, ama koox xitaa ka sii yar. Si adag looguma talinayo in loo isticmaalo maamulaha caadiga ah tan.

Waxaan habaynnay soo gelista otomaatiga ah. Hadda waxaad u baahan tahay inaad hawl cusub u diiwaan geliso server-ka. Waxaan ka maamuli doonaa amarka Powershell, marka waxay u ekaan doontaa sidan:

$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

Isku-dubarid moduleka

Hadda aan wax walba gelinno modules la isticmaali karo hadhow. Dhammaan koodka qoraallada diyaarsan waa halkan, soo deji oo isticmaal.

Waxaad si gaar ah u isticmaali kartaa wax kasta oo kor lagu sharaxay haddii aadan rabin inaad ku dhibto modules.

Start-Maynkraft

Marka hore, aynu abuurno module ah oo aan samayn doonin wax ka badan samaynta qoraal dhegaysan doona oo duubi doona heerka wax soo saarka.

Xakamaynta xuduudaha, wuxuu waydiinayaa galka laga bilaabayo Minecraft iyo meesha lagu dhejiyo log.

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

Oo waxaad u baahan doontaa inaad bilowdo Minecraft sidan oo kale:

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

Hadda aan u gudubno Handler-ka diyaar u ah in la isticmaalo.ps1

Si qoraalkayagu u aqbalo cabbirrada marka la wacayo, waxaan sidoo kale u baahannahay inaan qeexno xannibaad xaddidan. Fadlan ogow, waxay ku shaqeysaa Oracle Java, haddii aad isticmaaleyso qeybin ka duwan waxaad u baahan doontaa inaad bedesho jidka faylka la fulin karo.

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

Diiwaangeli-Maynkraft

Qoraalku wuxuu la mid yahay Start-Minecraft, marka laga reebo inay diiwaangeliso hawl cusub oo keliya. Aqbala doodaha isku midka ah. Magaca isticmaalaha, haddii aan la cayimin, waxa uu qaadanayaa kan hadda jira.

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

Diiwaangeli-Autologon

Xudduudaha xannibaadda, qoraalku wuxuu aqbalayaa cabbirrada magaca isticmaalaha iyo erayga sirta ah. Haddii aan la cayimin magaca isticmaalaha, magaca isticmaalaha hadda waa la isticmaalayaa.

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."
 
}

Ku socodsiinta qoraalkan wuxuu u eg yahay sidan:

Set-Autologon -Password "PlaintextPassword"

Sida loo isticmaalo

Bal hadda aan eegno sida qoraaga laftiisa uu u isticmaalo waxaas oo dhan. Sida saxda ah ee loo geeyo server-ka guud ee Minecraft Windows. Aan ka bilowno bilowgii hore.

1. Abuur isticmaale

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

2. Diiwaangeli hawsha si aad u socodsiiso qoraalka

Waxaad isku qori kartaa adigoo isticmaalaya module sidan oo kale ah:

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

Ama isticmaal qalabka caadiga ah:

$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. Si toos ah u gal oo dib u kici mishiinka

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

Buuxi

Qoraagu wuxuu sameeyay qoraalka, oo uu ku jiro naftiisa, sidaa darteed, wuu ku farxi doonaa inuu dhagaysto talooyinkaaga hagaajinta qoraalka. Qoraagu waxa uu rajaynayaa in dhammaan koodkan uu ugu yaraan faa'iido kuu leeyahay, iyo in maqaalku ahaa mid xiiso leh.

Qoraalka bilowga server-ka ugu habboon ee Minecraft

Source: www.habr.com

Add a comment