Added an options to disable online game complete check
This commit is contained in:
@@ -29,7 +29,7 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.version.AssetIndexDownloadInfo;
|
import org.jackhuang.hellominecraft.launcher.core.version.AssetIndexDownloadInfo;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
import org.jackhuang.hellominecraft.util.MessageBox;
|
import org.jackhuang.hellominecraft.util.MessageBox;
|
||||||
import org.jackhuang.hellominecraft.util.func.Function;
|
import org.jackhuang.hellominecraft.util.func.BiFunction;
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.Task;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
||||||
@@ -209,8 +209,8 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
return virtualRoot;
|
return virtualRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Function<MinecraftVersion, String> ASSET_PROVIDER_IMPL = t -> {
|
public final BiFunction<MinecraftVersion, Boolean, String> ASSET_PROVIDER_IMPL = (t, allow) -> {
|
||||||
if (!checkAssetsExistance(t.getAssetsIndex()))
|
if (allow && !checkAssetsExistance(t.getAssetsIndex()))
|
||||||
if (MessageBox.Show(C.i18n("assets.no_assets"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION)
|
if (MessageBox.Show(C.i18n("assets.no_assets"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION)
|
||||||
TaskWindow.execute(downloadAssets(t));
|
TaskWindow.execute(downloadAssets(t));
|
||||||
return reconstructAssets(t.getAssetsIndex()).getAbsolutePath();
|
return reconstructAssets(t.getAssetsIndex()).getAbsolutePath();
|
||||||
|
|||||||
@@ -96,10 +96,12 @@ public class GameLauncher {
|
|||||||
if (file != null)
|
if (file != null)
|
||||||
FileUtils.cleanDirectoryQuietly(file);
|
FileUtils.cleanDirectoryQuietly(file);
|
||||||
|
|
||||||
HMCLog.log("Detecting libraries...");
|
if (!options.isNotCheckGame()) {
|
||||||
launchingStateChangedEvent.execute(LaunchingState.DownloadingLibraries);
|
HMCLog.log("Detecting libraries...");
|
||||||
if (!downloadLibrariesEvent.execute(service.download().getDownloadLibraries(loader.getMinecraftVersion())))
|
launchingStateChangedEvent.execute(LaunchingState.DownloadingLibraries);
|
||||||
throw new GameException("Failed to download libraries");
|
if (!downloadLibrariesEvent.execute(service.download().getDownloadLibraries(loader.getMinecraftVersion())))
|
||||||
|
throw new GameException("Failed to download libraries");
|
||||||
|
}
|
||||||
|
|
||||||
HMCLog.log("Unpacking natives...");
|
HMCLog.log("Unpacking natives...");
|
||||||
launchingStateChangedEvent.execute(LaunchingState.DecompressingNatives);
|
launchingStateChangedEvent.execute(LaunchingState.DecompressingNatives);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class LaunchOptions {
|
|||||||
|
|
||||||
private String name, versionName, javaArgs, minecraftArgs, maxMemory, permSize, width, height, serverIp, wrapper;
|
private String name, versionName, javaArgs, minecraftArgs, maxMemory, permSize, width, height, serverIp, wrapper;
|
||||||
private String proxyHost, proxyPort, proxyUser, proxyPass, javaDir, launchVersion, type, precalledCommand;
|
private String proxyHost, proxyPort, proxyUser, proxyPass, javaDir, launchVersion, type, precalledCommand;
|
||||||
private boolean fullscreen, noJVMArgs;
|
private boolean fullscreen, noJVMArgs, notCheckGame;
|
||||||
private JdkVersion java;
|
private JdkVersion java;
|
||||||
private File gameDir;
|
private File gameDir;
|
||||||
private GameDirType gameDirType;
|
private GameDirType gameDirType;
|
||||||
@@ -222,4 +222,12 @@ public class LaunchOptions {
|
|||||||
public void setType(String type) {
|
public void setType(String type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isNotCheckGame() {
|
||||||
|
return notCheckGame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotCheckGame(boolean notCheckGame) {
|
||||||
|
this.notCheckGame = notCheckGame;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.util.func.Function;
|
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
||||||
import org.jackhuang.hellominecraft.util.system.OS;
|
import org.jackhuang.hellominecraft.util.system.OS;
|
||||||
@@ -30,6 +29,7 @@ import org.jackhuang.hellominecraft.launcher.core.auth.UserProfileProvider;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
|
import org.jackhuang.hellominecraft.util.func.BiFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -57,7 +57,7 @@ public class MinecraftLoader extends AbstractMinecraftLoader {
|
|||||||
|
|
||||||
String[] splitted = StrUtils.tokenize(version.minecraftArguments);
|
String[] splitted = StrUtils.tokenize(version.minecraftArguments);
|
||||||
|
|
||||||
String game_assets = assetProvider.apply(version);
|
String game_assets = assetProvider.apply(version, !options.isNotCheckGame());
|
||||||
|
|
||||||
for (String t : splitted) {
|
for (String t : splitted) {
|
||||||
t = t.replace("${auth_player_name}", lr.getUserName());
|
t = t.replace("${auth_player_name}", lr.getUserName());
|
||||||
@@ -96,13 +96,13 @@ public class MinecraftLoader extends AbstractMinecraftLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Function<MinecraftVersion, String> DEFAULT_ASSET_PROVIDER = t -> {
|
private final BiFunction<MinecraftVersion, Boolean, String> DEFAULT_ASSET_PROVIDER = (t, allow) -> {
|
||||||
return new File(service.baseDirectory(), "assets").getAbsolutePath();
|
return new File(service.baseDirectory(), "assets").getAbsolutePath();
|
||||||
};
|
};
|
||||||
|
|
||||||
private Function<MinecraftVersion, String> assetProvider = DEFAULT_ASSET_PROVIDER;
|
private BiFunction<MinecraftVersion, Boolean, String> assetProvider = DEFAULT_ASSET_PROVIDER;
|
||||||
|
|
||||||
public void setAssetProvider(Function<MinecraftVersion, String> assetProvider) {
|
public void setAssetProvider(BiFunction<MinecraftVersion, Boolean, String> assetProvider) {
|
||||||
if (assetProvider == null)
|
if (assetProvider == null)
|
||||||
this.assetProvider = DEFAULT_ASSET_PROVIDER;
|
this.assetProvider = DEFAULT_ASSET_PROVIDER;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ public final class Config implements Cloneable {
|
|||||||
public transient final EventHandler<IAuthenticator> authChangedEvent = new EventHandler<>(this);
|
public transient final EventHandler<IAuthenticator> authChangedEvent = new EventHandler<>(this);
|
||||||
|
|
||||||
public Theme getTheme() {
|
public Theme getTheme() {
|
||||||
|
if (theme >= Theme.values().length)
|
||||||
|
theme = 0;
|
||||||
return Theme.values()[theme];
|
return Theme.values()[theme];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class VersionSetting {
|
|||||||
|
|
||||||
private String javaArgs, minecraftArgs, maxMemory, permSize, width, height;
|
private String javaArgs, minecraftArgs, maxMemory, permSize, width, height;
|
||||||
private String javaDir, precalledCommand, serverIp, java, wrapper;
|
private String javaDir, precalledCommand, serverIp, java, wrapper;
|
||||||
private boolean fullscreen, noJVMArgs;
|
private boolean fullscreen, noJVMArgs, notCheckGame;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0 - Close the launcher when the game starts.<br/>
|
* 0 - Close the launcher when the game starts.<br/>
|
||||||
@@ -265,6 +265,15 @@ public class VersionSetting {
|
|||||||
propertyChanged.execute("serverIp");
|
propertyChanged.execute("serverIp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isNotCheckGame() {
|
||||||
|
return notCheckGame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotCheckGame(boolean notCheckGame) {
|
||||||
|
this.notCheckGame = notCheckGame;
|
||||||
|
propertyChanged.execute("notCheckGame");
|
||||||
|
}
|
||||||
|
|
||||||
public LaunchOptions createLaunchOptions(File gameDir) {
|
public LaunchOptions createLaunchOptions(File gameDir) {
|
||||||
LaunchOptions x = new LaunchOptions();
|
LaunchOptions x = new LaunchOptions();
|
||||||
x.setFullscreen(isFullscreen());
|
x.setFullscreen(isFullscreen());
|
||||||
@@ -280,6 +289,7 @@ public class VersionSetting {
|
|||||||
x.setType(Main.shortTitle());
|
x.setType(Main.shortTitle());
|
||||||
x.setVersionName(Main.shortTitle());
|
x.setVersionName(Main.shortTitle());
|
||||||
x.setNoJVMArgs(isNoJVMArgs());
|
x.setNoJVMArgs(isNoJVMArgs());
|
||||||
|
x.setNotCheckGame(isNotCheckGame());
|
||||||
x.setPermSize(getPermSize());
|
x.setPermSize(getPermSize());
|
||||||
x.setPrecalledCommand(getPrecalledCommand());
|
x.setPrecalledCommand(getPrecalledCommand());
|
||||||
x.setProxyHost(Settings.getInstance().getProxyHost());
|
x.setProxyHost(Settings.getInstance().getProxyHost());
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="btnIncludeMinecraft" min="-2" max="-2" attributes="0"/>
|
<Component id="btnIncludeMinecraft" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="916" max="32767" attributes="0"/>
|
<EmptySpace pref="577" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
|
<Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace pref="576" max="32767" attributes="0"/>
|
<EmptySpace pref="447" max="32767" attributes="0"/>
|
||||||
<Component id="btnIncludeMinecraft" min="-2" max="-2" attributes="0"/>
|
<Component id="btnIncludeMinecraft" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<Component id="lblDimensionX" min="-2" max="-2" attributes="0"/>
|
<Component id="lblDimensionX" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="txtHeight" min="-2" pref="100" max="-2" attributes="0"/>
|
<Component id="txtHeight" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="402" max="32767" attributes="0"/>
|
<EmptySpace pref="63" max="32767" attributes="0"/>
|
||||||
<Component id="chkFullscreen" min="-2" max="-2" attributes="0"/>
|
<Component id="chkFullscreen" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
<Component id="lblDimension" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="lblDimension" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="txtWidth" alignment="3" min="-2" pref="26" max="-2" attributes="0"/>
|
<Component id="txtWidth" alignment="3" min="-2" pref="26" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace pref="228" max="32767" attributes="0"/>
|
<EmptySpace pref="99" max="32767" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="btnDownloadAllAssets" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="btnDownloadAllAssets" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="btnCleanGame" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="btnCleanGame" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@@ -388,16 +388,6 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Component id="txtWrapperLauncher" alignment="0" max="32767" attributes="0"/>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="lblPrecalledCommand1" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="txtPrecalledCommand" alignment="0" max="32767" attributes="0"/>
|
<Component id="txtPrecalledCommand" alignment="0" max="32767" attributes="0"/>
|
||||||
<Component id="txtServerIP" alignment="0" max="32767" attributes="0"/>
|
<Component id="txtServerIP" alignment="0" max="32767" attributes="0"/>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
@@ -408,21 +398,33 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="txtJavaArgs" pref="664" max="32767" attributes="0"/>
|
<Component id="txtJavaArgs" pref="325" max="32767" attributes="0"/>
|
||||||
<Component id="txtMinecraftArgs" max="32767" attributes="0"/>
|
<Component id="txtMinecraftArgs" max="32767" attributes="0"/>
|
||||||
<Component id="txtPermSize" alignment="1" max="32767" attributes="0"/>
|
<Component id="txtPermSize" alignment="1" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="lblPrecalledCommand" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="txtWrapperLauncher" alignment="0" max="32767" attributes="0"/>
|
||||||
<Component id="lblServerIP" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="lblPrecalledCommand1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="chkNoJVMArgs" min="-2" max="-2" attributes="0"/>
|
<Component id="chkNoJVMArgs" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
<Component id="chkDontCheckGame" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="lblPrecalledCommand" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="lblServerIP" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@@ -456,8 +458,11 @@
|
|||||||
<Component id="lblServerIP" min="-2" max="-2" attributes="0"/>
|
<Component id="lblServerIP" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="txtServerIP" min="-2" pref="26" max="-2" attributes="0"/>
|
<Component id="txtServerIP" min="-2" pref="26" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="168" max="32767" attributes="0"/>
|
<EmptySpace pref="39" max="32767" attributes="0"/>
|
||||||
<Component id="chkNoJVMArgs" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="chkNoJVMArgs" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="chkDontCheckGame" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -551,6 +556,16 @@
|
|||||||
<EventHandler event="focusLost" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="txtWrapperLauncherFocusLost"/>
|
<EventHandler event="focusLost" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="txtWrapperLauncherFocusLost"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="chkDontCheckGame">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/jackhuang/hellominecraft/lang/I18N.properties" key="advancedsettings.dont_check_game_completeness" replaceFormat="C.i18n("{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="chkDontCheckGameItemStateChanged"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JPanel" name="pnlModManagement">
|
<Container class="javax.swing.JPanel" name="pnlModManagement">
|
||||||
@@ -586,7 +601,7 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="jScrollPane1" pref="889" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" pref="550" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="btnRemoveMod" max="32767" attributes="0"/>
|
<Component id="btnRemoveMod" max="32767" attributes="0"/>
|
||||||
@@ -594,7 +609,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<Component id="lblModInfo" pref="985" max="32767" attributes="0"/>
|
<Component id="lblModInfo" pref="646" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -609,7 +624,7 @@
|
|||||||
<Component id="btnRemoveMod" min="-2" max="-2" attributes="0"/>
|
<Component id="btnRemoveMod" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="jScrollPane1" pref="428" max="32767" attributes="0"/>
|
<Component id="jScrollPane1" pref="299" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="lblModInfo" min="-2" max="-2" attributes="0"/>
|
<Component id="lblModInfo" min="-2" max="-2" attributes="0"/>
|
||||||
|
|||||||
@@ -292,6 +292,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
txtServerIP = new javax.swing.JTextField();
|
txtServerIP = new javax.swing.JTextField();
|
||||||
lblPrecalledCommand1 = new javax.swing.JLabel();
|
lblPrecalledCommand1 = new javax.swing.JLabel();
|
||||||
txtWrapperLauncher = new javax.swing.JTextField();
|
txtWrapperLauncher = new javax.swing.JTextField();
|
||||||
|
chkDontCheckGame = new javax.swing.JCheckBox();
|
||||||
pnlModManagement = new AnimatedPanel();
|
pnlModManagement = new AnimatedPanel();
|
||||||
pnlModManagementContent = new javax.swing.JPanel();
|
pnlModManagementContent = new javax.swing.JPanel();
|
||||||
jScrollPane1 = new javax.swing.JScrollPane();
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
@@ -451,7 +452,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addComponent(lblDimensionX)
|
.addComponent(lblDimensionX)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(txtHeight, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(txtHeight, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 402, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
|
||||||
.addComponent(chkFullscreen))
|
.addComponent(chkFullscreen))
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlSettingsLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlSettingsLayout.createSequentialGroup()
|
||||||
.addComponent(txtMaxMemory)
|
.addComponent(txtMaxMemory)
|
||||||
@@ -508,7 +509,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addComponent(lblDimensionX, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(lblDimensionX, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(lblDimension)
|
.addComponent(lblDimension)
|
||||||
.addComponent(txtWidth, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(txtWidth, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 228, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 99, Short.MAX_VALUE)
|
||||||
.addGroup(pnlSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(pnlSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(btnDownloadAllAssets)
|
.addComponent(btnDownloadAllAssets)
|
||||||
.addComponent(btnCleanGame))
|
.addComponent(btnCleanGame))
|
||||||
@@ -573,39 +574,46 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
chkDontCheckGame.setText(C.i18n("advancedsettings.dont_check_game_completeness")); // NOI18N
|
||||||
|
chkDontCheckGame.addItemListener(new java.awt.event.ItemListener() {
|
||||||
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
||||||
|
chkDontCheckGameItemStateChanged(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout pnlAdvancedSettingsLayout = new javax.swing.GroupLayout(pnlAdvancedSettings);
|
javax.swing.GroupLayout pnlAdvancedSettingsLayout = new javax.swing.GroupLayout(pnlAdvancedSettings);
|
||||||
pnlAdvancedSettings.setLayout(pnlAdvancedSettingsLayout);
|
pnlAdvancedSettings.setLayout(pnlAdvancedSettingsLayout);
|
||||||
pnlAdvancedSettingsLayout.setHorizontalGroup(
|
pnlAdvancedSettingsLayout.setHorizontalGroup(
|
||||||
pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(txtPrecalledCommand)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
.addComponent(txtServerIP)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlAdvancedSettingsLayout.createSequentialGroup()
|
||||||
.addComponent(txtWrapperLauncher)
|
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
.addComponent(lblMinecraftArgs)
|
||||||
.addComponent(lblPrecalledCommand1)
|
.addComponent(lblPermSize)
|
||||||
.addGap(0, 0, Short.MAX_VALUE)))
|
.addComponent(lblJavaArgs))
|
||||||
.addContainerGap())
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(txtPrecalledCommand)
|
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(txtServerIP)
|
.addComponent(txtJavaArgs, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
.addComponent(txtMinecraftArgs)
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(txtPermSize, javax.swing.GroupLayout.Alignment.TRAILING)))
|
||||||
.addComponent(lblPrecalledCommand)
|
|
||||||
.addComponent(lblServerIP))
|
|
||||||
.addGap(0, 716, Short.MAX_VALUE))
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlAdvancedSettingsLayout.createSequentialGroup()
|
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(lblMinecraftArgs)
|
|
||||||
.addComponent(lblPermSize)
|
|
||||||
.addComponent(lblJavaArgs))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(txtJavaArgs)
|
|
||||||
.addComponent(txtMinecraftArgs)
|
|
||||||
.addComponent(txtPermSize, javax.swing.GroupLayout.Alignment.TRAILING))))
|
|
||||||
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(chkNoJVMArgs)
|
.addComponent(txtWrapperLauncher)
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
||||||
|
.addComponent(lblPrecalledCommand1)
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE))
|
||||||
|
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(chkNoJVMArgs)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(chkDontCheckGame))
|
||||||
|
.addGroup(pnlAdvancedSettingsLayout.createSequentialGroup()
|
||||||
|
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(lblPrecalledCommand)
|
||||||
|
.addComponent(lblServerIP))
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)))
|
||||||
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
pnlAdvancedSettingsLayout.setVerticalGroup(
|
pnlAdvancedSettingsLayout.setVerticalGroup(
|
||||||
pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@@ -634,8 +642,10 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addComponent(lblServerIP)
|
.addComponent(lblServerIP)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(txtServerIP, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(txtServerIP, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 168, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE)
|
||||||
.addComponent(chkNoJVMArgs)
|
.addGroup(pnlAdvancedSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(chkNoJVMArgs)
|
||||||
|
.addComponent(chkDontCheckGame))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -679,13 +689,13 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
pnlModManagementContentLayout.setHorizontalGroup(
|
pnlModManagementContentLayout.setHorizontalGroup(
|
||||||
pnlModManagementContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
pnlModManagementContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(pnlModManagementContentLayout.createSequentialGroup()
|
.addGroup(pnlModManagementContentLayout.createSequentialGroup()
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 889, Short.MAX_VALUE)
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 550, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(pnlModManagementContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(pnlModManagementContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(btnRemoveMod, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(btnRemoveMod, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(btnAddMod, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
.addComponent(btnAddMod, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlModManagementContentLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlModManagementContentLayout.createSequentialGroup()
|
||||||
.addComponent(lblModInfo, javax.swing.GroupLayout.DEFAULT_SIZE, 985, Short.MAX_VALUE)
|
.addComponent(lblModInfo, javax.swing.GroupLayout.DEFAULT_SIZE, 646, Short.MAX_VALUE)
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
pnlModManagementContentLayout.setVerticalGroup(
|
pnlModManagementContentLayout.setVerticalGroup(
|
||||||
@@ -697,7 +707,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(btnRemoveMod)
|
.addComponent(btnRemoveMod)
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addGap(0, 0, Short.MAX_VALUE))
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE))
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(lblModInfo))
|
.addComponent(lblModInfo))
|
||||||
);
|
);
|
||||||
@@ -914,7 +924,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(btnIncludeMinecraft)
|
.addComponent(btnIncludeMinecraft)
|
||||||
.addContainerGap(916, Short.MAX_VALUE)))
|
.addContainerGap(577, Short.MAX_VALUE)))
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@@ -930,7 +940,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
.addContainerGap(576, Short.MAX_VALUE)
|
.addContainerGap(447, Short.MAX_VALUE)
|
||||||
.addComponent(btnIncludeMinecraft)
|
.addComponent(btnIncludeMinecraft)
|
||||||
.addContainerGap()))
|
.addContainerGap()))
|
||||||
);
|
);
|
||||||
@@ -1160,6 +1170,11 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
Settings.getLastProfile().getSelectedVersionSetting().setWrapper(txtWrapperLauncher.getText());
|
Settings.getLastProfile().getSelectedVersionSetting().setWrapper(txtWrapperLauncher.getText());
|
||||||
}//GEN-LAST:event_txtWrapperLauncherFocusLost
|
}//GEN-LAST:event_txtWrapperLauncherFocusLost
|
||||||
|
|
||||||
|
private void chkDontCheckGameItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_chkDontCheckGameItemStateChanged
|
||||||
|
if (!isLoading)
|
||||||
|
Settings.getLastProfile().getSelectedVersionSetting().setNotCheckGame(chkDontCheckGame.isSelected());
|
||||||
|
}//GEN-LAST:event_chkDontCheckGameItemStateChanged
|
||||||
|
|
||||||
// </editor-fold>
|
// </editor-fold>
|
||||||
// <editor-fold defaultstate="collapsed" desc="Load">
|
// <editor-fold defaultstate="collapsed" desc="Load">
|
||||||
void prepareVersionSetting(VersionSetting profile) {
|
void prepareVersionSetting(VersionSetting profile) {
|
||||||
@@ -1175,6 +1190,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
txtPrecalledCommand.setText(profile.getPrecalledCommand());
|
txtPrecalledCommand.setText(profile.getPrecalledCommand());
|
||||||
txtServerIP.setText(profile.getServerIp());
|
txtServerIP.setText(profile.getServerIp());
|
||||||
chkNoJVMArgs.setSelected(profile.isNoJVMArgs());
|
chkNoJVMArgs.setSelected(profile.isNoJVMArgs());
|
||||||
|
chkDontCheckGame.setSelected(profile.isNotCheckGame());
|
||||||
chkFullscreen.setSelected(profile.isFullscreen());
|
chkFullscreen.setSelected(profile.isFullscreen());
|
||||||
cboLauncherVisibility.setSelectedIndex(profile.getLauncherVisibility().ordinal());
|
cboLauncherVisibility.setSelectedIndex(profile.getLauncherVisibility().ordinal());
|
||||||
cboRunDirectory.setSelectedIndex(profile.getGameDirType().ordinal());
|
cboRunDirectory.setSelectedIndex(profile.getGameDirType().ordinal());
|
||||||
@@ -1325,6 +1341,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
private javax.swing.JComboBox cboProfiles;
|
private javax.swing.JComboBox cboProfiles;
|
||||||
private javax.swing.JComboBox cboRunDirectory;
|
private javax.swing.JComboBox cboRunDirectory;
|
||||||
private javax.swing.JComboBox cboVersions;
|
private javax.swing.JComboBox cboVersions;
|
||||||
|
private javax.swing.JCheckBox chkDontCheckGame;
|
||||||
private javax.swing.JCheckBox chkFullscreen;
|
private javax.swing.JCheckBox chkFullscreen;
|
||||||
private javax.swing.JCheckBox chkNoJVMArgs;
|
private javax.swing.JCheckBox chkNoJVMArgs;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
|||||||
@@ -413,3 +413,4 @@ wizard.steps=\u6b65\u9aa4
|
|||||||
|
|
||||||
lang=\u7b80\u4f53\u4e2d\u6587
|
lang=\u7b80\u4f53\u4e2d\u6587
|
||||||
lang.default=\u8ddf\u968f\u7cfb\u7edf\u8bed\u8a00
|
lang.default=\u8ddf\u968f\u7cfb\u7edf\u8bed\u8a00
|
||||||
|
advancedsettings.dont_check_game_completeness=\u4e0d\u68c0\u67e5\u6e38\u620f\u5b8c\u6574\u6027
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.security.MessageDigest
|
|||||||
|
|
||||||
apply plugin: 'java'
|
apply plugin: 'java'
|
||||||
apply plugin: 'maven'
|
apply plugin: 'maven'
|
||||||
|
apply plugin: 'findbugs'
|
||||||
|
|
||||||
//sourceCompatibility = '1.7'
|
//sourceCompatibility = '1.7'
|
||||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||||
|
|||||||
Reference in New Issue
Block a user