Add UI for changing the minecraft server version

This commit is contained in:
Jamie Cameron 2021-08-22 10:58:35 -07:00
parent 53982c2c0f
commit 5e15e740e1
7 changed files with 139 additions and 4 deletions

View File

@ -0,0 +1,15 @@
#!/usr/local/bin/perl
# Update the current version
use strict;
use warnings;
require './minecraft-lib.pl';
our (%in, %text, %config);
&ReadParse();
my @vers = &list_installed_versions();
my ($v) = grep { $_->{'file'} eq $in{'ver'} } @vers;
$v || &error($text{'versions_echange'}." ".$in{'ver'});
&save_minecraft_jar($in{'ver'});
&webmin_log("changeversion", undef, $in{'ver'});
&redirect("");

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 B

View File

@ -63,17 +63,20 @@ my @links = ( "edit_conf.cgi", "edit_users.cgi",
"view_logs.cgi", "list_conns.cgi",
"list_worlds.cgi", "edit_cmds.cgi",
"console.cgi", "edit_backup.cgi",
"list_playtime.cgi", "edit_manual.cgi" );
"list_playtime.cgi", "list_versions.cgi",
"edit_manual.cgi" );
my @titles = ( $text{'conf_title'}, $text{'users_title'},
$text{'logs_title'}, $text{'conns_title'},
$text{'worlds_title'}, $text{'cmds_title'},
$text{'console_title'}, $text{'backup_title'},
$text{'playtime_title'}, $text{'manual_title'} );
$text{'playtime_title'}, $text{'versions_title'},
$text{'manual_title'} );
my @icons = ( "images/conf.gif", "images/users.gif",
"images/logs.gif", "images/conns.gif",
"images/worlds.gif", "images/cmds.gif",
"images/console.gif", "images/backup.gif",
"images/playtime.gif", "images/manual.gif" );
"images/playtime.gif", "images/versions.gif",
"images/manual.gif" );
&icons_table(\@links, \@titles, \@icons, 5);
print &ui_hr();

View File

@ -318,6 +318,8 @@ log_delboot=Disabled server at boot time
log_enable_backup=Enabled scheduled backups to $1
log_disable_backup=Disabled scheduled backups
log_playtime=Changed play time limits
log_changeversion=Changed server to version $1
log_addversion=Added server version $1
monitor_up=Minecraft Server Alive
monitor_latest=Minecraft Server Up To Date
@ -354,3 +356,19 @@ playtime_eusers=No users to limit entered
playtime_edays=No days of the week selected
playtime_eips=No IP addresses entered
playtime_total=Total time
versions_title=Minecraft Versions
versions_file=Filename
versions_desc=Description
versions_size=JAR Size
versions_save=Change Version
versions_save2=Change Version and Restart Server
versions_none=No Minecraft versions found!
versions_header=Add Minecraft Version
versions_src=JAR file source
versions_src0=Download from URL
versions_src1=Upload file
versions_newver=Server version
versions_newsame=Work out from filename
versions_all=Install Version
versions_echange=Selected version does not exist

View File

@ -0,0 +1,51 @@
#!/usr/local/bin/perl
# Show available server versions
use strict;
use warnings;
require './minecraft-lib.pl';
our (%in, %text, %config);
&ui_print_header(undef, $text{'versions_title'}, "");
my @vers = &list_installed_versions();
my $cur = &get_minecraft_jar();
if (@vers) {
print &ui_form_start("change_version.cgi");
print &ui_columns_start([ "",
$text{'versions_file'},
$text{'versions_desc'},
$text{'versions_size'} ], 100);
foreach my $v (@vers) {
my @st = stat($v->{'path'});
print &ui_radio_columns_row([
$v->{'file'},
$v->{'desc'},
&nice_size($st[9]),
], undef, "ver", $v->{'file'},
&same_file($v->{'path'}, $cur));
}
print &ui_columns_end();
print &ui_form_end([ [ undef, $text{'versions_save'} ] ]);
}
else {
print "<b>$text{'versions_none'}</b><p>\n";
}
# Show form to download / add one
print &ui_hr();
print &ui_form_start("add_version.cgi", "form-data");
print &ui_table_start($text{'versions_header'}, undef, 2);
print &ui_table_row($text{'versions_src'},
&ui_radio_table("mode", 0,
[ [ 0, $text{'versions_src0'}, &ui_textbox("url", undef, 60) ],
[ 1, $text{'versions_src1'}, &ui_upload("jar") ] ]));
print &ui_table_row($text{'versions_newver'},
&ui_opt_textbox("newver", undef, 10, $text{'versions_newsame'}));
print &ui_table_end();
print &ui_form_end([ [ undef, $text{'versions_all'} ] ]);
&ui_print_footer("", $text{'index_return'});

View File

@ -11,6 +11,9 @@ my ($user, $script, $action, $type, $object, $p) = @_;
if ($object eq 'backup') {
return &text('log_'.$action.'_backup', $object);
}
elsif ($action eq 'changeversion' || $action eq 'addversion') {
return &text('log_'.$action, "<tt>".&html_escape($object)."</tt>");
}
else {
return $text{'log_'.$action};
}

View File

@ -11,7 +11,8 @@ use POSIX;
&init_config();
our ($module_root_directory, %text, %gconfig, $root_directory, %config,
$module_name, $remote_user, $base_remote_user, $gpgpath,
$module_config_directory, @lang_order_list, @root_directories);
$module_config_directory, @lang_order_list, @root_directories,
$module_config_file);
our $history_file = "$module_config_directory/history.txt";
our $download_page_url = "https://www.minecraft.net/en-us/download/server/";
our $playtime_dir = "$module_config_directory/playtime";
@ -1175,4 +1176,48 @@ my $jar = &get_minecraft_jar();
return $jar =~ /bukkit-[0-9]/ ? 'bukkit' : 'default';
}
# list_installed_versions()
# Returns a list of hash refs, one per available server version
sub list_installed_versions
{
# Find all the jars
my @files;
my $dir = $config{'minecraft_dir'};
my $cur = &get_minecraft_jar();
opendir(DIR, $dir);
foreach my $f (readdir(DIR)) {
push(@files, $dir."/".$f) if ($f =~ /\.jar$/);
}
closedir(DIR);
push(@files, $cur) if (&indexof($cur, @files) < 0);
# Figure out what they are
my @rv;
foreach my $f (sort { $a cmp $b } @files) {
my $ver = { 'path' => $f };
$ver->{'file'} = $f =~ /^\Q$dir\E\/(.*)/ ? $1 : $f;
$ver->{'ver'} = $f =~ /([0-9\.]+)\.jar$/ ? $1 : "Unknown";
$ver->{'desc'} = $ver->{'ver'};
push(@rv, $ver);
}
return @rv;
}
# save_minecraft_jar(file)
# Update the server jar file
sub save_minecraft_jar
{
my ($file) = @_;
my $dir = $config{'minecraft_dir'};
&lock_file($module_config_file);
if ($file =~ /^\Q$dir\E\/(.*)$/) {
$config{'minecraft_jar'} = $1;
}
else {
$config{'minecraft_jar'} = $file;
}
&save_module_config(\%config);
&unlock_file($module_config_file);
}
1;