Awọn bojumu Minecraft server akosile ibẹrẹ

Awọn bojumu Minecraft server akosile ibẹrẹ

Òǹkọ̀wé náà nífẹ̀ẹ́ sí eré náà gan-an, òun fúnra rẹ̀ sì jẹ́ alábòójútó olupin kékeré kan “nítọ̀hún fún àwọn ọ̀rẹ́.” Gẹgẹbi o ṣe deede laarin awọn ope, ohun gbogbo ti o wa lori olupin ti wa ni iyipada, ati pe eyi pẹlu aisedeede ati, bi abajade, awọn ipadanu. Niwọn igba ti onkọwe Powershell mọ dara julọ ju ipo ti awọn ile itaja ni opopona rẹ, o pinnu lati ṣe.Iwe afọwọkọ ti o dara julọ lati ṣe ifilọlẹ Minecraft 2020" Iwe afọwọkọ kanna ṣiṣẹ bi ipilẹ fun awoṣe ninu Ruvds ọjà. Ṣugbọn gbogbo awọn orisun wa tẹlẹ ninu nkan naa. Bayi, ni ibere, bawo ni gbogbo rẹ ṣe ṣe.

Awọn aṣẹ ti a nilo

Igbasilẹ yiyan

Ni ọjọ kan, lẹhin fifi awọn mods tọkọtaya diẹ sii, Mo ṣe awari pe olupin naa, ni gbangba, ti kọlu laisi ikede ogun. Olupin naa ko kọ awọn aṣiṣe ni latest.log tabi ni yokokoro, ati console, eyiti o yẹ ki o ti kọ aṣiṣe yii ati duro, ti wa ni pipade.

Ti ko ba fẹ lati kọ, ko nilo lati. A ni Powershell pẹlu cmdlet Tee-Nkan, eyiti o gba ohun kan ti o gbejade si faili kan ati si console ni akoko kanna.

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

Ni ọna yii, Powershell yoo gbe StandardOutput ati kọ si faili kan. Maṣe gbiyanju lati lo Ibẹrẹ-ilananitori o yoo pada System.ComponentModel.Component ati ki o ko StandardOutput, ati -RedirectStandardOutput yoo ṣe awọn ti o soro lati tẹ sinu console, eyi ti o jẹ ohun ti a fẹ a yago fun.

Awọn ariyanjiyan ifilọlẹ

Lẹhin fifi sori ẹrọ bata ti awọn mods kanna, onkọwe ṣe akiyesi pe olupin naa ko ni Ramu to. Ati pe eyi nilo iyipada awọn ariyanjiyan ifilọlẹ. Dipo iyipada wọn ni gbogbo igba ni start.bat, eyiti gbogbo eniyan nlo, kan lo iwe afọwọkọ yii.

Niwọn igba ti Tee-Object n ka StandardOutput nikan nigbati iṣẹ ṣiṣe ni a pe ni “Gẹgẹbi Eyi”, iwọ yoo ni lati ṣe iwe afọwọkọ miiran. Iwe afọwọkọ yii yoo ṣe ifilọlẹ nipasẹ Minecraft funrararẹ. Jẹ ká bẹrẹ pẹlu awọn ariyanjiyan.

Ni ibere lati indulge ni Gbẹhin nkede ni ojo iwaju, awọn akosile gbọdọ gba ifilole ariyanjiyan lori awọn fly. Lati ṣe eyi, jẹ ki a bẹrẹ nipa wiwa fun ẹya tuntun forge.

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

Lilo too-ohun a yoo ma mu nkan na pẹlu nọmba ti o tobi julọ, laibikita iye wọn ti o fi sibẹ. Gbẹhin nkede.

Bayi o nilo lati fi iranti si olupin naa. Lati ṣe eyi, mu iye iranti eto ati kọ iye rẹ sinu okun.

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

Tun bẹrẹ laifọwọyi

Onkọwe ti rii awọn faili adan lati ọdọ awọn eniyan miiran, ṣugbọn wọn ko ṣe akiyesi idi idi ti olupin naa ti da duro. Eyi ko ni irọrun, kini ti o ba kan nilo lati yi faili mod pada tabi paarẹ nkan kan?
Bayi jẹ ki ká tun kan to dara tun. Onkọwe naa ṣaju awọn iwe afọwọkọ ajeji ti o tun bẹrẹ olupin laibikita idi ti olupin naa ti ku. A yoo lo exitcode. Java nlo 0 bi aṣeyọri, nitorinaa a yoo jo lati ibi.

Ni akọkọ, jẹ ki a ṣẹda iṣẹ kan ti yoo tun bẹrẹ olupin naa ti o ba kuna.

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

Iwe afọwọkọ naa yoo wa ni lupu titi olupin yoo fi pari ni deede lati inu console tirẹ nipa lilo pipaṣẹ / da duro.

Ti a ba pinnu lati ṣe adaṣe ohun gbogbo, lẹhinna o dara lati gba ọjọ ibẹrẹ, ọjọ ipari, ati idi fun ipari.

Lati ṣe eyi, a kọ abajade ti Ibẹrẹ-ilana sinu oniyipada kan. Ninu iwe afọwọkọ o dabi eyi:

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

Ati lẹhinna a kọ awọn abajade si faili kan. Eyi ni ohun ti o da pada si wa ni oniyipada:

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

