Merge pull request #3080 from SRLJustin/revert_config
oprs: revert configs pre-upstream
This commit is contained in:
@@ -27,7 +27,7 @@ object ProjectVersions {
|
|||||||
const val launcherVersion = "2.2.0"
|
const val launcherVersion = "2.2.0"
|
||||||
const val rlVersion = "1.8.5"
|
const val rlVersion = "1.8.5"
|
||||||
|
|
||||||
const val openosrsVersion = "4.15.5"
|
const val openosrsVersion = "4.15.6"
|
||||||
|
|
||||||
const val rsversion = 201
|
const val rsversion = 201
|
||||||
const val cacheversion = 165
|
const val cacheversion = 165
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ class ConfigInvocationHandler implements InvocationHandler
|
|||||||
|
|
||||||
private final ConfigManager manager;
|
private final ConfigManager manager;
|
||||||
private final Cache<Method, Object> cache = CacheBuilder.newBuilder()
|
private final Cache<Method, Object> cache = CacheBuilder.newBuilder()
|
||||||
.maximumSize(256)
|
.maximumSize(256)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ConfigInvocationHandler(ConfigManager manager)
|
ConfigInvocationHandler(ConfigManager manager)
|
||||||
{
|
{
|
||||||
@@ -99,9 +99,11 @@ class ConfigInvocationHandler implements InvocationHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convert value to return type
|
// Convert value to return type
|
||||||
|
Class<?> returnType = method.getReturnType();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Object objectValue = manager.stringToObject(value, method.getGenericReturnType());
|
Object objectValue = ConfigManager.stringToObject(value, returnType);
|
||||||
cache.put(method, objectValue == null ? NULL : objectValue);
|
cache.put(method, objectValue == null ? NULL : objectValue);
|
||||||
return objectValue;
|
return objectValue;
|
||||||
}
|
}
|
||||||
@@ -153,7 +155,7 @@ class ConfigInvocationHandler implements InvocationHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String newValueStr = manager.objectToString(newValue);
|
String newValueStr = ConfigManager.objectToString(newValue);
|
||||||
manager.setConfiguration(group.value(), item.keyName(), newValueStr);
|
manager.setConfiguration(group.value(), item.keyName(), newValueStr);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -164,9 +166,9 @@ class ConfigInvocationHandler implements InvocationHandler
|
|||||||
{
|
{
|
||||||
Class<?> declaringClass = method.getDeclaringClass();
|
Class<?> declaringClass = method.getDeclaringClass();
|
||||||
return ReflectUtil.privateLookupIn(declaringClass)
|
return ReflectUtil.privateLookupIn(declaringClass)
|
||||||
.unreflectSpecial(method, declaringClass)
|
.unreflectSpecial(method, declaringClass)
|
||||||
.bindTo(proxy)
|
.bindTo(proxy)
|
||||||
.invokeWithArguments(args);
|
.invokeWithArguments(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidate()
|
void invalidate()
|
||||||
|
|||||||
@@ -24,14 +24,13 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.config;
|
package net.runelite.client.config;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
@Value
|
@Value
|
||||||
public class ConfigItemDescriptor implements ConfigObject
|
public class ConfigItemDescriptor implements ConfigObject
|
||||||
{
|
{
|
||||||
private final ConfigItem item;
|
private final ConfigItem item;
|
||||||
private final Type type;
|
private final Class<?> type;
|
||||||
private final Range range;
|
private final Range range;
|
||||||
private final Alpha alpha;
|
private final Alpha alpha;
|
||||||
private final Units units;
|
private final Units units;
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import com.google.common.collect.ComparisonChain;
|
|||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.hash.Hasher;
|
import com.google.common.hash.Hasher;
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
import com.google.gson.Gson;
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
@@ -45,9 +44,7 @@ import java.io.OutputStreamWriter;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.lang.reflect.ParameterizedType;
|
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.nio.channels.FileChannel;
|
import java.nio.channels.FileChannel;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.AtomicMoveNotSupportedException;
|
import java.nio.file.AtomicMoveNotSupportedException;
|
||||||
@@ -131,7 +128,6 @@ public class ConfigManager
|
|||||||
private final File settingsFileInput;
|
private final File settingsFileInput;
|
||||||
private final EventBus eventBus;
|
private final EventBus eventBus;
|
||||||
private final OkHttpClient okHttpClient;
|
private final OkHttpClient okHttpClient;
|
||||||
private final Gson gson;
|
|
||||||
|
|
||||||
private AccountSession session;
|
private AccountSession session;
|
||||||
private ConfigClient configClient;
|
private ConfigClient configClient;
|
||||||
@@ -152,19 +148,17 @@ public class ConfigManager
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ConfigManager(
|
public ConfigManager(
|
||||||
@Named("config") File config,
|
@Named("config") File config,
|
||||||
ScheduledExecutorService scheduledExecutorService,
|
ScheduledExecutorService scheduledExecutorService,
|
||||||
EventBus eventBus,
|
EventBus eventBus,
|
||||||
OkHttpClient okHttpClient,
|
OkHttpClient okHttpClient,
|
||||||
@Nullable Client client,
|
@Nullable Client client)
|
||||||
Gson gson)
|
|
||||||
{
|
{
|
||||||
this.settingsFileInput = config;
|
this.settingsFileInput = config;
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.okHttpClient = okHttpClient;
|
this.okHttpClient = okHttpClient;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.propertiesFile = getPropertiesFile();
|
this.propertiesFile = getPropertiesFile();
|
||||||
this.gson = gson;
|
|
||||||
|
|
||||||
scheduledExecutorService.scheduleWithFixedDelay(this::sendConfig, 30, 30, TimeUnit.SECONDS);
|
scheduledExecutorService.scheduleWithFixedDelay(this::sendConfig, 30, 30, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
@@ -373,9 +367,9 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
T t = (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class<?>[]
|
T t = (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class<?>[]
|
||||||
{
|
{
|
||||||
clazz
|
clazz
|
||||||
}, handler);
|
}, handler);
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@@ -418,17 +412,12 @@ public class ConfigManager
|
|||||||
return properties.getProperty(getWholeKey(groupName, profile, key));
|
return properties.getProperty(getWholeKey(groupName, profile, key));
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getConfiguration(String groupName, String key, Type clazz)
|
|
||||||
{
|
|
||||||
return getConfiguration(groupName, null, key, clazz);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> T getConfiguration(String groupName, String key, Class<T> clazz)
|
public <T> T getConfiguration(String groupName, String key, Class<T> clazz)
|
||||||
{
|
{
|
||||||
return getConfiguration(groupName, null, key, clazz);
|
return getConfiguration(groupName, null, key, clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getRSProfileConfiguration(String groupName, String key, Type clazz)
|
public <T> T getRSProfileConfiguration(String groupName, String key, Class<T> clazz)
|
||||||
{
|
{
|
||||||
String rsProfileKey = this.rsProfileKey;
|
String rsProfileKey = this.rsProfileKey;
|
||||||
if (rsProfileKey == null)
|
if (rsProfileKey == null)
|
||||||
@@ -439,14 +428,14 @@ public class ConfigManager
|
|||||||
return getConfiguration(groupName, rsProfileKey, key, clazz);
|
return getConfiguration(groupName, rsProfileKey, key, clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getConfiguration(String groupName, String profile, String key, Type type)
|
public <T> T getConfiguration(String groupName, String profile, String key, Class<T> clazz)
|
||||||
{
|
{
|
||||||
String value = getConfiguration(groupName, profile, key);
|
String value = getConfiguration(groupName, profile, key);
|
||||||
if (!Strings.isNullOrEmpty(value))
|
if (!Strings.isNullOrEmpty(value))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return (T) stringToObject(value, type);
|
return (T) stringToObject(value, clazz);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -499,12 +488,12 @@ public class ConfigManager
|
|||||||
eventBus.post(configChanged);
|
eventBus.post(configChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> void setConfiguration(String groupName, String profile, String key, T value)
|
public void setConfiguration(String groupName, String profile, String key, Object value)
|
||||||
{
|
{
|
||||||
setConfiguration(groupName, profile, key, objectToString(value));
|
setConfiguration(groupName, profile, key, objectToString(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> void setConfiguration(String groupName, String key, T value)
|
public void setConfiguration(String groupName, String key, Object value)
|
||||||
{
|
{
|
||||||
// do not save consumers for buttons, they cannot be changed anyway
|
// do not save consumers for buttons, they cannot be changed anyway
|
||||||
if (value instanceof Consumer)
|
if (value instanceof Consumer)
|
||||||
@@ -515,7 +504,7 @@ public class ConfigManager
|
|||||||
setConfiguration(groupName, null, key, value);
|
setConfiguration(groupName, null, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> void setRSProfileConfiguration(String groupName, String key, T value)
|
public void setRSProfileConfiguration(String groupName, String key, Object value)
|
||||||
{
|
{
|
||||||
String rsProfileKey = this.rsProfileKey;
|
String rsProfileKey = this.rsProfileKey;
|
||||||
if (rsProfileKey == null)
|
if (rsProfileKey == null)
|
||||||
@@ -610,67 +599,67 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
final List<ConfigSectionDescriptor> sections = getAllDeclaredInterfaceFields(inter).stream()
|
final List<ConfigSectionDescriptor> sections = getAllDeclaredInterfaceFields(inter).stream()
|
||||||
.filter(m -> m.isAnnotationPresent(ConfigSection.class) && m.getType() == String.class)
|
.filter(m -> m.isAnnotationPresent(ConfigSection.class) && m.getType() == String.class)
|
||||||
.map(m ->
|
.map(m ->
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
return new ConfigSectionDescriptor(
|
try
|
||||||
String.valueOf(m.get(inter)),
|
{
|
||||||
m.getDeclaredAnnotation(ConfigSection.class)
|
return new ConfigSectionDescriptor(
|
||||||
);
|
String.valueOf(m.get(inter)),
|
||||||
}
|
m.getDeclaredAnnotation(ConfigSection.class)
|
||||||
catch (IllegalAccessException e)
|
);
|
||||||
{
|
}
|
||||||
log.warn("Unable to load section {}::{}", inter.getSimpleName(), m.getName());
|
catch (IllegalAccessException e)
|
||||||
return null;
|
{
|
||||||
}
|
log.warn("Unable to load section {}::{}", inter.getSimpleName(), m.getName());
|
||||||
})
|
return null;
|
||||||
.filter(Objects::nonNull)
|
}
|
||||||
.sorted((a, b) -> ComparisonChain.start()
|
})
|
||||||
.compare(a.getSection().position(), b.getSection().position())
|
.filter(Objects::nonNull)
|
||||||
.compare(a.getSection().name(), b.getSection().name())
|
.sorted((a, b) -> ComparisonChain.start()
|
||||||
.result())
|
.compare(a.getSection().position(), b.getSection().position())
|
||||||
.collect(Collectors.toList());
|
.compare(a.getSection().name(), b.getSection().name())
|
||||||
|
.result())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final List<ConfigTitleDescriptor> titles = getAllDeclaredInterfaceFields(inter).stream()
|
final List<ConfigTitleDescriptor> titles = getAllDeclaredInterfaceFields(inter).stream()
|
||||||
.filter(m -> m.isAnnotationPresent(ConfigTitle.class) && m.getType() == String.class)
|
.filter(m -> m.isAnnotationPresent(ConfigTitle.class) && m.getType() == String.class)
|
||||||
.map(m ->
|
.map(m ->
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
return new ConfigTitleDescriptor(
|
try
|
||||||
String.valueOf(m.get(inter)),
|
{
|
||||||
m.getDeclaredAnnotation(ConfigTitle.class)
|
return new ConfigTitleDescriptor(
|
||||||
);
|
String.valueOf(m.get(inter)),
|
||||||
}
|
m.getDeclaredAnnotation(ConfigTitle.class)
|
||||||
catch (IllegalAccessException e)
|
);
|
||||||
{
|
}
|
||||||
log.warn("Unable to load title {}::{}", inter.getSimpleName(), m.getName());
|
catch (IllegalAccessException e)
|
||||||
return null;
|
{
|
||||||
}
|
log.warn("Unable to load title {}::{}", inter.getSimpleName(), m.getName());
|
||||||
})
|
return null;
|
||||||
.filter(Objects::nonNull)
|
}
|
||||||
.sorted((a, b) -> ComparisonChain.start()
|
})
|
||||||
.compare(a.getTitle().position(), b.getTitle().position())
|
.filter(Objects::nonNull)
|
||||||
.compare(a.getTitle().name(), b.getTitle().name())
|
.sorted((a, b) -> ComparisonChain.start()
|
||||||
.result())
|
.compare(a.getTitle().position(), b.getTitle().position())
|
||||||
.collect(Collectors.toList());
|
.compare(a.getTitle().name(), b.getTitle().name())
|
||||||
|
.result())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
final List<ConfigItemDescriptor> items = Arrays.stream(inter.getMethods())
|
final List<ConfigItemDescriptor> items = Arrays.stream(inter.getMethods())
|
||||||
.filter(m -> m.getParameterCount() == 0 && m.isAnnotationPresent(ConfigItem.class))
|
.filter(m -> m.getParameterCount() == 0 && m.isAnnotationPresent(ConfigItem.class))
|
||||||
.map(m -> new ConfigItemDescriptor(
|
.map(m -> new ConfigItemDescriptor(
|
||||||
m.getDeclaredAnnotation(ConfigItem.class),
|
m.getDeclaredAnnotation(ConfigItem.class),
|
||||||
m.getGenericReturnType(),
|
m.getReturnType(),
|
||||||
m.getDeclaredAnnotation(Range.class),
|
m.getDeclaredAnnotation(Range.class),
|
||||||
m.getDeclaredAnnotation(Alpha.class),
|
m.getDeclaredAnnotation(Alpha.class),
|
||||||
m.getDeclaredAnnotation(Units.class)
|
m.getDeclaredAnnotation(Units.class)
|
||||||
))
|
))
|
||||||
.sorted((a, b) -> ComparisonChain.start()
|
.sorted((a, b) -> ComparisonChain.start()
|
||||||
.compare(a.getItem().position(), b.getItem().position())
|
.compare(a.getItem().position(), b.getItem().position())
|
||||||
.compare(a.getItem().name(), b.getItem().name())
|
.compare(a.getItem().name(), b.getItem().name())
|
||||||
.result())
|
.result())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
return new ConfigDescriptor(group, sections, titles, items);
|
return new ConfigDescriptor(group, sections, titles, items);
|
||||||
}
|
}
|
||||||
@@ -732,16 +721,16 @@ public class ConfigManager
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!override)
|
if (!override)
|
||||||
{
|
|
||||||
// This checks if it is set and is also unmarshallable to the correct type; so
|
|
||||||
// we will overwrite invalid config values with the default
|
|
||||||
Object current = getConfiguration(group.value(), item.keyName(), method.getGenericReturnType());
|
|
||||||
if (current != null)
|
|
||||||
{
|
{
|
||||||
continue; // something else is already set
|
// This checks if it is set and is also unmarshallable to the correct type; so
|
||||||
|
// we will overwrite invalid config values with the default
|
||||||
|
Object current = getConfiguration(group.value(), item.keyName(), method.getReturnType());
|
||||||
|
if (current != null)
|
||||||
|
{
|
||||||
|
continue; // something else is already set
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Object defaultValue;
|
Object defaultValue;
|
||||||
try
|
try
|
||||||
@@ -771,7 +760,7 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object stringToObject(String str, Type type)
|
static Object stringToObject(String str, Class<?> type)
|
||||||
{
|
{
|
||||||
if (type == boolean.class || type == Boolean.class)
|
if (type == boolean.class || type == Boolean.class)
|
||||||
{
|
{
|
||||||
@@ -812,7 +801,7 @@ public class ConfigManager
|
|||||||
int height = Integer.parseInt(splitStr[3]);
|
int height = Integer.parseInt(splitStr[3]);
|
||||||
return new Rectangle(x, y, width, height);
|
return new Rectangle(x, y, width, height);
|
||||||
}
|
}
|
||||||
if (type instanceof Class && ((Class<?>) type).isEnum())
|
if (type.isEnum())
|
||||||
{
|
{
|
||||||
return Enum.valueOf((Class<? extends Enum>) type, str);
|
return Enum.valueOf((Class<? extends Enum>) type, str);
|
||||||
}
|
}
|
||||||
@@ -847,14 +836,6 @@ public class ConfigManager
|
|||||||
{
|
{
|
||||||
return Base64.getUrlDecoder().decode(str);
|
return Base64.getUrlDecoder().decode(str);
|
||||||
}
|
}
|
||||||
if (type instanceof ParameterizedType)
|
|
||||||
{
|
|
||||||
ParameterizedType parameterizedType = (ParameterizedType) type;
|
|
||||||
if (parameterizedType.getRawType() == Set.class)
|
|
||||||
{
|
|
||||||
return gson.fromJson(str, parameterizedType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (type == EnumSet.class)
|
if (type == EnumSet.class)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -894,7 +875,7 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
String objectToString(Object object)
|
static String objectToString(Object object)
|
||||||
{
|
{
|
||||||
if (object instanceof Color)
|
if (object instanceof Color)
|
||||||
{
|
{
|
||||||
@@ -941,10 +922,6 @@ public class ConfigManager
|
|||||||
{
|
{
|
||||||
return Base64.getUrlEncoder().encodeToString((byte[]) object);
|
return Base64.getUrlEncoder().encodeToString((byte[]) object);
|
||||||
}
|
}
|
||||||
if (object instanceof Set)
|
|
||||||
{
|
|
||||||
return gson.toJson(object, Set.class);
|
|
||||||
}
|
|
||||||
if (object instanceof EnumSet)
|
if (object instanceof EnumSet)
|
||||||
{
|
{
|
||||||
if (((EnumSet) object).size() == 0)
|
if (((EnumSet) object).size() == 0)
|
||||||
@@ -1073,8 +1050,8 @@ public class ConfigManager
|
|||||||
if (configClient != null)
|
if (configClient != null)
|
||||||
{
|
{
|
||||||
Configuration patch = new Configuration(pendingChanges.entrySet().stream()
|
Configuration patch = new Configuration(pendingChanges.entrySet().stream()
|
||||||
.map(e -> new ConfigEntry(e.getKey(), e.getValue()))
|
.map(e -> new ConfigEntry(e.getKey(), e.getValue()))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
future = configClient.patch(patch);
|
future = configClient.patch(patch);
|
||||||
}
|
}
|
||||||
@@ -1116,18 +1093,18 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
return profileKeys.stream()
|
return profileKeys.stream()
|
||||||
.map(key ->
|
.map(key ->
|
||||||
{
|
{
|
||||||
RuneScapeProfile prof = new RuneScapeProfile(
|
RuneScapeProfile prof = new RuneScapeProfile(
|
||||||
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_DISPLAY_NAME),
|
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_DISPLAY_NAME),
|
||||||
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_TYPE, RuneScapeProfileType.class),
|
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_TYPE, RuneScapeProfileType.class),
|
||||||
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_LOGIN_HASH, byte[].class),
|
getConfiguration(RSPROFILE_GROUP, key, RSPROFILE_LOGIN_HASH, byte[].class),
|
||||||
key
|
key
|
||||||
);
|
);
|
||||||
|
|
||||||
return prof;
|
return prof;
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized RuneScapeProfile findRSProfile(List<RuneScapeProfile> profiles, String username, RuneScapeProfileType type, String displayName, boolean create)
|
private synchronized RuneScapeProfile findRSProfile(List<RuneScapeProfile> profiles, String username, RuneScapeProfileType type, String displayName, boolean create)
|
||||||
@@ -1137,7 +1114,7 @@ public class ConfigManager
|
|||||||
{
|
{
|
||||||
salt = new byte[15];
|
salt = new byte[15];
|
||||||
new SecureRandom()
|
new SecureRandom()
|
||||||
.nextBytes(salt);
|
.nextBytes(salt);
|
||||||
log.info("creating new salt as there is no existing one {}", Base64.getUrlEncoder().encodeToString(salt));
|
log.info("creating new salt as there is no existing one {}", Base64.getUrlEncoder().encodeToString(salt));
|
||||||
setConfiguration(RSPROFILE_GROUP, RSPROFILE_LOGIN_SALT, salt);
|
setConfiguration(RSPROFILE_GROUP, RSPROFILE_LOGIN_SALT, salt);
|
||||||
}
|
}
|
||||||
@@ -1148,8 +1125,8 @@ public class ConfigManager
|
|||||||
byte[] loginHash = h.hash().asBytes();
|
byte[] loginHash = h.hash().asBytes();
|
||||||
|
|
||||||
Set<RuneScapeProfile> matches = profiles.stream()
|
Set<RuneScapeProfile> matches = profiles.stream()
|
||||||
.filter(p -> Arrays.equals(p.getLoginHash(), loginHash) && p.getType() == type)
|
.filter(p -> Arrays.equals(p.getLoginHash(), loginHash) && p.getType() == type)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
if (matches.size() > 1)
|
if (matches.size() > 1)
|
||||||
{
|
{
|
||||||
@@ -1273,19 +1250,19 @@ public class ConfigManager
|
|||||||
AtomicInteger changes = new AtomicInteger();
|
AtomicInteger changes = new AtomicInteger();
|
||||||
List<Predicate<String>> migrators = new ArrayList<>();
|
List<Predicate<String>> migrators = new ArrayList<>();
|
||||||
for (String[] tpl : new String[][]
|
for (String[] tpl : new String[][]
|
||||||
{
|
{
|
||||||
{"(grandexchange)\\.buylimit_(%)\\.(#)", "$1.buylimit.$3"},
|
{"(grandexchange)\\.buylimit_(%)\\.(#)", "$1.buylimit.$3"},
|
||||||
{"(timetracking)\\.(%)\\.(autoweed|contract)", "$1.$3"},
|
{"(timetracking)\\.(%)\\.(autoweed|contract)", "$1.$3"},
|
||||||
{"(timetracking)\\.(%)\\.(#\\.#)", "$1.$3"},
|
{"(timetracking)\\.(%)\\.(#\\.#)", "$1.$3"},
|
||||||
{"(timetracking)\\.(%)\\.(birdhouse)\\.(#)", "$1.$3.$4"},
|
{"(timetracking)\\.(%)\\.(birdhouse)\\.(#)", "$1.$3.$4"},
|
||||||
{"(killcount|personalbest)\\.(%)\\.([^.]+)", "$1.$3"},
|
{"(killcount|personalbest)\\.(%)\\.([^.]+)", "$1.$3"},
|
||||||
{"(geoffer)\\.(%)\\.(#)", "$1.$3"},
|
{"(geoffer)\\.(%)\\.(#)", "$1.$3"},
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
String replace = tpl[1];
|
String replace = tpl[1];
|
||||||
String pat = ("^" + tpl[0] + "$")
|
String pat = ("^" + tpl[0] + "$")
|
||||||
.replace("#", "-?[0-9]+")
|
.replace("#", "-?[0-9]+")
|
||||||
.replace("(%)", "(?<login>.*)");
|
.replace("(%)", "(?<login>.*)");
|
||||||
Pattern p = Pattern.compile(pat);
|
Pattern p = Pattern.compile(pat);
|
||||||
|
|
||||||
migrators.add(oldkey ->
|
migrators.add(oldkey ->
|
||||||
@@ -1305,7 +1282,7 @@ public class ConfigManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
String profKey = profiles.computeIfAbsent(username, u ->
|
String profKey = profiles.computeIfAbsent(username, u ->
|
||||||
findRSProfile(getRSProfiles(), u, RuneScapeProfileType.STANDARD, u, true).getKey());
|
findRSProfile(getRSProfiles(), u, RuneScapeProfileType.STANDARD, u, true).getKey());
|
||||||
|
|
||||||
String[] oldKeySplit = splitKey(oldkey);
|
String[] oldKeySplit = splitKey(oldkey);
|
||||||
if (oldKeySplit == null)
|
if (oldKeySplit == null)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -24,49 +24,35 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.worldhopper;
|
package net.runelite.client.plugins.worldhopper;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import net.runelite.http.api.worlds.WorldRegion;
|
import net.runelite.http.api.worlds.WorldRegion;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@NoArgsConstructor
|
||||||
enum RegionFilterMode
|
@AllArgsConstructor
|
||||||
|
public enum RegionFilterMode
|
||||||
{
|
{
|
||||||
|
NONE,
|
||||||
AUSTRALIA(WorldRegion.AUSTRALIA),
|
AUSTRALIA(WorldRegion.AUSTRALIA),
|
||||||
GERMANY(WorldRegion.GERMANY),
|
GERMANY(WorldRegion.GERMANY),
|
||||||
UNITED_KINGDOM(WorldRegion.UNITED_KINGDOM)
|
UNITED_KINGDOM(WorldRegion.UNITED_KINGDOM)
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
{
|
||||||
return "U.K.";
|
@Override
|
||||||
}
|
public String toString()
|
||||||
},
|
{
|
||||||
|
return "U.K.";
|
||||||
|
}
|
||||||
|
},
|
||||||
UNITED_STATES(WorldRegion.UNITED_STATES_OF_AMERICA)
|
UNITED_STATES(WorldRegion.UNITED_STATES_OF_AMERICA)
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
{
|
||||||
return "USA";
|
@Override
|
||||||
}
|
public String toString()
|
||||||
};
|
{
|
||||||
|
return "USA";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final WorldRegion region;
|
private WorldRegion region;
|
||||||
|
|
||||||
static RegionFilterMode of(WorldRegion region)
|
|
||||||
{
|
|
||||||
switch (region)
|
|
||||||
{
|
|
||||||
case UNITED_STATES_OF_AMERICA:
|
|
||||||
return UNITED_STATES;
|
|
||||||
case UNITED_KINGDOM:
|
|
||||||
return UNITED_KINGDOM;
|
|
||||||
case AUSTRALIA:
|
|
||||||
return AUSTRALIA;
|
|
||||||
case GERMANY:
|
|
||||||
return GERMANY;
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ package net.runelite.client.plugins.worldhopper;
|
|||||||
|
|
||||||
import java.awt.event.InputEvent;
|
import java.awt.event.InputEvent;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
import net.runelite.client.config.Config;
|
import net.runelite.client.config.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
@@ -40,10 +38,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
String GROUP = "worldhopper";
|
String GROUP = "worldhopper";
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "previousKey",
|
keyName = "previousKey",
|
||||||
name = "Quick-hop previous",
|
name = "Quick-hop previous",
|
||||||
description = "When you press this key you'll hop to the previous world",
|
description = "When you press this key you'll hop to the previous world",
|
||||||
position = 0
|
position = 0
|
||||||
)
|
)
|
||||||
default Keybind previousKey()
|
default Keybind previousKey()
|
||||||
{
|
{
|
||||||
@@ -51,10 +49,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "nextKey",
|
keyName = "nextKey",
|
||||||
name = "Quick-hop next",
|
name = "Quick-hop next",
|
||||||
description = "When you press this key you'll hop to the next world",
|
description = "When you press this key you'll hop to the next world",
|
||||||
position = 1
|
position = 1
|
||||||
)
|
)
|
||||||
default Keybind nextKey()
|
default Keybind nextKey()
|
||||||
{
|
{
|
||||||
@@ -62,10 +60,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "quickhopOutOfDanger",
|
keyName = "quickhopOutOfDanger",
|
||||||
name = "Quick-hop out of dangerous worlds",
|
name = "Quick-hop out of dangerous worlds",
|
||||||
description = "Don't hop to a PVP/high risk world when quick-hopping",
|
description = "Don't hop to a PVP/high risk world when quick-hopping",
|
||||||
position = 2
|
position = 2
|
||||||
)
|
)
|
||||||
default boolean quickhopOutOfDanger()
|
default boolean quickhopOutOfDanger()
|
||||||
{
|
{
|
||||||
@@ -73,21 +71,21 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "quickHopRegionFilter",
|
keyName = "quickHopRegionFilter",
|
||||||
name = "Quick-hop region",
|
name = "Quick-hop region",
|
||||||
description = "Limit quick-hopping to worlds of a specific region",
|
description = "Limit quick-hopping to worlds of a specific region",
|
||||||
position = 3
|
position = 3
|
||||||
)
|
)
|
||||||
default Set<RegionFilterMode> quickHopRegionFilter()
|
default RegionFilterMode quickHopRegionFilter()
|
||||||
{
|
{
|
||||||
return Collections.emptySet();
|
return RegionFilterMode.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showSidebar",
|
keyName = "showSidebar",
|
||||||
name = "Show world switcher sidebar",
|
name = "Show world switcher sidebar",
|
||||||
description = "Show sidebar containing all worlds that mimics in-game interface",
|
description = "Show sidebar containing all worlds that mimics in-game interface",
|
||||||
position = 4
|
position = 4
|
||||||
)
|
)
|
||||||
default boolean showSidebar()
|
default boolean showSidebar()
|
||||||
{
|
{
|
||||||
@@ -95,10 +93,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "ping",
|
keyName = "ping",
|
||||||
name = "Show world ping",
|
name = "Show world ping",
|
||||||
description = "Shows ping to each game world",
|
description = "Shows ping to each game world",
|
||||||
position = 5
|
position = 5
|
||||||
)
|
)
|
||||||
default boolean ping()
|
default boolean ping()
|
||||||
{
|
{
|
||||||
@@ -106,10 +104,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "showMessage",
|
keyName = "showMessage",
|
||||||
name = "Show world hop message in chat",
|
name = "Show world hop message in chat",
|
||||||
description = "Shows what world is being hopped to in the chat",
|
description = "Shows what world is being hopped to in the chat",
|
||||||
position = 6
|
position = 6
|
||||||
)
|
)
|
||||||
default boolean showWorldHopMessage()
|
default boolean showWorldHopMessage()
|
||||||
{
|
{
|
||||||
@@ -117,10 +115,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "menuOption",
|
keyName = "menuOption",
|
||||||
name = "Show Hop-to menu option",
|
name = "Show Hop-to menu option",
|
||||||
description = "Adds Hop-to menu option to the friends list and friends chat members list",
|
description = "Adds Hop-to menu option to the friends list and friends chat members list",
|
||||||
position = 7
|
position = 7
|
||||||
)
|
)
|
||||||
default boolean menuOption()
|
default boolean menuOption()
|
||||||
{
|
{
|
||||||
@@ -128,10 +126,10 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "subscriptionFilter",
|
keyName = "subscriptionFilter",
|
||||||
name = "Show subscription types",
|
name = "Show subscription types",
|
||||||
description = "Only show free worlds, member worlds, or both types of worlds in sidebar",
|
description = "Only show free worlds, member worlds, or both types of worlds in sidebar",
|
||||||
position = 8
|
position = 8
|
||||||
)
|
)
|
||||||
default SubscriptionFilterMode subscriptionFilter()
|
default SubscriptionFilterMode subscriptionFilter()
|
||||||
{
|
{
|
||||||
@@ -139,21 +137,21 @@ public interface WorldHopperConfig extends Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "regionFilter",
|
keyName = "regionFilter",
|
||||||
name = "Filter worlds by region",
|
name = "Filter worlds by region",
|
||||||
description = "Restrict sidebar worlds to one region",
|
description = "Restrict sidebar worlds to one region",
|
||||||
position = 8
|
position = 8
|
||||||
)
|
)
|
||||||
default Set<RegionFilterMode> regionFilter()
|
default RegionFilterMode regionFilter()
|
||||||
{
|
{
|
||||||
return Collections.emptySet();
|
return RegionFilterMode.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "displayPing",
|
keyName = "displayPing",
|
||||||
name = "Display current ping",
|
name = "Display current ping",
|
||||||
description = "Displays ping to current game world",
|
description = "Displays ping to current game world",
|
||||||
position = 9
|
position = 9
|
||||||
)
|
)
|
||||||
default boolean displayPing()
|
default boolean displayPing()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import java.util.EnumSet;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
@@ -95,9 +94,9 @@ import net.runelite.http.api.worlds.WorldType;
|
|||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
name = "World Hopper",
|
name = "World Hopper",
|
||||||
description = "Allows you to quickly hop worlds",
|
description = "Allows you to quickly hop worlds",
|
||||||
tags = {"ping", "switcher"}
|
tags = {"ping", "switcher"}
|
||||||
)
|
)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class WorldHopperPlugin extends Plugin
|
public class WorldHopperPlugin extends Plugin
|
||||||
@@ -199,11 +198,11 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
|
|
||||||
BufferedImage icon = ImageUtil.loadImageResource(WorldHopperPlugin.class, "icon.png");
|
BufferedImage icon = ImageUtil.loadImageResource(WorldHopperPlugin.class, "icon.png");
|
||||||
navButton = NavigationButton.builder()
|
navButton = NavigationButton.builder()
|
||||||
.tooltip("World Switcher")
|
.tooltip("World Switcher")
|
||||||
.icon(icon)
|
.icon(icon)
|
||||||
.priority(3)
|
.priority(3)
|
||||||
.panel(panel)
|
.panel(panel)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
if (config.showSidebar())
|
if (config.showSidebar())
|
||||||
{
|
{
|
||||||
@@ -361,7 +360,7 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
String option = event.getOption();
|
String option = event.getOption();
|
||||||
|
|
||||||
if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.FRIENDS_CHAT.getGroupId()
|
if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.FRIENDS_CHAT.getGroupId()
|
||||||
|| componentId == WidgetInfo.CLAN_MEMBER_LIST.getId() || componentId == WidgetInfo.CLAN_GUEST_MEMBER_LIST.getId())
|
|| componentId == WidgetInfo.CLAN_MEMBER_LIST.getId() || componentId == WidgetInfo.CLAN_GUEST_MEMBER_LIST.getId())
|
||||||
{
|
{
|
||||||
boolean after;
|
boolean after;
|
||||||
|
|
||||||
@@ -383,7 +382,7 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
WorldResult worldResult = worldService.getWorlds();
|
WorldResult worldResult = worldService.getWorlds();
|
||||||
|
|
||||||
if (player == null || player.getWorld() == 0 || player.getWorld() == client.getWorld()
|
if (player == null || player.getWorld() == 0 || player.getWorld() == client.getWorld()
|
||||||
|| worldResult == null)
|
|| worldResult == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -391,7 +390,7 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
World currentWorld = worldResult.findWorld(client.getWorld());
|
World currentWorld = worldResult.findWorld(client.getWorld());
|
||||||
World targetWorld = worldResult.findWorld(player.getWorld());
|
World targetWorld = worldResult.findWorld(player.getWorld());
|
||||||
if (targetWorld == null || currentWorld == null
|
if (targetWorld == null || currentWorld == null
|
||||||
|| (!currentWorld.getTypes().contains(WorldType.PVP) && targetWorld.getTypes().contains(WorldType.PVP)))
|
|| (!currentWorld.getTypes().contains(WorldType.PVP) && targetWorld.getTypes().contains(WorldType.PVP)))
|
||||||
{
|
{
|
||||||
// Disable Hop-to a PVP world from a regular world
|
// Disable Hop-to a PVP world from a regular world
|
||||||
return;
|
return;
|
||||||
@@ -534,8 +533,6 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
int worldIdx = worlds.indexOf(currentWorld);
|
int worldIdx = worlds.indexOf(currentWorld);
|
||||||
int totalLevel = client.getTotalLevel();
|
int totalLevel = client.getTotalLevel();
|
||||||
|
|
||||||
final Set<RegionFilterMode> regionFilter = config.quickHopRegionFilter();
|
|
||||||
|
|
||||||
World world;
|
World world;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -567,7 +564,7 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
world = worlds.get(worldIdx);
|
world = worlds.get(worldIdx);
|
||||||
|
|
||||||
// Check world region if filter is enabled
|
// Check world region if filter is enabled
|
||||||
if (!regionFilter.isEmpty() && !regionFilter.contains(RegionFilterMode.of(world.getRegion())))
|
if (config.quickHopRegionFilter() != RegionFilterMode.NONE && world.getRegion() != config.quickHopRegionFilter().getRegion())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -612,14 +609,14 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
if (world == currentWorld)
|
if (world == currentWorld)
|
||||||
{
|
{
|
||||||
String chatMessage = new ChatMessageBuilder()
|
String chatMessage = new ChatMessageBuilder()
|
||||||
.append(ChatColorType.NORMAL)
|
.append(ChatColorType.NORMAL)
|
||||||
.append("Couldn't find a world to quick-hop to.")
|
.append("Couldn't find a world to quick-hop to.")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
chatMessageManager.queue(QueuedMessage.builder()
|
chatMessageManager.queue(QueuedMessage.builder()
|
||||||
.type(ChatMessageType.CONSOLE)
|
.type(ChatMessageType.CONSOLE)
|
||||||
.runeLiteFormattedMessage(chatMessage)
|
.runeLiteFormattedMessage(chatMessage)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -657,19 +654,19 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
if (config.showWorldHopMessage())
|
if (config.showWorldHopMessage())
|
||||||
{
|
{
|
||||||
String chatMessage = new ChatMessageBuilder()
|
String chatMessage = new ChatMessageBuilder()
|
||||||
.append(ChatColorType.NORMAL)
|
.append(ChatColorType.NORMAL)
|
||||||
.append("Quick-hopping to World ")
|
.append("Quick-hopping to World ")
|
||||||
.append(ChatColorType.HIGHLIGHT)
|
.append(ChatColorType.HIGHLIGHT)
|
||||||
.append(Integer.toString(world.getId()))
|
.append(Integer.toString(world.getId()))
|
||||||
.append(ChatColorType.NORMAL)
|
.append(ChatColorType.NORMAL)
|
||||||
.append("..")
|
.append("..")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
chatMessageManager
|
chatMessageManager
|
||||||
.queue(QueuedMessage.builder()
|
.queue(QueuedMessage.builder()
|
||||||
.type(ChatMessageType.CONSOLE)
|
.type(ChatMessageType.CONSOLE)
|
||||||
.runeLiteFormattedMessage(chatMessage)
|
.runeLiteFormattedMessage(chatMessage)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
quickHopTargetWorld = rsWorld;
|
quickHopTargetWorld = rsWorld;
|
||||||
@@ -691,19 +688,19 @@ public class WorldHopperPlugin extends Plugin
|
|||||||
if (++displaySwitcherAttempts >= DISPLAY_SWITCHER_MAX_ATTEMPTS)
|
if (++displaySwitcherAttempts >= DISPLAY_SWITCHER_MAX_ATTEMPTS)
|
||||||
{
|
{
|
||||||
String chatMessage = new ChatMessageBuilder()
|
String chatMessage = new ChatMessageBuilder()
|
||||||
.append(ChatColorType.NORMAL)
|
.append(ChatColorType.NORMAL)
|
||||||
.append("Failed to quick-hop after ")
|
.append("Failed to quick-hop after ")
|
||||||
.append(ChatColorType.HIGHLIGHT)
|
.append(ChatColorType.HIGHLIGHT)
|
||||||
.append(Integer.toString(displaySwitcherAttempts))
|
.append(Integer.toString(displaySwitcherAttempts))
|
||||||
.append(ChatColorType.NORMAL)
|
.append(ChatColorType.NORMAL)
|
||||||
.append(" attempts.")
|
.append(" attempts.")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
chatMessageManager
|
chatMessageManager
|
||||||
.queue(QueuedMessage.builder()
|
.queue(QueuedMessage.builder()
|
||||||
.type(ChatMessageType.CONSOLE)
|
.type(ChatMessageType.CONSOLE)
|
||||||
.runeLiteFormattedMessage(chatMessage)
|
.runeLiteFormattedMessage(chatMessage)
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
resetQuickHopper();
|
resetQuickHopper();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import java.awt.event.MouseEvent;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
@@ -69,7 +68,7 @@ class WorldSwitcherPanel extends PluginPanel
|
|||||||
@Setter(AccessLevel.PACKAGE)
|
@Setter(AccessLevel.PACKAGE)
|
||||||
private SubscriptionFilterMode subscriptionFilterMode;
|
private SubscriptionFilterMode subscriptionFilterMode;
|
||||||
@Setter(AccessLevel.PACKAGE)
|
@Setter(AccessLevel.PACKAGE)
|
||||||
private Set<RegionFilterMode> regionFilterMode;
|
private RegionFilterMode regionFilterMode;
|
||||||
|
|
||||||
WorldSwitcherPanel(WorldHopperPlugin plugin)
|
WorldSwitcherPanel(WorldHopperPlugin plugin)
|
||||||
{
|
{
|
||||||
@@ -250,7 +249,7 @@ class WorldSwitcherPanel extends PluginPanel
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!regionFilterMode.isEmpty() && !regionFilterMode.contains(RegionFilterMode.of(world.getRegion())))
|
if (regionFilterMode.getRegion() != null && !regionFilterMode.getRegion().equals(world.getRegion()))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -378,20 +377,20 @@ class WorldSwitcherPanel extends PluginPanel
|
|||||||
private WorldTableRow buildRow(World world, boolean stripe, boolean current, boolean favorite)
|
private WorldTableRow buildRow(World world, boolean stripe, boolean current, boolean favorite)
|
||||||
{
|
{
|
||||||
WorldTableRow row = new WorldTableRow(world, current, favorite, plugin.getStoredPing(world),
|
WorldTableRow row = new WorldTableRow(world, current, favorite, plugin.getStoredPing(world),
|
||||||
plugin::hopTo,
|
plugin::hopTo,
|
||||||
(world12, add) ->
|
(world12, add) ->
|
||||||
{
|
|
||||||
if (add)
|
|
||||||
{
|
{
|
||||||
plugin.addToFavorites(world12);
|
if (add)
|
||||||
}
|
{
|
||||||
else
|
plugin.addToFavorites(world12);
|
||||||
{
|
}
|
||||||
plugin.removeFromFavorites(world12);
|
else
|
||||||
}
|
{
|
||||||
|
plugin.removeFromFavorites(world12);
|
||||||
|
}
|
||||||
|
|
||||||
updateList();
|
updateList();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
row.setBackground(stripe ? ODD_ROW : ColorScheme.DARK_GRAY_COLOR);
|
row.setBackground(stripe ? ODD_ROW : ColorScheme.DARK_GRAY_COLOR);
|
||||||
return row;
|
return row;
|
||||||
|
|||||||
Reference in New Issue
Block a user