Gbogbo eyi le ṣe afikun si faili nipa lilo Akoonu-Fikun-un. Lehin ti a ti ṣabọ rẹ diẹ, a gba iwe afọwọkọ yii, jẹ ki a pe ni olutọju.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

Bayi jẹ ki a ṣẹda iwe afọwọkọ ti o ṣe ifilọlẹ olutọju.

Ibẹrẹ ti o tọ

Onkọwe fẹ lati ṣiṣẹ awọn ẹya oriṣiriṣi ti Minecraft lati ọna eyikeyi ninu module kan, ati tun ni anfani lati tọju awọn akọọlẹ ni folda kan pato.

Iṣoro naa ni pe ilana naa gbọdọ bẹrẹ nipasẹ olumulo ti o wọle si eto naa. Eyi le ṣee ṣe nipasẹ tabili tabili tabi WinRm. Ti o ba nṣiṣẹ olupin bi olumulo eto tabi paapaa oluṣakoso, ṣugbọn ko wọle, Server.jar kii yoo paapaa ni anfani lati ka eula.txt ati bẹrẹ.

A le mu iwọle laifọwọyi ṣiṣẹ nipa fifi awọn titẹ sii mẹta kun si iforukọsilẹ.

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

Ko lewu. Wọle ati ọrọ igbaniwọle ni itọkasi nibi ni ọrọ-ọrọ, nitorinaa lati bẹrẹ olupin o nilo lati ṣẹda olumulo lọtọ ti o ni iraye si ni ipele olumulo, tabi ni ẹgbẹ paapaa dín. O ti wa ni muna ko niyanju lati lo kan boṣewa administrator fun yi.

A to awọn jade laifọwọyi wiwọle. Bayi o nilo lati forukọsilẹ iṣẹ-ṣiṣe tuntun fun olupin naa. A yoo ṣiṣẹ aṣẹ lati Powershell, nitorinaa yoo dabi eyi:

$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

Nto module

Bayi jẹ ki a fi ohun gbogbo sinu awọn modulu ti o le ṣee lo nigbamii. Gbogbo koodu fun awọn iwe afọwọkọ ti o ti ṣetan wa nibi, gbe wọle ati lo.

O le lo ohun gbogbo ti salaye loke lọtọ ti o ba ti o ko ba fẹ lati ribee pẹlu awọn module.

Bẹrẹ-Minecraft

Ni akọkọ, jẹ ki a ṣẹda module kan ti kii yoo ṣe ohunkohun diẹ sii ju ṣiṣe iwe afọwọkọ kan ti yoo tẹtisi ati ṣe igbasilẹ adaṣe adaṣe.

Ninu bulọọki awọn paramita, o beere lati inu folda wo lati ṣe ifilọlẹ Minecraft ati ibiti o ti fi log naa sii.

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

Ati pe iwọ yoo nilo lati ṣe ifilọlẹ Minecraft bii eyi:

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

Bayi jẹ ki a lọ si Handler.ps1 ti o ṣetan lati lo

Ni ibere fun iwe afọwọkọ wa lati gba awọn paramita nigba ti a pe, a tun nilo lati pato idinamọ paramita kan. Jọwọ ṣe akiyesi, o nṣiṣẹ Oracle Java, ti o ba nlo pinpin oriṣiriṣi iwọ yoo nilo lati yi ọna pada si faili ti o le ṣiṣẹ.

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

Forukọsilẹ-Minecraft

Awọn akosile jẹ Oba kanna bi Bẹrẹ-Minecraft, ayafi ti o nikan forukọsilẹ a titun iṣẹ-ṣiṣe. Gba awọn ariyanjiyan kanna. Orukọ olumulo, ti ko ba ṣe pato, gba eyi ti o wa lọwọlọwọ.

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

Forukọsilẹ-Autologon

Ni awọn paramita Àkọsílẹ, awọn akosile gba awọn olumulo ati Ọrọigbaniwọle sile. Ti orukọ olumulo ko ba ni pato, orukọ olumulo lọwọlọwọ lo.

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

Ṣiṣẹ iwe afọwọkọ yii dabi eyi:

Set-Autologon -Password "PlaintextPassword"

Bi o ṣe le lo

Nisisiyi ẹ ​​jẹ ki a wo bi onkọwe funrararẹ ṣe nlo gbogbo eyi. Bii o ṣe le mu olupin Minecraft ti gbogbo eniyan lọ daradara lori Windows. Jẹ ká bẹrẹ lati ibere pepe.

1. Ṣẹda olumulo

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

2. Forukọsilẹ iṣẹ-ṣiṣe lati ṣiṣe awọn akosile

O le forukọsilẹ nipa lilo module bi eleyi:

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

Tabi lo awọn irinṣẹ boṣewa:

$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. Jeki wiwọle-laifọwọyi ati atunbere ẹrọ naa

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

Ipari

Onkọwe ṣe iwe afọwọkọ naa, pẹlu fun ararẹ, nitorinaa, yoo dun lati tẹtisi awọn imọran rẹ fun imudarasi iwe afọwọkọ naa. Onkọwe nireti pe gbogbo koodu yii jẹ o kere ju wulo fun ọ, ati pe nkan naa jẹ iyanilenu.

Awọn bojumu Minecraft server akosile ibẹrẹ

orisun: www.habr.com

Fi ọrọìwòye kun